Вопрос

Я использую Sharpdx-Toolkit и не могу создавать Mimaps на текстуре2D. Если я загружаю текстуру диспетчере Content и попытаюсь вызовать generatemipmaps (), я получаю notsupportedException:

Невозможно генерировать MIPMAP для этой текстуры (должны быть rendertarget и shaderresource и miplevels> 1

Код (в методе загрузки класса игры):

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

Я не знаю, что делать, и я надеюсь, что кто -то может помочь мне с этой проблемой. Спасибо.

Это было полезно?

Решение

С использованием:

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

Будет использование текстуры по умолчанию в «неизменном» и позволит только привязывать только в качестве шейдера.

Чтобы сгенерировать MIPMAP, использование должно быть по умолчанию и привязке в качестве Shaderview/renderview.

Теперь у вас есть несколько вариантов:

1/Предварительно обрабатывать свои текстуры как DDS с помощью MIPMAP, загрузчик учитывает это.

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, чтобы сделать это для вас, добавив больше параметров для загрузки текстур.

Если вам нужно больше помощи, не стесняйтесь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top