<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;
loopOp와 storeOp은 렌더링 전/후에 첨부사항 데이터로 무슨 작업을 할지 결정합니다. loopOp에는 다음과 같은 선택 사항이 있습니다:
VK_ATTACHMENT_LOAD_OP_LOAD: 첨부사항의 기존 내용 유지VK_ATTACHMENT_LOAD_OP_CLEAR: 시작할 때 값을 상수로 지움VK_ATTACHMENT_LOAD_OP_DONT_CARE: 정의되지 않은 내용이 존재함: 우리는 이것에 신경 쓸 필요가 없습니다.우리의 경우 새 프레임을 크리기 전에 clear 작업을 사용하여 프레임 버퍼를 검은색으로 지웁니다. storeOp에는 두가지 선택이 가능합니다:
VK_ATTACHMENT_STORE_OP_STORE: 렌더링된 내용은 메모리에 저장되며 나중에 읽을 수 있음VK_ATTACHMENT_STORE_OP_DONT_CARE: 프레임버퍼의 내용은 렌더링 작업 후 정의되지 않음우리는 화면에 삼각형을 그려서 보고 싶으므로, 저장 작업을 진행하겠습니다.
colorAttachment.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
colorAttachment.stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE;
loadOp와 storeOp은 색상과 깊이 데이터에 적용합니다. 그리고 stencilLoadOp / stencilStoreOp은 스텐실 데이터에 적용합니다. 우리 어플리케이션은 스텐실 버퍼로 아무 작업도 하지 않으므로 로드, 저장 결과는 관련이 없습니다.
colorAttachment.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
colorAttachment.finalLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;