Итак, я возился с несколькими книгами по DirectX (в частности, с 10) и пытаюсь создать игру, в которой он используется, но меня ставит в тупик проблема, которая, похоже, не упоминается ни в одной из книг: Я строю изометрическую карту со спрайтами, и по мере увеличения доски программа резко замедляется. Каждый тайл имеет размер 64x45, и к тому времени, когда я создал тайловую карту 36x19 (684) со спрайтами, моему приложению требуется примерно 6 секунд для загрузки и около 5 секунд между каждым кадром. Поскольку отладка с помощью точек останова не дала никаких хороших подсказок, я сузил область в моем текущем коде, где проблема заключается в этом конкретном разделе:
Любая помощь будет оценена по достоинству.
const FLOAT clearcolor[4] = {0.0f, 0.0f, 0.0f, 0.0f};
pD3DDevice->ClearRenderTargetView(pRenderTargetView, clearcolor);
if(spriteObject != NULL){
spriteObject->Begin(D3DX10_SPRITE_SORT_TEXTURE);
pD3DDevice->OMGetBlendState(&pOriginalBlendState10, OriginalBlendFactor, &OriginalSampleMask);
if(pBlendState10)
{
FLOAT NewBlendFactor[4] = {0,0,0,0};
pD3DDevice->OMSetBlendState(pBlendState10, NewBlendFactor,0xffffffff);
}
D3DXMatrixScaling(&matScale, 64, 45, 1.0f);
for(int y = 0;y < 36;y++){
px=0;
if(y % 2 == 1)
px-=32;
for(int x = 0;x < 19;x++){
D3DXMatrixTranslation(&matTrans, px, viewport.Height - py, 0.1f);
testTile.matWorld = (matScale * matTrans);
spriteObject->DrawSpritesImmediate(&testTile, 1, 0, 0);
px+=64;
}
py+=23;
}
spriteObject->End();
pD3DDevice->OMSetBlendState(pOriginalBlendState10, OriginalBlendFactor, OriginalSampleMask);