문제

GLSL 1.40 사양 읽기 :

조각 출력은 플로트, 플로팅 포인트 벡터, 서명 또는 서명되지 않은 정수 또는 정수 벡터 또는 이들의 배열 일 수 있습니다. 매트릭스와 구조는 출력 할 수 없습니다. 조각 출력은 다음 예에서와 같이 선언됩니다.

vec4 fragmentColor; uint 광도;

조각 색상은 GL_FRAGCOLOR를 쓰는 것으로 정의되어 있습니다 ... 맞습니까? 누군가 이러한 출력에 대한 내 아이디어를 제거 할 수 있습니까? 조각 색상을 결정하기 위해 예제의 'FragmentColor'만 쓸 수 있습니까? 다시 읽을 수 있습니다 (예를 들어 '광도').

도움이 되었습니까?

해결책

예제에는 2 개의 출력이 있습니다. 그들은 GLSL 프로그램 링크 후에 관련된 해당 FBO 슬롯을 가지고 있습니다. 사용 사용을 리디렉션 할 수 있습니다 glBindFragDataLocation.

셰이더를 활성화하고 FBO를 활성화 한 후에는 모두가 설정 한 드로우 마스크에 따라 다릅니다. glDrawBuffers. 예를 들어, 지나간 경우 GL_COLOR_ATTACHMENT0 그리고 GL_COLOR_ATTACHMENT2 이는 출력 인덱스 0이 첨부 파일 0으로 이동하고 출력 인덱스 1이 색상 첨부 파일 2로 이동 함을 의미합니다.

다른 팁

글로벌 출력 변수 GL_FRAGCOLOR는 GLSL 버전 120 이후에도 더 이상 사용되지 않습니다. 이제 예에서와 같이 이름을 직접 제공하고 직접 입력해야합니다. 여러 출력과 관련 하여이 링크는 매핑에 대한 정보를 제공합니다. http://www.opengl.org/wiki/glsl_objects#program_linking

(그리고 나는 그 링크를 찾았습니다. http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&number=270999 )

도움이 되었기를 바랍니다! :디

오프! Kvark가 관련 정보를 주었다는 것을 알았습니다. 어쨌든, 아마도 당신도 내 텍스트에서 무언가를 얻었을 것입니다.

몇 가지 예를 제시하고 싶습니다.

void add(in float a, in float b, out float c)
{
    //you can not use c here. only set value
    //changing values of a and b does not change anything.
    c = a + b;
}

void getColor(out float r, out float g, out float b)
{
   //you can not use r, g, b here. only set value
   r = gl_FragColor.r;
   g = gl_FragColor.g;
   b = gl_FragColor.b;
}

void amplify(inout vec4 pixelColor, in value)
{
   //inout is like a reference
   pixelColor = pixelColor * value;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top