OSDN Git Service

egl: Add macros to define typecast functions.
authorChia-I Wu <olvaffe@gmail.com>
Thu, 4 Feb 2010 04:52:15 +0000 (12:52 +0800)
committerChia-I Wu <olvaffe@gmail.com>
Thu, 4 Feb 2010 06:36:48 +0000 (14:36 +0800)
There are standard typecast functions that are common to most drivers.
They are used to typecast, for example, an _EGLSurface to a
driver-defined type.

This commits define _EGL_DRIVER_STANDARD_TYPECASTS and
_EGL_DRIVER_TYPECAST that should hopefully save some typings for driver
writers.

src/egl/main/egldriver.h

index 5149acd..c1e6fa2 100644 (file)
@@ -6,6 +6,27 @@
 #include "eglapi.h"
 
 
+/**
+ * Define an inline driver typecast function.
+ */
+#define _EGL_DRIVER_TYPECAST(drvtype, egltype, code)           \
+   static INLINE struct drvtype *drvtype(const egltype *obj)   \
+   { return (struct drvtype *) code; }
+
+
+/**
+ * Define the driver typecast functions for _EGLDriver, _EGLDisplay,
+ * _EGLContext, _EGLSurface, and _EGLConfig.
+ */
+#define _EGL_DRIVER_STANDARD_TYPECASTS(drvname)                            \
+   _EGL_DRIVER_TYPECAST(drvname ## _driver, _EGLDriver, obj)               \
+   /* note that this is not a direct cast */                               \
+   _EGL_DRIVER_TYPECAST(drvname ## _display, _EGLDisplay, obj->DriverData) \
+   _EGL_DRIVER_TYPECAST(drvname ## _context, _EGLContext, obj)             \
+   _EGL_DRIVER_TYPECAST(drvname ## _surface, _EGLSurface, obj)             \
+   _EGL_DRIVER_TYPECAST(drvname ## _config, _EGLConfig, obj)
+
+
 typedef _EGLDriver *(*_EGLMain_t)(const char *args);