Например, мой вершинный шейдер:
...
attribute vec2 uTexCoord;
uniform float a, b, c;
out vec2 texCoord;
...
void main() {
...
texCoord = uTexCoord * a * b * c;
...
}
И мой фрагментный шейдер:
...
in vec2 texCoord;
uniform vec4 color;
layout(location = 0) out vec4 fragColor;
...
void main() {
...
fragColor = color;
}
Какие переменные будут сочтены ненужными и будут удалены?
Или лучше использовать #ifdef
для исключения таких участков кода?
@ Rabbid76 т.е. наличие таких неиспользуемых переменных не повлияет на дальнейшую производительность?
Этот вопрос связан с OpenGL или Vulkan? В OpenGL код GLSL компилируется и связывается драйвером, поэтому он зависит от драйвера. Но с современным оборудованием и драйверами это, вероятно, не повлияет на производительность.
По моему опыту, да, драйвер удалит неиспользуемые переменные а также, вы должны знать об этом, потому что glGetAttribLocation ("uTexCoord") вернет -1.
Большинство драйверов во время компоновки будут анализировать шейдер и инициализировать дескриптор униформ, не используемых в -1, это действительно повысит производительность, поскольку эти переменные будут удалены из кода.
Униформа
a
,b
,c
и атрибутuTexCoord