Remove DirectFBGL header from Mesa bacause since 1.0.0 DirectFB installs its own...
authorClaudio Ciccani <klan@users.sourceforge.net>
Fri, 1 Dec 2006 14:12:05 +0000 (14:12 +0000)
committerClaudio Ciccani <klan@users.sourceforge.net>
Fri, 1 Dec 2006 14:12:05 +0000 (14:12 +0000)
Updated to the current DirectFBGL interface (i.e. added GetProcAddress()).

docs/README.directfb
progs/directfb/df_gears.c
progs/directfb/df_morph3d.c
progs/directfb/df_reflect.c
src/glut/directfb/ext.c
src/glut/directfb/internal.h
src/mesa/drivers/directfb/idirectfbgl_mesa.c

index 169ebe4..e3bada4 100644 (file)
@@ -6,7 +6,7 @@ Requirements
 ============
 
   To build Mesa with DirectFB (DirectFBGL) support you need:
-     - DirectFB at least 0.9.21 (http://directfb.org)
+     - DirectFB at least 1.0.0 (http://directfb.org)
      - pkg-config at least 0.9 (http://pkgconfig.sf.net)
 
 
index 27df900..c480767 100644 (file)
@@ -27,9 +27,9 @@
 #include <math.h>
 
 #include <directfb.h>
+#include <directfbgl.h>
 
 #include <GL/gl.h>
-#include <GL/directfbgl.h>
 
 
 /* the super interface */
index f7f1434..2730fa6 100644 (file)
@@ -159,9 +159,9 @@ So the angle is:
 #include <unistd.h>
 
 #include <directfb.h>
+#include <directfbgl.h>
 
 #include <GL/gl.h>
-#include <GL/directfbgl.h>
 
 
 /* the super interface */
index ce4d12f..a0e789c 100644 (file)
@@ -27,9 +27,9 @@
 #include <math.h>
 
 #include <directfb.h>
+#include <directfbgl.h>
 
 #include <GL/glu.h>
-#include <GL/directfbgl.h>
 
 #include "util/showbuffer.c"
 #include "util/readtex.c"
index d7338ce..e37ecf5 100644 (file)
@@ -156,6 +156,13 @@ glutGetProcAddress( const char *name )
                return glut_functions[i].address;
      }
 
+#if DIRECTFBGL_INTERFACE_VERSION >= 1
+     if (g_current) {
+          void *address = NULL;
+          g_current->gl->GetProcAddress( g_current->gl, name, &address );
+          return address;
+     }
+#endif
      return NULL;
 }
 
index 2e986c9..bc3e20e 100644 (file)
@@ -26,8 +26,9 @@
 #include <directfb.h>
 #include <directfb_version.h>
 
+#include <directfbgl.h>
+
 #include "GL/glut.h"
-#include "GL/directfbgl.h"
 
 
 #define VERSION_CODE( M, m, r )  (((M) << 16) | ((m) << 8) | ((r)))
index eefc964..f5bbd12 100644 (file)
 
 #include <pthread.h>
 
-#include <direct/messages.h>
-#include <direct/interface.h>
-#include <direct/mem.h>
-
 #include <directfb.h>
 #include <directfb_version.h>
 
-#define VERSION_CODE( M, m, r )  (((M) * 1000) + ((m) * 100) + ((r)))
-#define DIRECTFB_VERSION_CODE    VERSION_CODE( DIRECTFB_MAJOR_VERSION, \
-                                               DIRECTFB_MINOR_VERSION, \
-                                               DIRECTFB_MICRO_VERSION )
-
+#include <directfbgl.h>
 
-#ifdef CLAMP
-# undef CLAMP
-#endif 
+#include <direct/mem.h>
+#include <direct/messages.h>
+#include <direct/interface.h>
 
-#include "GL/directfbgl.h"
+#undef CLAMP
 #include "glheader.h"
 #include "buffers.h"
 #include "context.h"
 #include "drivers/common/driverfuncs.h"
 
 
+#define VERSION_CODE( M, m, r )  (((M) * 1000) + ((m) * 100) + ((r)))
+#define DIRECTFB_VERSION_CODE    VERSION_CODE( DIRECTFB_MAJOR_VERSION, \
+                                               DIRECTFB_MINOR_VERSION, \
+                                               DIRECTFB_MICRO_VERSION )
+
+
 static DFBResult
 Probe( void *data );
 
