2017-01-23 2 views
0

Эй, ребята, я должен использовать функции DeviceContext как IASetVertexBuffers, IASetPrimitiveTopology, VSSetShader путем создания какДолжен ли я использовать функции DeviceContext для ввода в конвейер в цикле или путем создания?

void init() { 
    //create window and stuff 
    devicecontext->IASetVertexBuffers(...); 
} 

void draw() { 
    //draw 
} 

или в петле, как

void init() { 
    //create window and stuff 
} 

void draw() { 
    devicecontext->IASetVertexBuffers(...); 
    //draw 
} 

и вот мой код, что им на самом деле с помощью

void ARenderer::Draw(AMesh * mesh, AShader* shader) 
{ 
    ARenderer::SetViewport(currentviewport); 
    ARenderer::ApplyShader(shader); 


    ///Drawing 
    uint32_t stride = sizeof(AVertex); 
    uint32_t offset = 0; 

    dxmanager->DeviceContext->IASetVertexBuffers(0, 1, mesh->GetBuffer().GetAddressOf(), &stride, &offset); 
    dxmanager->DeviceContext->IASetPrimitiveTopology(static_cast<D3D11_PRIMITIVE_TOPOLOGY>(mesh->GetPrimitive())); 
    dxmanager->DeviceContext->Draw(mesh->GetVertexCount(), 0); 
} 

ответ

0

Скорее всего, вы захотите нарисовать более одного объекта или вещи в своем приложении, это означает, что вы будете иметь вызывать их несколько раз за кадр, поэтому время инициализации не является вариантом.

Безопаснее всегда устанавливать все необходимые состояния до розыгрыша до тех пор, пока оно не проявит проблемы с производительностью в вашем приложении. Это обычно никогда не бывает в небольших приложениях. Как только вы закончите с функциями и правильностью, вы можете попытаться быть умнее при отправке вещей, а не раньше.

Смежные вопросы