Хорошо, поэтому я пытаюсь взвесить все за и против использования различных методов сжатия текстур. Я трачу 99,999% своего времени на программирование двумерных спрайтов для компьютеров под управлением Windows с использованием DirectX.
До сих пор я смотрел на упаковку текстур (SpriteSheets) с альфа-обрезкой, и это похоже на достойный способ получить немного больше производительности. Теперь я начинаю смотреть на формат текстур, в котором они хранятся; в настоящее время все хранится как * .PNGs.
Я слышал, что файлы * .DDS хороши, особенно при использовании сжатия DXT5 (/ 3/1 в зависимости от задачи), поскольку текстура остается сжатой в VRAM? Также люди говорят, что, поскольку они уже являются DirectDraw-поверхностями, они загружаются намного быстрее, чем когда-либо.
Итак, я создал приложение, чтобы проверить это; Я вызываю линию ниже 20 раз, освобождая текстуру между каждым вызовом.
for (int i = 0; i < 20; i++)
{
if( FAILED( D3DXCreateTextureFromFile( g_pd3dDevice, L"Test.dds", &g_pTexture ) ) )
{
return E_FAIL;
}
g_pTexture->Release();
g_pTexture = NULL;
}
Теперь, если я попробую это с текстурой DXT5, это займет в 5 раз больше времени, чем при загрузке в простом * .PNG. Я слышал, что если вы не генерируете Mipmaps, он может работать медленнее, поэтому я дважды проверил это. Затем я изменил программу, которую использовал для создания файла * .DDS, переключившись на собственный nvcompress.exe от NVIDIA, но ни один из них не дал никакого эффекта.
РЕДАКТИРОВАТЬ: Я забыл упомянуть, что файлы (* .png и * .dds) представляют собой одно и то же изображение, просто сохраненные в разных форматах. (Тот же размер, количество альфа, все!)
РЕДАКТИРОВАТЬ 2: При использовании следующих параметров он загружается почти в 2,5 раза быстрее и потребляет намного меньше VRAM!
D3DXCreateTextureFromFileEx( g_pd3dDevice, L"Test.dds", D3DX_DEFAULT_NONPOW2, D3DX_DEFAULT_NONPOW2, D3DX_FROM_FILE, 0, D3DFMT_FROM_FILE, D3DPOOL_MANAGED, D3DX_FILTER_NONE, D3DX_FILTER_NONE, 0, NULL, NULL, &g_pTexture )
Однако теперь я теряю всю прозрачность текстуры, я смотрел на текстуру DXT5, и она отлично выглядит в Paint.NET и DirectX DDS Viewer. Однако при загрузке все прозрачность превращается в сплошной черный. Проблема с ColorKey?
РЕДАКТИРОВАТЬ 3: Не обращая внимания на этот последний бит, я был идиотом, и в своей спешке с «быстрым примером» я забыл включить альфа-смешивание на D3DXSprite-> Begin (). Doh!