我想在我的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上运行呢?
答案 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>