Pergunta

Estou usando o SharpDx-Toolkit e não posso criar imitaps em uma textura2D. Se eu carregar uma textura pelo Gerenciador de Conteúdo e tentar chamar GeneratEmipMaps (), recebo uma UTSupportEdException:

Não é possível gerar mipmaps para esta textura (deve ser renderStarget e shaderresource e miplevels> 1

Código (em LoadContent-Method da classe de jogo):

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

Não sei o que fazer e espero que alguém possa me ajudar com esse problema. Obrigado.

Foi útil?

Solução

Usando:

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

O uso padrão da textura para "imutável" e só permitirá a ligação como vista do shader.

Para gerar MIPMAPs, o uso precisa ser padrão e vinculativo como ShadView/RenderView.

Agora você tem algumas opções:

1/Pré -processo suas texturas como DDS com MIPMAPS, o carregador levaria isso em consideração.

Texconv pode fazer isso por você. (Use -m para especificar a contagem de níveis).

2/carregue sua textura como acima, crie uma segunda textura usando

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

Agora você precisa copiar o primeiro MIP, usando:

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

Agora você pode usar:

t2.GenerateMipMaps(this.GraphicsDevice);

3/Como com o método acima, você meio que perde o gerenciador de conteúdo (com caches automáticos para você).

Você pode modificar a classe TextureContentReader para fazer isso por você, adicionando mais opções para carregamento de textura.

Se você precisar de mais ajuda, sinta -se livre.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top