여러 셰이더에서 기능 공유


10

간단한 질문 :

GLSL에는 여러 셰이더에서 함수를 공유하는 방법이 있습니까? 아니면 필요한 모든 셰이더에서 모든 함수를 정의해야합니까?

답변:


12

헤더 파일에서 일부 함수를 정의하고이를 셰이더에 #include 할 수 있습니다. C / C ++와는 약간 다릅니다. 셰이더에는 별도의 컴파일 및 연결에 대한 개념이 없기 때문에 프로토 타입뿐만 아니라 C / C ++와 비슷하기 때문에 함수 본문 을 헤더에 넣습니다. 헤더.


2
적어도 #include는 보편적으로 사용할 수없는 확장을 통한 경우를 제외하고 3.30까지 모든 GLSL 버전에서 실제로 지원되지 않습니다. 괜찮은 셰이더 프레임 워크는 언어를 확장하여이 기능을 제공해야합니다 (Cg 포함).
Sean Middleditch

7

#include를 사용할 수 없으면 glShaderSource의 인수를 사용하여 공유 항목을 지정합니다. 예:

char *sharedcode = "...shared code here...";
char *fs1 = "...fragment shader 1...";
char *fs2 = "...fragment shader 2...";

char *awesomeeffect1[] = {sharedcode, fs1};
char *awesomeeffect2[] = {sharedcode, fs2};

glShaderSource (shader1, 2, awesomeeffect1, NULL);
glShaderSource (shader2, 2, awesomeeffect2, NULL);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.