diff options
-rw-r--r-- | src/mesa/drivers/dri/common/drirenderbuffer.c | 32 | ||||
-rw-r--r-- | src/mesa/drivers/dri/common/drirenderbuffer.h | 4 |
2 files changed, 35 insertions, 1 deletions
diff --git a/src/mesa/drivers/dri/common/drirenderbuffer.c b/src/mesa/drivers/dri/common/drirenderbuffer.c index 201ce449502..45c81e293c6 100644 --- a/src/mesa/drivers/dri/common/drirenderbuffer.c +++ b/src/mesa/drivers/dri/common/drirenderbuffer.c @@ -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; + } +} diff --git a/src/mesa/drivers/dri/common/drirenderbuffer.h b/src/mesa/drivers/dri/common/drirenderbuffer.h index b2b6fea12cd..67affa06e15 100644 --- a/src/mesa/drivers/dri/common/drirenderbuffer.h +++ b/src/mesa/drivers/dri/common/drirenderbuffer.h @@ -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 */ |