좋아, 그래서 나는 프로와 다양한 다양한 질감 압축 기술을 사용하여 죄수의 무게를하려고 노력하고있어. DirectX를 사용하는 Windows 컴퓨터에서 2D 스프라이트 게임을 코딩 할 때 내 시간의 99.999 %를 소비합니다.* .DDS 파일을로드하는 것이 빠른 것이라고 생각 했습니까?
지금까지 알파 트리밍으로 텍스처 패킹 (SpriteSheets)을 살펴 봤는데 성능이 조금 더 좋아졌습니다. 이제는 저장되어있는 텍스처 형식을 살펴보기 시작했습니다. 현재 모든 것은 * .PNG로 저장됩니다.
텍스처가 VRAM에서 압축 된 상태로 유지되므로 * .DDS 파일이 특히 DXT5 (작업에 따라/3/1) 압축과 함께 사용되면 좋다고 들었습니다. 또한 사람들은 이미 DirectDraw Surface이기 때문에로드가 훨씬 빠르고 훨씬 빠릅니다.
그래서 이것을 테스트 할 응용 프로그램을 만들었습니다. 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 텍스처로이 작업을 시도하면 간단한 * .PNG 로딩하는 것보다 완료하는 데 5 배 더 오래 걸립니다. Mipmaps를 생성하지 않으면 속도가 느려질 수 있다는 것을 들었습니다. 그런 다음 NVIDIA 자체의 nvcompress.exe로 전환하여 * .DDS 파일을 생성하는 데 사용한 프로그램을 변경했지만 아무 것도 효과가 없었습니다.
편집 : 파일 (* .png 및 * .dds)은 모두 동일한 이미지이며 다른 형식으로 저장된다는 사실을 잊어 버렸습니다. (같은 크기, 알파, 모든 것!)
EDIT 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 뷰어에서 잘 보인다. 그러나 모든 투명도에로드되면 검정색으로 바뀝니다. ColorKey 문제?
편집 3 : 내가 바보 당하고 내 "빠른 예"급히 나는 알파 블렌딩 D3DXSprite-에이> 시작 가능하게 잊었다, 마지막 비트를 무시(). 도!
텍스처가 비디오 메모리에 복사되는 경우 (매우 느림) 텍스처 자체의 로딩 시간을 측정하는 것만이 아닙니다. – newgre
EDIT2에 대한 질문 : 원래의 5 배보다 느린 속도 또는 2.5 배 빠른 속도 PNG보다? –