본문 바로가기

Vulkan

Descriptor pool and sets 이전 글 : Descriptor layout and buffer Descriptor pool and sets Introduction 이전 장의 descriptor 레이아웃은 바인딩 할 수 있는 descriptor 유형을 기술 합니다. 이 장에서는 디스크립터 세트를 생성하는데, 실제로는 uniform 버퍼 디스크립터에 바인드 할 VkBuffer 리소스를 지정한다. Descriptor pool 디스크립터 세트는 직접 생성 할 수 없으며 명령 버퍼와 같은 풀에서 할당해야 합니다. 디스크립터 집합에 을 우리는 디스크립터 풀이라 부릅니다. 우리는 새로운 함수 createDescriptorPool을 작성하여 이를 설정합니다. void initVulkan() { ... createUniformBuffer(); cre.. 더보기
Descriptor layout and buffer 이전 글 : 행렬다음 글 : Descriptor pool and sets Descriptor layout and buffer Introduction 이제 각 정점에 대해 임의의 속성을 정점 셰이더에 전달할 수 있습니다. 그러나 전역 변수는 어떻게 전달 할까요? 이번 강좌를 통해서 우리는 3D 그래픽의 세계로 넘어갈것 입니다. 그러기 위해서는 우리는 모델 뷰 프로젝션 매트릭스가 필요합니다. 버텍스 데이터로 포함시킬 수는 있지만 그럴경우 메모리 낭비가 있으며, 또한 좌표변환이 될 때마다 버텍스 버퍼를 업데이트 해야만 합니다. 이는 많은 비용이 들어갈 것 입니다. 변환(transformation) 은 모든 단일 프레임을 쉽게 바꿀 수 있습니다. Vulkan에서 이 문제를 해결하는 올바른 방법은 리소스 설명자(.. 더보기
행렬 이전 글 : Index buffer 다음 글 : Descriptor layout and buffer 행렬 (Matrix)행렬에 대하여 잠시 소개하고 가겠습니다.이미 알고 있는 내용이지만 정리차원에서 적습니다. 보다 자세한 내용은 행렬 관련 내용을 따로 찾아 보셔야 할 것 입니다. 엔진이 배를 움직이는 것이 아니다. 배는 그 자리에 가만이 있으나 엔진이 이 세상을 회전해 움직이는 것이다. Homogeneous 좌표계 지금까지, 우리는 3D 버텍스를 (x,y,z) 트리플렛(세묶음;triplet)으로서 다루었습니다. 여기에 w 를 소개합니다. 우리는 이제 (x,y,z,w) 벡터를 사용합니다. 이게 무엇인지 곧 알게 될겁니다. 하지만 지금은, 이것만 기억해 두세요 :w == 1 이면, 벡터 (x,y,z,1) 은.. 더보기
Index buffer 이전 글 : Staging buffer다음 글 : 행렬 Index buffer 인덱스 버퍼, 색인 버퍼 Introduction 실제 응용 프로그램에서 렌더링 할 3D 메쉬는 종종 여러 삼각형 사이에서 정점을 공유합니다. 이것은 직사각형 그리기와 같은 간단한 작업에서도 찾아 볼 수 있습니다. 사각형을 그리려면 두 개의 삼각형이 필요합니다. 즉 6 개의 정점이 있는 정점 버퍼가 필요합니다. 문제는 두 개의 정점의 데이터가 중복되어 50 %의 중복성이 발생하게 된다는 것 입니다 . 문제는 정점이 평균 3 개의 삼각형으로 사용 되는것 보다는 복잡한 메시로 된다는 것 이 더 큰 문제 입니다. 이 문제에 대한 해결책은 인덱스 버퍼를 사용하는 것입니다. 인덱스 버퍼는 본질적으로 정점 버퍼에 대한 포인터의 배열입니다... 더보기
Staging buffer 이전 글 : Vertex buffer creation다음 글 : Index buffer Staging buffer스테이징 버퍼,준비 버퍼 소개 지금 우리가 가지고있는 버텍스 버퍼는 제대로 작동 하지만 우리가 CPU에서 액세스 할 수 있는 메모리 타입으로 읽을 수 있는 메모리는 그래픽 카드 자체에 대한 최적의 메모리 타입이 아닐 수 있습니다. 가장 최적의 메모리는 VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT 플래그를 갖는 메모리로, 일반적으로 전용 그래픽 카드에 적합하며 CPU에 의해 액세스 할 수 없습니다. 이 장에서 우리는 두 개의 버텍스 버퍼를 만들 것입니다. 정점 어레이로부터 데이터를 업로드 하기 위한 CPU가 액세스 가능한 메모리인 staging buffer 이고 다른 하나는 .. 더보기
Vertex buffer creation 이전 글 : Vertex input description다음 글 : Staging buffer Vertex buffer creation 버텍스 버퍼 생성 Introduction Vulkan의 버퍼는 그래픽 카드에서 읽을 수 있는 임의의 데이터를 저장하는 데 사용되는 메모리 영역입니다. 이것들은 정점 데이터를 저장하는 데 사용할 수 있습니다.이 장에서는 앞으로 다룰 다른 많은 목적으로 사용할 수 있습니다. 지금까지 다루어 왔던 Vulkan 객체와 달리 버퍼는 자동으로 메모리를 할당하지 않습니다. 이전 장들의 설명에서 Vulkan API는 프로그래머가 거의 모든 것을 제어 할 수 있다는 것을 보여 주었고 메모리 관리는 이러한 것들 중 하나입니다. Buffer creation 새 함수를 createVertex.. 더보기
Vertex input description 이전 글 : Swap chain recreation다음 글 : Vertex buffer creation Vertex input description 정점 입력 설명Introduction 다음 몇 장에서는 버텍스 쉐이더자체에 하드 코드 된 버텍스 데이터를 메모리의 버텍스 버퍼로 대체 할 것입니다. CPU 가 버퍼를 생성하고 memcpy를 사용하여 정점 데이터를 직접 복사하는 가장 쉬운 방법부터 시작하여 스테이징 버퍼를 사용하여 고성능 메모리로 정점 데이터를 복사하는 방법을 살펴 보겠습니다. Vertex shader 먼저 셰이더 코드 자체에 버텍스 데이터를 포함하지 않도록 버텍스 셰이더를 변경하십시오. 버텍스 쉐이더는 in 키워드를 사용하여 버텍스 버퍼로부터 입력을받습니다. #version 450 #exte.. 더보기
Swap chain recreation 이전 글 : Drawing - Rendering and presentation다음 글 : Vertex input description Swap chain recreation 스왑 체인 레크리에이션Introduction 우리는 이제 삼각형을 성공적으로 그렸지만 아직 제대로 처리하지 못하는 상황이 있습니다. 스왑 체인이 더 이상 서피스에 호환되지 않을때가 있습니다. 이 문제를 일으킬 수 있는 이유 중 하나는 창 크기가 변하는 것입니다. 우리는 이러한 사건이 발생하면 스왑 체인을 다시 만들어야 합니다. Recreating the swap chain 스왑 체인 다시 만들기 createSwapChain을 호출하는 새로운 recreateSwapChain 함수를 만들고 스왑 체인이나 창 크기에 의존하는 객체의 모든 .. 더보기
Drawing - Rendering and presentation 이전 글 : Drawing - Command buffers 다음 글 : Swap chain recreation Rendering and presentation 렌더링과 프리젠테이션Setup 이번에는 앞에서 설명한 모든 것이 함께 조립될 것 입니다.. 삼각형을 화면에 올리기 위해 메인 루프에서 호출 할 drawFrame 함수를 작성합니다. 함수를 만들고 mainLoop에서 호출하십시오. void mainLoop() { while (!glfwWindowShouldClose(window)) { glfwPollEvents(); drawFrame(); } } ... void drawFrame() { } Synchronization동기화 drawFrame 함수는 다음 작업을 수행합니다. 스왑 체인에서 이미지를 가져.. 더보기
Drawing - Command buffers 이전 글 : Drawing - Framebuffers다음 글 : Drawing - Rendering and presentation Drawing - Command buffers 커멘드 버퍼, 명령 버퍼Vulkan의 명령은 그리기 작업 및 메모리 전송과 마찬 가지로 함수 호출을 사용하여 직접 실행하지 않습니다. 명령 버퍼 객체에서 수행 하려는 모든 작업을 기록 해야합니다. 이것의 장점은 미리 그리기 명령을 설정하는 모든 작업이 사전에 그리고 여러 스레드에서 수행 될 수 있다는 것입니다. 그 후에 Vulkan에게 메인 루프에서 명령을 실행하도록 명령하면 됩니다. Command pools 명령 버퍼를 만들기 전에 명령 풀을 만들어야합니다. 명령 풀은 버퍼를 저장하는 데 사용되는 메모리를 관리하며 각 명령 버퍼.. 더보기