Reputation: 14465
I'd like to transpose a matrix in my OpenGL ES 2.0 vertex shader, but apparently my iPad 3 doesn't support GLSL #version 120
, which is needed for the built-in function transpose(mat4)
.
I know there are options to work around that, like transposing the matrix on the CPU before passing it to the graphics chip, but it would make my shader a lot simpler if I could transpose it there.
So, is there an option to transpose
a mat4 in a shader on an iOS 6 device?
Another thing: The question
What version of GLSL is used in the iPhone(s)?
says that OpenGL ES 2.0 uses GLSL 1.20. So why doesn't #version 120
work on the iPad 3?
Upvotes: 7
Views: 10225
Reputation: 421
Have you tried just transposing it yourself? Is it a performance problem? If not, I would try it because it's something the optimizer should handle and it will take two minutes. Something like:
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;
}
Upvotes: 14
Reputation: 383
As the answer to What version of GLSL is used in the iPhone(s)? correctly states, iOS supports OpenGL ES 2.0 with its companion shading language: ESSL 1.0. ESSL 1.0 is based on, but not identical to GLSL 1.20.
There is no built-in transpose function in ESSL 1.0, so you'll need to implement your own.
Upvotes: 4