added driFlipRenderbuffers()
authorBrian Paul <brian.paul@tungstengraphics.com>
Thu, 1 Sep 2005 20:11:32 +0000 (20:11 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Thu, 1 Sep 2005 20:11:32 +0000 (20:11 +0000)
src/mesa/drivers/dri/common/drirenderbuffer.c
src/mesa/drivers/dri/common/drirenderbuffer.h

index 201ce44950283e33e4d3f124fbaceca84208e3cb..45c81e293c62bc1cfb1edd42940d4d20d5ca34fc 100644 (file)
@@ -100,3 +100,35 @@ driNewRenderbuffer(GLenum format, GLint cpp, GLint offset, GLint pitch)
    }
    return drb;
 }
+
+
+/**
+ * Update the front and back renderbuffers' flippedPitch/Offset fields.
+ * This is used when we do double buffering via page flipping.
+ */
+void
+driFlipRenderbuffers(struct gl_framebuffer *fb, GLenum flipped)
+{
+   driRenderbuffer *front_drb
+      = (driRenderbuffer *) fb->Attachment[BUFFER_FRONT_LEFT].Renderbuffer;
+   driRenderbuffer *back_drb
+      = (driRenderbuffer *) fb->Attachment[BUFFER_BACK_LEFT].Renderbuffer;
+
+   /* If this fails, it means we're trying to do page flipping for a
+    * single-buffered window!
+    */
+   assert(back_drb);
+
+   if (flipped) {
+      front_drb->flippedOffset = back_drb->offset;
+      front_drb->flippedPitch  = back_drb->pitch;
+      back_drb->flippedOffset  = front_drb->offset;
+      back_drb->flippedPitch   = front_drb->pitch;
+   }
+   else {
+      front_drb->flippedOffset = front_drb->offset;
+      front_drb->flippedPitch  = front_drb->pitch;
+      back_drb->flippedOffset  = back_drb->offset;
+      back_drb->flippedPitch   = back_drb->pitch;
+   }
+}
index b2b6fea12cda9bec1ea251ec6a2f136f73cac07f..67affa06e15f942160dea56d40cfed0eb79473f5 100644 (file)
@@ -46,8 +46,10 @@ typedef struct {
 } driRenderbuffer;
 
 
-driRenderbuffer *
+extern driRenderbuffer *
 driNewRenderbuffer(GLenum format, GLint cpp, GLint offset, GLint pitch);
 
+extern void
+driFlipRenderbuffers(struct gl_framebuffer *fb, GLenum flipped);
 
 #endif /* DRIRENDERBUFFER_H */