이전 포스팅인 Buffer 따라서 Texture도 리팩토링 하려고 작업을 시작했는데


Texture는 Buffer랑 다르게 너무 엮인 리소스(Framebuffer)가 있기도 하고 텍스쳐 리팩토링 하는 김에 할 작업(Sampler 분리, TextureView 분리)이 꽤 많아서 시간이 걸릴 것 같다. 사실 어떻게 고칠지 아직 잘 모르겠음
해보고 안되면 이전 커밋으로 되돌릴 것이다.
대신 새로운 기능 구현한 부분을 기록할건데 RenderGraph 클래스를 만들어봤다.

AI랑 대화하다가 갑자기 렌더그래프이야기를 하길래 이런거라고 해서 만들었다.
일단은 기본적으로 동작만 하게 구현한 상태임
장점은
1. 렌더패스간의 종속성을 정해줄 수 있음
(예를 들면 DeferredLighting 결과를 적용하려면 gBuffer렌더링이 필수적으로 먼저 결과를 만들어 놔야 한다던가
뭐 이런 경우에 DeferredLighting은 반드시 gBuffer 렌더링 이후에 실행되도록 만들 수 있음)
2. 사용하지 않는 렌더패스는 알아서 제외시키기
3. 그리고 Vulkan, DX12에서 사용자를 괴롭히던 Barrier를 통한 상태전이를 편하게 처리할 수 있다고 한다.
보니까 안 쓸 이유가 없는거 같아서 바로 도입했다.
지금은 아직 렌더 패스간의 실행순서를 정렬하는 기능만 구현했다.
근데 구현하면서 알게된건데 여기서 위상정렬 알고리즘을 사용해서 정렬을 구현하더라
https://blog.encrypted.gg/1020
[실전 알고리즘] 0x1A강 - 위상 정렬
안녕하세요, 이번 시간에는 위상 정렬을 다뤄보도록 하겠습니다. 위상 정렬이 무엇인지도 소개해드릴거고 구현과 연습 문제도 다룰 예정입니다. 위상 정렬의 본격적인 정의를 배워보기 전에 실
blog.encrypted.gg
위상정렬에 대해서는 킹갓독 블로그에 가면 아주아주 쉽게 이해할 수 있다. 이제 백준이 없어져서 문제는 풀어볼 수 없게 되버렸다.

아무튼 그래프 생성은 완전 탐색을 이용해서 writer노드가 렌더링하는 리소스들에 중에서
reader노드가 읽어야 할 리소스가 포함된다면
reader노드는 writer에 의존적이므로 indegree를 추가해주고
writer->reader로 가는 간선을 추가해준다.

이제 그래프를 완성했으면 이런식으로 위상정렬을 해주면 된다.

정렬된 순서로 실행만 해주면 끝난다.
2. 사용하지 않는 렌더패스는 알아서 제외시키기
3. 그리고 Vulkan, DX12에서 사용자를 괴롭히던 Barrier를 통한 상태전이를 편하게 처리할 수 있다고 한다.
Q. 2,3번 기능은 어디갔나요?
일단 텍스쳐 리팩토링이 끝나고 나서 추가로 작성할 것
'개인 공부 및 프로젝트 > Daydream Engine' 카테고리의 다른 글
| 자체 게임엔진 DevLog - Texture Class 리팩토링 (0) | 2026.05.20 |
|---|---|
| 자체 게임엔진 DevLog - 디버깅 자체가 뻗어버리는 문제 (0) | 2026.05.05 |
| 자체 게임엔진 DevLog - 버퍼 클래스 구조 수정 (0) | 2026.04.29 |
| 자체 게임엔진 DevLog - 크기조절 문제 해결 (0) | 2026.04.27 |
| 자체 게임엔진 DevLog - OpenGL 렌더링 스레드 (0) | 2026.04.21 |