2013-01-14 2 views
0

glGetActiveUniformBlockGL_UNIFORM_BLOCK_BINDING으로 반환됩니다. 지정된 균일 블록이 바인딩 인덱스에 바인딩되지 않았습니까? http://www.opengl.org/sdk/docs/man4/xhtml/glGetActiveUniformBlock.xml 메시지 :GL_UNIFORM_BLOCK_BINDING 블록이 인덱스에 바인딩되지 않은 경우

이전에 균일 한 블록이 지정되지 않은 경우, 0이 리턴됩니다.

언 바운드 블록에 대해 0이 반환된다는 것을 의미합니까? 그렇다면 프로그램 연결 후 모든 unifrom 블록이 기본적으로 제로 인덱스에 바인딩된다는 의미입니까? 다시 말하지만 그렇다면 특정 블록이 0에 바인딩되었는지 또는 어떤 인덱스에도 바인딩되지 않았는지 어떻게 알 수 있습니까?

답변

0

처음 두 질문에 '그렇습니다.

다시 예를 들어, 지정된 블록이 0에 바인딩되어 있는지 또는 어떤 인덱스에도 바인딩되지 않았는지 어떻게 알 수 있습니까?

그렇지 않습니다. 그럼 다시, 무슨 목적이 있겠습니까? 코드 나 셰이더에서 설정해야합니다. 두 경우 모두 설정했기 때문에 설정 한 내용을 알 수 있습니다. 사용자에게 바인딩을 지정하도록 요청하는 쉐이더 도구를 작성하지 않는 한 중요하지 않아야합니다.

그런 도구를 쓰고 있다면 모든 바인딩이 무엇인지 사용자에게 보여주기 만하면됩니다. 여러 개의 균일 한 블록이 동일한 색인을 사용하면 사용자가 충돌을 해결할 때까지 (또는 실제로 원하는대로되었는지) 확인하는 것이 불법입니다.

+0

물론 무엇이 설정되었는지는 알지만 코드의 다른 부분에서'GL_UNIFORM_BLOCK_BINDING'을 요청합니다. 따라서 이러한 요청의 특수한 오류 상태는 잘못된 호출을 감지하고 테스트를 좀 더 쉽게 할 수 있습니다. – Sergey

+0

@ Sergey : 코드에 혼란이 있음을 알 수 있습니다. 개인적으로, 나는 이런 종류의 것들에 대한 간단한 컨벤션을 구축하는 것이 좋습니다. 한 종류의 블록은 항상 인덱스 0을 사용합니다 (예 : 모든 렌더링 쉐이더에서 공유되는 투영 행렬). 인덱스 1은 다른 것으로 이동합니다 (예 : 모델 - 투 - 뷰 변환). 인덱스 2는 조명 파라미터가있는 곳일 수 있습니다. 기타 등등. 또는 다른 말로 표현하면, 물어 보지 않도록 설정하십시오. 당신이'glGet *'을 사용하고있을 때쯤 나는 그것을 보게 될 것입니다. –

관련 문제