在OpenGL ES 2.0 GLSL中转置mat4

che*_*ica 6 opengl-es glsl ipad ios opengl-es-2.0

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

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

那么,transposeiOS 6设备上的着色器中有mat4 选项吗?

另一件事:问题

iPhone中使用了什么版本的GLSL?

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

Jeb*_*Jeb 13

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

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;
}
Run Code Online (Sandbox Code Playgroud)