해결된 질문
24.03.27 16:53 작성
·
127
0
vertex shader의
out vec4 vColor 값이
fragment shader의
in vec4 vColor 로 어떻게 매칭이 되는건지 좀 궁금합니다.
일단 제가 추측한바로는
두개다 변수명이 vColor 같기 때문에 매칭이된다.
선언된 순서에 따라
vertex shader 에서 out vColor 이 0번 varying register에 등록이 되고,
fragment shader에서 in vColor 이 0번 varying register에 등록이 되어서 매칭이 된다.
이렇게 가정할 수 있을것 같은데, 2번 같은 경우는 이전 설명에서 GPU에서 대부분 순서대로 할당하지만, 임의로 할당할 수 있다고 하였고, 또한 layout 같은 키워드도 있어서 순서 보장이 안될 것 같아서 변수명으로 매칭되는 1번이지 않을까 싶은데, 제가 이해한게 맞는지 궁금합니다.
그리고 추가 질문으로 fragment shader의 out으로 FragColor를 지정하게 되어서 여기에서 지정된 컬러가 FrameBuffer에 씌여진다고 하셨는데, fragment shader의 out이 그림상에는 1개밖에 없는데, 여러개 지정가능하다고, 얼핏 강의에서 들은것 같은데, 관련된 부분은 추후 강의에서 확인이 가능한지 궁금합니다.
그리고 만약 여러개 지정이 가능하면 첫번째 out만 무조건 FrameBuffer에 씌여지는건지도 궁금합니다.
감사합니다.
답변 1
1
2024. 03. 28. 21:26
안녕하세요.
출장 관계로, 답변이 늦었습니다. ^^;;
우선, shader 변수들은 변수명으로 서로 link 됩니다.
컴파일러에서, vertex shader 의 out 에 있는 변수 이름과, fragment shader 의 in 에 있는 변수 이름이 일치하면 서로 연결 시키게 됩니다.
역으로, 서로 연결되는 변수 이름이 없다면, warning 이나, error 메시지를 출력해 줍니다.
fragment shader 의 out 은 사실 draw buffer 의 설정에 따라서 달라지는데,
OpenGL draw buffer 의 최초 설정은 framebuffer 의 RGBA 값으로 출력하게 되어 있어서,
out vec4 fragColor 라고 하면, 그 값이 그대로 연결되는 것입니다.
draw buffer 의 설정을 변경할 수 있어서, 그런 경우에는 여러 개의 RGBA 값을 출력하거나, depth 값을 출력하게 하는 것도 가능합니다.
다만, 이런 부분은 상당히 고급 기법이 되어서,
OpenGL 강의의 8번 이나 9번에서 다룰 계획이었고, 지금은 7번까지 제공되고 있습니다.
추가 강의를 제작하게 되면, 해당 내용이 들어갈 것 같습니다.
감사합니다.