2017-01-23 3 views
0

얘들 아 내가DeviceContext 함수를 사용하여 루프로 또는 생성하여 파이프 라인에 입력해야합니까?

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

void draw() { 
    //draw 
} 

처럼 창조에 의해, IASetVertexBuffers처럼 IASetPrimitiveTopology, VSSetShader을 DeviceContext 기능을 사용하거나 여기

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

응용 프로그램에서 둘 이상의 객체 또는 것을 그리려는 가능성이 있습니다. 이미 프레임 당 여러 번 호출하므로 초기화 시간은 옵션이 아닙니다.

응용 프로그램에서 성능 문제가 나타날 때까지 항상 필요한 모든 상태를 그리기 전에 설정하는 것이 더 안전합니다. 그것은 보통 작은 응용 프로그램에서는 결코 발생하지 않습니다. 기능과 정확성을 모두 갖추면 이전보다 일을 보내는 데 더 똑똑해 지도록 노력할 수 있습니다.