From 5e2587920ab276788c2f32414277207cbaaa8402 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 24 Nov 2017 00:16:37 +0530 Subject: [PATCH] Call glViewport in the render loop Ensure FBOs have correct viewport --- kitty/gl.h | 1 - kitty/shaders.c | 4 ++++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/kitty/gl.h b/kitty/gl.h index b68c4c683..1ba0821bb 100644 --- a/kitty/gl.h +++ b/kitty/gl.h @@ -64,7 +64,6 @@ gl_init() { void update_surface_size(int w, int h, GLuint offscreen_texture_id) { - glViewport(0, 0, w, h); if (offscreen_texture_id) { glBindTexture(GL_TEXTURE_2D, offscreen_texture_id); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); diff --git a/kitty/shaders.c b/kitty/shaders.c index 081617d9d..35867931e 100644 --- a/kitty/shaders.c +++ b/kitty/shaders.c @@ -326,9 +326,11 @@ draw_cells_interleaved(ssize_t vao_idx, ssize_t gvao_idx, Screen *screen, OSWind glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); } + glBindTexture(GL_TEXTURE_2D, 0); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, offscreen_framebuffer); glFramebufferTexture(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, os_window->offscreen_texture_id, 0); /* if (glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) fatal("offscreen framebuffer not complete"); */ + glViewport(0, 0, os_window->viewport_width, os_window->viewport_height); bind_program(CELL_BG_PROGRAM); glDrawArraysInstanced(GL_TRIANGLE_FAN, 0, 4, screen->lines * screen->columns); @@ -347,6 +349,7 @@ draw_cells_interleaved(ssize_t vao_idx, ssize_t gvao_idx, Screen *screen, OSWind glDisable(GL_BLEND); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); + glViewport(0, 0, os_window->viewport_width, os_window->viewport_height); // Now render the framebuffer to the screen reversing alpha pre-multiplication glEnable(GL_SCISSOR_TEST); @@ -374,6 +377,7 @@ draw_cells(ssize_t vao_idx, ssize_t gvao_idx, GLfloat xstart, GLfloat ystart, GL (GLsizei)(ceilf(SCALE(height, h / 2.0f))) ); #undef SCALE + glViewport(0, 0, os_window->viewport_width, os_window->viewport_height); static bool cell_constants_set = false; if (!cell_constants_set) { bind_program(CELL_PROGRAM);