Added BlackBerry PlayBook support Bug memleak when getting the number of mouse button...
[freeglut] / src / blackberry / fg_window_blackberry.c
index f18512e..e88653c 100644 (file)
@@ -32,7 +32,6 @@
 #include "fg_internal.h"
 #include "egl/fg_window_egl.h"
 #include <screen/screen.h>
-#include <bps/screen.h>
 
 /*
  * Opens a window. Requires a SFG_Window object created and attached
@@ -59,13 +58,13 @@ void fgPlatformOpenWindow( SFG_Window* window, const char* title,
 
     /* Set window properties */
     int orientation = atoi(getenv("ORIENTATION"));
-    int screenFormat = SCREEN_FORMAT_RGBA8888; //XXX Should this be determined by config?
+    int screenFormat = SCREEN_FORMAT_RGBA8888; //Only SCREEN_FORMAT_RGBA8888 and SCREEN_FORMAT_RGB565 are supported. See fg_window_egl for more info
 #ifdef GL_ES_VERSION_2_0
     int screenUsage = SCREEN_USAGE_OPENGL_ES2 | SCREEN_USAGE_ROTATION;
 #elif GL_VERSION_ES_CM_1_0 || GL_VERSION_ES_CL_1_0 || GL_VERSION_ES_CM_1_1 || GL_VERSION_ES_CL_1_1
     int screenUsage = SCREEN_USAGE_OPENGL_ES1 | SCREEN_USAGE_ROTATION;
 #endif
-#ifndef __X86__
+#if !defined(__X86__) && !defined(__PLAYBOOK__)
     screenUsage |= SCREEN_USAGE_DISPLAY; // Physical device copy directly into physical display
 #endif
     if (screen_set_window_property_iv(sWindow, SCREEN_PROPERTY_FORMAT, &screenFormat)) {
@@ -159,6 +158,7 @@ void fgPlatformOpenWindow( SFG_Window* window, const char* title,
         fgError("Could not set window rotation");
         return;
     }
+    window->State.pWState.originalRotation = orientation;
 
     /* Set buffer sizes */
     if (screen_set_window_property_iv(sWindow, SCREEN_PROPERTY_BUFFER_SIZE, value)) {
@@ -181,7 +181,11 @@ void fgPlatformOpenWindow( SFG_Window* window, const char* title,
 
     /* Create context */
     fghChooseConfig(&window->Window.pContext.egl.Config);
-    window->Window.Context = fghCreateNewContextEGL(window);
+    window->Window.Context = EGL_NO_CONTEXT;
+    if( fgState.UseCurrentContext == GL_TRUE )
+        window->Window.Context = eglGetCurrentContext();
+    if( window->Window.Context == EGL_NO_CONTEXT )
+        window->Window.Context = fghCreateNewContextEGL(window);
 
     /* Create EGL window */
     fghPlatformOpenWindowEGL(window);
@@ -189,9 +193,18 @@ void fgPlatformOpenWindow( SFG_Window* window, const char* title,
     window->State.Visible = GL_TRUE;
 }
 
+void fgPlatformFlushCommands()
+{
+    if(screen_flush_context(fgDisplay.pDisplay.screenContext, 0)) {
+        fgWarning("Could not flush screen context");
+    }
+}
+
 void fgPlatformRotateWindow(SFG_Window* window, int rotation)
 {
-    screen_set_window_property_iv(window->Window.Handle, SCREEN_PROPERTY_ROTATION, &rotation);
+    if(screen_set_window_property_iv(window->Window.Handle, SCREEN_PROPERTY_ROTATION, &rotation)) {
+        fgWarning("Could not set window rotation");
+    }
 }
 
 /*