본문 바로가기
DirectX/[Inflearn_삼각형] Vulkan

8. Vulkan Swapchain Clear

by 헛둘이 2025. 10. 19.

이 게시물은 Inflearn의 "삼각형" 님의 "삼각형의 실전! Vulkan 중급" 강의를 학습 목적으로 정리한 게시물입니다.

정리하는 과정에서 살을 붙이거나 강의의 핵심 내용이 누락되었을 수 있습니다.

좀 더 심도있고 깊은 내용을 듣고 싶으시다면 아래 링크를 참고해주세요.

https://www.inflearn.com/course/%EC%8B%A4%EC%A0%84-vulkan/dashboard

 

삼각형의 실전! Vulkan 중급| 삼각형 - 인프런 강의

현재 평점 3.3점인 강의를 만나보세요. 이 강의를 통해 수강생은 Vulkan의 핵심 개념을 이해할 수 있습니다. 이를 바탕으로 GPU를 효과적으로 사용하는 코드를 작성할 수 있습니다. Vulkan, Graphics

www.inflearn.com

 

Command Buffer 기록 시작

vkBeginCommandBuffer()를 호출하면 Command Buffer가 recording 상태로 전환됨.
이 시점부터 GPU로 전달할 명령을 기록할 수 있음.
vkEndCommandBuffer()를 호출하면 기록이 완료되고 executable 상태로 변경되어 큐에 제출 가능.

Command Buffer는 생명주기를 가지며,
생성 직후에는 비어 있는 initial 상태,
begin 후에는 recording 상태,
end 후에는 executable 상태로 전환됨.
큐에 제출되면 pending 상태가 되고,
실행 중 오류가 발생하거나 one-time submit으로 만들어진 버퍼가 사용된 경우 invalid 상태로 변경됨.


이미지 레이아웃 전환

Vulkan의 이미지는 GPU 메모리 상에서 다양한 레이아웃(Layout) 상태를 가짐.
vkCmdClearColorImage()를 이용해 이미지를 클리어하려면
GENERAL, TRANSFER_DST_OPTIMAL, 또는 SHARED_PRESENT_KHR 중 하나의 레이아웃이어야 함.

일반적으로는 TRANSFER_DST_OPTIMAL 상태에서 클리어를 수행함.
만약 다른 레이아웃 상태라면 vkCmdPipelineBarrier()를 통해
레이아웃 전환(Layout Transition)과 메모리 동기화를 수행해야 함.
이 단계를 생략하면 validation layer에서 레이아웃 오류가 발생하고,
클리어 명령이 정상적으로 실행되지 않음.


클리어 색상 지정

클리어할 색상은 VkClearColorValue 구조체를 통해 지정함.
RGBA 형식으로 표현되며, 예를 들어 (0, 0, 0, 1)은 검은색 클리어를 의미함.


클리어 영역 설정

VkImageSubresourceRange 구조체를 사용해 클리어할 이미지의 범위를 지정함.
보통 전체 이미지를 클리어하지만, 특정 Mip Level이나 Layer만 선택적으로 클리어할 수도 있음.
큐브맵이나 멀티뷰 렌더링처럼 여러 레이어를 가진 이미지의 경우,
layerCount 값을 조정해 여러 시점(View)을 동시에 초기화할 수 있음.


이미지 클리어 명령 기록

색상과 영역이 정의되면 vkCmdClearColorImage() 명령을 기록함.
이 명령은 Command Buffer가 큐에 제출되기 전까지 실제로 실행되지 않음.
즉, CPU는 명령만 기록하고, GPU는 제출 시점에 해당 명령을 실제로 수행함.


스왑체인 이미지 획득

클리어할 대상 이미지를 선택하기 위해 vkAcquireNextImageKHR()를 호출함.
이 함수는 사용 가능한 스왑체인 이미지의 인덱스를 반환하며,
동기화를 위해 세마포어나 펜스를 함께 사용해야 함.
GPU가 렌더링을 완료할 때까지 CPU가 다음 프레임을 준비할 수 있도록
이 단계에서의 동기화가 매우 중요함.


화면 출력 (Present)

클리어가 완료된 이미지는 vkQueuePresentKHR()를 통해 화면에 출력됨.
이 과정을 통해 GPU가 처리한 이미지가 실제 디스플레이로 전송되고,
최종적으로 사용자가 보는 화면이 갱신됨.


레이아웃 복구 

클리어 이후 동일한 이미지를 후속 렌더링 단계에서 사용할 경우,
이미지를 PRESENT_SRC_KHR 또는 SHADER_READ_ONLY_OPTIMAL 레이아웃으로 다시 전환해야 함.
이는 프레젠트 큐가 이미지를 올바르게 참조하고,
다음 파이프라인 단계에서 오류 없이 사용할 수 있도록 하기 위함.


  • vkCmdClearColorImage()는 Render Pass 외부에서 사용되는 명령으로,
    주로 이미지 전체 초기화나 디버그용 배경색 설정에 사용됨.
  • Render Pass 내부에서는 VkRenderPassBeginInfo의 clearValues를 이용해
    동일한 효과를 얻을 수 있음.
  • Command Buffer에 기록된 명령은 즉시 실행되지 않으며,
    제출 시점에 GPU가 순차적으로 처리함.
  • 정확한 레이아웃 전환과 동기화가 이루어지지 않으면
    검은 화면이나 깨진 프레임이 나타날 수 있음.

안드로이드 녹색 색상으로 변경

 

'DirectX > [Inflearn_삼각형] Vulkan' 카테고리의 다른 글

7. Vulkan Command Pool/Command Buffer  (0) 2025.10.18
6. Vulkan Swapchain  (0) 2025.10.16
5. Vulkan Surface  (0) 2025.10.15
4. Vulkan Extension  (0) 2025.10.13
3. Vulkan Device (+Vulkan Queue)  (0) 2025.10.09

댓글