diff options
author | Scott Anderson <ascent12@hotmail.com> | 2017-06-07 16:43:57 +1200 |
---|---|---|
committer | Scott Anderson <ascent12@hotmail.com> | 2017-06-07 16:43:57 +1200 |
commit | 53dd622263cb2b952a148463cfb046ba084d57ac (patch) | |
tree | 5a6e746a8d5e89929cd4f603045a6d2799ce5113 /example/rotation.c | |
parent | 6f5c70ac690dcb8981d160a9480f27f6bef7494c (diff) |
Provide user with transformation matrix
Diffstat (limited to 'example/rotation.c')
-rw-r--r-- | example/rotation.c | 56 |
1 files changed, 10 insertions, 46 deletions
diff --git a/example/rotation.c b/example/rotation.c index 90b0ab9b..d19af224 100644 --- a/example/rotation.c +++ b/example/rotation.c @@ -16,13 +16,13 @@ static const GLchar vert_src[] = "#version 310 es\n" "precision mediump float;\n" -"layout(location = 0) uniform mat2 transform;\n" +"layout(location = 0) uniform mat4 transform;\n" "layout(location = 0) in vec2 pos;\n" "layout(location = 1) in float angle;\n" "out float v_angle;\n" "void main() {\n" " v_angle = angle;\n" -" gl_Position = vec4(transform * pos, 0.0, 1.0);\n" +" gl_Position = transform * vec4(pos, 0.0, 1.0);\n" "}\n"; static const GLchar frag_src[] = @@ -38,41 +38,6 @@ static const GLchar frag_src[] = " 1.0);\n" "}\n"; -static const GLfloat transforms[][4] = { - [WL_OUTPUT_TRANSFORM_NORMAL] = { - 1.0f, 0.0f, - 0.0f, 1.0f, - }, - [WL_OUTPUT_TRANSFORM_90] = { - 0.0f, -1.0f, - 1.0f, 0.0f, - }, - [WL_OUTPUT_TRANSFORM_180] = { - -1.0f, 0.0f, - 0.0f, -1.0f, - }, - [WL_OUTPUT_TRANSFORM_270] = { - 0.0f, 1.0f, - -1.0f, 0.0f, - }, - [WL_OUTPUT_TRANSFORM_FLIPPED] = { - -1.0f, 0.0f, - 0.0f, 1.0f, - }, - [WL_OUTPUT_TRANSFORM_FLIPPED_90] = { - 0.0f, 1.0f, - 1.0f, 0.0f, - }, - [WL_OUTPUT_TRANSFORM_FLIPPED_180] = { - 1.0f, 0.0f, - 0.0f, -1.0f, - }, - [WL_OUTPUT_TRANSFORM_FLIPPED_270] = { - 0.0f, -1.0f, - -1.0f, 0.0f, - }, -}; - struct state { float angle; struct timespec last_frame; @@ -172,8 +137,8 @@ static void output_frame(struct wl_listener *listener, void *data) { struct output_state *ostate = wl_container_of(listener, ostate, frame); struct state *s = ostate->state; - float width = ostate->output->width; - float height = ostate->output->height; + int32_t width = ostate->output->width; + int32_t height = ostate->output->height; glViewport(0, 0, width, height); // All of the odd numbered transformations involve a 90 or 270 degree rotation @@ -183,14 +148,13 @@ static void output_frame(struct wl_listener *listener, void *data) { height = tmp; } - // Single pixel in gl coordinates - float px_w = 2.0f / width; - float px_h = 2.0f / height; + int32_t mid_w = width / 2; + int32_t mid_h = height / 2; GLfloat vert_data[] = { - -250 * px_w, -250 * px_h, s->angle, - 0 * px_w, +250 * px_h, s->angle + 2.0944f, // 120 deg - +250 * px_w, -250 * px_h, s->angle + 4.18879f, // 240 deg + mid_w - 200, mid_h - 200, s->angle, + mid_w, mid_h + 200, s->angle + M_PI * 2.0f / 3.0f, // 120 deg + mid_w + 200, mid_h - 200, s->angle + M_PI * 4.0f / 3.0f, // 240 deg }; glUseProgram(s->gl.prog); @@ -199,7 +163,7 @@ static void output_frame(struct wl_listener *listener, void *data) { glBindBuffer(GL_ARRAY_BUFFER, s->gl.vbo); glBufferData(GL_ARRAY_BUFFER, sizeof(vert_data), vert_data, GL_STATIC_DRAW); - glUniformMatrix2fv(0, 1, GL_FALSE, transforms[ostate->output->transform]); + glUniformMatrix4fv(0, 1, GL_TRUE, ostate->output->transform_matrix); glClearColor(0.0, 0.0, 0.0, 1.0); glClear(GL_COLOR_BUFFER_BIT); |