Визуализация в texture2d XNA - PullRequest
       15

Визуализация в texture2d XNA

0 голосов
/ 03 марта 2012

Мне нужно визуализировать спрайт в texture2d, чтобы впоследствии эту текстуру можно было визуализировать на экране, но в то же время мне нужно получить доступ к пикселям этой измененной текстуры, поэтому, если я добавлю, скажем, спрайт втекстуру, и я вызываю функцию get pixel в координате, где был спрайт, тогда она должна дать мне новые значения пикселей, которые соответствуют спрайту (который был смешан с texture2d).

Я использую xna 4.0не 3.5 или меньше.

спасибо.

эквивалент 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 - случайная текстура2d

Ответы [ 2 ]

0 голосов
/ 03 марта 2012

Если возможно, избегайте создания новой цели рендеринга каждый раз.Создайте его вне метода и используйте повторно для лучшей производительности.

Вот некоторый псевдокод:

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

    Draw(oldTexture);
    Draw(picture);

    SetRenderTarget(null);

    return target;
}

Если размер часто меняется и вы не можете повторно использовать цель, по крайней мере утилизируйтепредыдущий, как анонимно предлагается в комментариях.Каждая новая цель будет потреблять память, если вы не освободите ресурс вовремя.Но утилизируйте его после , когда вы использовали его в шейдере или сделали с ним все, что хотели.После утилизации он исчез.

0 голосов
/ 03 марта 2012
...