<aside> 💡 Vulkan Tutorial 영어 원문

</aside>

설정

파이프라인 생성을 끝내기 전에 렌더링하는 동안 사용할 프레임버퍼 첨부사항에 대해 Vulkan에게 알려야 합니다. 색상과 깊이 버퍼의 수, 각각 사용할 샘플 수, 렌더링 작업 전반에 걸쳐 그것들을 처리할 방법을 지정해야 합니다. 이 모든 정보는 createRenderPass로 생성되는 렌더 패스 객체에 래핑됩니다. initVulkan에서 createGraphicsPipeline 이전에 이 함수를 호출하세요.

void initVulkan() {
    createInstance();
    setupDebugMessenger();
    createSurface();
    pickPhysicalDevice();
    createLogicalDevice();
    createSwapChain();
    createImageViews();
    createRenderPass();
    createGraphicsPipeline();
}

...

void createRenderPass() {

}

첨부 사항 설명

우리의 경우 스왑체인의 이미지 중 하나로 표시되는 단일 색상 첨부사항만 있을 것입니다.

void createRenderPass() {
    VkAttachmentDescription colorAttachment{};
    colorAttachment.format = swapChainImageFormat;
    colorAttachment.samples = VK_SAMPLE_COUNT_1_BIT;
}

색상 첨부의 format은 스왑체인 이미지 형식과 일치해야 하고, 우리는 아직 멀티샘플링으로 아무 작업도 하지 않으므로 1개의 샘플로 고정합니다.

colorAttachment.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR;
colorAttachment.storeOp = VK_ATTACHMENT_STORE_OP_STORE;

loopOpstoreOp은 렌더링 전/후에 첨부사항 데이터로 무슨 작업을 할지 결정합니다. loopOp에는 다음과 같은 선택 사항이 있습니다:

우리의 경우 새 프레임을 크리기 전에 clear 작업을 사용하여 프레임 버퍼를 검은색으로 지웁니다. storeOp에는 두가지 선택이 가능합니다:

우리는 화면에 삼각형을 그려서 보고 싶으므로, 저장 작업을 진행하겠습니다.

colorAttachment.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
colorAttachment.stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE;

loadOpstoreOp은 색상과 깊이 데이터에 적용합니다. 그리고 stencilLoadOp / stencilStoreOp은 스텐실 데이터에 적용합니다. 우리 어플리케이션은 스텐실 버퍼로 아무 작업도 하지 않으므로 로드, 저장 결과는 관련이 없습니다.

colorAttachment.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
colorAttachment.finalLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;