我正在使用SharpDX-Toolkit,无法在Texture2D上创建mimaps。如果我通过内容管理器加载纹理并尝试调用GenerateMipMaps(),我会收到NotSupportedException:
无法为此纹理生成mipmap(必须为RenderTarget,ShaderResource和MipLevels> 1
代码(在游戏类的LoadContent-Method中):
Texture2D texture = this.Content.Load<Texture2D>("MyTexture");
texture.GenerateMipMaps(this.GraphicsDevice); <- Exception thrown in this line
我不知道该怎么做,我希望有人可以帮我解决这个问题。感谢。
答案 0 :(得分:2)
使用:
Texture2D texture = this.Content.Load<Texture2D>("MyTexture");
将默认纹理用法设置为“不可变”,并且仅允许绑定为着色器视图。
为了生成MipMaps,需要使用Default和Binding作为ShaderView / RenderView。
现在您有几个选择:
1 /使用mipmaps将纹理预处理为dds,加载器会考虑到这一点。
TexConv可以为您做到这一点。 (使用-m指定级别计数)。
2 /如上所述加载纹理,使用
创建第二个纹理 Texture2D texturewithmips = Texture2D.New(device, texture.Width, texture.Height, MipMapCount.Auto, texture.Format,
TextureFlags.ShaderResource | TextureFlags.RenderTarget,
1,Direct3D11.ResourceUsage.Default);
现在你需要复制第一个mip,使用:
device.Copy(texture, 0, null, t2, 0);
您现在可以使用:
t2.GenerateMipMaps(this.GraphicsDevice);
3 /由于使用上述方法,您将失去内容管理器(使用自动缓存)。
您可以通过添加更多纹理加载选项来修改TextureContentReader类来为您执行此操作。
如果您需要更多帮助,请随意。