invert Y for scissor
authorBrian <brian.paul@tungstengraphics.com>
Fri, 10 Aug 2007 22:24:55 +0000 (16:24 -0600)
committerBrian <brian.paul@tungstengraphics.com>
Fri, 10 Aug 2007 22:24:55 +0000 (16:24 -0600)
src/mesa/state_tracker/st_atom_scissor.c

index 05a9f3eed1804423674ac76ef51b0418bc78fb20..2bf633828e1a7f234f5cd03fde5d5cb046f5e722 100644 (file)
@@ -44,6 +44,7 @@ update_scissor( struct st_context *st )
 {
    struct pipe_scissor_state scissor;
    const struct gl_framebuffer *fb = st->ctx->DrawBuffer;
+   GLint miny, maxy;
 
    scissor.minx = 0;
    scissor.miny = 0;
@@ -66,6 +67,13 @@ update_scissor( struct st_context *st )
          scissor.minx = scissor.miny = scissor.maxx = scissor.maxy = 0;
    }
 
+   /* Now invert Y.  Pipe drivers use the convention Y=0=top for surfaces
+    */
+   miny = fb->Height - scissor.maxy;
+   maxy = fb->Height - scissor.miny;
+   scissor.miny = miny;
+   scissor.maxy = maxy;
+
    if (memcmp(&scissor, &st->state.scissor, sizeof(scissor)) != 0) {
       /* state has changed */
       st->state.scissor = scissor;  /* struct copy */