그래픽스/vk(28)
-
[vk] Vertex buffers - Index buffer
1. Introduction - 3D meshes 은 다수의 삼각형으로구성되며 정점들을 공유한다. - 이것은 간단한 사각형에서도 알 수 있다. - 두개의 삼각형으로 사각형을 그려보면, 6개의 정점이 필요하게된다. - 문제는 두개의 정점이 중복된다는것이고 이것은 50%에 해당하는 수치이다. (4개의 정점중 2개) - 이 문제에 대한 해결방안은 index buffer를 사용하는것이다. - index buffer는 본질적으로 정점 버퍼에 대한 포인터 배열이다. - 이것은 vertex data를 재정렬하는것을 허용해주며 - 존재하는 다수의 정점 데이터를 재사용하게 해준다. - 위 그림은 정점 4개를 가진 정점버퍼와 인덱스버퍼를 사용하여 사각형을 나타내는 한 예시이다. - - - - 첫번째 3개의 indices는..
2021.08.14 -
[vk] Vertex buffers - Staging buffer
1. Introduction - vertex buffer는 지금 올바르게 작동하지만 - 현재 memory type은 CPU에 접근 가능하게 해주지만, - 그래픽 카드 자체에서 읽을 수 있는 가장 최적의 memory type이 아닐 수 있다, - 가장 최적의 메모리는 VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT 플래그이며 - 이것은 일반적인 방법으론 전용 그래픽카드(dedicated graphics card)를 사용하는 CPU에서 접근불가능하다 - 이번 챕터에서는 두개의 vertex buffer를 만들것이다. - 하나는 staging buffer로 vertex 배열 데이터를 메모리로 업로드할 수 있는 CPU 접근가능한 메모리이며 - 하나는 vertex buffer로 device loca..
2021.08.14 -
[vk] Vertex buffers - Vertex buffer creation
1. Introduction - Vulkan의 버퍼들은 그래픽 카드에의해 읽힐 수 있는 임의의 데이터를 저장하는데 사용되는 메모리 영역이다. - 버퍼들은 vertex data를 저장하는데 사용할 수 있으며, 현재 챕터에서 다룰것이다. - 또한 버퍼들은 많은 목적으로 앞으로의 챕터에서도 보게될것이다. - 이때까지 다룬 Vulkan objects과는 다르게 버퍼들은 자동적으로 메모리를 할당하지 않는다. - Vulkan API가 프로그래머에게 대부분 모든것들에 대해 통제권을 주며, 메모리 관리 또한 이 중 하나이다. (The work from the previous chapters has shown that the Vulkan API puts the programmer in control of almost e..
2021.08.14 -
[vk] Vertex buffers - Vertex input description
Vertex input description 1. Introduction - 셰이더에 하드코딩된 vertex data를 vertex buffer로 수정할것이다 - 가장 쉬운 접근법인 CPU visible buffer 를생성하고 memcpy 로 데이터를 직접 복사하는것부터 시작할것이다. - 그리고 이후에 고성능 메모리에 vertex data를 복사하기 위해 - 어떻게 staging buffer 를 사용할것인지를 살펴볼것이다. 2. Vertex shader - 일단 vertex shader에서 하드코딩된 부분을 지우자 - vertex shader는 in 키워드를 사용하여 vertex buffer로부터 입력을 받는다. #version 450 layout(location = 0) in vec2 inPositio..
2021.08.14 -
[vk] Drawing triangle - Drawing - Swap chain recreation
Swap chain recreation 1. Introduction - 삼각형을 성공적으로 그렸지만 - 아직 제대로 처리되지 않은 몇가지 상황이 있다. - 1) window surface 가 변경되어, 더이상 swapchain과 surface가 호환이 안될 수 있음. - 2) window size가 변경될 경우 등등 - 이러한 이벤트들을 잡아내고, swapchain을 다시 만들어야한다. 2. Recreating the swap chain - recreateSwapChain 이 함수는 createSwapChain 를 포함한 - swap chain 과 window size 가 관련된 객체를 생성하는 함수를 전부 호출한다. void recreateSwapChain() { vkDeviceWaitIdle(devi..
2021.08.11 -
[vk] Drawing triangle - Drawing - Rendering and presentation
Rendering and presentation -모든것이 합쳐지는 챕터 1. Setup - mainLoop 에서 호출되어 삼각형을 표시하는 함수를 작성할것임 - drawFrame 함수를 만들것임 void mainLoop() { while (!glfwWindowShouldClose(window)) { glfwPollEvents(); drawFrame(); } } ... void drawFrame() { } 2. Synchronization - drawFrame이 함수는 다음과 같은 작업을 수행하도록 작성할것임. Acquire an image from the swap chain Execute the command buffer with that image as attachment in the framebuf..
2021.08.11