본문 바로가기

vulkan

Vulkan tutorial #3 Device Setup & Pipeline cont

해당 튜토리얼에서 device encapsulate하는 부분은 자세하게 알려주지 않는 거 같다.

- 아마 접근성을 위해서인듯?

 

해당 부분을 탐색하면 더 자세하게 일 수 있는 거 같다

https://vulkan-tutorial.com/Drawing_a_triangle/Setup/Instance

 

Instance - Vulkan Tutorial

Creating an instance The very first thing you need to do is initialize the Vulkan library by creating an instance. The instance is the connection between your application and the Vulkan library and creating it involves specifying some details about your ap

vulkan-tutorial.com

 

해당 영상에서 device setup과 관련한 클래스는 hpp와 cpp파일을 제공하고 있으니 다운로드 받아서 사용하면된다.

 

MyEngineDevice::MyEngineDevice(LveWindow &window) : window{window} {
  createInstance();
  setupDebugMessenger();
  createSurface();
  pickPhysicalDevice();
  createLogicalDevice();
  createCommandPool();
}

생성자를 보면 다음과 같은 함수를 볼수있다.

createInstance() : vulkan library를 생성하고 vulkan 과 우리의 어플리케이션을 이어주는 부분 


setupDebugMessenger() : vulkan은 미세한 에러들이 어플리케이션에 영향을 미치기 때문에, validation layer를 추가하는 부분 


createSurface() : glfw 에 의한 surface 생성


pickPhysicalDevice() : 우리가 사용하는 어플리케이션의 물리적인 디바이스 선택 (여기서 phsical device는 우리의 컴퓨터시스템중 vulkan api를 사용할 수 있는 device를 뜻함)

 - 여기서 multiple device에대한 


createLogicalDevice() : physical device에서 사용할 기능들을 세


createCommandPool() : 나중에 사용할 command pool을 셋업하는 부분

 

요약하자면

1. vulkan을 생성하고, vulkan api가 지원되는 physical device를 세팅함
2. 그리고 디버그를 도와주는 validation layer를 셋업

 

이거 두 역할을 한다 보면 된다.

 

 

lvepipline.h로 넘어가서

 

struct PiplineConfigInfo 생성 : 앱에서 파이프라인을 사용하기 위해 필요한 데이터들을 보관하는 구조체

- 왜 우리는 lvepipeline class 밖에서 만들었는가? : 애플리케이션에서 pipeline 클래스에 접근하지 않고 만질 수 있기 때문, 이말은 multipipeline 을 사용할 때에 이점이 있다.

 

소멸자 밑에 delete 구문 설명

https://codingfarm.tistory.com/443 이부분 보면 해결될 것이다.

이제 first app에서 만들어준 함수들 사용하게 함

 

 

결과물