티스토리 뷰

Game/Graphics

GLSL include handling

newpolaris 2018. 2. 15. 11:22

귀찮은 작업이다

검색하면 #include 파싱해서 소스 넣어라 하는 글이 나온다

https://www.opengl.org/discussion_boards/showthread.php/169209-include-in-glsl

extension 통해 하는 방법

아래에 설명이 나온다

https://computergraphics.stackexchange.com/questions/100/sharing-code-between-multiple-glsl-shaders

https://www.g-truc.net/post-0267.html

실제 하는 법은

https://github.com/nvpro-samples/shared_sources/blob/master/nv_helpers_gl/GLSLProgram.cpp

glew를 통해 include 지원하는 지 체크

assert(GLEW_ARB_shading_language_include)

#include 가 있는 파일에 아래 구문 추가

#extension GL_ARB_shading_language_include : enable

glCompilerShader 대신

    glCompileShaderIncludeARB(shader, 1, incPaths, NULL);

incPaths 는 안타깝게 실제 path가 아닌 가상의 shader directory에 대한 pathes 들이다 저 path는 아래 구문을 통해 가상 path 랑 그 내용을 채워줘야한다

glNamedStringARB(GL_SHADER_INCLUDE_ARB, ...)

파싱하는 법

이식성, 디버깅 (extension 방법은 Nsight 미지원) 때문에 그냥 짜기도 한다

nv_helpers_gl/programmanager.cpp 이 #include 파싱하는 방법이긴 하나 아래 구문으로 굳이 등록하게 해두었다

progManager.registerInclude("common.h", "common.h");

#include 구문은 디버깅용으로 남기고 line 번호도 추가하므로 참고하면 될듯

저 코드의 original 은 https://github.com/g-truc/ogl-samples/blob/4.5.4/framework/compiler.hpp

shader compile이 argument로 path를 추가하도록 되어있다

binary 로 저장/로드/검사

https://github.com/g-truc/ogl-samples/blob/master/samples/gl-410-program-binary.cpp

'Game > Graphics' 카테고리의 다른 글

Framebuffer  (0) 2018.02.20
Area light  (0) 2018.02.19
OpenGL profiler  (0) 2018.02.14
Modernize OpenGL (DSA)  (0) 2018.02.14
IBL (7) Baking Light probe  (0) 2018.02.13
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크