优化GLSL中2D的模型 - 视图转换

时间:2011-03-27 13:48:52

标签: opengl glsl shader vertex-shader

因此,转换顶点然后传递给GLSL中的片段着色器的标准方法是这样的:

uniform mat4 u_modelview;
attribute vec4 a_position;

void main() {
    gl_Position = u_modelview * a_position;
}

但是,我正在使用2D,因此4x4矩阵中存在冗余。我这样做会更有效率吗?

uniform mat3 u_modelview;
attribute vec3 a_position;

void main() {
    gl_Position = vec4(u_modelview * a_position, 1.0);
}

gl_Position需要一个4分量向量,因此输出时需要额外的操作。然而矩阵乘法是9个元素而不是16个。我可以做得更好吗?

2 个答案:

答案 0 :(得分:4)

我认为图形硬件在相同的时间内使用3x3和4x4矩阵进行转换。在转换顶点的过程中,您是否有成熟的瓶颈?通常减速出现在片段着色器,而不是顶点

答案 1 :(得分:1)

这取决于。如果每个顶点都有复杂的信息并且它是你的瓶颈,那么如果你减少每顶点数据,你会看到一些速度增加。

最好的方法是设置测试并以两种方式进行测量。