* Inherit gl_context so we always have access to it
* Thanks curro for the idea.
* Last Haiku cannidate for 10.0.0
---
 src/mesa/drivers/haiku/swrast/SoftwareRast.cpp |   56 +++++++++++-------------
 src/mesa/drivers/haiku/swrast/SoftwareRast.h   |    3 +-
 2 files changed, 27 insertions(+), 32 deletions(-)

diff --git a/src/mesa/drivers/haiku/swrast/SoftwareRast.cpp 
b/src/mesa/drivers/haiku/swrast/SoftwareRast.cpp
index 52e8e5e..dbd8e72 100644
--- a/src/mesa/drivers/haiku/swrast/SoftwareRast.cpp
+++ b/src/mesa/drivers/haiku/swrast/SoftwareRast.cpp
@@ -72,7 +72,6 @@ MesaSoftwareRast::MesaSoftwareRast(BGLView* view, ulong 
options,
        fDirectModeEnabled(false),
        fInfo(NULL),
        fInfoLocker("info locker"),
-       fContext(NULL),
        fVisual(NULL),
        fFrameBuffer(NULL),
        fFrontRenderBuffer(NULL),
@@ -114,34 +113,33 @@ MesaSoftwareRast::MesaSoftwareRast(BGLView* view, ulong 
options,
        functions.Flush = _Flush;
 
        // create core context
-       fContext = _mesa_create_context(API_OPENGL_COMPAT, fVisual, NULL,
+       // We inherit gl_context to this class
+       _mesa_initialize_context(this, API_OPENGL_COMPAT, fVisual, NULL,
                &functions);
 
-       if (!fContext) {
+       if (!this) {
                ERROR("%s: Failed to create Mesa context!\n", __func__);
                _mesa_destroy_visual(fVisual);
                return;
        }
 
-       fContext->DriverCtx = (void*)this;
-
        /* Initialize the software rasterizer and helper modules. */
-       _swrast_CreateContext(fContext);
-       _vbo_CreateContext(fContext);
-       _tnl_CreateContext(fContext);
-       _swsetup_CreateContext(fContext);
-       _swsetup_Wakeup(fContext);
+       _swrast_CreateContext(this);
+       _vbo_CreateContext(this);
+       _tnl_CreateContext(this);
+       _swsetup_CreateContext(this);
+       _swsetup_Wakeup(this);
 
        // Use default TCL pipeline
-       TNL_CONTEXT(fContext)->Driver.RunPipeline = _tnl_run_pipeline;
+       TNL_CONTEXT(this)->Driver.RunPipeline = _tnl_run_pipeline;
 
-       _mesa_meta_init(fContext);
-       _mesa_enable_sw_extensions(fContext);
+       _mesa_meta_init(this);
+       _mesa_enable_sw_extensions(this);
 
-       _mesa_compute_version(fContext);
+       _mesa_compute_version(this);
 
-       _mesa_initialize_dispatch_tables(fContext);
-       _mesa_initialize_vbo_vtxfmt(fContext);
+       _mesa_initialize_dispatch_tables(this);
+       _mesa_initialize_vbo_vtxfmt(this);
 
        // create core framebuffer
        fFrameBuffer = _mesa_create_framebuffer(fVisual);
@@ -199,13 +197,13 @@ MesaSoftwareRast::MesaSoftwareRast(BGLView* view, ulong 
options,
 MesaSoftwareRast::~MesaSoftwareRast()
 {
        CALLED();
-       _swsetup_DestroyContext(fContext);
-       _swrast_DestroyContext(fContext);
-       _tnl_DestroyContext(fContext);
-       _vbo_DestroyContext(fContext);
+       _swsetup_DestroyContext(this);
+       _swrast_DestroyContext(this);
+       _tnl_DestroyContext(this);
+       _vbo_DestroyContext(this);
        _mesa_destroy_visual(fVisual);
        _mesa_destroy_framebuffer(fFrameBuffer);
-       _mesa_destroy_context(fContext);
+       _mesa_destroy_context(this);
 
        free(fInfo);
        free(fFrameBuffer);
@@ -220,7 +218,7 @@ MesaSoftwareRast::LockGL()
        CALLED();
        BGLRenderer::LockGL();
 
-       _mesa_make_current(fContext, fFrameBuffer, fFrameBuffer);
+       _mesa_make_current(this, fFrameBuffer, fFrameBuffer);
 
        color_space colorSpace = BScreen(GLView()->Window()).ColorSpace();
 
@@ -250,7 +248,7 @@ void
 MesaSoftwareRast::UnlockGL()
 {
        CALLED();
-       _mesa_make_current(fContext, NULL, NULL);
+       _mesa_make_current(this, NULL, NULL);
        BGLRenderer::UnlockGL();
 }
 
@@ -264,7 +262,7 @@ MesaSoftwareRast::SwapBuffers(bool VSync)
                return;
 
        if (fVisual->doubleBufferMode)
-               _mesa_notifySwapBuffers(fContext);
+               _mesa_notifySwapBuffers(this);
 
        if (!fDirectModeEnabled || fInfo == NULL) {
                if (GLView()->LockLooperWithTimeout(1000) == B_OK) {
@@ -416,7 +414,7 @@ MesaSoftwareRast::_CheckResize(GLuint newWidth, GLuint 
newHeight)
                return;
        }
 
-       _mesa_resize_framebuffer(fContext, fFrameBuffer, newWidth, newHeight);
+       _mesa_resize_framebuffer(this, fFrameBuffer, newWidth, newHeight);
        fHeight = newHeight;
        fWidth = newWidth;
 
@@ -546,17 +544,15 @@ void
 MesaSoftwareRast::_Flush(gl_context* ctx)
 {
        CALLED();
-       // TODO: We may want to add the void* DriverCtx back into mtypes.h for
-       // gl_context someday...
-       #if 0
-       MesaSoftwareRast* driverContext = (MesaSoftwareRast*)ctx->DriverCtx;
+       MesaSoftwareRast* driverContext = static_cast<MesaSoftwareRast*>(ctx);
+
+       //MesaSoftwareRast* driverContext = (MesaSoftwareRast*)ctx->DriverCtx;
        if ((driverContext->fOptions & BGL_DOUBLE) == 0) {
                // TODO: SwapBuffers() can call _CopyToDirect(), which should
                // be always called with with the BGLView drawlocked.
                // This is not always the case if called from here.
                driverContext->SwapBuffers();
        }
-       #endif
 }
 
 
diff --git a/src/mesa/drivers/haiku/swrast/SoftwareRast.h 
b/src/mesa/drivers/haiku/swrast/SoftwareRast.h
index 8ef8493..8f0f018 100644
--- a/src/mesa/drivers/haiku/swrast/SoftwareRast.h
+++ b/src/mesa/drivers/haiku/swrast/SoftwareRast.h
@@ -24,7 +24,7 @@ extern "C" {
 }
 
 
-class MesaSoftwareRast : public BGLRenderer {
+class MesaSoftwareRast : public BGLRenderer, public gl_context {
 public:
                                                        
MesaSoftwareRast(BGLView* view,
                                                                ulong 
bgl_options,
@@ -79,7 +79,6 @@ private:
                        BLocker                 fInfoLocker;
                        ulong                   fOptions;
 
-                       gl_context*             fContext;
                        gl_config*              fVisual;
 
                        struct gl_framebuffer* fFrameBuffer;
-- 
1.7.9.5

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to