【发布时间】:2015-02-11 11:00:55
【问题描述】:
使用 GLSL,我将执行光照计算、纹理和各种操作;但它在哪个着色器中完成有什么区别吗?例如,在顶点着色器而不是片段着色器中执行光照计算是否有性能优势?我只需要将最终结果传递给片段着色器并将其添加到片段颜色中。反之亦然吗?
我的下一个问题是关于顶点属性和制服:
顶点属性是否对任何着色器程序中的所有着色器都是全局的?例如,假设我们有:
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(vertices), (GLvoid*)0);
如果我在顶点着色器中声明:
layout (location = 0) in vec3 VertexPosition;
我也可以在片段着色器中做同样的事情吗?我也可以在属于第二个着色器程序的顶点着色器中执行相同的操作吗?
关于制服,我是否可以在该着色器程序的所有着色器中使用制服,只要我声明它们?
uniform mat4 modelMatrix; // In the vertex shader
uniform mat4 modelMatrix; // In the fragment shader
我的最后一个问题是,所有顶点属性是否应该在整个主程序中保持一致? 如,如果我将顶点属性 0 分配为 VertexPosition,那么我不能再将该属性分配给其他东西,例如作为VertexNormal,对吗?除非我使用以下命令禁用顶点属性数组,否则只会发生这种情况:
glDisableVertexAttribArray(0);
【问题讨论】:
标签: c++ opengl graphics opengl-es glsl