2012-02-06 2 views
5

이것은 Switch shader program in WebGL과 관련이 있지만 질문을 다시하고 싶습니다. 이제는 문제에 대해 명확하게 알고 싶습니다.glUseProgram 후에 손실/재설정되는 상태는 무엇입니까?

다른 쉐이더 프로그램들 사이를 전환하려고하는데 같은 렌더링에서 쉐이더 프로그램을 바꿀 때 제대로 렌더링되지 않는 것처럼 보입니다. glUseProgram()을 호출 한 후 상태가 손실되거나 재설정 된 것 같습니다.

통화 후 어떤 상태가 손실되었거나 재설정 되었습니까? 즉, glUseProgram() 이후에 다시 바인딩해야하는 것은 무엇입니까?

답변

0

다른 프로그램에서 정점 배열과 정점 속성 배열의 위치가 다른 경우 (예 : this.locATex) 텍스처 바인딩 및 샘플러 제복과 같은 문제가 발생할 수 있습니다. 각각의 프로그램에 대해 개별적으로 초기화해야하는 속성 위치와 '텍스처 단위 유니폼'을 쿼리하고 그리기 전에 배열과 텍스처를 바인딩해야합니다. '상대방의 바인딩'은 조각 데이터 위치와 같이 중단 될 수도 있습니다. 그러나 나는 새로운 문제가 발명되기 전에 더 많은 코드를 제공해야한다고 제안한다.

+1

조언을 주셔서 감사합니다.하지만 더 일반적인 조언을 원했지만 다시 유니폼을 착용해야합니까, 아니면 자신의 가치를 유지해야합니까? 속성 또는 균일 한 위치가 주어진 프로그램에 대한 가치를 지속합니까? 텍스처링을 다시 활성화해야합니까? 등등. – AshleysBrain

+0

프로그램이 링크 된 후 Attrib 위치와 실제 균일 한 위치 및 값이 유지됩니다. 유니폼 버퍼는 더 많은 프로그램에 바인딩 될 수 있습니다. 고정 기능 파이프 라인을 사용하고 있지 않으므로 텍스처를 다시 활성화 할 필요가 없습니다. – Sam

+0

텍스처 유닛에는 여러 개의 부착 점이 있습니다. 예를 들어 2D 및 3D 텍스처를 바인딩하고 적절한 샘플러 유니폼을 사용하여이 중 하나에 액세스 할 수 있습니다. – Sam

관련 문제