Frage

Ich verwende das Sharpdx-Toolkit und kann keine Mimaps auf einer Texture2D erstellen. Wenn ich eine Textur vom Inhaltsmanager lade und versuche, GeneratemipMaps () aufzurufen (), erhalte ich eine NotSupportededexception:

Für diese Textur kann MIPMaps nicht generiert werden (muss Rendertarget und Shaderresource und Miplevels> 1 sein

Code (in LoadContent-Methoden der Spielklasse):

Texture2D texture = this.Content.Load<Texture2D>("MyTexture");
texture.GenerateMipMaps(this.GraphicsDevice); <- Exception thrown in this line

Ich weiß nicht, was ich tun soll und hoffe, dass mir jemand bei diesem Problem helfen kann. Vielen Dank.

War es hilfreich?

Lösung

Verwenden:

 Texture2D texture = this.Content.Load<Texture2D>("MyTexture");

Wird die Verwendung der Textur standardmäßig "unveränderlich" und ermöglichen nur die Bindung als Shaderansicht.

Um MIPMaps zu generieren, muss die Verwendung als Shaderview/Renderview standardmäßig und bindend sein.

Jetzt haben Sie ein paar Optionen:

1/Vorverarbeitet Ihre Texturen als DDS mit MIPMAPS, loader würde dies berücksichtigen.

Texconv Kann das für dich tun. (Verwenden Sie -m, um die Anzahl der Ebenen anzugeben).

2/Laden Sie Ihre Textur wie oben und erstellen Sie eine zweite Textur mithilfe

 Texture2D texturewithmips = Texture2D.New(device, texture.Width, texture.Height, MipMapCount.Auto, texture.Format,
 TextureFlags.ShaderResource | TextureFlags.RenderTarget,
 1,Direct3D11.ResourceUsage.Default);

Jetzt müssen Sie den ersten MIP mit:

device.Copy(texture, 0, null, t2, 0);

Sie können jetzt verwenden:

t2.GenerateMipMaps(this.GraphicsDevice);

3/Da mit der obigen Methode Sie den Content Manager (mit automatischen Caches für Sie) verlieren.

Sie können die TextureContentreader -Klasse ändern, um dies für Sie zu tun, indem Sie weitere Optionen für das Laden von Textur hinzufügen.

Wenn Sie mehr Hilfe benötigen, fühlen Sie sich frei.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top