如何绘制大量(500+)的精灵,以在DirectX 10中构建等距的平铺地图?

| 因此,我一直在DirectX上读一些书(特别是10本),并试图开发一款使用DirectX的游戏,但是我为一个问题而困扰,这些书似乎都没有提到:我正在使用精灵创建等轴测图,并且随着板子的变大,该程序的运行速度大大降低。每个图块都是64x45,到我用sprite构造一个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);
    
已邀请:
        DrawSpritesImmediate的全部要点是要用成百上千个精灵组成的数组来调用它……一次不要一个精灵。 或者,尝试将\“ Immediate \”调用更改为使用DrawSpritesBuffered,然后使用ID3DX10Sprite :: Flush(在循环外部,就在End()之前)。 但是即使那样... 5s /帧的声音仍然非常慢...您确定不使用软件“ reference rasterizer \”而不是硬件吗?     

要回复问题请先登录注册