--- 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);
}