DirectX11缓冲区用于生成2D地图

时间:2016-10-23 19:57:24

标签: c++ directx directx-11

我正在研究简单的2D游戏(像pacman一样) 游戏地图由瓷砖(2D阵列30x40)组成,每个瓷砖由16px x 16px图形表示。
我的问题是我每帧重绘所有的瓷砖(30x40 = 1200个瓷砖),这使得FPS非常低。 我解决这个问题的想法是将map(1200个tile)绘制到一个大缓冲区,然后每个帧只绘制这个缓冲区,但我不知道如何实现它,这是我第一个使用DirectX的项目。 如何实现,或者你有更好的想法。

代码(简化):

ID3D11Device* pDevice;
ID3D11DeviceContext* pImmediateContext;
ID3D11RenderTargetView* pRenderTargetView;
IDXGISwapChain* pSwapChain;
ID3D11Resource* pResource;
ID3D11ShaderResourceView* pTexture;
std::unique_ptr<DirectX::SpriteBatch> spriteBatch;
Game* pGame;

用于渲染帧的函数

void GameApp::renderGame(float dt) {
    pImmediateContext->ClearRenderTargetView(pRenderTargetView, DirectX::Colors::Black);
    spriteBatch->Begin();
    pGame->draw();
    spriteBatch->End();
    pSwapChain->Present(0, 0);
}

pGame-&GT;绘制();

void Game::draw() {
    for (int i = 0; i < sizeY; ++i) {
        for (int j = 0; j < sizeX; ++j) {
            // Draw tile
            spriteBatch->Draw(pTexture, vPosition, &sourceRect, tint, rotation, vOrigin, vScale,
            DirectX::SpriteEffects::SpriteEffects_None, 0.0f);
            tile->Draw(spriteBatch);
        }
    }
}

我用来加载精灵的函数(我称之为一次,而不是循环)

DirectX::CreateDDSTextureFromFile(device, file, &pResource, &pTexture)

告诉我你是否需要更多细节。

0 个答案:

没有答案