aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/render/gles2.h2
-rw-r--r--render/gles2/renderer.c14
-rw-r--r--rootston/output.c5
-rw-r--r--types/wlr_output.c5
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);