Manually transpose matricies in shader

Since GLES2 doesn't do this for us, it seems, on all platforms.
This commit is contained in:
Drew DeVault 2017-06-23 11:46:03 -04:00
parent b18209c904
commit f252c5a792
2 changed files with 31 additions and 3 deletions

View file

@ -142,7 +142,7 @@ static bool wlr_gles2_render_surface(struct wlr_renderer_state *state,
} }
gles2_flush_errors(); gles2_flush_errors();
wlr_surface_bind(surface); wlr_surface_bind(surface);
GL_CALL(glUniformMatrix4fv(0, 1, GL_TRUE, *matrix)); GL_CALL(glUniformMatrix4fv(0, 1, GL_FALSE, *matrix));
draw_quad(); draw_quad();
return true; return true;
} }

View file

@ -9,8 +9,22 @@ const GLchar quad_vertex_src[] =
"attribute vec2 texcoord;" "attribute vec2 texcoord;"
"varying vec4 v_color;" "varying vec4 v_color;"
"varying vec2 v_texcoord;" "varying vec2 v_texcoord;"
"mat4 transpose(in mat4 inMatrix) {"
" vec4 i0 = inMatrix[0];"
" vec4 i1 = inMatrix[1];"
" vec4 i2 = inMatrix[2];"
" vec4 i3 = inMatrix[3];"
" 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;"
"}"
"void main() {" "void main() {"
" gl_Position = proj * vec4(pos, 0.0, 1.0);" " gl_Position = transpose(proj) * vec4(pos, 0.0, 1.0);"
" v_color = color;" " v_color = color;"
" v_texcoord = texcoord;" " v_texcoord = texcoord;"
"}"; "}";
@ -41,8 +55,22 @@ const GLchar vertex_src[] =
"attribute vec2 pos;" "attribute vec2 pos;"
"attribute vec2 texcoord;" "attribute vec2 texcoord;"
"varying vec2 v_texcoord;" "varying vec2 v_texcoord;"
"mat4 transpose(in mat4 inMatrix) {"
" vec4 i0 = inMatrix[0];"
" vec4 i1 = inMatrix[1];"
" vec4 i2 = inMatrix[2];"
" vec4 i3 = inMatrix[3];"
" 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;"
"}"
"void main() {" "void main() {"
" gl_Position = proj * vec4(pos, 0.0, 1.0);" " gl_Position = transpose(proj) * vec4(pos, 0.0, 1.0);"
" v_texcoord = texcoord;" " v_texcoord = texcoord;"
"}"; "}";