잘못된 코드


void Renderer::WaitForPreviousFrame() {
    // 1) directFenceValue를 값 N으로 Signal
    directQueue->Signal(directFence.Get(), directFenceValue);
    // 2) 바로 N+1로 증가
    directFenceValue++;

    // 3) GetCompletedValue() < N+1 인지 검사 -> N+1을 기다림
    if (directFence->GetCompletedValue() < directFenceValue) {
        // 여기서도 N+1에 대해 이벤트 설정
        directFence->SetEventOnCompletion(directFenceValue, directFenceEvent);
        WaitForSingleObject(directFenceEvent, INFINITE);
    }
}

잘못된 점

Signal과 Wait 모두 같은 값 N으로 처리해야한다.


const UINT64 fenceToWait = directFenceValue;
directQueue->Signal(directFence.Get(), fenceToWait);

if (directFence->GetCompletedValue() < fenceToWait) {
    directFence->SetEventOnCompletion(fenceToWait, directFenceEvent);
    WaitForSingleObject(directFenceEvent, INFINITE);
}

directFenceValue++;