diff options
author | Drew DeVault <sir@cmpwn.com> | 2018-04-13 09:32:41 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-13 09:32:41 -0400 |
commit | 63763d327969a17af43ccaf8fe4c6da941f8efcb (patch) | |
tree | 719a97d6bc8c35803091a11a8c7c9adb44d83a9c | |
parent | bcf5da5cd7ea61679309c871e52468b335f57cb5 (diff) | |
parent | 1b802d92511dad4edcb6d1a0f3506a7646fe714b (diff) |
Merge pull request #862 from emersion/renderer-scissor-upside-down
Make wlr_renderer_scissor take normal coords instead of upside-down ones
-rw-r--r-- | include/render/gles2.h | 2 | ||||
-rw-r--r-- | render/gles2/renderer.c | 14 | ||||
-rw-r--r-- | rootston/output.c | 5 | ||||
-rw-r--r-- | types/wlr_output.c | 5 |
4 files changed, 17 insertions, 9 deletions
diff --git a/include/render/gles2.h b/include/render/gles2.h index 50252027..792f1b40 100644 --- a/include/render/gles2.h +++ b/include/render/gles2.h @@ -38,6 +38,8 @@ struct wlr_gles2_renderer { GLuint tex_rgbx; GLuint tex_ext; } shaders; + + uint32_t viewport_width, viewport_height; }; enum wlr_gles2_texture_type { diff --git a/render/gles2/renderer.c b/render/gles2/renderer.c index 297ac886..97401010 100644 --- a/render/gles2/renderer.c +++ b/render/gles2/renderer.c @@ -31,11 +31,14 @@ static struct wlr_gles2_renderer *gles2_get_renderer_in_context( static void gles2_begin(struct wlr_renderer *wlr_renderer, uint32_t width, uint32_t height) { - gles2_get_renderer_in_context(wlr_renderer); + struct wlr_gles2_renderer *renderer = + gles2_get_renderer_in_context(wlr_renderer); GLES2_DEBUG_PUSH; glViewport(0, 0, width, height); + renderer->viewport_width = width; + renderer->viewport_height = height; // enable transparency glEnable(GL_BLEND); @@ -64,11 +67,16 @@ static void gles2_clear(struct wlr_renderer *wlr_renderer, static void gles2_scissor(struct wlr_renderer *wlr_renderer, struct wlr_box *box) { - gles2_get_renderer_in_context(wlr_renderer); + struct wlr_gles2_renderer *renderer = + gles2_get_renderer_in_context(wlr_renderer); GLES2_DEBUG_PUSH; if (box != NULL) { - glScissor(box->x, box->y, box->width, box->height); + struct wlr_box gl_box; + wlr_box_transform(box, WL_OUTPUT_TRANSFORM_FLIPPED_180, + renderer->viewport_width, renderer->viewport_height, &gl_box); + + glScissor(gl_box.x, gl_box.y, gl_box.width, gl_box.height); glEnable(GL_SCISSOR_TEST); } else { glDisable(GL_SCISSOR_TEST); diff --git a/rootston/output.c b/rootston/output.c index 6babca24..75bbd928 100644 --- a/rootston/output.c +++ b/rootston/output.c @@ -177,9 +177,8 @@ static void scissor_output(struct roots_output *output, pixman_box32_t *rect) { wlr_output_transformed_resolution(output->wlr_output, &ow, &oh); // Scissor is in renderer coordinates, ie. upside down - enum wl_output_transform transform = wlr_output_transform_compose( - wlr_output_transform_invert(wlr_output->transform), - WL_OUTPUT_TRANSFORM_FLIPPED_180); + enum wl_output_transform transform = + wlr_output_transform_invert(wlr_output->transform); wlr_box_transform(&box, transform, ow, oh, &box); wlr_renderer_scissor(renderer, &box); diff --git a/types/wlr_output.c b/types/wlr_output.c index 22353ab3..d8b026b7 100644 --- a/types/wlr_output.c +++ b/types/wlr_output.c @@ -339,9 +339,8 @@ static void output_scissor(struct wlr_output *output, pixman_box32_t *rect) { wlr_output_transformed_resolution(output, &ow, &oh); // Scissor is in renderer coordinates, ie. upside down - enum wl_output_transform transform = wlr_output_transform_compose( - wlr_output_transform_invert(output->transform), - WL_OUTPUT_TRANSFORM_FLIPPED_180); + enum wl_output_transform transform = + wlr_output_transform_invert(output->transform); wlr_box_transform(&box, transform, ow, oh, &box); wlr_renderer_scissor(renderer, &box); |