【发布时间】:2015-10-27 16:17:32
【问题描述】:
嘿,我正在尝试用 C++ 构建一个 2D 引擎,它可以同时使用 DirectX 和 SDL 处理数千个精灵。我听说 LPD3DX9Sprite 非常高效,来自 XNA 的风格对我来说非常熟悉。我正在做一些性能测试,一次批处理多个精灵(相同的纹理和设置)。但是,性能和原因似乎存在一些问题。
void Draw()
{
Graphics::direct3D_device->Clear(1, NULL, D3DCLEAR_TARGET, D3DCOLOR_ARGB(255, 0, 0, 0), 0, 0);
Graphics::direct3D_device->BeginScene();
Graphics::SpriteBatch->Begin(D3DXSPRITE_ALPHABLEND);
string fs = std::to_string(fps);
for (int i = 0; i < 1000; i++)
Test.Draw();
DrawTextString(32, 64, fs.c_str());
Graphics::SpriteBatch->End();
Graphics::direct3D_device->EndScene();
Graphics::direct3D_device->Present(NULL, NULL, NULL, NULL);
}
这是我的绘制代码,它调用了一个基本上调用 LPD3DX9Sprite 对象的 DrawMethod 的函数。游戏中并没有真正发生其他事情,只是这个绘图代码。
根据 fps 计数器,我得到 4fps。垂直同步已启用,但无论如何都会出现减速。对此我能做些什么吗?
我觉得奇怪的是,与一个完整的 C# 游戏引擎相比,这个没有真正逻辑的简单 C++ 测试游戏是在爬行。
【问题讨论】:
-
Test.draw();的内容是什么? -
Graphics::SpriteBatch->Draw(Texture, &SourceRect, &OriginPos, &D3DXVECTOR3(Position.x,Position.y,0), Color);我什至还没有为旋转和缩放添加任何变换。就是这个。
标签: c++ performance directx rendering