javauis/m3g_akn/javasrc/javax/microedition/m3g/Graphics3D.java
branchRCL_3
changeset 24 6c158198356e
parent 19 71c436fe3ce0
--- a/javauis/m3g_akn/javasrc/javax/microedition/m3g/Graphics3D.java	Thu Jul 15 18:31:06 2010 +0300
+++ b/javauis/m3g_akn/javasrc/javax/microedition/m3g/Graphics3D.java	Thu Aug 19 09:48:13 2010 +0300
@@ -107,7 +107,7 @@
     private Rect viewport;
     private Rect clip;
     private boolean ngaEnabled = false;
-    private boolean foreground;
+    private boolean pendingGLESRelease = false;
 
 
     //------------------------------------------------------------------
@@ -128,9 +128,7 @@
             }
             if (instance.graphics3D == null)
             {
-                // graphics3D must be assigned to interface before asking foreground status
                 instance.graphics3D = new Graphics3D();
-                instance.graphics3D.foreground = ToolkitInvoker.getToolkitInvoker().isForeground();
             }
             return instance.graphics3D;
         }
@@ -158,7 +156,7 @@
         this.clip = new Rect();
         // Initializes NGA status - enabled or disabled
         ngaEnabled = invoker.isNgaEnabled();
-     }
+    }
 
     /**
      *
@@ -185,7 +183,7 @@
      */
     public void bindTarget(java.lang.Object target, boolean depth, int flags)
     {
-        synchronized (Interface.getInstance()) 
+        synchronized (Interface.getInstance())
         {
             integrityCheck();
             int eventSrcHandle = 0;
@@ -288,16 +286,16 @@
      */
     public void releaseTarget()
     {
-        synchronized (Interface.getInstance()) 
+        synchronized (Interface.getInstance())
         {
             integrityCheck();
             if (currentTarget == null)
             {
                 return;
             }
-        
+
             int eventSrcHandle = 0;
-        
+
             try
             {
                 // Bind event source
@@ -328,9 +326,12 @@
             finally
             {
                 currentTarget = null;
-                        
-                if (ngaEnabled && !foreground && eventSrcHandle != 0)
+
+                if (ngaEnabled  &&
+                        pendingGLESRelease &&
+                        eventSrcHandle != 0)
                 {
+                    pendingGLESRelease = false;
                     _freeGLESResources(eventSrcHandle, handle);
                 }
 
@@ -748,16 +749,19 @@
         }
     }
 
-    void setForeground(boolean foreground) 
+    void freeGraphicsMemory()
     {
         synchronized (Interface.getInstance())
         {
-            this.foreground = foreground;
-            if (ngaEnabled &&
-                !foreground && 
-                currentTarget == null)
+            if (!ngaEnabled)
             {
-                try 
+                return;
+            }
+
+            if (currentTarget == null)
+            {
+                pendingGLESRelease = false;
+                try
                 {
                     _freeGLESResources(Interface.bindEventSource(), handle);
                 }
@@ -766,9 +770,13 @@
                     Interface.releaseEventSource();
                 }
             }
+            else
+            {
+                pendingGLESRelease = true;
+            }
         }
     }
-    
+
     private native static int _ctor(int hInterface);
     private native static void _addRef(int hObject);
 
@@ -850,6 +858,6 @@
     private native static int _getTargetWidth(int graphicsHandle);
     private native static void _updateEglContent(int eventSourceHandle,
             int graphicsHandle);
-    private native static void _freeGLESResources(int eventSourceHandle, 
+    private native static void _freeGLESResources(int eventSourceHandle,
             int handle);
 }