편집 : 스택 오버플로의 질문과 중복됩니다. https://stackoverflow.com/questions/9222217/how-does-the-fragment-shader-know-what-variable-to-use-for-the-color-of-a-pixel

정점 셰이더에서 조각 셰이더로 값을 보내려면 정점 셰이더가 하나의 변수를 out로 선언해야하며 조각 셰이더는 다른 변수를 다음과 같이 선언해야합니다. in 및 두 변수의 이름과 유형이 동일해야합니다. 그러나 이것은 조각 셰이더에서 색상 값을 보내려고 할 때 발생하지 않습니다. 실제로 원하는대로 출력 변수를 호출 할 수 있습니다. 이유는 무엇입니까? 이전 버전에는 gl_FragColor
프로그램이 출력 조각 변수를 gl_FragColor와 어떻게 연결합니까?

Comments

답변

정점 셰이더 입력과 거의 똑같은 방식으로 작동합니다.

정점 셰이더에는 입력이 있습니다. 이러한 입력은 및

등. 어떤 입력이 어떤 속성에서 가져 오는지 설정합니다. GLSL 3.30에서는 다음 구문을 사용합니다.

layout(location = 2) in color; 

이것은 color 버텍스 셰이더 입력을 속성에서 가져 오도록 설정합니다. 위치 2. 3.30 이전 (또는 ARB_explicit_attrib_location없이) 이전에 glBindAttrbLocation 를 사용하여이를 명시 적으로 설정해야합니다. glGetAttribLocation 를 사용하여 프로그램에 속성 색인을 연결하거나 쿼리합니다. 속성 위치를 명시 적으로 제공하지 않으면 GLSL은 임의로 위치를 할당합니다 (예 : 구현 정의 방식).

셰이더에서 설정하는 것은 거의 항상 더 나은 옵션입니다.

어쨌든 조각 셰이더 출력은 거의 동일한 방식으로 작동합니다. 조각 셰이더는 다중 출력 색상 에 쓸 수 있습니다. 그 자체가 프레임 버퍼의 여러 버퍼 에 매핑됩니다. 따라서 어떤 출력이 어떤 조각 출력 색상으로 이동하는지 표시해야합니다.

이것은 프로세스는 조각 출력 위치 값으로 시작합니다. 정점 셰이더 입력 위치와 매우 유사하게 설정됩니다.

layout(location = 1) out secColor; 

API 함수도 있습니다. glBindFragDataLocation glGetFragDataLocation glBindAttribLocationglGetAttribLocation와 유사합니다.

명시적인 지원을 수행하지 않는 경우 gnments, 구현은 일반적으로 위치 0에 출력 변수 중 하나를 할당합니다. 그러나 OpenGL 표준은이 동작을 요구 하지 않으므로 이에 의존해서는 안됩니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다