Я работаю на графическом движке в c ++ и DirectX 11. При импорте сцен (используя Assimp) мне приходится рендерить несколько сеток с отдельными шейдерами.Я делаю это следующим способом: у меня есть std :: vector для хранения шейдеров и еще один для мешей.После открытия файла я добавляю все сетки к этому вектору.Затем я перебираю элементы вектора, используя цикл for, и рисую каждый из них отдельно.После того, как я нарисовал все сетки, я поменял буфер.Это прекрасно работает, за исключением частоты кадров / производительности, которая ужасна.
Я не знаю, как это можно сделать более эффективно или как это должно быть сделано.
void CRenderer::RenderFrame(void(*r)(void), void(*gui)(void),std::vector<CMesh>& meshStr, std::vector<CShader>& shaderStr)
{
const float BackColor[4] = { 0.03f, 0.03f, 0.03f, 1.f };
DeviceContext->ClearDepthStencilView(DepthStencilView, D3D11_CLEAR_DEPTH, 1.0f, 0);
DeviceContext->ClearRenderTargetView(backbuffer, BackColor);
for (int i = 0; i < shaderStr.size(); i++)
{
UseShader(&shaderStr[i], sizeof(Vertex), 0);
r();
DeviceContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
DeviceContext->VSSetConstantBuffers(0, 1, &CurrentShader->GetConstantBuffer());
DeviceContext->PSSetConstantBuffers(0, 1, &CurrentShader->GetConstantBuffer());
DeviceContext->VSSetConstantBuffers(1, 1, &CurrentShader->GetLightConstantBuffer());
DeviceContext->PSSetConstantBuffers(1, 1, &CurrentShader->GetLightConstantBuffer());
DeviceContext->DrawIndexed(meshStr[i].GetIndicesCount(), 0, 0);
}
gui();
SwapChain->Present(0, 0);
}