Eu pensei * arquivos .DDS foram feitos para serem rápidos de carregar?

Ok, então eu estou tentando pesar os prós e contras de usar várias técnicas diferentes de compressão de textura. Eu gasto 99,999% do meu tempo codificando jogos de sprite 2D para máquinas Windows usando o DirectX.

Até agora eu olhei para embalagem de textura (SpriteSheets) com corte alfa e que parece ser uma maneira decente de obter um pouco mais de desempenho. Agora estou começando a olhar para o formato de textura em que eles estão armazenados; Atualmente tudo é armazenado como * .PNGs.

Ouvi dizer que os arquivos * .DDS são bons, especialmente quando usados ​​com compactação DXT5 (/ 3/1 dependendo da tarefa), pois a textura permanece compactada em VRAM? Também as pessoas dizem que como elas já são DirectDraw Surfaces, elas carregam muito, muito mais rápido também.

Então eu criei uma aplicação para testar isso; Eu chamo a linha abaixo de 20 vezes, liberando a textura entre cada chamada.

    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;
 }

Agora, se eu tentar isso com uma textura DXT5, levará 5x mais para concluir do que com o carregamento em um simples * .PNG. Ouvi dizer que, se você não gerar Mipmaps, pode ir mais devagar, então verifiquei isso novamente. Então eu mudei o programa que eu estava usando para gerar o arquivo * .DDS, alternando para o próprio nvcompress.exe da NVIDIA, mas nada disso teve qualquer efeito.

EDITAR: Esqueci de mencionar que os arquivos (ambos * .png e * .dds) são da mesma imagem, apenas salvos em diferentes formatos. (Mesmo tamanho, quantidade de alfa, tudo!)

EDIT 2: Ao usar os seguintes parâmetros, ele carrega quase 2,5 vezes mais rápido e consome muito menos 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 )

No entanto, agora estou perdendo toda a minha transparência na textura, eu olhei para a textura DXT5 e parece bem no Paint.NET e no DirectX DDS Viewer. No entanto, quando carregado em toda a transparência se transforma em preto sólido. Problema ColorKey?

EDIT 3: Ignore esse último bit, eu estava sendo idiota e no meu "exemplo rápido" pressa eu tinha esquecido de ativar Alpha-Blending no D3DXSprite-> Begin (). Doh!

questionAnswers(2)

yourAnswerToTheQuestion