본문 바로가기

분류 전체보기73

9. Pipeline and Pipeline State Vulkan 그래픽 파이프라인은 OpenGL과 동일 합니다.차이점은 그래픽 파이프라인의 모든 단계를 개발자가 명시적으로 설정 해야합니다. 파이프라인을 생성하고 바인딩 하면 파이프라인을 사용할수 있습니다. Vulkan 렌더링 오버뷰는 다음과 같습니다. 파이프라인은 입력 데이터가 흘러가는 일련의 고정된 스테이지를 의미합니다.위 그림 " 노랑색 영역 Grpahic Pipeline " 에 대해서 좀 더 자세히 보면 아래와 같습니다. 좌측에 해당하는 영역의 빨강색에 해당하는 영역은 "프로그램 스테이지" 라고 칭하며좌측에 해당하는 나머지지 영역은 "고정 기능 스테이지" 라고 합니다.프로그램 스테이지는 셰이더 프로그래밍 영역이라고 보면되고 고정 기능 스테이지의 경우 그외 나머지 입니다.이 둘의 가장 큰 차이는 프로그.. 2024. 7. 8.
8. Vertex Buffer and Memory 이전 챕터 [ SPIR-V ] 에서 GLSL 셰이더를 SPIR-V로 변환하고 셰이더 모듈을 만들었다. 이번 챕터 "Vulkan Buffer & Memory " 에서는셰이더 모듈에 정점 데이터를 넘겨주는 부분을 구현할 예정이다. OpenGL에서는 glsl 셰이더를 개발할때 정점을 VertexBuffer에 담아서 전달했다. 이때 사용하는 함수가 " glVertexAttribPointer " 입니다.드라이버에서 버텍스버퍼에 해당하는 size 만큼 알아서 메모리도 만들어주고 메모리의 접근하는 방법도 설정해주었다. 하지만Vulkan에서는 메모리를 할당하는 부분, 메모리 접근 하는 부분, 버퍼와 바인딩하는 부분전부 사용자가 구현해야 한다.임의의 데이터를 저장할수 있는 메모리 영역인 VkBuffer를 생성해보자. 1.. 2024. 7. 5.
7. SPIR-V SPIR는 Standard Portable Immediate Representation의 약어 이며,SPIR-V는 SPIR로 부터 파생 되었다. SPIR-V가 Vulkan과 OpenCL을 지원하면서 벤더 들은 드라이버 개발과 최적화에 집중을 할 수 있게 되었다. 사람이 읽을수 있는 코드 형식으로 된 OpenGL의 셰이딩 언어와는 달리 Vulkan은 하위 계층의 이진 중간 표현 (IR) 언어인SPIR-V만을 사용한다. SPIR의 좌측을 보면GLSL, HLSL, OpenCL 컴포넌트를 빌드하기 위해서는 DXC, Clang, LLVM 같은 컴파일러가 필요하다.다양한 언어들이 각 각의 컴파일러 필요 없이 하나의 포맷인 SPIR-V로 컴파일하여, 우측의 언어에서 사용할수 있게 한다. SPIR-V 장점은 다음과 같.. 2024. 7. 4.
6. RenderPass 렌더 패스는 하나 이상의 서브패스와 첨부로 구성 되어있습니다.렌더 패스의 목적은 프레임 버퍼의 메모리 접근을 최적화 합니다. 서브패스는 여러 종류의 첨부에 컬러, 뎁스 렌더링을 합니다.그리고 첨부를 읽어서 스왑체인 이미지에 최종 결과물을 렌더링 합니다.서브 패스는 프레임 버퍼와 연결 되어있으며,  연결된 첨부를 읽고 씁니다.                                                               은  2개의 서브패스와 2개의 첨부로 이루어져 있습니다.첫 번째 서브 패스는 인덱스 1> 컬러 첨부에 렌더링을 하고,인덱스 2> 뎁스 첨부에 렌더링을 합니다.두번째 서브패스는 첫 번째의 결과물을 읽고, 스왑체인 이미지 인덱스 0번 이미지에 렌더링을 합니다. 그럼 우리는 첨부.. 2024. 7. 1.