2010-12-04 3 views
0

WebGl에서 간단한 3D 응용 프로그램을 만들려고합니다. 그 안에는 그려진 모든 객체에 자체 셰이더가 연결되어 있습니다. 하지만 각 셰이더의 각 행렬/샘플러에 대한 균일 한 위치가 제대로 저장되지 않는 Firefox (Chrome의 경우 완벽하게 작동합니다)의 이상한 문제가 있습니다. 나는 현재 셰이더를 변경할 때마다 내 셰이더가 사용하는 모든 매트릭스에 대해 getUniformLocation을 호출해야한다는 것을 의미한다.WebGl 유니폼 반환 값

tmp.pMatrixUniform = this.gl.getUniformLocation(tmp, "uPMatrix"); //perpesctive 
tmp.mvMatrixUniform = this.gl.getUniformLocation(tmp, "uMVMatrix"); //world transform 
tmp.samplerUniform = this.gl.getUniformLocation(tmp, "uSampler"); //texture sampler 

return tmp; 

위의 코드는 셰이더를 만들고 여러 객체에 사용하기 위해 저장하는 곳입니다. 나는 tmp 쉐이더 객체의 참조가 저장되고 올바르게 수정 되었기 때문에이 코드 라인 바로 위의 "모든 쉐이더"의 모든 변경에 대해 재설정 할 필요가없는 비슷한 방식으로 모든 속성 위치를 저장하기 때문에, .

내가 말했듯이, 파이어 폭스에서만 작동하지 않는다. 파이어 폭스와 크롬은 유니폼 위치를 다르게 저장한다고 생각하게 만든다. 누구든지이 값을 저장하는 다른 방법을 알고있어 두 브라우저 모두에서 작동하므로 각 프레임마다 "다시 가져올 필요가 없습니다"고 할 수 있습니까?

+0

검은 색으로 가기 전에 내 앱이 FF4의 단일 프레임 만 표시하는 문제를 발견 한 경우 놀랄 일이 아닙니다. –

답변

2

나는이 문제를 해결했다. 함수 자체에 문제가있는 것은 아니지만 새로운 쉐이더로 전환 할 때 쉐이더를 생성시에만 연결하는 대신 항상 링크한다고 설명했습니다.