본문 바로가기

Vulkan

Drawing - Framebuffers 이전 글: Graphics pipeline basics- Conclusion다음 글 : Drawing - Command buffers Drawing - Framebuffers 프레임 버퍼우리는 지난 몇 장에서 프레임 버퍼에 대해 많이 이야기 했고 스왑 체인 이미지와 동일한 형식의 단일 프레임 버퍼를 생각한 렌더링 패스를 구성 했지만 아직 실제로 만들지는 않았습니다. 렌더링 패스 생성 중에 지정된 어테치먼트는 VkFramebuffer 객체로 래핑하여 바인딩됩니다.모든 VkImageView 오브젝트를 참조하는 프레임버퍼는 어테치먼트를 표현 합니다.우리의 경우에는 색상 어테치먼트 하나입니다 . 그러나 어테치먼트로 사용해야 하는 이미지는 스왑 체인이 표시 할 이미지를 검색 할 때 스왑 체인이 반환하는 이미지에 .. 더보기
Graphics pipeline basics- Conclusion 이전 글 : Graphics Pipeline basics - Render passes다음 글 : Drawing - Framebuffers Graphics pipeline basics- Conclusion 정리이전 장의 모든 구조와 객체를 결합하여 그래픽 파이프 라인을 만들 수 있습니다! 다음은 우리가 지금 가지고 있는 객체의 유형입니다. 쉐이더 스테이지 : 그래픽 파이프 라인의 프로그래머블 스테이지 기능을 정의하는 쉐이더 모듈고정 기능 상태 : 입력 어셈블리, 래스터 라이저, 뷰포트 및 색상 혼합과 같이 파이프 라인의 고정 함수 단계를 정의하는 모든 구조파이프 라인 레이아웃 : 그리기 시간에 업데이트 할 수 있는 셰이더에서 참조하는 유니폼 및 푸시 값렌더링 패스 : 파이프 라인 단계에서 참조하는 어태치먼.. 더보기
Graphics Pipeline basics - Render passes 이전 글 - Graphics pipeline basics - Fixed function다음 글 - Graphics pipeline basics - Conclusion Render passes렌더링 패스 Setup 파이프 라인 생성을 완료하기 전에 Vulkan에 렌더링하는 동안 사용될 프레임 버퍼를 알려 줘야 합니다. 얼마나 많은 색상 및 깊이 버퍼가 있는지, 각각에 대해 사용할 샘플 수 및 렌더링 작업 전체에서 내용을 처리하는 방법을 지정해야 합니다. 이 모든 정보는 렌더 패스 객체에 래핑됩니다.이 객체에 대해서는 새 createRenderPass 함수를 만듭니다. createVraphicsPipeline 전에 initVulkan에서 이 함수를 호출하십시오. void initVulkan() { creat.. 더보기
Graphics Pipeline basics - Fixed function 이전 글 : Shader modules다음 글 : Render passes Fixed function예전의 그래픽 API는 그래픽 파이프 라인의 대부분의 각 스테이지에 대한 기본적인 상태를 제공하고 있었습니다. Vulkan에서는 뷰포트 크기에서 색상 혼합 기능에 이르기까지 모든 것에 대해 이러한 상태를 명시해야 합니다. 이 장에서는 이러한 고정 함수 연산을 구성하기 위해 모든 구조체를 채울 것입니다. Vertex input VkPipelineVertexInputStateCreateInfo 구조체는 버텍스 쉐이더에 전달 될 정점 데이터의 형식을 기술합니다. 이것은 대략 두 가지 방법으로 이것을 기술합니다 : 바인딩 : 데이터 간 간격과 데이터가 각 정점 또는 각 인스턴스 여부 (인스턴스화 참조)속성 설명 .. 더보기
Graphics Pipeline basics - Shader modules 이전 글 : Graphics Pipeline basics 다음 글 : Fixed functionShader modules쉐이더 모듈이전 API와 달리 Vulkan의 쉐이더 코드는 GLSL 및 HLSL과 같이 사람이 읽을 수 있는 구문이 아닌 바이트 코드 형식으로 준비 되어야 합니다. 이 바이트 코드 형식은 SPIR-V라고하며 Vulkan 및 OpenCL (둘 다 Khronos API)과 함께 사용하도록 설계되었습니다. 그래픽을 작성하고 셰이더를 계산하는 데 사용할 수 있는 형식이지만 이 튜토리얼에서는 Vulkan의 그래픽 파이프 라인에 사용 된 셰이더에 초점을 맞출 것입니다. 바이트 코드 형식을 사용하는 이점은 GPU 공급 업체가 쉐이더 코드를 이진코드로 바꾸기 위해 작성한 컴파일러가 훨씬 덜 복잡하다는.. 더보기
Graphics Pipeline basics - introduction 이전 글 : Image views 다음 글 : Shader modules Graphics Pipeline basicsIntroduction다음 몇 강좌를 통해 우리는 첫 번째 삼각형을 그리도록 구성된 그래픽 파이프 라인을 설정할 것입니다. 그래픽 파이프 라인은 렌더링 타겟의 픽셀까지 메쉬의 꼭지점과 텍스처를 가져 오는 일련의 작업입니다. 간략한 개요가 아래에 표시됩니다. 입력 어셈블러는 지정한 버퍼에서 원시 버텍스 데이터를 수집하고 인덱스 버퍼를 사용하여 버텍스 데이터 자체를 복제하지 않고도 특정 요소를 반복 할 수 있도록 합니다. 버텍스 쉐이더는 모든 버텍스에 대해 실행되며, 일반적으로 버텍스 위치를 모델 공간에서 스크린 공간으로 변환하는 작업을 합니다. 또한 버텍스 별 데이터를 다음 파이프 라인 스테.. 더보기
Presentation - Image views 이전 글 : Swap chain 다음 글 : Graphics Pipeline basics Image views스왑 체인의 렌더 파이프 라인을 포함하여 VkImage 를 사용하려면 렌더링 파이프 라인에서 VkImageView 객체를 만들어야 합니다. 이미지 뷰는 말 그대로 이미지에 대한 뷰입니다. 밉 매핑 을 사용하지 않고 2D 텍스처, 깊이 텍스처로 처리 해야하는 경우와 같이 이미지에 액세스하는 방법과 액세스 할 이미지 부분을 설명합니다. 이 장에서는 스왑 체인의 모든 이미지에 대한 기본 이미지 뷰를 생성하여 나중에 색상 대상으로 사용할 수있는 createImageViews 함수를 작성합니다. 먼저 이미지 뷰를 저장할 클래스 멤버를 추가합니다. std::vector swapChainImageViews; .. 더보기
Presentation - Swap chain 이전 글 : Window surface 다음 글 : Image views Swap chain스왑 체인Vulkan에는 "기본 프레임 버퍼" 개념이 없으므로 화면에서 시각화 하기 전에 렌더링 할 버퍼를 소유하는 인프라가 필요합니다. 이 인프라를 스왑 체인 이라고 하며 Vulkan에 명시 적으로 만들어야 합니다. 스왑 체인은 본질적으로 화면에 표시되기를 기다리는 이미지 대기열입니다. 우리의 응용 프로그램은 그와 같은 이미지를 가져 와서 그 이미지를 큐에 반환합니다. 대기열의 작동 방식과 대기열에서 이미지를 표시하기 위한 조건은 스왑 체인 설정 방법에 따라 다르지만 스왑 체인의 일반적인 목적은 이미지의 프레젠테이션을 화면 새로 고침 빈도와 동기화하는 것입니다. Checking for swap chain supp.. 더보기
Presentation - Window surface 이전 글 : Logical device and queue 다음 글 : Swap chain Window surface Vulkan은 플랫폼에 독립적인 API 이기 때문에 자체적으로 윈도우 시스템과 직접 인터페이스 할 수 없습니다. Vulkan 과 윈도우 시스템 간의 연결을 설정하여 결과를 화면에 표시 하려면 WSI (Window System Integration) 확장을 사용해야 합니다. 이 장에서는 VK_KHR_surface 의 첫 번째 항목에 대해 설명 합겠습니다.렌더링 된 이미지를 윈도우 화면에 나타내는 VkSurfaceKHR 객체에 대하여 살펴 보게 될 것 입니다.. 우리 프로그램의 윈도우 화면은 이미 GLFW로 만들어져 있습니다. VK_KHR_surface 확장 기능은 인스턴스 수준의 확장 기능이.. 더보기
Setup - Logical device and queue 이전 글 : Physical devices and queue families 다음 글 : Window surface Logical device and queue논리적 디바이스와 큐 Introduction 사용하려는 물리적 장치를 선택한 후에는 논리적 장치를 설정하여 인터페이스 할 필요가 있습니다. 논리적 디바이스 작성 프로세스는 인스턴스 작성 프로세스와 유사하며 사용 하려는 기능을 명시 해야 합니다. 또한 앞에서 어떤 대기열 패밀리를 사용할 수 있는지 검토 했으므로 그 검토에 의하여 , 지금 생성 할 대기열을 지정 해야 합니다. 다양한 요구 사항이 있는 경우 동일한 물리적 장치에서 여러 논리적 장치를 만들 수도 있습니다. 논리 장치 핸들을 저장할 새 클래스 멤버를 추가하는 것으로 시작 하십시오. VkDe.. 더보기