균일 한 버퍼 객체를 사용하여 다른 쉐이더 (예 : 고체 객체의 지연 전달 및 투명 객체의 지연 전달)에서 투영 매트릭스를 공유하려고합니다. 나중에 복잡성이 커지면 UBO에 더 많은 데이터를 추가 할 것입니다.OpenGL - glLinkProgram 이전 또는 이후의 glUniformBlockBinding?
명시 적으로 glLinkProgram()를 호출하기 전에 호출 glUniformBlockBinding()를 균일 한 블록의 바인딩을 제어하려면 : 내 문제는 레드 북 (Red Book) 말한다는 것이다.
그러나 online documentation 말한다 :
프로그램 객체 연결되거나 연동 다시, 활성 균일 블록들 각각에 할당되는 균일 버퍼 개체 결속 점은 제로로 리셋된다.
무엇이 누락 되었습니까? 연결 후 또는 후에 유니폼 블록을 바인딩해야합니까?
감사합니다.
그래서 나는 독특한 UBO를 작성하고 여러 쉐이더에서 사용하려는 가정 해 봅시다. 'glGetUniformBlockIndex'를 사용하여 각 블록 인덱스를 검색하고, 그 중 하나의 레이아웃을 사용하여'glBufferData'를 채워야합니다 ('shared'로 표시하면 같아야합니다) glUniformBlockBinding'을 호출하고 마지막으로 각 블록 인덱스에 대해 'glBindBufferBase'를 호출하여 모든 바인딩 포인터를 가리 킵니다. 그 맞습니까? –
거의. 'glBindbufferBase'는 바인딩 포인트를'GL_UNIFORM_BUFFER'에 매핑하기 때문에 모든 blockIndex에 대해 바인딩 포인트를 매핑 할 필요가 없습니다. 여기 예제를 참조하십시오. http://www.lighthouse3d.com/tutorials/glsl-core-tutorial/3490-2/ – dari
대단히 감사합니다. 이제 모든 것이 명확 해집니다. –