From 280e43b1f79c0f645241c318090deb1125940047 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Sat, 1 Nov 2008 15:07:38 +0000 Subject: [PATCH] maintain our own copy of direct_buffer_info as it can change without notice fixed bug #3001 git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28430 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../MesaSoftwareRenderer.cpp | 17 +++++++++++++++-- .../MesaSoftwareRenderer.h | 3 ++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.cpp b/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.cpp index 88835ea236..2fa36c8d7e 100644 --- a/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.cpp +++ b/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.cpp @@ -17,6 +17,7 @@ #include "MesaSoftwareRenderer.h" +#include #include #include @@ -203,6 +204,7 @@ MesaSoftwareRenderer::MesaSoftwareRenderer(BGLView* view, ulong options, fBitmap(NULL), fDirectModeEnabled(false), fInfo(NULL), + fInfoLocker("info locker"), fContext(NULL), fVisual(NULL), fFrameBuffer(NULL), @@ -324,6 +326,7 @@ MesaSoftwareRenderer::LockGL() BRect b = GLView()->Bounds(); color_space cs = B_RGBA32; + if (fDirectModeEnabled && fInfo != NULL) { cs = BScreen(GLView()->Window()).ColorSpace(); } @@ -436,6 +439,7 @@ MesaSoftwareRenderer::SwapBuffers(bool VSync) GLView()->DrawBitmap(fBitmap); GLView()->UnlockLooper(); } else { + BAutolock lock(fInfoLocker); uint8 bytesPerPixel = fInfo->bits_per_pixel / 8; uint32 bytesPerRow = fBitmap->BytesPerRow(); for (uint32 i = 0; i < fInfo->clip_list_count; i++) { @@ -555,8 +559,17 @@ MesaSoftwareRenderer::EnableDirectMode(bool enabled) void MesaSoftwareRenderer::DirectConnected(direct_buffer_info *info) -{ - fInfo = info; +{ + BAutolock lock(fInfoLocker); + if (info) { + if (!fInfo) + fInfo = new direct_buffer_info(); + memcpy(fInfo, info, sizeof(*info)); + } else if (fInfo) { + delete fInfo; + fInfo = NULL; + } + } diff --git a/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.h b/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.h index ca82d02205..963e4ed38d 100644 --- a/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.h +++ b/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.h @@ -61,7 +61,8 @@ private: BBitmap* fBitmap; bool fDirectModeEnabled; - direct_buffer_info* fInfo; + direct_buffer_info* fInfo; + BLocker fInfoLocker; GLcontext* fContext; GLvisual* fVisual;