Привет, Я пытаюсь создать 2D-движок на C++, который может обрабатывать тысячи спрайтов одновременно с использованием DirectX, а также SDL. Я слышал, что LPD3DX9Sprite очень эффективен и выходит из XNA, стиль мне очень хорошо знаком. Я выполнял некоторые тесты производительности, одновременно добавляя несколько спрайтов (одинаковые текстуры и настройки). Однако, похоже, некоторые проблемы с производительностью и idk почему.DirectX Game LPD3DX9Sprite Rendering Slow
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);
}
Это мой Жеребьевка код это вызывает функцию, которая в основном вызывает DrawMethod объекта LPD3DX9Sprite. В игре больше ничего не происходит, только этот код чертежа.
Согласно счетчику fps, я получаю 4 кадра в секунду. Vsync включен, но замедление происходит независимо. Есть ли что-нибудь, что я могу сделать по этому поводу?
Мне показалось странным, что эта простая тестовая игра на C++ без реальной логики сканирует по сравнению с полным движком игры на C#, который безупречно работает со многими рендерингами спрайтов.
Каково содержимое 'Test.draw();'? – Xirema
Графика :: SpriteBatch-> Draw (Текстура, & SourceRect, & OriginPos, & D3DXVECTOR3 (Position.x, Position.y, 0), Цвет); Я даже не добавляю никаких преобразований для вращения и масштабирования. Просто это. –