<aside> 💡 Vulkan Tutorial 영어 원문

</aside>

모든 것이 합쳐지는 챕터입니다. drawFrame 함수를 작성하고 메인 루프에서 호출되어 삼각형을 표시하게 될 것입니다. 먼저 mainLoop에 함수를 만들고 호출합시다:

void mainLoop() {
    while (!glfwWindowShouldClose(window)) {
        glfwPollEvents();
        drawFrame();
    }
}

...

void drawFrame() {

}

프레임 개요

높은 수준에서 Vulkan 프레임을 렌더링하는 것은 다음과 같은 공통 단계로 구성됩니다:

이후 챕터에서 그리기 기능을 확장할 것이지만, 지금은 이것이 렌더루프의 핵심입니다.

동기화

Vulkan의 핵심 설계 철학은 GPU에서의 실행 동기화가 명시적이라는 것입니다. 작업 순서는 드라이버에게 실행하려는 순서를 알려주는 여러 동기화 프리미티브의 사용을 정의하는 것으로, 우리에게 달려있습니다. 즉, GPU에서 작업 실행을 시작하는 많은 Vulkan API 호출이 비동기식이며, 함수들은 작업이 끝날때 반환됩니다.

이 챕터에서는 순서를 명시적으로 하는 이벤트들이 많이 있습니다. 그것들은 GPU에서 발생하는데:

이러한 각각의 이벤트들은 단일 함수 호출을 사용하여 모션으로 설정되지만, 모두 비동기로 실행됩니다. 함수 호출은 작업이 실제로 완료되기 전에 반환되며 실행 순서도 정의되지 않습니다. 각 작업은 이전 작업의 마무리에 의존되기 때문에 안타까운 일입니다. 그러므로 우리는 원하는 순서를 달성하기 위해 사용할 수 있는 기본 요소를 탐색해야 합니다.

세마포어

세마포어는 큐 작업 사이에 순서를 추가하는데 사용됩니다. 큐 작업은 명령 버퍼 또는 나중에 보게 될 함수 내에서 큐에 제출하는 작업입니다. 큐의 예시로는 그래픽 큐와 프레젠테이션 큐가 있습니다. 세마포어는 동일한 큐 내부와 다른 큐 사이에서 작업을 주문하는데 모두 사용됩니다.