Mesa (master): st: if st_swapbuffers() is called for single-buffered visual don't crash
Brian Paul
brianp at kemper.freedesktop.org
Fri May 1 22:44:59 UTC 2009
Module: Mesa
Branch: master
Commit: 602833b107cdf3d70117dbd0970c7d574fb55f3b
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=602833b107cdf3d70117dbd0970c7d574fb55f3b
Author: Brian Paul <brianp at vmware.com>
Date: Fri May 1 16:44:04 2009 -0600
st: if st_swapbuffers() is called for single-buffered visual don't crash
Furthermore, return pointer(s) to the front color buffer(s).
---
src/mesa/state_tracker/st_framebuffer.c | 20 +++++++++++++++++++-
1 files changed, 19 insertions(+), 1 deletions(-)
diff --git a/src/mesa/state_tracker/st_framebuffer.c b/src/mesa/state_tracker/st_framebuffer.c
index 639373f..ef80029 100644
--- a/src/mesa/state_tracker/st_framebuffer.c
+++ b/src/mesa/state_tracker/st_framebuffer.c
@@ -297,7 +297,10 @@ st_notify_swapbuffers(struct st_framebuffer *stfb)
* Swap the front/back color buffers. Exchange the front/back pointers
* and update some derived state.
* No need to call st_notify_swapbuffers() first.
- * This is effectively a no-op for single-buffered framebuffers.
+ *
+ * For a single-buffered framebuffer, no swap occurs, but we still return
+ * the pointer(s) to the front color buffer(s).
+ *
* \param front_left returns pointer to front-left renderbuffer after swap
* \param front_right returns pointer to front-right renderbuffer after swap
*/
@@ -318,6 +321,21 @@ st_swapbuffers(struct st_framebuffer *stfb,
NULL );
}
+ if (!fb->Visual.doubleBufferMode) {
+ /* single buffer mode - return pointers to front surfaces */
+ if (front_left) {
+ struct st_renderbuffer *strb =
+ st_renderbuffer(fb->Attachment[BUFFER_FRONT_LEFT].Renderbuffer);
+ *front_left = strb->surface;
+ }
+ if (front_right) {
+ struct st_renderbuffer *strb =
+ st_renderbuffer(fb->Attachment[BUFFER_FRONT_RIGHT].Renderbuffer);
+ *front_right = strb ? strb->surface : NULL;
+ }
+ return;
+ }
+
/* swap left buffers */
if (fb->Attachment[BUFFER_FRONT_LEFT].Renderbuffer &&
fb->Attachment[BUFFER_BACK_LEFT].Renderbuffer) {
More information about the mesa-commit
mailing list