[英]Render to a texture2d XNA
我需要在texture2d中渲染一個精靈,以便稍后可以在屏幕上渲染該紋理,但是同時我需要訪問此修改后的紋理的像素,因此,如果我在紋理中添加一個精靈,在精靈所在的坐標中調用get pixel函數,然后應該給我與該精靈對應的新像素值(已將其與texture2d混合)。
我正在使用xna 4.0而不是3.5或更小。
謝謝。
等效於GDI中的Graphics.FromImage(img).DrawImage(...
我嘗試了這個但失敗了
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
如果可能,請避免每次都創建一個新的渲染目標。 在方法之外創建它,然后重復使用以獲得最佳性能。
這里是一些偽代碼:
public Texture2D DrawOnTop(RenderTarget2D target, Texture2D oldTexture, Texture2D picture)
{
SetRenderTarget(target);
Draw(oldTexture);
Draw(picture);
SetRenderTarget(null);
return target;
}
如果大小經常變化並且您無法重用目標,則至少要處置前一個目標,如在注釋中匿名建議的那樣。 每個新目標都將消耗內存,除非您及時釋放資源。 但是在着色器中使用它或進行任何您想使用的着色器后,將其丟棄。 一旦處置,它就消失了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.