diff --git a/cogl/cogl-draw-buffer.c b/cogl/cogl-draw-buffer.c index 83ad3e313..2a7b75784 100644 --- a/cogl/cogl-draw-buffer.c +++ b/cogl/cogl-draw-buffer.c @@ -567,11 +567,18 @@ _cogl_draw_buffer_flush_state (CoglHandle handle, if (ctx->dirty_gl_viewport) { + int gl_viewport_y; + /* Convert the Cogl viewport y offset to an OpenGL viewport y offset - * (NB: OpenGL defines its window and viewport origins to be bottom - * left, while Cogl defines them to be top left.) */ - int gl_viewport_y = draw_buffer->height - - (draw_buffer->viewport_y + draw_buffer->viewport_height); + * NB: OpenGL defines its window and viewport origins to be bottom + * left, while Cogl defines them to be top left. + * NB: We render upside down to offscreen draw buffers so we don't + * need to convert the y offset in this case. */ + if (cogl_is_offscreen (draw_buffer)) + gl_viewport_y = draw_buffer->viewport_y; + else + gl_viewport_y = draw_buffer->height - + (draw_buffer->viewport_y + draw_buffer->viewport_height); GE (glViewport (draw_buffer->viewport_x, gl_viewport_y,