본문 바로가기

vulkan

(9)
vulkan tutorial #8 Swap Chain Recreation 그동안 우리가 만들었던 LveWindow창은 고정된 창을 사용해왔다. 왜냐하면 Lve SwapChain에 들어있는 Framebuffer는 고정된 width와 height만으로 이루어져 있기 때문이다. 그래서 새로운 width와 height가 생성되면 우리는 새로운 Lve Swapchain instance를 받아야 한다. 그런데 Swapchain을 바꾸면 pipeline도 새로 바꾸어야한다. 현재의 pipeline이 swapchain에 영향을 받기 때문이다. 그래서 Height 와 width가 바뀌는 부분에 대한 callback함수를 만들어주고 firstapp에서 lveSwapChain을 생성하는 부분에 대해서 변화를 준다. 기존 렌더 패스에 그려진 파이프라인은 새로운 swap chain과 그에 따른 Re..
Vulkan tutorial #7 Fragment Interpolation 이제 vertex shader로 데이터를 옮길 수 있게 되었다. 하지만 vertex shader와 fragment 사이에는 rasterize 부분이있고 그 부분에서는 우리가 이제 그 중간 지점들에 대해서 색깔을 어떻게 주어야 하는지에 대해서 의문이 쌓일 수 있다. 이는 바로 linear interpolation 파트가 도와줄 것이다. linear interpolation은 각 직선의 중간값을 구해주는 방법이라 생각하면 된다.(중고등학교 때 내분점 생각하면 쉽다) 일차원에서는 다음과 같이 중간지점의 값을 생각할 수 있다. 마찬가지로 2차원에서는 다음과 같이 확장해서 사용할 수 있다. 그러면 세가지 점은 어떻게 interpolation을 시켜야할까? 대학생때 선형대수를 보면 약간의 답이 나올거다. 영상에는 ..
vulkan 쉬어가기 시어핀스키 삼각형 시어핀스핀 삼각형을 만들자! 프렉탈 도형이라 간단한 재귀함수로 만들어 주면 된다. std::vector FirstApp::makeSierpinskiTriangle(LveModel::Vertex A, LveModel::Vertex B, LveModel::Vertex C, int Iteration) { //Iteration이 0이면 그대로 삼각형 벡터 출력 if (Iteration == 0) { std::vector vectors; vectors.push_back(A); vectors.push_back(B); vectors.push_back(C); return vectors; } //아닐시 3분할해서 상단 좌하단 우하단에 recurrsion돌려버리기 LveModel::Vertex tmpAB = {{0.0f,..
Vulkan tutorial #6 Vertex Buffers 지난번 튜토리얼에서는 vertex shader에다가 vertex 데이터를 직접 넣어서 사용했다. 이제는 vertex buffer를 만들어서 불러오는 방식을 사용해볼까 한다. vertex buffer는 다양한 방식으로 저장되는데, 예를 들어서 버퍼 하나에 여러 attribute들이 있으면 다음과 같이 처음 두원소를 묶어서 position 그 다음 3개를 묶어서 color라고 한다. 그 둘이 합쳐서 vertex 0을 의미한다. 반대로 각 버퍼마다 하나의 바인딩을 묶어줄 수 도 있다. 그림과 같이 position만 가지고 있는 buffer 그리고 color normal만 가지고 있는 buffer들 세개가 바인딩 하는방식으로 존재할 수 있다. vertex를 buffer를 저장할때 몇번째 바인딩인지 그리고 str..
Vulkan tutorial #5 part2. Command Buffers Overview vulkan에서는 command buffer를 이용해서 function call을 전해주어야 한다. command buffer는 커맨드 열들을 받아서 frame마다 전해주는 방식으로 작동한다 우리는 이강의에서 두가지 방식의 comaand buffer를 작성하려 한다. Option 1 : initialization할 떄 command buffer를 저장한 다음 각 프레임 마다 재사용하기 Option 2 : 매 프레임 전에 command buffer를 다시 저장하는 방식 커맨드 버퍼의 생명주기는 위와 같다 command buffer가 record가 완료되면 excutable, Queue에 제출되면 pending 사용이 다 끝나면 다시 Executable로 변한 swapchain class를 살펴보면 우리는 ..
Vulkan tutorial #5 part1. swap chain overview 그동안 우리는 그래픽 파이프라인의 일렬의 과정에 대해서 배워왔고 vulkan에서 세팅하는 방법에 대해서 배워왔다. 우리가 graphics pipeline이 적용시킬때 컴퓨터 모니터에는 다른 화면을 보여주어야 끊김없이 화면전환이 되기 때문에 swap chain이 존재한다. double buffering은 frame buffer가 2개 있는 상황을 지칭한다. 마찬가지로 triple buffering은 frame buffer가 3개 있는 상황 여기서 V-sync는 vertical sync의 줄임말로 그래픽 카드의 프레임 생성과 모니터의 프레임 출력 타이밍을 맞추는 옵션, 안끄면 tearing이 일어날 수 있음 (컴퓨터 모니터는 한화면을 출력하는 시간동안 그래픽카드가 2,3프레임을 내보낼 수 있기 때문.) Sw..
Vulkan tutorial 4. Fixed Function Pipeline Stages tutorial 3의 연장선 이전에 1강에 나왔던 fixed function stage의 세팅을 맞춘다고 생각하면 된다. 해당 링크 : https://youtu.be/lr93-_cC8v4 우선 PipelineConfigInfo 구조체를 구성하는 파트부터 시작하자. VkPipelineInputAssemblyStateCreateInfo (input Assembly) graphics pipeline에서 inputAssembly는 vertices들을 모아놓은 배열에서 vertex를 분류하고 그다음 도형을 분석한다. 그러면 vertex로 이루어진 도형들을 어떻게 특정할 수 있을까? => 그것을해주는 것이 topology (수학에서 생각하는 토폴로지의 개념적인 부분을 가져왔다고생각하면 조금 편하다) 그러면 tria..
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 ..