diff options
author | Drew DeVault <sir@cmpwn.com> | 2017-06-23 11:46:03 -0400 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2017-06-23 11:46:09 -0400 |
commit | f252c5a79214a3d3cd7ab3f239050b234e4ae9e2 (patch) | |
tree | 9b8dfdac066005f16edf219448cac42cea77bedc /render/gles2 | |
parent | b18209c904f421f3065d610718d7d9e9b8b9211f (diff) |
Manually transpose matricies in shader
Since GLES2 doesn't do this for us, it seems, on all platforms.
Diffstat (limited to 'render/gles2')
-rw-r--r-- | render/gles2/renderer.c | 2 | ||||
-rw-r--r-- | render/gles2/shaders.c | 32 |
2 files changed, 31 insertions, 3 deletions
diff --git a/render/gles2/renderer.c b/render/gles2/renderer.c index 07647f2f..623f378e 100644 --- a/render/gles2/renderer.c +++ b/render/gles2/renderer.c @@ -142,7 +142,7 @@ static bool wlr_gles2_render_surface(struct wlr_renderer_state *state, } gles2_flush_errors(); wlr_surface_bind(surface); - GL_CALL(glUniformMatrix4fv(0, 1, GL_TRUE, *matrix)); + GL_CALL(glUniformMatrix4fv(0, 1, GL_FALSE, *matrix)); draw_quad(); return true; } diff --git a/render/gles2/shaders.c b/render/gles2/shaders.c index 850c0618..62712230 100644 --- a/render/gles2/shaders.c +++ b/render/gles2/shaders.c @@ -9,8 +9,22 @@ const GLchar quad_vertex_src[] = "attribute vec2 texcoord;" "varying vec4 v_color;" "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() {" -" gl_Position = proj * vec4(pos, 0.0, 1.0);" +" gl_Position = transpose(proj) * vec4(pos, 0.0, 1.0);" " v_color = color;" " v_texcoord = texcoord;" "}"; @@ -41,8 +55,22 @@ const GLchar vertex_src[] = "attribute vec2 pos;" "attribute vec2 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() {" -" gl_Position = proj * vec4(pos, 0.0, 1.0);" +" gl_Position = transpose(proj) * vec4(pos, 0.0, 1.0);" " v_texcoord = texcoord;" "}"; |