[Title] Host gl capability check bug fix.
authorsangjin3.kim <sangjin3.kim@samsung.com>
Fri, 16 Mar 2012 14:46:02 +0000 (23:46 +0900)
committersangjin3.kim <sangjin3.kim@samsung.com>
Fri, 16 Mar 2012 14:46:02 +0000 (23:46 +0900)
[Type] Bug fix.
[Module] qemu / opengl-es
[Priority]
[CQ#]
[Redmine#]
[Problem]
[Cause]
[Solution]
[TestCase]

tizen/src/hw/gloffscreen.h
tizen/src/hw/gloffscreen_glx.c
tizen/src/hw/gloffscreen_wgl.c
tizen/src/hw/gloffscreen_xcomposite.c

index e347e96..e860c07 100755 (executable)
@@ -60,7 +60,7 @@ typedef struct _GloSurface GloSurface;
 extern int glo_initialised(void);
 
 /* Initialise gloffscreen */
-extern void glo_init(void);
+extern int glo_init(void);
 
 /* Uninitialise gloffscreen */
 extern void glo_kill(void);
index 8f95121..e807c6b 100755 (executable)
@@ -77,19 +77,23 @@ int glo_initialised(void) {
 }
 
 /* Initialise gloffscreen */
-void glo_init(void) {
+int glo_init(void) {
     if (glo_inited) {
         printf( "gloffscreen already inited\n" );
-        exit( EXIT_FAILURE );
+        //exit( EXIT_FAILURE );
+               return 1;
     }
     /* Open a connection to the X server */
     glo.dpy = XOpenDisplay( NULL );
     if ( glo.dpy == NULL ) {
         printf( "Unable to open a connection to the X server\n" );
-        exit( EXIT_FAILURE );
+        //exit( EXIT_FAILURE );
+               return 1;
     }
     glo_inited = 1;
     glo_test_readback_methods();
+
+       return 0;
 }
 
 /* Uninitialise gloffscreen */
@@ -147,7 +151,8 @@ GloContext *glo_context_create(int formatFlags, GloContext *shareLists) {
                                  bufferAttributes, &numReturned );
   if (numReturned==0) {
       printf( "No matching configs found.\n" );
-      exit( EXIT_FAILURE );
+      //exit( EXIT_FAILURE );
+         return NULL;
   }
   context = (GloContext*)qemu_malloc(sizeof(GloContext));
   memset(context, 0, sizeof(GloContext));
@@ -162,7 +167,8 @@ GloContext *glo_context_create(int formatFlags, GloContext *shareLists) {
 
   if (!context->context) {
     printf( "glXCreateNewContext failed\n" );
-    exit( EXIT_FAILURE );
+    //exit( EXIT_FAILURE );
+       return NULL;
   }
 
   return context;
@@ -222,7 +228,8 @@ GloSurface *glo_surface_create(int width, int height, GloContext *context) {
 
     if (!surface->xPixmap) {
       printf( "XCreatePixmap failed\n" );
-      exit( EXIT_FAILURE );
+      //exit( EXIT_FAILURE );
+         return NULL;
     }
 
     /* Create a GLX window to associate the frame buffer configuration
@@ -230,7 +237,8 @@ GloSurface *glo_surface_create(int width, int height, GloContext *context) {
     surface->glxPixmap = glXCreatePixmap( glo.dpy, context->fbConfig, surface->xPixmap, NULL );
     if (!surface->glxPixmap) {
       printf( "glXCreatePixmap failed\n" );
-      exit( EXIT_FAILURE );
+      //exit( EXIT_FAILURE );
+         return NULL;
     }
 
     // If we're using XImages to pull the data from the graphics card...
index 127d651..ec86ceb 100755 (executable)
@@ -129,13 +129,14 @@ int glo_sanity_test (void) {
 }
 
 /* Initialise gloffscreen */
-void glo_init(void) {
+int glo_init(void) {
     WNDCLASSEX wcx;
     PIXELFORMATDESCRIPTOR pfd;
 
     if (glo_inited) {
         printf( "gloffscreen already inited\n" );
-        exit( EXIT_FAILURE );
+        //exit( EXIT_FAILURE );
+               return 1;
     }
 
     glo.hInstance = GetModuleHandle(NULL); // Grab An Instance For Our Window
@@ -163,7 +164,8 @@ void glo_init(void) {
 
     if (!glo.hWnd) {
         printf( "Unable to create window\n" );
-        exit( EXIT_FAILURE );
+        //exit( EXIT_FAILURE );
+               return 1;
     }
     glo.hDC = GetDC(glo.hWnd);
 
@@ -177,12 +179,13 @@ void glo_init(void) {
     unsigned int pixelFormat = ChoosePixelFormat(glo.hDC, &pfd);
     DescribePixelFormat(glo.hDC, pixelFormat, sizeof(PIXELFORMATDESCRIPTOR), &pfd);
     if (!SetPixelFormat(glo.hDC, pixelFormat, &pfd))
-        return;
+        return 1;
 
     glo.hContext = wglCreateContext(glo.hDC);
     if (glo.hContext == NULL) {
         printf( "Unable to create GL context\n" );
-        exit( EXIT_FAILURE );
+        //exit( EXIT_FAILURE );
+               return 1;
     }
     wglMakeCurrent(glo.hDC, glo.hContext);
 
@@ -204,10 +207,13 @@ void glo_init(void) {
         !wglCreatePbufferARB ||
         !wglDestroyPbufferARB) {
         printf( "Unable to load the required WGL extensions\n" );
-        exit( EXIT_FAILURE );
+        //exit( EXIT_FAILURE );
+               return 1;
     }
 
     glo_inited = 1;
+
+       return 0
 }
 
 /* Uninitialise gloffscreen */
@@ -697,7 +703,8 @@ GloContext *glo_context_create(int formatFlags, GloContext *shareLists) {
     wglChoosePixelFormatARB( glo.hDC, pf_attri, pf_attrf, 1, &context->wglPixelFormat, &numReturned);
     if( numReturned == 0 ) {
         printf( "No matching configs found.\n" );
-        exit( EXIT_FAILURE );
+        //exit( EXIT_FAILURE );
+               return NULL;
     }
 
     // We create a tiny pbuffer - just so we can make a context of the right pixel format
@@ -705,18 +712,21 @@ GloContext *glo_context_create(int formatFlags, GloContext *shareLists) {
                                              16, 16, pb_attr );
     if( !context->hPBuffer ) {
         printf( "Couldn't create the PBuffer\n" );
-        exit( EXIT_FAILURE );
+        //exit( EXIT_FAILURE );
+               return NULL;
     }
     context->hDC      = wglGetPbufferDCARB( context->hPBuffer );
     if( !context->hDC ) {
         printf( "Couldn't create the DC\n" );
-        exit( EXIT_FAILURE );
+        //exit( EXIT_FAILURE );
+               return NULL;
     }
 
     context->hContext = wglCreateContext(context->hDC);
     if (context->hContext == NULL) {
         printf( "Unable to create GL context\n" );
-        exit( EXIT_FAILURE );
+        //exit( EXIT_FAILURE );
+               return NULL;
     }
 
     if (shareLists) {
@@ -764,12 +774,14 @@ GloSurface *glo_surface_create(int width, int height, GloContext *context) {
                                              surface->width, surface->height, pb_attr );
     if( !surface->hPBuffer ) {
         printf( "Couldn't create the PBuffer\n" );
-        exit( EXIT_FAILURE );
+        //exit( EXIT_FAILURE );
+               return NULL;
     }
     surface->hDC      = wglGetPbufferDCARB( surface->hPBuffer );
     if( !surface->hDC ) {
         printf( "Couldn't create the DC\n" );
-        exit( EXIT_FAILURE );
+        //exit( EXIT_FAILURE );
+               return NULL;
     }
 
     return surface;
index 2e0234c..446afdf 100755 (executable)
@@ -103,17 +103,19 @@ int glo_sanity_test (void) {
 }
 
 /* Initialise gloffscreen */
-void glo_init(void) {
+int glo_init(void) {
     if (glo_inited) {
         printf( "gloffscreen already inited\n" );
-        exit( EXIT_FAILURE );
+        //exit( EXIT_FAILURE );
+               return 1;
     }
 
     /* Open a connection to the X server */
     glo.dpy = XOpenDisplay( NULL );
     if ( glo.dpy == NULL ) {
         printf( "Unable to open a connection to the X server\n" );
-        exit( EXIT_FAILURE );
+        //exit( EXIT_FAILURE );
+               return 1;
     }
 
     glo_inited = 1; // safe because we are single threaded. Otherwise we cause
@@ -121,6 +123,7 @@ void glo_init(void) {
     // set the X error handler.
     XErrorHandler old_handler = XSetErrorHandler (x_errhandler);
     glo_test_readback_methods();
+       return 0;
 }
 
 /* Uninitialise gloffscreen */
@@ -179,7 +182,8 @@ GloContext *glo_context_create(int formatFlags, GloContext *shareLists) {
                                    bufferAttributes, &numReturned );
     if (numReturned==0) {
         printf( "No matching configs found.\n" );
-        exit( EXIT_FAILURE );
+        //exit( EXIT_FAILURE );
+               return NULL;
     }
     context = (GloContext*)g_malloc(sizeof(GloContext));
     memset(context, 0, sizeof(GloContext));
@@ -194,7 +198,8 @@ GloContext *glo_context_create(int formatFlags, GloContext *shareLists) {
 
     if (!context->context) {
         printf( "glXCreateNewContext failed\n" );
-        exit( EXIT_FAILURE );
+        //exit( EXIT_FAILURE );
+               return NULL;
     }
 
     return context;
@@ -273,7 +278,8 @@ GloSurface *glo_surface_create(int width, int height, GloContext *context) {
 
     if (!surface->window) {
         printf( "XCreateWindow failed\n" );
-        exit( EXIT_FAILURE );
+        //exit( EXIT_FAILURE );
+               return NULL;
     }
 
     XMapWindow(glo.dpy, surface->window);
@@ -289,7 +295,8 @@ GloSurface *glo_surface_create(int width, int height, GloContext *context) {
 
     if(surface->pixmap == 0) {
         fprintf(stderr, "Failed to allocate pixmap!\n");
-        exit(EXIT_FAILURE);
+        //exit(EXIT_FAILURE);
+               return NULL;
     }
 
     XSync(glo.dpy, 0);