aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java69
-rw-r--r--src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderState.java36
-rw-r--r--src/jogl/classes/javax/media/opengl/DefaultGLCapabilitiesChooser.java29
-rw-r--r--src/jogl/classes/javax/media/opengl/GLContext.java49
-rw-r--r--src/jogl/classes/jogamp/opengl/GLContextImpl.java2
-rw-r--r--src/jogl/classes/jogamp/opengl/egl/EGLContext.java13
-rw-r--r--src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLContext.java11
-rw-r--r--src/jogl/classes/jogamp/opengl/windows/wgl/WindowsWGLContext.java7
-rw-r--r--src/jogl/classes/jogamp/opengl/x11/glx/X11GLXContext.java9
-rw-r--r--src/newt/classes/jogamp/newt/WindowImpl.java23
-rw-r--r--src/newt/classes/jogamp/newt/driver/android/AndroidWindow.java126
-rw-r--r--src/test/com/jogamp/opengl/test/android/NEWTElektronActivity.java9
-rw-r--r--src/test/com/jogamp/opengl/test/android/NEWTGearsES1Activity.java8
-rw-r--r--src/test/com/jogamp/opengl/test/android/NEWTGearsES2Activity.java12
-rw-r--r--src/test/com/jogamp/opengl/test/android/NEWTGearsES2TransActivity.java18
-rw-r--r--src/test/com/jogamp/opengl/test/android/NEWTGraphUI1pActivity.java5
-rw-r--r--src/test/com/jogamp/opengl/test/android/NEWTGraphUI2pActivity.java5
-rw-r--r--src/test/com/jogamp/opengl/test/android/NEWTRedSquareES1Activity.java11
-rw-r--r--src/test/com/jogamp/opengl/test/android/NEWTRedSquareES2Activity.java14
-rw-r--r--src/test/com/jogamp/opengl/test/junit/jogl/demos/es1/GearsES1.java13
-rw-r--r--src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/GearsES2.java16
-rw-r--r--src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/RedSquareES2.java4
22 files changed, 267 insertions, 222 deletions
diff --git a/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java b/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java
index 85e288638..eec055ed4 100644
--- a/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java
+++ b/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java
@@ -295,39 +295,43 @@ public class ShaderCode {
}
}
- private static int readShaderSource(Class<?> context, URL url, StringBuffer result, int lineno) {
+ private static int readShaderSource(Class<?> context, URL url, StringBuffer result, int lineno) {
try {
if(DEBUG_CODE) {
System.err.printf("%3d: // %s\n", lineno, url);
}
- BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
- String line = null;
- while ((line = reader.readLine()) != null) {
- lineno++;
- if(DEBUG_CODE) {
- System.err.printf("%3d: %s\n", lineno, line);
- }
- if (line.startsWith("#include ")) {
- String includeFile = line.substring(9).trim();
- URL nextURL = null;
-
- // Try relative path first
- String next = IOUtil.getRelativeOf(url, includeFile);
- if(null != next) {
- nextURL = IOUtil.getResource(context, next);
- }
- if (nextURL == null) {
- // Try absolute path
- nextURL = IOUtil.getResource(context, includeFile);
+ final BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
+ try {
+ String line = null;
+ while ((line = reader.readLine()) != null) {
+ lineno++;
+ if(DEBUG_CODE) {
+ System.err.printf("%3d: %s\n", lineno, line);
}
- if (nextURL == null) {
- // Fail
- throw new FileNotFoundException("Can't find include file " + includeFile);
+ if (line.startsWith("#include ")) {
+ String includeFile = line.substring(9).trim();
+ URL nextURL = null;
+
+ // Try relative path first
+ String next = IOUtil.getRelativeOf(url, includeFile);
+ if(null != next) {
+ nextURL = IOUtil.getResource(context, next);
+ }
+ if (nextURL == null) {
+ // Try absolute path
+ nextURL = IOUtil.getResource(context, includeFile);
+ }
+ if (nextURL == null) {
+ // Fail
+ throw new FileNotFoundException("Can't find include file " + includeFile);
+ }
+ lineno = readShaderSource(context, nextURL, result, lineno);
+ } else {
+ result.append(line + "\n");
}
- lineno = readShaderSource(context, nextURL, result, lineno);
- } else {
- result.append(line + "\n");
}
+ } finally {
+ IOUtil.close(reader, false);
}
} catch (IOException e) {
throw new RuntimeException(e);
@@ -358,12 +362,17 @@ public class ShaderCode {
}
public static ByteBuffer readShaderBinary(Class<?> context, String path) {
+ final URL url = IOUtil.getResource(context, path);
+ if (url == null) {
+ return null;
+ }
try {
- URL url = IOUtil.getResource(context, path);
- if (url == null) {
- return null;
+ final BufferedInputStream bis = new BufferedInputStream( url.openStream() );
+ try {
+ return IOUtil.copyStream2ByteBuffer( bis );
+ } finally {
+ IOUtil.close(bis, false);
}
- return IOUtil.copyStream2ByteBuffer( new BufferedInputStream( url.openStream() ) );
} catch (IOException e) {
throw new RuntimeException(e);
}
diff --git a/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderState.java b/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderState.java
index 4b680b849..245f5fb06 100644
--- a/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderState.java
+++ b/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderState.java
@@ -31,7 +31,6 @@ package com.jogamp.opengl.util.glsl;
import java.security.AccessController;
import java.util.ArrayList;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.Iterator;
import javax.media.opengl.GL;
@@ -205,8 +204,6 @@ public class ShaderState {
* @throws GLException if program was not linked and linking fails
*/
public synchronized void attachShaderProgram(GL2ES2 gl, ShaderProgram prog, boolean enable) throws GLException {
- boolean prgInUse = false; // earmarked state
-
if(DEBUG) {
int curId = (null!=shaderProgram)?shaderProgram.id():-1;
int newId = (null!=prog)?prog.id():-1;
@@ -317,7 +314,7 @@ public class ShaderState {
* @see GL2ES2#glGetAttribLocation(int, String)
*/
public int getCachedAttribLocation(String name) {
- Integer idx = (Integer) activeAttribLocationMap.get(name);
+ Integer idx = activeAttribLocationMap.get(name);
return (null!=idx)?idx.intValue():-1;
}
@@ -337,7 +334,7 @@ public class ShaderState {
* @see ShaderProgram#glReplaceShader
*/
public GLArrayData getAttribute(String name) {
- return (GLArrayData) activeAttribDataMap.get(name);
+ return activeAttribDataMap.get(name);
}
/**
@@ -485,7 +482,8 @@ public class ShaderState {
* @return true if the named attribute is enable
*/
public final boolean isVertexAttribArrayEnabled(String name) {
- return enabledAttributes.contains(name);
+ final Boolean v = activedAttribEnabledMap.get(name);
+ return null != v && v.booleanValue();
}
/**
@@ -496,7 +494,7 @@ public class ShaderState {
}
private boolean enableVertexAttribArray(GL2ES2 gl, String name, int location) {
- enabledAttributes.add(name);
+ activedAttribEnabledMap.put(name, Boolean.TRUE);
if(0>location) {
location = getAttribLocation(gl, name);
if(0>location) {
@@ -569,7 +567,7 @@ public class ShaderState {
}
private boolean disableVertexAttribArray(GL2ES2 gl, String name, int location) {
- enabledAttributes.remove(name);
+ activedAttribEnabledMap.put(name, Boolean.FALSE);
if(0>location) {
location = getAttribLocation(gl, name);
if(0>location) {
@@ -691,14 +689,14 @@ public class ShaderState {
throw new GLException("Internal Error: mapped vertex attribute couldn't be disabled");
}
}
- for(Iterator<String> iter = enabledAttributes.iterator(); iter.hasNext(); ) {
+ for(Iterator<String> iter = activedAttribEnabledMap.keySet().iterator(); iter.hasNext(); ) {
if(!disableVertexAttribArray(gl, iter.next())) {
throw new GLException("Internal Error: prev enabled vertex attribute couldn't be disabled");
}
}
}
activeAttribDataMap.clear();
- enabledAttributes.clear();
+ activedAttribEnabledMap.clear();
activeAttribLocationMap.clear();
managedAttributes.clear();
}
@@ -721,10 +719,10 @@ public class ShaderState {
* @see ShaderProgram#glReplaceShader
*/
public void disableAllVertexAttributeArrays(GL2ES2 gl, boolean removeFromState) {
- for(Iterator<String> iter = enabledAttributes.iterator(); iter.hasNext(); ) {
+ for(Iterator<String> iter = activedAttribEnabledMap.keySet().iterator(); iter.hasNext(); ) {
final String name = iter.next();
if(removeFromState) {
- enabledAttributes.remove(name);
+ activedAttribEnabledMap.remove(name);
}
final int index = getAttribLocation(gl, name);
if(0<=index) {
@@ -740,7 +738,7 @@ public class ShaderState {
attribute.setLocation(loc);
if(0<=loc) {
- if(enabledAttributes.contains(name)) {
+ if(isVertexAttribArrayEnabled(name)) {
// enable attrib, VBO and pass location/data
gl.glEnableVertexAttribArray(loc);
}
@@ -787,7 +785,7 @@ public class ShaderState {
if(0<=loc) {
this.bindAttribLocation(gl, loc, name);
- if(enabledAttributes.contains(name)) {
+ if(isVertexAttribArrayEnabled(name)) {
// enable attrib, VBO and pass location/data
gl.glEnableVertexAttribArray(loc);
}
@@ -1006,8 +1004,12 @@ public class ShaderState {
sb.append("ShaderProgram: null");
}
sb.append(Platform.getNewline()).append(" enabledAttributes [");
- for(Iterator<String> iter = enabledAttributes.iterator(); iter.hasNext(); ) {
- sb.append(Platform.getNewline()).append(" ").append(iter.next());
+ {
+ Iterator<String> names = activedAttribEnabledMap.keySet().iterator();
+ Iterator<Boolean> values = activedAttribEnabledMap.values().iterator();
+ while( names.hasNext() ) {
+ sb.append(Platform.getNewline()).append(" ").append(names.next()).append(": ").append(values.next());
+ }
}
sb.append(Platform.getNewline()).append(" ],").append(" activeAttributes [");
for(Iterator<GLArrayData> iter = activeAttribDataMap.values().iterator(); iter.hasNext(); ) {
@@ -1037,7 +1039,7 @@ public class ShaderState {
private boolean verbose = DEBUG ? true : false;
private ShaderProgram shaderProgram=null;
- private HashSet<String> enabledAttributes = new HashSet<String>();
+ private HashMap<String, Boolean> activedAttribEnabledMap = new HashMap<String, Boolean>();
private HashMap<String, Integer> activeAttribLocationMap = new HashMap<String, Integer>();
private HashMap<String, GLArrayData> activeAttribDataMap = new HashMap<String, GLArrayData>();
private ArrayList<GLArrayData> managedAttributes = new ArrayList<GLArrayData>();
diff --git a/src/jogl/classes/javax/media/opengl/DefaultGLCapabilitiesChooser.java b/src/jogl/classes/javax/media/opengl/DefaultGLCapabilitiesChooser.java
index 1bb509479..8aa6d5165 100644
--- a/src/jogl/classes/javax/media/opengl/DefaultGLCapabilitiesChooser.java
+++ b/src/jogl/classes/javax/media/opengl/DefaultGLCapabilitiesChooser.java
@@ -88,6 +88,21 @@ import javax.media.nativewindow.CapabilitiesImmutable;
public class DefaultGLCapabilitiesChooser implements GLCapabilitiesChooser {
private static final boolean DEBUG = Debug.isPropertyDefined("jogl.debug.CapabilitiesChooser", true, AccessController.getContext());
+ final static int NO_SCORE = -9999999;
+ final static int DOUBLE_BUFFER_MISMATCH_PENALTY = 1000;
+ final static int OPAQUE_MISMATCH_PENALTY = 750;
+ final static int STENCIL_MISMATCH_PENALTY = 500;
+ final static int MULTISAMPLE_MISMATCH_PENALTY = 500;
+ final static int MULTISAMPLE_EXTENSION_MISMATCH_PENALTY = 250; // just a little drop, no scale
+ // Pseudo attempt to keep equal rank penalties scale-equivalent
+ // (e.g., stencil mismatch is 3 * accum because there are 3 accum
+ // components)
+ final static int COLOR_MISMATCH_PENALTY_SCALE = 36;
+ final static int DEPTH_MISMATCH_PENALTY_SCALE = 6;
+ final static int ACCUM_MISMATCH_PENALTY_SCALE = 1;
+ final static int STENCIL_MISMATCH_PENALTY_SCALE = 3;
+ final static int MULTISAMPLE_MISMATCH_PENALTY_SCALE = 3;
+
public int chooseCapabilities(final CapabilitiesImmutable desired,
final List /*<CapabilitiesImmutable>*/ available,
final int windowSystemRecommendedChoice) {
@@ -122,20 +137,6 @@ public class DefaultGLCapabilitiesChooser implements GLCapabilitiesChooser {
// Create score array
int[] scores = new int[availnum];
- final int NO_SCORE = -9999999;
- final int DOUBLE_BUFFER_MISMATCH_PENALTY = 1000;
- final int OPAQUE_MISMATCH_PENALTY = 750;
- final int STENCIL_MISMATCH_PENALTY = 500;
- final int MULTISAMPLE_MISMATCH_PENALTY = 500;
- final int MULTISAMPLE_EXTENSION_MISMATCH_PENALTY = 250; // just a little drop, no scale
- // Pseudo attempt to keep equal rank penalties scale-equivalent
- // (e.g., stencil mismatch is 3 * accum because there are 3 accum
- // components)
- final int COLOR_MISMATCH_PENALTY_SCALE = 36;
- final int DEPTH_MISMATCH_PENALTY_SCALE = 6;
- final int ACCUM_MISMATCH_PENALTY_SCALE = 1;
- final int STENCIL_MISMATCH_PENALTY_SCALE = 3;
- final int MULTISAMPLE_MISMATCH_PENALTY_SCALE = 3;
for (int i = 0; i < scores.length; i++) {
scores[i] = NO_SCORE;
diff --git a/src/jogl/classes/javax/media/opengl/GLContext.java b/src/jogl/classes/javax/media/opengl/GLContext.java
index c039112c1..cc6b40f54 100644
--- a/src/jogl/classes/javax/media/opengl/GLContext.java
+++ b/src/jogl/classes/javax/media/opengl/GLContext.java
@@ -128,6 +128,7 @@ public abstract class GLContext {
protected int ctxMinorVersion;
protected int ctxOptions;
protected String ctxVersionString;
+ private int currentSwapInterval;
protected void resetStates() {
ctxMajorVersion=-1;
@@ -137,6 +138,7 @@ public abstract class GLContext {
attachedObjectsByString.clear();
attachedObjectsByInt.clear();
contextHandle=0;
+ currentSwapInterval = -1;
}
/**
@@ -621,17 +623,54 @@ public abstract class GLContext {
return isGL2GL3() || isGLES2() ;
}
- public final void setSwapInterval(int interval) {
+ /**
+ * Set the swap interval if the current context.
+ * @param interval Should be &ge; 0. 0 Disables the vertical synchronisation,
+ * where &ge; 1 is the number of vertical refreshes before a swap buffer occurs.
+ * A value &lt; 0 is ignored.
+ * @return true if the operation was successful, otherwise false
+ *
+ * @throws GLException if the context is not current.
+ */
+ public final boolean setSwapInterval(int interval) throws GLException {
if (!isCurrent()) {
throw new GLException("This context is not current. Current context: "+getCurrent()+", this context "+this);
}
- setSwapIntervalImpl(interval);
+ if(0<=interval) {
+ if( setSwapIntervalImpl(interval) ) {
+ currentSwapInterval = interval;
+ return true;
+ }
+ }
+ return false;
}
- protected void setSwapIntervalImpl(int interval) { /** nop per default .. **/ }
- protected int currentSwapInterval = -1; // default: not set yet ..
- public int getSwapInterval() {
+ protected boolean setSwapIntervalImpl(int interval) {
+ return false;
+ }
+ /** Return the current swap interval.
+ * <p>
+ * If the context has not been made current at all,
+ * the default value <code>-1</code> is returned.
+ * </p>
+ * <p>
+ * The default value for a valid context is <code>1</code> for
+ * an EGL based profile (ES1 or ES2) and <code>-1</code> (undefined)
+ * for desktop.
+ * </p>
+ */
+ public final int getSwapInterval() {
+ if(-1 == currentSwapInterval && this.isGLES()) {
+ currentSwapInterval = 1;
+ }
return currentSwapInterval;
}
+ protected final void setDefaultSwapInterval() {
+ if(this.isGLES()) {
+ currentSwapInterval = 1;
+ } else {
+ currentSwapInterval = -1;
+ }
+ }
public final boolean queryMaxSwapGroups(int[] maxGroups, int maxGroups_offset,
int[] maxBarriers, int maxBarriers_offset) {
diff --git a/src/jogl/classes/jogamp/opengl/GLContextImpl.java b/src/jogl/classes/jogamp/opengl/GLContextImpl.java
index 8c9ac589a..49b90008b 100644
--- a/src/jogl/classes/jogamp/opengl/GLContextImpl.java
+++ b/src/jogl/classes/jogamp/opengl/GLContextImpl.java
@@ -1083,6 +1083,8 @@ public abstract class GLContextImpl extends GLContext {
// Set GL Version (complete w/ version string)
//
setContextVersion(major, minor, ctxProfileBits, true);
+
+ setDefaultSwapInterval();
}
protected final void removeCachedVersion(int major, int minor, int ctxProfileBits) {
diff --git a/src/jogl/classes/jogamp/opengl/egl/EGLContext.java b/src/jogl/classes/jogamp/opengl/egl/EGLContext.java
index dc47799c1..f5f9f62c4 100644
--- a/src/jogl/classes/jogamp/opengl/egl/EGLContext.java
+++ b/src/jogl/classes/jogamp/opengl/egl/EGLContext.java
@@ -274,18 +274,19 @@ public abstract class EGLContext extends GLContextImpl {
return sb;
}
- protected void setSwapIntervalImpl(int interval) {
+ @Override
+ protected boolean setSwapIntervalImpl(int interval) {
// FIXME !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// eglSwapInterval(..) issued:
// Android 4.0.3 / Pandaboard ES / PowerVR SGX 540: crashes
// FIXME !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- if( ! ( Platform.OSType.ANDROID == Platform.getOSType() && getGLRendererString(true).contains("powervr") ) ) {
- if (EGL.eglSwapInterval(((EGLDrawable)drawable).getDisplay(), interval)) {
- currentSwapInterval = interval ;
+ if( Platform.OSType.ANDROID == Platform.getOSType() && getGLRendererString(true).contains("powervr") ) {
+ if(DEBUG) {
+ System.err.println("Ignored: eglSwapInterval("+interval+") - cause: OS "+Platform.getOSType() + " / Renderer " + getGLRendererString(false));
}
- } else if(DEBUG) {
- System.err.println("Ignored: eglSwapInterval("+interval+") - cause: OS "+Platform.getOSType() + " / Renderer " + getGLRendererString(false));
+ return false;
}
+ return EGL.eglSwapInterval(((EGLDrawable)drawable).getDisplay(), interval);
}
public abstract void bindPbufferToTexture();
diff --git a/src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLContext.java b/src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLContext.java
index 4ef49e337..63d58f447 100644
--- a/src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLContext.java
+++ b/src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLContext.java
@@ -279,14 +279,9 @@ public abstract class MacOSXCGLContext extends GLContextImpl
}
}
- protected void setSwapIntervalImpl(int interval) {
- if( ! isCreated() ) {
- throw new GLException("OpenGL context not created");
- }
- if(!impl.setSwapInterval(interval)) {
- throw new GLException("Error set swap-interval: "+this);
- }
- currentSwapInterval = interval ;
+ @Override
+ protected boolean setSwapIntervalImpl(int interval) {
+ return impl.setSwapInterval(interval);
}
public ByteBuffer glAllocateMemoryNV(int arg0, float arg1, float arg2, float arg3) {
diff --git a/src/jogl/classes/jogamp/opengl/windows/wgl/WindowsWGLContext.java b/src/jogl/classes/jogamp/opengl/windows/wgl/WindowsWGLContext.java
index 06dc07c1e..a6ef9bd1c 100644
--- a/src/jogl/classes/jogamp/opengl/windows/wgl/WindowsWGLContext.java
+++ b/src/jogl/classes/jogamp/opengl/windows/wgl/WindowsWGLContext.java
@@ -435,7 +435,7 @@ public class WindowsWGLContext extends GLContextImpl {
}
@Override
- protected void setSwapIntervalImpl(int interval) {
+ protected boolean setSwapIntervalImpl(int interval) {
WGLExt wglExt = getWGLExt();
if(0==hasSwapIntervalSGI) {
try {
@@ -444,11 +444,10 @@ public class WindowsWGLContext extends GLContextImpl {
}
if (hasSwapIntervalSGI>0) {
try {
- if ( wglExt.wglSwapIntervalEXT(interval) ) {
- currentSwapInterval = interval ;
- }
+ return wglExt.wglSwapIntervalEXT(interval);
} catch (Throwable t) { hasSwapIntervalSGI=-1; }
}
+ return false;
}
private final int initSwapGroupImpl(WGLExt wglExt) {
diff --git a/src/jogl/classes/jogamp/opengl/x11/glx/X11GLXContext.java b/src/jogl/classes/jogamp/opengl/x11/glx/X11GLXContext.java
index 79361ac0c..1dc1441e1 100644
--- a/src/jogl/classes/jogamp/opengl/x11/glx/X11GLXContext.java
+++ b/src/jogl/classes/jogamp/opengl/x11/glx/X11GLXContext.java
@@ -509,10 +509,10 @@ public abstract class X11GLXContext extends GLContextImpl {
}
@Override
- protected void setSwapIntervalImpl(int interval) {
+ protected boolean setSwapIntervalImpl(int interval) {
X11GLXGraphicsConfiguration config = (X11GLXGraphicsConfiguration)drawable.getNativeSurface().getGraphicsConfiguration();
GLCapabilitiesImmutable glCaps = (GLCapabilitiesImmutable) config.getChosenCapabilities();
- if(!glCaps.isOnscreen()) return;
+ if(!glCaps.isOnscreen()) { return false; }
GLXExt glXExt = getGLXExt();
if(0==hasSwapIntervalSGI) {
@@ -522,11 +522,10 @@ public abstract class X11GLXContext extends GLContextImpl {
}
if (hasSwapIntervalSGI>0) {
try {
- if( 0 == glXExt.glXSwapIntervalSGI(interval) ) {
- currentSwapInterval = interval;
- }
+ return 0 == glXExt.glXSwapIntervalSGI(interval);
} catch (Throwable t) { hasSwapIntervalSGI=-1; }
}
+ return false;
}
private final int initSwapGroupImpl(GLXExt glXExt) {
diff --git a/src/newt/classes/jogamp/newt/WindowImpl.java b/src/newt/classes/jogamp/newt/WindowImpl.java
index d7382e0ea..c73f72cfd 100644
--- a/src/newt/classes/jogamp/newt/WindowImpl.java
+++ b/src/newt/classes/jogamp/newt/WindowImpl.java
@@ -1702,17 +1702,19 @@ public abstract class WindowImpl implements Window, NEWTEventConsumer
private class FullScreenActionImpl implements Runnable {
boolean fullscreen;
- boolean nativeFullscreenChange;
private FullScreenActionImpl() { }
- public void init(boolean fullscreen) {
- this.fullscreen = fullscreen;
- this.nativeFullscreenChange = isNativeValid() && isFullscreen() != fullscreen ;
+ public boolean init(boolean fullscreen) {
+ if(isNativeValid()) {
+ this.fullscreen = fullscreen;
+ return isFullscreen() != fullscreen;
+ } else {
+ WindowImpl.this.fullscreen = fullscreen; // set current state for createNative(..)
+ return false;
+ }
}
- public boolean nativeFullscreenChange() { return nativeFullscreenChange; }
- public boolean nativeFullscreenOn() { return nativeFullscreenChange && fullscreen; }
- public boolean nativeFullscreenOff() { return nativeFullscreenChange && !fullscreen; }
+ public boolean fsOn() { return fullscreen; }
public final void run() {
windowLock.lock();
@@ -1801,9 +1803,8 @@ public abstract class WindowImpl implements Window, NEWTEventConsumer
public boolean setFullscreen(boolean fullscreen) {
synchronized(fullScreenAction) {
- fullScreenAction.init(fullscreen);
- if( fullScreenAction.nativeFullscreenChange() ) {
- if(fullScreenAction.nativeFullscreenOn() &&
+ if( fullScreenAction.init(fullscreen) ) {
+ if(fullScreenAction.fsOn() &&
isOffscreenInstance(WindowImpl.this, parentWindow)) {
// enable fullscreen on offscreen instance
if(null != parentWindow) {
@@ -1816,7 +1817,7 @@ public abstract class WindowImpl implements Window, NEWTEventConsumer
runOnEDTIfAvail(true, fullScreenAction);
- if(fullScreenAction.nativeFullscreenOff() && null != nfs_parent) {
+ if(!fullScreenAction.fsOn() && null != nfs_parent) {
// disable fullscreen on offscreen instance
reparentWindow(nfs_parent, true);
nfs_parent = null;
diff --git a/src/newt/classes/jogamp/newt/driver/android/AndroidWindow.java b/src/newt/classes/jogamp/newt/driver/android/AndroidWindow.java
index ec687277a..f56e9bb5f 100644
--- a/src/newt/classes/jogamp/newt/driver/android/AndroidWindow.java
+++ b/src/newt/classes/jogamp/newt/driver/android/AndroidWindow.java
@@ -28,19 +28,17 @@
package jogamp.newt.driver.android;
-import java.nio.IntBuffer;
-
import jogamp.newt.driver.android.event.AndroidNewtEventFactory;
import javax.media.nativewindow.Capabilities;
import javax.media.nativewindow.CapabilitiesImmutable;
import javax.media.nativewindow.NativeWindowException;
+import javax.media.nativewindow.VisualIDHolder;
import javax.media.nativewindow.util.Insets;
import javax.media.nativewindow.util.Point;
import javax.media.opengl.GLCapabilitiesChooser;
import javax.media.opengl.GLCapabilitiesImmutable;
-import com.jogamp.common.nio.Buffers;
import com.jogamp.nativewindow.egl.EGLGraphicsDevice;
import com.jogamp.newt.event.MouseEvent;
@@ -65,16 +63,7 @@ public class AndroidWindow extends jogamp.newt.WindowImpl implements Callback2 {
AndroidDisplay.initSingleton();
}
- public static CapabilitiesImmutable fixCapsAlpha(CapabilitiesImmutable rCaps) {
- if(rCaps.getAlphaBits()==0) {
- Capabilities nCaps = (Capabilities) rCaps.cloneMutable();
- nCaps.setAlphaBits(1);
- return nCaps;
- }
- return rCaps;
- }
-
- public static CapabilitiesImmutable fixCaps(int format, CapabilitiesImmutable rCaps) {
+ public static CapabilitiesImmutable fixCaps(boolean matchFormatPrecise, int format, CapabilitiesImmutable rCaps) {
PixelFormat pf = new PixelFormat();
PixelFormat.getPixelFormatInfo(format, pf);
final CapabilitiesImmutable res;
@@ -90,18 +79,19 @@ public class AndroidWindow extends jogamp.newt.WindowImpl implements Callback2 {
case PixelFormat.RGB_332: r=3; g=3; b=2; a=0; break;
default: throw new InternalError("Unhandled pixelformat: "+format);
}
- final boolean fits = rCaps.getRedBits() <= r &&
- rCaps.getGreenBits() <= g &&
- rCaps.getBlueBits() <= b &&
- rCaps.getAlphaBits() <= a ;
+ final boolean change = matchFormatPrecise ||
+ rCaps.getRedBits() > r &&
+ rCaps.getGreenBits() > g &&
+ rCaps.getBlueBits() > b &&
+ rCaps.getAlphaBits() > a ;
- if(!fits) {
+ if(change) {
Capabilities nCaps = (Capabilities) rCaps.cloneMutable();
nCaps.setRedBits(r);
nCaps.setGreenBits(g);
nCaps.setBlueBits(b);
nCaps.setAlphaBits(a);
- res = nCaps;
+ res = nCaps;
} else {
res = rCaps;
}
@@ -138,32 +128,43 @@ public class AndroidWindow extends jogamp.newt.WindowImpl implements Callback2 {
return fmt;
}
- class AndroidEvents implements /* View.OnKeyListener, */ View.OnTouchListener {
+ class AndroidEvents implements /* View.OnKeyListener, */ View.OnTouchListener, View.OnFocusChangeListener {
public boolean onTouch(View v, MotionEvent event) {
MouseEvent[] newtEvents = AndroidNewtEventFactory.createMouseEvents(AndroidWindow.this, event);
if(null != newtEvents) {
+ focusChanged(false, true);
for(int i=0; i<newtEvents.length; i++) {
AndroidWindow.this.enqueueEvent(false, newtEvents[i]);
}
+ try { Thread.sleep((long) (1000.0F/30.0F)); }
+ catch(InterruptedException e) { }
+ return true; // consumed/handled, further interest in events
}
- return true;
+ return false; // no mapping, no further interest in the event!
}
/** TODO
public boolean onKey(View v, int keyCode, KeyEvent event) {
return false;
} */
+
+ public void onFocusChange(View v, boolean hasFocus) {
+ AndroidWindow.this.focusChanged(false, hasFocus);
+ }
+
}
@Override
protected void instantiationFinished() {
androidView = new MSurfaceView(jogamp.common.os.android.StaticContext.getContext());
- AndroidEvents ae = new AndroidEvents();
+ final AndroidEvents ae = new AndroidEvents();
androidView.setOnTouchListener(ae);
androidView.setClickable(false);
- // nsv.setOnKeyListener(ae);
- SurfaceHolder sh = androidView.getHolder();
+ // androidView.setOnKeyListener(ae);
+ androidView.setOnFocusChangeListener(ae);
+
+ final SurfaceHolder sh = androidView.getHolder();
sh.addCallback(this);
// setFormat is done by SurfaceView in SDK 2.3 and newer. Uncomment
// this statement if back-porting to 2.2 or older:
@@ -186,10 +187,8 @@ public class AndroidWindow extends jogamp.newt.WindowImpl implements Callback2 {
System.err.println("setandroidWindow: "+window+", "+getWidth()+"x"+getHeight());
androidWindow = window;
androidWindowConfigurationPreCreate();
- if(getWidth()>0 && getHeight()>0 && !isFullscreen()) {
- if(null != androidWindow) {
- androidWindow.setLayout(getWidth(), getHeight());
- }
+ if(null != androidWindow && getWidth()>0 && getHeight()>0 && !isFullscreen()) {
+ androidWindow.setLayout(getWidth(), getHeight());
}
}
public android.view.Window getAndroidWindow() { return androidWindow; }
@@ -220,16 +219,10 @@ public class AndroidWindow extends jogamp.newt.WindowImpl implements Callback2 {
if (eglConfig == null) {
throw new NativeWindowException("Error choosing GraphicsConfiguration creating window: "+this);
}
- // query native VisualID and pass it to Surface
- final long eglConfigHandle = eglConfig.getNativeConfig();
- final IntBuffer nativeVisualID = Buffers.newDirectIntBuffer(1);
- if(!EGL.eglGetConfigAttrib(eglDevice.getHandle(), eglConfigHandle, EGL.EGL_NATIVE_VISUAL_ID, nativeVisualID)) {
- throw new NativeWindowException("eglgetConfigAttrib EGL_NATIVE_VISUAL_ID failed eglDisplay 0x"+Long.toHexString(eglDevice.getHandle())+
- ", error 0x"+Integer.toHexString(EGL.eglGetError()));
- }
- Log.d(MD.TAG, "nativeVisualID 0x"+Integer.toHexString(nativeVisualID.get(0)));
- if(nativeVisualID.get(0)>0) {
- setSurfaceVisualID0(surfaceHandle, nativeVisualID.get(0));
+ final int nativeVisualID = eglConfig.getVisualID(VisualIDHolder.VIDType.NATIVE);
+ Log.d(MD.TAG, "nativeVisualID 0x"+Integer.toHexString(nativeVisualID));
+ if(VisualIDHolder.VID_UNDEFINED != nativeVisualID) {
+ setSurfaceVisualID0(surfaceHandle, nativeVisualID);
}
eglSurface = EGL.eglCreateWindowSurface(eglDevice.getHandle(), eglConfig.getNativeConfig(), surfaceHandle, null);
@@ -240,6 +233,7 @@ public class AndroidWindow extends jogamp.newt.WindowImpl implements Callback2 {
// propagate data ..
setGraphicsConfiguration(eglConfig);
setWindowHandle(surfaceHandle);
+ focusChanged(false, true);
Log.d(MD.TAG, "createNativeImpl X");
}
@@ -256,33 +250,40 @@ public class AndroidWindow extends jogamp.newt.WindowImpl implements Callback2 {
return eglSurface;
}
- protected void requestFocusImpl(boolean reparented) { }
+ protected void requestFocusImpl(boolean reparented) {
+ if(null != androidView) {
+ androidView.requestFocus();
+ }
+ }
protected void androidWindowConfigurationPreCreate() {
if( null != androidWindow) {
if( isFullscreen() || isUndecorated() ) {
- androidWindow.requestFeature(Window.FEATURE_NO_TITLE);
+ boolean r = androidWindow.requestFeature(Window.FEATURE_NO_TITLE);
}
if( isFullscreen() ) {
- androidWindow.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ androidWindow.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ androidWindow.clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
+ } else {
+ androidWindow.addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
+ androidWindow.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
}
}
protected boolean reconfigureWindowImpl(int x, int y, int width, int height, int flags) {
if( 0 != ( FLAG_CHANGE_FULLSCREEN & flags) ) {
- System.err.println("reconfigureWindowImpl.setFullscreen post creation (setContentView()) n/a");
+ Log.d(MD.TAG, "reconfigureWindowImpl.setFullscreen post creation (setContentView()) n/a");
return false;
}
if(width>0 || height>0) {
if(0!=getWindowHandle()) {
- System.err.println("reconfigureWindowImpl.setSize n/a");
+ Log.d(MD.TAG, "reconfigureWindowImpl.setSize n/a");
return false;
}
}
if(x>=0 || y>=0) {
- System.err.println("reconfigureWindowImpl.setPos n/a");
+ Log.d(MD.TAG, "reconfigureWindowImpl.setPos n/a");
return false;
}
if( 0 != ( FLAG_CHANGE_VISIBILITY & flags) ) {
@@ -291,29 +292,6 @@ public class AndroidWindow extends jogamp.newt.WindowImpl implements Callback2 {
return true;
}
- /**
- android.graphics.Canvas cLock = null;
-
- @Override
- protected int lockSurfaceImpl() {
- if (null != cLock) {
- throw new InternalError("surface already locked");
- }
- if (0 != surfaceHandle) {
- cLock = androidView.getHolder().lockCanvas();
- }
- return ( null != cLock ) ? LOCK_SUCCESS : LOCK_SURFACE_NOT_READY;
- }
-
- @Override
- protected void unlockSurfaceImpl() {
- if (null == cLock) {
- throw new InternalError("surface not locked");
- }
- androidView.getHolder().unlockCanvasAndPost(cLock);
- cLock=null;
- } */
-
protected Point getLocationOnScreenImpl(int x, int y) {
return new Point(x,y);
}
@@ -354,19 +332,21 @@ public class AndroidWindow extends jogamp.newt.WindowImpl implements Callback2 {
surface = aHolder.getSurface();
surfaceHandle = getSurfaceHandle0(surface);
acquire0(surfaceHandle);
- if(PixelFormat.UNKNOWN == aFormat) {
- format = getSurfaceVisualID0(surfaceHandle);
+ final int nFormat = getSurfaceVisualID0(surfaceHandle);
+ if(PixelFormat.UNKNOWN == aFormat || 0 >= aFormat) {
+ format = nFormat;
} else {
format = aFormat;
}
final int nWidth = getWidth0(surfaceHandle);
final int nHeight = getHeight0(surfaceHandle);
- capsByFormat = (GLCapabilitiesImmutable) fixCaps(format, getRequestedCapabilities());
+ capsByFormat = (GLCapabilitiesImmutable) fixCaps(true /* matchFormatPrecise */, format, getRequestedCapabilities());
sizeChanged(false, nWidth, nHeight, false);
Log.d(MD.TAG, "surfaceRealized: isValid: "+surface.isValid()+
- ", new surfaceHandle 0x"+Long.toHexString(surfaceHandle)+", format: "+format+
- ", "+getX()+"/"+getY()+" "+nWidth+"x"+nHeight+", visible: "+isVisible());
+ ", new surfaceHandle 0x"+Long.toHexString(surfaceHandle)+
+ ", format: "+format+"(a "+aFormat+"/n "+nFormat+"), "+
+ getX()+"/"+getY()+" "+nWidth+"x"+nHeight+", visible: "+isVisible());
if(isVisible()) {
setVisible(true);
diff --git a/src/test/com/jogamp/opengl/test/android/NEWTElektronActivity.java b/src/test/com/jogamp/opengl/test/android/NEWTElektronActivity.java
index 74419e564..d1c8f2743 100644
--- a/src/test/com/jogamp/opengl/test/android/NEWTElektronActivity.java
+++ b/src/test/com/jogamp/opengl/test/android/NEWTElektronActivity.java
@@ -52,10 +52,6 @@ public class NEWTElektronActivity extends NewtBaseActivity {
// create GLWindow (-> incl. underlying NEWT Display, Screen & Window)
GLCapabilities caps = new GLCapabilities(GLProfile.get(GLProfile.GLES2));
- caps.setRedBits(5);
- caps.setGreenBits(6);
- caps.setBlueBits(5);
- caps.setAlphaBits(0);
Log.d(TAG, "req caps: "+caps);
GLWindow glWindow = GLWindow.create(caps);
glWindow.setFullscreen(true);
@@ -70,9 +66,12 @@ public class NEWTElektronActivity extends NewtBaseActivity {
});
glWindow.setVisible(true);
Animator animator = new Animator(glWindow);
- animator.setUpdateFPSFrames(60, System.err);
setAnimator(animator);
+ animator.setUpdateFPSFrames(60, System.err);
+ animator.resetFPSCounter();
+ glWindow.resetFPSCounter();
+
Log.d(TAG, "onCreate - X");
}
}
diff --git a/src/test/com/jogamp/opengl/test/android/NEWTGearsES1Activity.java b/src/test/com/jogamp/opengl/test/android/NEWTGearsES1Activity.java
index ba861d012..c24c3af28 100644
--- a/src/test/com/jogamp/opengl/test/android/NEWTGearsES1Activity.java
+++ b/src/test/com/jogamp/opengl/test/android/NEWTGearsES1Activity.java
@@ -59,9 +59,10 @@ public class NEWTGearsES1Activity extends NewtBaseActivity {
caps.setAlphaBits(0); */
Log.d(TAG, "req caps: "+caps);
GLWindow glWindow = GLWindow.create(caps);
+ glWindow.setFullscreen(true);
setContentView(getWindow(), glWindow);
- glWindow.addGLEventListener(new GearsES1(1));
+ glWindow.addGLEventListener(new GearsES1(-1));
glWindow.getScreen().addScreenModeListener(new ScreenModeListener() {
public void screenModeChangeNotify(ScreenMode sm) { }
public void screenModeChanged(ScreenMode sm, boolean success) {
@@ -70,9 +71,12 @@ public class NEWTGearsES1Activity extends NewtBaseActivity {
});
glWindow.setVisible(true);
Animator animator = new Animator(glWindow);
- animator.setUpdateFPSFrames(60, System.err);
setAnimator(animator);
+ animator.setUpdateFPSFrames(60, System.err);
+ animator.resetFPSCounter();
+ glWindow.resetFPSCounter();
+
Log.d(TAG, "onCreate - X");
}
}
diff --git a/src/test/com/jogamp/opengl/test/android/NEWTGearsES2Activity.java b/src/test/com/jogamp/opengl/test/android/NEWTGearsES2Activity.java
index 89ecf4cb9..c0eaec842 100644
--- a/src/test/com/jogamp/opengl/test/android/NEWTGearsES2Activity.java
+++ b/src/test/com/jogamp/opengl/test/android/NEWTGearsES2Activity.java
@@ -52,17 +52,12 @@ public class NEWTGearsES2Activity extends NewtBaseActivity {
// create GLWindow (-> incl. underlying NEWT Display, Screen & Window)
GLCapabilities caps = new GLCapabilities(GLProfile.get(GLProfile.GLES2));
- /*
- caps.setRedBits(5);
- caps.setGreenBits(6);
- caps.setBlueBits(5);
- caps.setAlphaBits(0); */
Log.d(TAG, "req caps: "+caps);
GLWindow glWindow = GLWindow.create(caps);
glWindow.setFullscreen(true);
setContentView(getWindow(), glWindow);
- GearsES2 demo = new GearsES2(0);
+ GearsES2 demo = new GearsES2(-1);
// demo.enableAndroidTrace(true);
glWindow.addGLEventListener(demo);
glWindow.getScreen().addScreenModeListener(new ScreenModeListener() {
@@ -72,13 +67,16 @@ public class NEWTGearsES2Activity extends NewtBaseActivity {
}
});
Animator animator = new Animator(glWindow);
- animator.setUpdateFPSFrames(60, System.err);
// animator.setRunAsFastAsPossible(true);
setAnimator(animator);
// glWindow.setSkipContextReleaseThread(animator.getThread());
glWindow.setVisible(true);
+ animator.setUpdateFPSFrames(60, System.err);
+ animator.resetFPSCounter();
+ glWindow.resetFPSCounter();
+
Log.d(TAG, "onCreate - X");
}
}
diff --git a/src/test/com/jogamp/opengl/test/android/NEWTGearsES2TransActivity.java b/src/test/com/jogamp/opengl/test/android/NEWTGearsES2TransActivity.java
index d6b7507a3..9e50a1be1 100644
--- a/src/test/com/jogamp/opengl/test/android/NEWTGearsES2TransActivity.java
+++ b/src/test/com/jogamp/opengl/test/android/NEWTGearsES2TransActivity.java
@@ -32,6 +32,8 @@ import javax.media.opengl.GLProfile;
import jogamp.newt.driver.android.NewtBaseActivity;
+import com.jogamp.newt.NewtFactory;
+import com.jogamp.newt.Screen;
import com.jogamp.newt.ScreenMode;
import com.jogamp.newt.event.ScreenModeListener;
import com.jogamp.newt.opengl.GLWindow;
@@ -53,14 +55,16 @@ public class NEWTGearsES2TransActivity extends NewtBaseActivity {
// create GLWindow (-> incl. underlying NEWT Display, Screen & Window)
GLCapabilities caps = new GLCapabilities(GLProfile.get(GLProfile.GLES2));
caps.setBackgroundOpaque(false);
+
Log.d(TAG, "req caps: "+caps);
- GLWindow glWindow = GLWindow.create(caps);
- glWindow.setSize(300, 300);
- // glWindow.setFullscreen(true);
+ Screen screen = NewtFactory.createScreen(NewtFactory.createDisplay(null), 0);
+ screen.addReference();
+ GLWindow glWindow = GLWindow.create(screen, caps);
+ glWindow.setSize(2*screen.getWidth()/3, 2*screen.getHeight()/3);
glWindow.setUndecorated(true);
setContentView(getWindow(), glWindow);
- glWindow.addGLEventListener(new GearsES2(1));
+ glWindow.addGLEventListener(new GearsES2(-1));
glWindow.getScreen().addScreenModeListener(new ScreenModeListener() {
public void screenModeChangeNotify(ScreenMode sm) { }
public void screenModeChanged(ScreenMode sm, boolean success) {
@@ -68,12 +72,16 @@ public class NEWTGearsES2TransActivity extends NewtBaseActivity {
}
});
Animator animator = new Animator(glWindow);
- animator.setUpdateFPSFrames(60, System.err);
setAnimator(animator);
// glWindow.setSkipContextReleaseThread(animator.getThread());
glWindow.setVisible(true);
+ animator.setUpdateFPSFrames(60, System.err);
+ animator.resetFPSCounter();
+ glWindow.resetFPSCounter();
+
+ screen.removeReference();
Log.d(TAG, "onCreate - X");
}
}
diff --git a/src/test/com/jogamp/opengl/test/android/NEWTGraphUI1pActivity.java b/src/test/com/jogamp/opengl/test/android/NEWTGraphUI1pActivity.java
index 1efedcd6d..b8bf285c6 100644
--- a/src/test/com/jogamp/opengl/test/android/NEWTGraphUI1pActivity.java
+++ b/src/test/com/jogamp/opengl/test/android/NEWTGraphUI1pActivity.java
@@ -69,9 +69,12 @@ public class NEWTGraphUI1pActivity extends NewtBaseActivity {
});
glWindow.setVisible(true);
Animator animator = new Animator(glWindow);
- animator.setUpdateFPSFrames(60, System.err);
setAnimator(animator);
+ animator.setUpdateFPSFrames(60, System.err);
+ animator.resetFPSCounter();
+ glWindow.resetFPSCounter();
+
Log.d(TAG, "onCreate - X");
}
}
diff --git a/src/test/com/jogamp/opengl/test/android/NEWTGraphUI2pActivity.java b/src/test/com/jogamp/opengl/test/android/NEWTGraphUI2pActivity.java
index 39fb5e2cc..103af1aab 100644
--- a/src/test/com/jogamp/opengl/test/android/NEWTGraphUI2pActivity.java
+++ b/src/test/com/jogamp/opengl/test/android/NEWTGraphUI2pActivity.java
@@ -70,9 +70,12 @@ public class NEWTGraphUI2pActivity extends NewtBaseActivity {
});
glWindow.setVisible(true);
Animator animator = new Animator(glWindow);
- animator.setUpdateFPSFrames(60, System.err);
setAnimator(animator);
+ animator.setUpdateFPSFrames(60, System.err);
+ animator.resetFPSCounter();
+ glWindow.resetFPSCounter();
+
Log.d(TAG, "onCreate - X");
}
}
diff --git a/src/test/com/jogamp/opengl/test/android/NEWTRedSquareES1Activity.java b/src/test/com/jogamp/opengl/test/android/NEWTRedSquareES1Activity.java
index 99d7fd723..a394482fc 100644
--- a/src/test/com/jogamp/opengl/test/android/NEWTRedSquareES1Activity.java
+++ b/src/test/com/jogamp/opengl/test/android/NEWTRedSquareES1Activity.java
@@ -52,15 +52,11 @@ public class NEWTRedSquareES1Activity extends NewtBaseActivity {
// create GLWindow (-> incl. underlying NEWT Display, Screen & Window)
GLCapabilities caps = new GLCapabilities(GLProfile.get(GLProfile.GLES1));
- caps.setRedBits(5);
- caps.setGreenBits(6);
- caps.setBlueBits(5);
- caps.setAlphaBits(0);
Log.d(TAG, "req caps: "+caps);
GLWindow glWindow = GLWindow.create(caps);
setContentView(getWindow(), glWindow);
- glWindow.addGLEventListener(new RedSquareES1(1));
+ glWindow.addGLEventListener(new RedSquareES1(-1));
glWindow.getScreen().addScreenModeListener(new ScreenModeListener() {
public void screenModeChangeNotify(ScreenMode sm) { }
public void screenModeChanged(ScreenMode sm, boolean success) {
@@ -69,9 +65,12 @@ public class NEWTRedSquareES1Activity extends NewtBaseActivity {
});
glWindow.setVisible(true);
Animator animator = new Animator(glWindow);
- animator.setUpdateFPSFrames(60, System.err);
setAnimator(animator);
+ animator.setUpdateFPSFrames(60, System.err);
+ animator.resetFPSCounter();
+ glWindow.resetFPSCounter();
+
Log.d(TAG, "onCreate - X");
}
}
diff --git a/src/test/com/jogamp/opengl/test/android/NEWTRedSquareES2Activity.java b/src/test/com/jogamp/opengl/test/android/NEWTRedSquareES2Activity.java
index 804e627a5..889e0944e 100644
--- a/src/test/com/jogamp/opengl/test/android/NEWTRedSquareES2Activity.java
+++ b/src/test/com/jogamp/opengl/test/android/NEWTRedSquareES2Activity.java
@@ -52,16 +52,14 @@ public class NEWTRedSquareES2Activity extends NewtBaseActivity {
// create GLWindow (-> incl. underlying NEWT Display, Screen & Window)
GLCapabilities caps = new GLCapabilities(GLProfile.get(GLProfile.GLES2));
- caps.setRedBits(5);
- caps.setGreenBits(6);
- caps.setBlueBits(5);
- caps.setAlphaBits(0);
Log.d(TAG, "req caps: "+caps);
GLWindow glWindow = GLWindow.create(caps);
- glWindow.setFullscreen(true);
+ // glWindow.setSize(200, 200);
+ // glWindow.setUndecorated(true);
+ glWindow.setFullscreen(true);
setContentView(getWindow(), glWindow);
- final RedSquareES2 demo = new RedSquareES2(0);
+ final RedSquareES2 demo = new RedSquareES2(-1);
// demo.enableAndroidTrace(true);
glWindow.addGLEventListener(demo);
glWindow.getScreen().addScreenModeListener(new ScreenModeListener() {
@@ -71,12 +69,14 @@ public class NEWTRedSquareES2Activity extends NewtBaseActivity {
}
});
Animator animator = new Animator(glWindow);
- animator.setUpdateFPSFrames(60, System.err);
// animator.setRunAsFastAsPossible(true);
setAnimator(animator);
// glWindow.setSkipContextReleaseThread(animator.getThread());
glWindow.setVisible(true);
+ animator.setUpdateFPSFrames(60, System.err);
+ animator.resetFPSCounter();
+ glWindow.resetFPSCounter();
Log.d(TAG, "onCreate - X");
}
diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/demos/es1/GearsES1.java b/src/test/com/jogamp/opengl/test/junit/jogl/demos/es1/GearsES1.java
index b5a729e02..fb2c9c7ea 100644
--- a/src/test/com/jogamp/opengl/test/junit/jogl/demos/es1/GearsES1.java
+++ b/src/test/com/jogamp/opengl/test/junit/jogl/demos/es1/GearsES1.java
@@ -48,7 +48,6 @@ public class GearsES1 implements GLEventListener {
private GearsObject gear1=null, gear2=null, gear3=null;
private float angle = 0.0f;
private int swapInterval;
- private boolean initialized = false;
private int prevMouseX, prevMouseY;
@@ -83,7 +82,6 @@ public class GearsES1 implements GLEventListener {
public void init(GLAutoDrawable drawable) {
System.err.println(Thread.currentThread()+" GearsES1.init ...");
- initialized = true;
// Use debug pipeline
// drawable.setGL(new DebugGL(drawable.getGL()));
@@ -150,12 +148,16 @@ public class GearsES1 implements GLEventListener {
gl.setSwapInterval(swapInterval);
- float h = (float)height / (float)width;
-
gl.glMatrixMode(GL2ES1.GL_PROJECTION);
gl.glLoadIdentity();
- gl.glFrustum(-1.0f, 1.0f, -h, h, 5.0f, 60.0f);
+ if(height>width) {
+ float h = (float)height / (float)width;
+ gl.glFrustumf(-1.0f, 1.0f, -h, h, 5.0f, 60.0f);
+ } else {
+ float h = (float)width / (float)height;
+ gl.glFrustumf(-h, h, -1.0f, 1.0f, 5.0f, 60.0f);
+ }
gl.glMatrixMode(GL2ES1.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.0f, -40.0f);
@@ -164,7 +166,6 @@ public class GearsES1 implements GLEventListener {
public void dispose(GLAutoDrawable drawable) {
System.err.println(Thread.currentThread()+" GearsES1.dispose ... ");
- initialized = false;
GL gl = drawable.getGL();
gear1.destroy(gl);
gear1 = null;
diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/GearsES2.java b/src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/GearsES2.java
index 5a106901d..81e3a5c80 100644
--- a/src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/GearsES2.java
+++ b/src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/GearsES2.java
@@ -174,9 +174,7 @@ public class GearsES2 implements GLEventListener {
}
st.useProgram(gl, false);
- if(0<=swapInterval) {
- gl.setSwapInterval(swapInterval);
- }
+ gl.setSwapInterval(swapInterval);
System.err.println(Thread.currentThread()+" GearsES2.init FIN");
}
@@ -189,12 +187,18 @@ public class GearsES2 implements GLEventListener {
System.err.println(Thread.currentThread()+" GearsES2.reshape "+x+"/"+y+" "+width+"x"+height+", swapInterval "+swapInterval);
GL2ES2 gl = drawable.getGL().getGL2ES2();
- float h = (float)height / (float)width;
-
st.useProgram(gl, true);
pmvMatrix.glMatrixMode(PMVMatrix.GL_PROJECTION);
pmvMatrix.glLoadIdentity();
- pmvMatrix.glFrustumf(-1.0f, 1.0f, -h, h, 5.0f, 60.0f);
+
+ if(height>width) {
+ float h = (float)height / (float)width;
+ pmvMatrix.glFrustumf(-1.0f, 1.0f, -h, h, 5.0f, 60.0f);
+ } else {
+ float h = (float)width / (float)height;
+ pmvMatrix.glFrustumf(-h, h, -1.0f, 1.0f, 5.0f, 60.0f);
+ }
+
pmvMatrix.glMatrixMode(PMVMatrix.GL_MODELVIEW);
pmvMatrix.glLoadIdentity();
pmvMatrix.glTranslatef(0.0f, 0.0f, -40.0f);
diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/RedSquareES2.java b/src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/RedSquareES2.java
index 6f3438ec8..dcda10426 100644
--- a/src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/RedSquareES2.java
+++ b/src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/RedSquareES2.java
@@ -122,9 +122,7 @@ public class RedSquareES2 implements GLEventListener {
gl.glEnable(GL2ES2.GL_DEPTH_TEST);
st.useProgram(gl, false);
- if(0<=swapInterval) {
- gl.setSwapInterval(swapInterval);
- }
+ gl.setSwapInterval(swapInterval);
if (glad instanceof GLWindow) {
glWindow = (GLWindow) glad;