在OpenGL ES 2.0 GLSL中转置mat4

时间:2013-08-03 16:01:28

标签: ios ipad opengl-es opengl-es-2.0 glsl

我想在我的OpenGL ES 2.0顶点着色器中转置矩阵,但显然我的iPad 3不支持GLSL #version 120,这是内置函数transpose(mat4)所需要的。

我知道可以选择解决这个问题,例如在将矩阵传递到图形芯片之前将其转换到CPU上,但是如果我可以将它转置到那里,它会使我的着色器变得更加简单。

那么,iOS 6设备上的着色器中是否有transpose mat4选项?

另一件事:问题

What version of GLSL is used in the iPhone(s)?

说OpenGL ES 2.0使用GLSL 1.20。那么为什么#version 120不能在iPad 3上运行呢?

2 个答案:

答案 0 :(得分:12)

您是否尝试过自行调换?这是性能问题吗?如果没有,我会尝试它,因为它是优化器应该处理的东西,它将花费两分钟。类似的东西:

highp mat4 transpose(in highp mat4 inMatrix) {
    highp vec4 i0 = inMatrix[0];
    highp vec4 i1 = inMatrix[1];
    highp vec4 i2 = inMatrix[2];
    highp vec4 i3 = inMatrix[3];

    highp mat4 outMatrix = mat4(
                 vec4(i0.x, i1.x, i2.x, i3.x),
                 vec4(i0.y, i1.y, i2.y, i3.y),
                 vec4(i0.z, i1.z, i2.z, i3.z),
                 vec4(i0.w, i1.w, i2.w, i3.w)
                 );

    return outMatrix;
}

答案 1 :(得分:4)

正如What version of GLSL is used in the iPhone(s)?正确陈述的答案,iOS支持OpenGL ES 2.0及其伴随着色语言:ESSL 1.0。 ESSL 1.0基于但不完全相同于GLSL 1.20。

ESSL 1.0中没有内置转置功能,因此您需要实现自己的转置功能。<​​/ p>