Beberapa RenderTarget di XNA Komponen drawable yang berbeda

Hai teman-teman, saya punya sedikit masalah.

Saya memiliki 2 DrawableGameComponets ini (bigApple, smallApple) di keduanya. Saya menggambar menjadi RenderTarget dan kemudian menggambar RenderTarget di backbuffer tetapi ini terjadi secara independen di setiap DrawableGameComponent.

Hal yang ingin saya capai adalah keduanya DrawableGameComponents menggambar dengan benar satu di atas yang lain.

Sesuatu seperti ini:
Ini adalah layar dengan kedua drawableComponent tanpa target render di setiap komponen. masukkan deskripsi gambar di sini

Tapi alih-alih itu saya mendapatkan ini:
Ini adalah layar dengan drawableComponent dengan target render di setiap komponen. masukkan deskripsi gambar di sini

Ini untuk permainan kecil yang sedang saya kerjakan. Saya berencana untuk menampilkan dalam satu komponen drawable dan gambar dari kamera dan di komponen game drawable lainnya, game itu sendiri. Tapi begitu saya menambahkan GameComponent lagi ke Daftar Komponen, yang di atas yang terakhir ditambahkan tidak dapat dilihat.

Ini adalah Kode dari setiap Komponen drawable.

apel kecil:

public class SmallApple:DrawableComponent2D
{
    Texture2D apple;

    public SmallApple(Game game)
        : base(game)
    {
        //Do nothing
    }

    protected override void LoadContent()
    {
        apple = Game.Content.Load<Texture2D>("apple");

        this.Size = new Vector2(apple.Width,
            apple.Height);

        renderTarget = new RenderTarget2D(GraphicsDevice,
            (int)Size.X,
            (int)Size.Y,
            false,
            SurfaceFormat.Color,
            DepthFormat.None,
            this.Game.GraphicsDevice.PresentationParameters.MultiSampleCount,
            RenderTargetUsage.PreserveContents);
        base.LoadContent();
    }

    public override void Initialize()
    {
        base.Initialize();
    }

    public override void Draw(GameTime gameTime)
    {
        GraphicsDevice.SetRenderTarget(renderTarget);
        GraphicsDevice.Clear(ClearOptions.Target, Color.Transparent, 1f, 0);

        this.SharedSpriteBatch.Begin(SpriteSortMode.Immediate, null);
        this.SharedSpriteBatch.Draw(this.apple, this.Position, Color.White);
        this.SharedSpriteBatch.End();

        GraphicsDevice.SetRenderTarget(null);

        this.SharedSpriteBatch.Begin();
        this.SharedSpriteBatch.Draw(apple, this.Position,Color.White);
        this.SharedSpriteBatch.End();
        base.Draw(gameTime);
    }

}

-- Dan Kelas BigApple

public class BigApple:DrawableComponent2D
{

    Texture2D apple;

    public BigApple(Game game)
        : base(game)
    {

    }


    protected override void LoadContent()
    {
        base.LoadContent();

        apple = Game.Content.Load<Texture2D>("apple");

        this.Size = new Vector2(apple.Width, apple.Height);

        renderTarget = new RenderTarget2D(GraphicsDevice, 
            (int)Size.X,
            (int)Size.Y, 
            false, 
            SurfaceFormat.Color, 
            DepthFormat.None,
            this.Game.GraphicsDevice.PresentationParameters.MultiSampleCount,
            RenderTargetUsage.PreserveContents);

    }

    public override void Update(GameTime gameTime)
    {
        base.Update(gameTime);
    }

    public override void Draw(GameTime gameTime)
    {
        GraphicsDevice.SetRenderTarget(renderTarget);
        GraphicsDevice.Clear(ClearOptions.Target, Color.Transparent, 1f, 0);

        this.SharedSpriteBatch.Begin(SpriteSortMode.Immediate,null);
        this.SharedSpriteBatch.Draw(this.apple, this.Position, Color.White);
        this.SharedSpriteBatch.End();

        GraphicsDevice.SetRenderTarget(null);

        this.SharedSpriteBatch.Begin();
        this.SharedSpriteBatch.Draw(renderTarget,new Rectangle((int)Position.X, (int)Position.Y, (int)GraphicsDevice.Viewport.Width, (int)GraphicsDevice.Viewport.Height), Color.White);
        this.SharedSpriteBatch.End();

        base.Draw(gameTime);
    }
}

Kelas DrawableComponent2D adalah kelas yang berisi warisan dari drawablegameComponent dan memiliki beberapa variabel untuk dikerjakan.


person Alan Revolver    schedule 11.12.2013    source sumber


Jawaban (2)


Apa versi XNA Anda?
Jika Anda menggunakan XNA 3.1 mungkin masalah Anda ada di sini GraphicsDeviceCapabilities.MaxSimultaneousRenderTargets properti

person pinckerman    schedule 11.12.2013
comment
saya menggunakan 4.0 untuk saat ini - person Alan Revolver; 12.12.2013
comment
Terselesaikan!!. saya harus menambahkan metode ke delegasi: grafis.PreparingDeviceSettings; jadi begini caranya: private void GraphicsDevicePreparingDeviceSettings(pengirim objek, PreparingDeviceSettingsEventArgs e) { e.GraphicsDeviceInformation.PresentationParameters.RenderTargetUsage = RenderTargetUsage.PreserveContents; } ____ Dan untuk menambahkannya ke grafisDeviceManager hanya satu baris; grafis. MempersiapkanPengaturan Perangkat += Pengaturan Perangkat Mempersiapkan Perangkat Grafis; voila!!! Terima kasih atas dukungan Anda kawan! - person Alan Revolver; 12.12.2013

Terselesaikan!!. saya harus menambahkan metode ke delegasi:

grafis.MempersiapkanPengaturan Perangkat;

jadi ini caranya:

private void GraphicsDevicePreparingDeviceSettings(pengirim objek, PreparingDeviceSettingsEventArgs e) {

e.GraphicsDeviceInformation.PresentationParameters.RenderTargetUsage = RenderTargetUsage.PreserveContents;

}


Dan untuk menambahkannya ke grafisDeviceManager hanya satu baris:

grafis. MempersiapkanPengaturan Perangkat += Pengaturan Perangkat Mempersiapkan Perangkat Grafis;

voila!!! Terima kasih atas dukunganmu

person Alan Revolver    schedule 12.12.2013