@@ -79,7 +77,7 @@ DIRECT_INTERFACE_IMPLEMENTATION( IDirectFBGL, Mesa )
 typedef struct {
      int                     ref;       /* reference counter */
      
-     DFBBoolean              locked;
+     int                     locked;
      
      IDirectFBSurface       *surface;
      DFBSurfacePixelFormat   format;
@@ -189,8 +187,10 @@ IDirectFBGL_Mesa_Lock( IDirectFBGL *thiz )
      
      DIRECT_INTERFACE_GET_DATA( IDirectFBGL );
 
-     if (data->locked)
-          return DFB_LOCKED;
+     if (data->locked) {
+          data->locked++;
+          return DFB_OK;
+     }
 
      if (directfbgl_lock())
           return DFB_LOCKED;
@@ -202,6 +202,7 @@ IDirectFBGL_Mesa_Lock( IDirectFBGL *thiz )
                           (void*)&data->video.start, &data->video.pitch );
      if (ret) {
           D_ERROR( "DirectFBGL/Mesa: couldn't lock surface.\n" );
+          directfbgl_unlock();
           return ret;
      }
      data->video.end = data->video.start + (height-1) * data->video.pitch;
@@ -218,7 +219,7 @@ IDirectFBGL_Mesa_Lock( IDirectFBGL *thiz )
                                    &data->framebuffer, width, height);
      }
 
-     data->locked = DFB_TRUE;
+     data->locked++;
      
      return DFB_OK;
 }
@@ -230,14 +231,14 @@ IDirectFBGL_Mesa_Unlock( IDirectFBGL *thiz )
 
      if (!data->locked)
           return DFB_OK;
-
-     _mesa_make_current( NULL, NULL, NULL );
+          
+     if (--data->locked == 0) {
+          _mesa_make_current( NULL, NULL, NULL );
      
-     data->surface->Unlock( data->surface );
-
-     directfbgl_unlock();
+          data->surface->Unlock( data->surface );
 
-     data->locked = DFB_FALSE;
+          directfbgl_unlock();
+     }
      
      return DFB_OK;
 }
@@ -276,6 +277,26 @@ IDirectFBGL_Mesa_GetAttributes( IDirectFBGL     *thiz,
      return DFB_OK;
 }
 
+#if DIRECTFBGL_INTERFACE_VERSION >= 1
+static DFBResult
+IDirectFBGL_Mesa_GetProcAddress( IDirectFBGL  *thiz,
+                                 const char   *name,
+                                 void        **ret_address )
+{
+     DIRECT_INTERFACE_GET_DATA( IDirectFBGL );
+
+     if (!name)
+          return DFB_INVARG;
+          
+     if (!ret_address)
+          return DFB_INVARG;
+          
+     *ret_address = _glapi_get_proc_address( name );
+          
+     return (*ret_address) ? DFB_OK : DFB_UNSUPPORTED;
+}
+#endif
+
 
 /* exported symbols */
 
@@ -326,11 +347,14 @@ Construct( IDirectFBGL *thiz, IDirectFBSurface *surface )
      }
 
      /* Assign interface pointers. */
-     thiz->AddRef        = IDirectFBGL_Mesa_AddRef;
-     thiz->Release       = IDirectFBGL_Mesa_Release;
-     thiz->Lock          = IDirectFBGL_Mesa_Lock;
-     thiz->Unlock        = IDirectFBGL_Mesa_Unlock;
-     thiz->GetAttributes = IDirectFBGL_Mesa_GetAttributes;
+     thiz->AddRef         = IDirectFBGL_Mesa_AddRef;
+     thiz->Release        = IDirectFBGL_Mesa_Release;
+     thiz->Lock           = IDirectFBGL_Mesa_Lock;
+     thiz->Unlock         = IDirectFBGL_Mesa_Unlock;
+     thiz->GetAttributes  = IDirectFBGL_Mesa_GetAttributes;
+#if DIRECTFBGL_INTERFACE_VERSION >= 1
+     thiz->GetProcAddress = IDirectFBGL_Mesa_GetProcAddress;
+#endif 
 
      return DFB_OK;
 }