我应该使用DeviceContext函数在循环中的管道输入还是通过创建输入?

时间:2017-01-23 07:46:58

标签: c++ directx-11

嘿伙计们我应该使用像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);
}

1 个答案:

答案 0 :(得分:0)

您可能希望在应用程序中绘制多个对象或事物,这意味着您必须每帧多次调用它们,因此初始化时间不是一个选项。

在绘制之前始终设置所有必要状态直到它在您的应用程序中显示性能问题更安全。这通常不会发生在小型应用程序中。完成功能和正确性后,您可以尝试更聪明地发送内容,而不是之前。