2013-12-02 4 views
0

У меня есть текстура, загружаемая из файла .DDS с использованием метода D3DX11CreateTextureFromFile(). DDS создается с использованием сжатия блока сжатия 1, поэтому, когда я запрашиваю IDXGISurface1 из ID3D11Texture2D, формат пикселя поверхности DXGI_FORMAT_BC1_UNORM.Изменение формата пикселя ID3D11Texture2D

Итак, мой вопрос: могу ли я изменить (преобразовать) формат поверхности в DXGI_FORMAT_B8G8R8A8_UNORM. Я попробовал метод ID3D11DeviceContext::CopyResource, но, похоже, он не может конвертировать из BC1 в 32bppBGRA.

Любые предложения приветствуются.

+0

Если это просто одноразовый, вы можете конвертировать и сохранять в требуемом формате с помощью 'DxTex.exe' –

+0

Полноэкранный квадрат (или полноэкранный треугольник) + rendertarget - это в значительной степени единственный способ пойти (или небольшой вычислить shader, но я сомневаюсь, что это будет лучше, чем пиксельный шейдер в вашем случае использования, скорее всего, медленнее). CopyResource не будет работать, поскольку это похоже на прямую копию, а не на конверсию. – catflier

ответ

2

Если это одноразовый или продолжительный процесс, используйте инструмент TexConv, включенный в DirectXTex. Если вам нужно сделать это во время выполнения, вы можете либо отобразить изображение на цель визуализации B8G8R8A8, либо использовать код преобразования ЦП, включенный в библиотеку DirectXTex.

+0

Мне нужно сделать это преобразование во время выполнения, и мне нужно будет использовать графический процессор для повышения производительности. Похоже, единственный способ - назначить текстуру квадрату, а затем визуализировать 3D-сцену. Я опубликую результаты, когда я попробую это. –

Смежные вопросы