WebGl Uniforms возвращаемое значение - PullRequest
0 голосов
/ 05 декабря 2010

Я пытаюсь создать простое 3D-приложение в WebGl, в котором каждый нарисованный объект имеет свой собственный шейдер.Но у меня есть странная проблема в Firefox (в Chrome это работает отлично), когда единообразное расположение для каждой матрицы / сэмплера в каждом шейдере не сохраняется должным образом.Это означает, что я должен вызывать getUniformLocation для каждой матрицы, которую использует мой шейдер каждый раз, когда я меняю текущий шейдер, что мне кажется немного расточительным.

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 хранится и корректно изменяется, потому что прямо над этими строками кода я сохраняю каждое местоположение атрибута аналогичным образом, который не нужно сбрасывать при каждом изменении «текущего шейдера»..

Как я уже сказал, это работает не только в Firefox, что заставляет меня верить, что Firefox и Chrome хранят одно и то же местоположение по-разному.Кто-нибудь знает другой способ хранения этих значений, чтобы он работал в обоих браузерах, не требуя «повторного получения» их для каждого кадра?

1 Ответ

2 голосов
/ 05 декабря 2010

Я решил проблему.Оказывается, это была не проблема самой функции, а тот факт, что при переключении на новый шейдер я всегда связывал его, а не связывал шейдер только при создании.

...