aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2017-06-23 11:46:03 -0400
committerDrew DeVault <sir@cmpwn.com>2017-06-23 11:46:09 -0400
commitf252c5a79214a3d3cd7ab3f239050b234e4ae9e2 (patch)
tree9b8dfdac066005f16edf219448cac42cea77bedc
parentb18209c904f421f3065d610718d7d9e9b8b9211f (diff)
Manually transpose matricies in shader
Since GLES2 doesn't do this for us, it seems, on all platforms.
-rw-r--r--render/gles2/renderer.c2
-rw-r--r--render/gles2/shaders.c32
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;"
"}";