2016-05-14 2 views
0

У нас есть несколько различных шейдеров opengles2.0, каждый из которых использует разные формы. Мы используем glGetUniformLocation, чтобы получить позицию для записи данных для каждой униформы. Однако это означает, что при переключении программ шейдеров, а иногда, например, мы пишем операторскую матрицу в одно место, иногда в другое, все в зависимости от того, какие формы определены для этого шейдера. Это означает, что мы не можем легко сократить избыточные равномерные заказы шейдеров, проверив, изменилось ли значение для загрузки, так как нам может потребоваться перезагрузить его, чтобы перезаписать значение, написанное другим шейдером для другой формы.glGetUniformLocation, возвращающее то же значение для всех программ

В то время как я знаю, что можно было бы включить ту же форму в каждой программе шейдеров, независимо от того, используются они или нет, будет ли glGetUniformLocation возвращать ту же позицию назад для каждой программы? Или, например, может ли шейдер-компилятор удалить неописанную униформу и собрать все остальное, заставляя каждый шейдер иметь свою униформу в разных местах. Это для IOS и Android.

Благодаря

Shaun

ответ

1

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

И да, OpenGL может удалить неиспользованную униформу или иным образом перестроить их, даже если у вас были одни и те же единицы в каждом блоке компиляции.

+0

OK, поэтому если одна программа вернет местоположение «10» из glGetUnifiormLocation для чего-то, и я напишу там значение float «99», то я переключусь на другую программу, которая вернула местоположение «10» для чего-то еще, и я пишу «88» в это место, используя вторую программу, тогда «99» все равно будет установлен для исходной программы, если я вернусь? т. е. являются ли они уникальными местоположениями или являются общими? – user3162134

+0

Да, 99 будет по-прежнему для вашей первой программы, когда вы переключаетесь назад. – Columbo

Смежные вопросы