2012-03-03 12 views
0

このテクスチャを後でスクリーン上でレンダリングできるように、私はtexture2d内にスプライトをレンダリングする必要がありますが、同時に、この変更されたテクスチャのピクセルにアクセスする必要があります。テクスチャ内のスプライトを言い、スプライトがあった座標でgetピクセル関数を呼び出すと、スプライトに対応する新しいピクセル値(texture2dとブレンドされている)を与えるはずです。texture2dにレンダリングする

私は3.5以下ではないxna 4.0を使用しています。

ありがとうございました。

Graphics.FromImage(IMG).DrawImage(等価...はGDI

に私はこれを試み、

public static Texture2D DrawSomething(Texture2D old, int X, int Y, int radius) { 
var pp = Res.game.GraphicsDevice.PresentationParameters; 
var r = new RenderTarget2D(Res.game.GraphicsDevice, old.Width, old.Height, false, pp.BackBufferFormat, pp.DepthStencilFormat, 
pp.MultiSampleCount, RenderTargetUsage.DiscardContents); 
Res.game.GraphicsDevice.SetRenderTarget(r); 
var s = new SpriteBatch(r.GraphicsDevice); 
s.Begin(); 
s.Draw(old, new Vector2(0, 0), Color.White); 
s.Draw(Res.picture, new Rectangle(X - radius/2, Y - radius/2, radius, radius), Color.White); 
s.End(); 
Res.game.GraphicsDevice.SetRenderTarget(null); 
return r; 
} 

Res.gameは、基本的にメインゲームフォームへのポインタで失敗したとRes.pictureはランダムにTexture2D

答えて

0
+0

どのように???私はこれを試して、それは私のアプリをフリーズする。 更新をチェック(編集) – luis

+0

あなたのコードを表示できますか? – annonymously

+0

ああ申し訳ありません、私はそれを貼り付けていました。もう一度チェックしてください – luis

0

可能ならば、新しいレンダーターゲットを毎回作成しないようクレアメソッドの外側に置いて、最高のパフォーマンスのために再利用してください。ここではいくつかの擬似コード

public Texture2D DrawOnTop(RenderTarget2D target, Texture2D oldTexture, Texture2D picture) 
{ 
    SetRenderTarget(target); 

    Draw(oldTexture); 
    Draw(picture); 

    SetRenderTarget(null); 

    return target; 
} 

サイズが頻繁に変わるとあなたはannonymouslyはコメントで提案のように、少なくとも、以前のものを処分し、ターゲットを再利用することができない場合。あなたが時間内にリソースを解放しない限り、それぞれの新しいターゲットはメモリを消費します。しかしの後にそれをに置いてください。それはシェーダで使ったか、それともやりたいことをしたものです。一旦処分されると消えてしまいます。

関連する問題