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 169ebe486ee97452e66f5a0e02e78995829bc7b5..e3bada4888b0fec843ceb0649647339f59f5c876 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 27df900115f9efc69dc5fbbf5313e801597b2fb3..c480767bd332c0249a0a0e7c30db81822a6ad5c1 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 f7f143447f45d521e532c41d88abe7eafba62b52..2730fa61569602034f95cb5eef515120cfd5a499 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 ce4d12f749fc1c0202e33184543c6761de820ca2..a0e789c3871c9055aafba9fda8073c97c447c288 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 d7338ce5f7b7ef36249f5531aae1cb168c9d3f45..e37ecf5afadfb704b3c4a9dad19078b168f66e38 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 2e986c9f28615b19facee1531e02ba191ba11475..bc3e20e93e7b97a635a25ad56df1825409877b5a 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 eefc964889c5ccd80292946b88ab7ac18edea421..f5bbd127c28130abb3b993b385b53cf115dcfb04 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;
 }