diff options
author | Sven Gothel <[email protected]> | 2023-03-11 07:08:56 +0100 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2023-03-11 07:08:56 +0100 |
commit | d27baa9f6980d6e2b570999607b003a11393ea95 (patch) | |
tree | d0cf9a8469f9acfce294943fa2d6efd1d7cc9ca1 /src/test/com/jogamp/opengl | |
parent | 32f245d0ad381828c2c731840e2d978e8cbc3df3 (diff) |
Cleanup Demos: Move demos to jogl-demos.jar (here Graph + AudioVideo), ready for easy deployment and test w/ junit/ant
Diffstat (limited to 'src/test/com/jogamp/opengl')
61 files changed, 5 insertions, 12233 deletions
diff --git a/src/test/com/jogamp/opengl/test/android/LauncherUtil.java b/src/test/com/jogamp/opengl/test/android/LauncherUtil.java deleted file mode 100644 index 11dbe12cf..000000000 --- a/src/test/com/jogamp/opengl/test/android/LauncherUtil.java +++ /dev/null @@ -1,430 +0,0 @@ -/** - * Copyright 2012 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.android; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import android.app.Activity; -import android.content.Intent; -import android.net.Uri; -import android.os.Bundle; -import android.util.Log; - -/** - * Helper class to parse Uri's and programmatically add package names and properties to create an Uri or Intend. - * <p> - * The order of the Uri segments (any arguments) is preserved. - * </p> - */ -public class LauncherUtil { - - /** Default launch mode. */ - public static final String LAUNCH_ACTIVITY_NORMAL = "org.jogamp.launcher.action.LAUNCH_ACTIVITY_NORMAL"; - - /** Transparent launch mode. Note: This seems to be required to achieve translucency, since setTheme(..) doesn't work. */ - public static final String LAUNCH_ACTIVITY_TRANSPARENT = "org.jogamp.launcher.action.LAUNCH_ACTIVITY_TRANSPARENT"; - - /** FIXME: TODO */ - public static final String LAUNCH_MAIN = "org.jogamp.launcher.action.LAUNCH_MAIN"; - - /** FIXME: TODO */ - public static final String LAUNCH_JUNIT = "org.jogamp.launcher.action.LAUNCH_JUNIT"; - - /** The protocol <code>launch</code> */ - public static final String SCHEME = "launch"; - - /** The host <code>jogamp.org</code> */ - public static final String HOST = "jogamp.org"; - - static final String SYS_PKG = "sys"; - - static final String USR_PKG = "pkg"; - - static final String ARG = "arg"; - - public static abstract class BaseActivityLauncher extends Activity { - final OrderedProperties props = new OrderedProperties(); - final ArrayList<String> args = new ArrayList<String>(); - /** - * Returns the default {@link LauncherUtil#LAUNCH_ACTIVITY_NORMAL} action. - * <p> - * Should be overridden for other action, eg. {@link LauncherUtil#LAUNCH_ACTIVITY_TRANSPARENT}. - * </p> - */ - public String getAction() { return LAUNCH_ACTIVITY_NORMAL; } - - /** - * Returns the properties, which are being propagated to the target activity. - * <p> - * Maybe be used to set custom properties. - * </p> - */ - public final OrderedProperties getProperties() { return props; } - - /** - * Returns the commandline arguments, which are being propagated to the target activity. - * <p> - * Maybe be used to set custom commandline arguments. - * </p> - */ - public final ArrayList<String> getArguments() { return args; } - - /** Custom initialization hook which can be overriden to setup data, e.g. fill the properties retrieved by {@link #getProperties()}. */ - public void init() { } - - /** Returns true if this launcher activity shall end after starting the downstream activity. Defaults to <code>true</code>, override to change behavior. */ - public boolean finishAfterDelegate() { return true; } - - /** Must return the downstream Activity class name */ - public abstract String getActivityName(); - - /** Must return a list of required user packages, at least one containing the activity. */ - public abstract List<String> getUsrPackages(); - - /** Return a list of required system packages w/ native libraries, may return null or a zero sized list. */ - public abstract List<String> getSysPackages(); - - @Override - public void onCreate(final Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - init(); - - final DataSet data = new DataSet(); - data.setActivityName(getActivityName()); - data.addAllSysPackages(getSysPackages()); - data.addAllUsrPackages(getUsrPackages()); - data.addAllProperties(props); - data.addAllArguments(args); - - final Intent intent = LauncherUtil.getIntent(getAction(), data); - Log.d(getClass().getSimpleName(), "Launching Activity: "+intent); - startActivity (intent); - - if(finishAfterDelegate()) { - finish(); // done - } - } - } - - public static class OrderedProperties { - HashMap<String, String> map = new HashMap<String, String>(); - ArrayList<String> keyList = new ArrayList<String>(); - - public final void setProperty(final String key, final String value) { - if(key.equals(SYS_PKG)) { - throw new IllegalArgumentException("Illegal property key, '"+SYS_PKG+"' is reserved"); - } - if(key.equals(USR_PKG)) { - throw new IllegalArgumentException("Illegal property key, '"+USR_PKG+"' is reserved"); - } - if(key.equals(ARG)) { - throw new IllegalArgumentException("Illegal property key, '"+ARG+"' is reserved"); - } - final String oval = map.put(key, value); - if(null != oval) { - map.put(key, oval); // restore - throw new IllegalArgumentException("Property overwriting not allowed: "+key+": "+oval+" -> "+value); - } - keyList.add(key); // new key - } - - public final void addAll(final OrderedProperties props) { - final Iterator<String> argKeys = props.keyList.iterator(); - while(argKeys.hasNext()) { - final String key = argKeys.next(); - setProperty(key, props.map.get(key)); - } - } - - public final void setSystemProperties() { - final Iterator<String> argKeys = keyList.iterator(); - while(argKeys.hasNext()) { - final String key = argKeys.next(); - System.setProperty(key, map.get(key)); - } - } - public final void clearSystemProperties() { - final Iterator<String> argKeys = keyList.iterator(); - while(argKeys.hasNext()) { - System.clearProperty(argKeys.next()); - } - } - - public final String getProperty(final String key) { return map.get(key); } - public final Map<String, String> getProperties() { return map; } - - /** Returns the list of property keys in the order, as they were added. */ - public final List<String> getPropertyKeys() { return keyList; } - } - - /** - * Data set to transfer from and to launch URI consisting out of: - * <ul> - * <li>system packages w/ native libraries used on Android, which may use a cached ClassLoader, see {@link DataSet#getSysPackages()}.</li> - * <li>user packages w/o native libraries used on Android, which do not use a cached ClassLoader, see {@link DataSet#getUsrPackages()}.</li> - * <li>activity name, used to launch an Android activity, see {@link DataSet#getActivityName()}.</li> - * <li>properties, which will be added to the system properties, see {@link DataSet#getProperties()}.</li> - * <li>arguments, used to launch a class main-entry, see {@link DataSet#getArguments()}.</li> - * </ul> - * {@link DataSet#getUri()} returns a URI representation of all components. - */ - public static class DataSet { - static final char SLASH = '/'; - static final char QMARK = '?'; - static final char AMPER = '&'; - static final char ASSIG = '='; - static final String COLSLASH2 = "://"; - static final String EMPTY = ""; - - String activityName = null; - ArrayList<String> sysPackages = new ArrayList<String>(); - ArrayList<String> usrPackages = new ArrayList<String>(); - OrderedProperties properties = new OrderedProperties(); - ArrayList<String> arguments = new ArrayList<String>(); - - public final void setActivityName(final String name) { activityName = name; } - public final String getActivityName() { return activityName; } - - public final void addSysPackage(final String p) { - sysPackages.add(p); - } - public final void addAllSysPackages(final List<String> plist) { - sysPackages.addAll(plist); - } - public final List<String> getSysPackages() { return sysPackages; } - - public final void addUsrPackage(final String p) { - usrPackages.add(p); - } - public final void addAllUsrPackages(final List<String> plist) { - usrPackages.addAll(plist); - } - public final List<String> getUsrPackages() { return usrPackages; } - - public final void setProperty(final String key, final String value) { - properties.setProperty(key, value); - } - public final void addAllProperties(final OrderedProperties props) { - properties.addAll(props); - } - public final void setSystemProperties() { - properties.setSystemProperties(); - } - public final void clearSystemProperties() { - properties.clearSystemProperties(); - } - public final String getProperty(final String key) { return properties.getProperty(key); } - public final OrderedProperties getProperties() { return properties; } - public final List<String> getPropertyKeys() { return properties.getPropertyKeys(); } - - public final void addArgument(final String arg) { arguments.add(arg); } - public final void addAllArguments(final List<String> args) { - arguments.addAll(args); - } - public final ArrayList<String> getArguments() { return arguments; } - - public final Uri getUri() { - final StringBuilder sb = new StringBuilder(); - sb.append(SCHEME).append(COLSLASH2).append(HOST).append(SLASH).append(getActivityName()); - boolean needsQMark = true; - boolean needsSep = false; - if(sysPackages.size()>0) { - if( needsQMark ) { - sb.append(QMARK); - needsQMark = false; - } - for(int i=0; i<sysPackages.size(); i++) { - if(needsSep) { - sb.append(AMPER); - } - sb.append(SYS_PKG).append(ASSIG).append(sysPackages.get(i)); - needsSep = true; - } - } - if(usrPackages.size()>0) { - if( needsQMark ) { - sb.append(QMARK); - needsQMark = false; - } - for(int i=0; i<usrPackages.size(); i++) { - if(needsSep) { - sb.append(AMPER); - } - sb.append(USR_PKG).append(ASSIG).append(usrPackages.get(i)); - needsSep = true; - } - } - final Iterator<String> propKeys = properties.keyList.iterator(); - while(propKeys.hasNext()) { - if( needsQMark ) { - sb.append(QMARK); - needsQMark = false; - } - if(needsSep) { - sb.append(AMPER); - } - final String key = propKeys.next(); - sb.append(key).append(ASSIG).append(properties.map.get(key)); - needsSep = true; - } - final Iterator<String> args = arguments.iterator(); - while(args.hasNext()) { - if( needsQMark ) { - sb.append(QMARK); - needsQMark = false; - } - if(needsSep) { - sb.append(AMPER); - } - sb.append(ARG).append(ASSIG).append(args.next()); - needsSep = true; - } - return Uri.parse(sb.toString()); - } - - public static final DataSet create(final Uri uri) { - if(!uri.getScheme().equals(SCHEME)) { - return null; - } - if(!uri.getHost().equals(HOST)) { - return null; - } - final DataSet data = new DataSet(); - { - String an = uri.getPath(); - if(SLASH == an.charAt(0)) { - an = an.substring(1); - } - if(SLASH == an.charAt(an.length()-1)) { - an = an.substring(0, an.length()-1); - } - data.setActivityName(an); - } - - final String q = uri.getQuery(); - final int q_l = null != q ? q.length() : -1; - int q_e = -1; - while(q_e < q_l) { - final int q_b = q_e + 1; // next term - q_e = q.indexOf(AMPER, q_b); - if(0 == q_e) { - // single separator - continue; - } - if(0 > q_e) { - // end - q_e = q_l; - } - // n-part - final String part = q.substring(q_b, q_e); - final int assignment = part.indexOf(ASSIG); - if(0 < assignment) { - // assignment - final String k = part.substring(0, assignment); - final String v = part.substring(assignment+1); - if(k.equals(SYS_PKG)) { - if(v.length()==0) { - throw new IllegalArgumentException("Empty package name: part <"+part+">, query <"+q+"> of "+uri); - } - data.addSysPackage(v); - } else if(k.equals(USR_PKG)) { - if(v.length()==0) { - throw new IllegalArgumentException("Empty package name: part <"+part+">, query <"+q+"> of "+uri); - } - data.addUsrPackage(v); - } else if(k.equals(ARG)) { - if(v.length()==0) { - throw new IllegalArgumentException("Empty argument name: part <"+part+">, query <"+q+"> of "+uri); - } - data.addArgument(v); - } else { - data.setProperty(k, v); - } - } else { - // property key only - if( part.equals(USR_PKG) || part.equals(ARG) ) { - throw new IllegalArgumentException("Reserved key <"+part+"> in query <"+q+"> of "+uri); - } - data.setProperty(part, EMPTY); - } - } - data.validate(); - return data; - } - - public final void validate() { - if(null == activityName) { - throw new RuntimeException("Activity is not NULL"); - } - } - } - - public final static Intent getIntent(final String action, final DataSet data) { - data.validate(); - return new Intent(action, data.getUri()); - } - - public static void main(String[] args) { - if(args.length==0) { - args = new String[] { - SCHEME+"://"+HOST+"/com.jogamp.TestActivity?"+SYS_PKG+"=jogamp.pack1&"+SYS_PKG+"=javax.pack2&"+USR_PKG+"=com.jogamp.pack3&"+USR_PKG+"=com.jogamp.pack4&jogamp.common.debug=true&com.jogamp.test=false", - SCHEME+"://"+HOST+"/com.jogamp.TestActivity?"+SYS_PKG+"=jogamp.pack1&jogamp.common.debug=true&com.jogamp.test=false", - SCHEME+"://"+HOST+"/com.jogamp.TestActivity?"+USR_PKG+"=jogamp.pack1&jogamp.common.debug=true&com.jogamp.test=false", - SCHEME+"://"+HOST+"/com.jogamp.TestActivity?"+USR_PKG+"=jogamp.pack1&"+USR_PKG+"=com.jogamp.pack2", - SCHEME+"://"+HOST+"/com.jogamp.TestActivity?"+USR_PKG+"=jogamp.pack1&"+USR_PKG+"=javax.pack2&"+USR_PKG+"=com.jogamp.pack3&jogamp.common.debug=true&com.jogamp.test=false&"+ARG+"=arg1&"+ARG+"=arg2=arg2value&"+ARG+"=arg3", - SCHEME+"://"+HOST+"/com.jogamp.TestActivity?"+USR_PKG+"=jogamp.pack1&jogamp.common.debug=true&com.jogamp.test=false&"+ARG+"=arg1&"+ARG+"=arg2=arg2value&"+ARG+"=arg3", - SCHEME+"://"+HOST+"/com.jogamp.TestActivity?"+USR_PKG+"=jogamp.pack1&"+ARG+"=arg1&"+ARG+"=arg2=arg2value&"+ARG+"=arg3" - }; - } - int errors = 0; - for(int i=0; i<args.length; i++) { - final String uri_s = args[i]; - final Uri uri0 = Uri.parse(uri_s); - final DataSet data = DataSet.create(uri0); - if(null == data) { - errors++; - System.err.println("Error: NULL JogAmpLauncherUtil: <"+uri_s+"> -> "+uri0+" -> NULL"); - } else { - final Uri uri1 = data.getUri(); - if(!uri0.equals(uri1)) { - errors++; - System.err.println("Error: Not equal: <"+uri_s+"> -> "+uri0+" -> "+uri1); - } else { - System.err.println("OK: "+uri1); - } - } - } - System.err.println("LauncherUtil Self Test: Errors: "+errors); - } - -} diff --git a/src/test/com/jogamp/opengl/test/android/MovieCubeActivity0a.java b/src/test/com/jogamp/opengl/test/android/MovieCubeActivity0a.java deleted file mode 100644 index 8555d4155..000000000 --- a/src/test/com/jogamp/opengl/test/android/MovieCubeActivity0a.java +++ /dev/null @@ -1,166 +0,0 @@ -/** - * Copyright 2011 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.android; - -import java.io.IOException; -import java.net.HttpURLConnection; -import java.net.URISyntaxException; -import java.net.URLConnection; -import java.util.Arrays; - -import com.jogamp.opengl.GLCapabilities; -import com.jogamp.opengl.GLProfile; - -import jogamp.newt.driver.android.NewtBaseActivity; - -import com.jogamp.common.net.Uri; -import com.jogamp.common.util.IOUtil; -import com.jogamp.newt.NewtFactory; -import com.jogamp.newt.event.MouseAdapter; -import com.jogamp.newt.event.MouseEvent; -import com.jogamp.newt.opengl.GLWindow; -import com.jogamp.opengl.test.junit.jogl.demos.es2.av.MovieCube; -import com.jogamp.opengl.util.Animator; -import com.jogamp.opengl.util.av.GLMediaPlayer; -import com.jogamp.opengl.util.av.GLMediaPlayer.GLMediaEventListener; -import com.jogamp.opengl.util.av.GLMediaPlayer.StreamException; -import com.jogamp.opengl.util.texture.TextureSequence.TextureFrame; - -import android.os.Bundle; -import android.util.Log; - -public class MovieCubeActivity0a extends NewtBaseActivity { - static String TAG = "MovieCubeActivity0a"; - - MouseAdapter showKeyboardMouseListener = new MouseAdapter() { - @Override - public void mousePressed(final MouseEvent e) { - if( e.getPointerCount() == 4 && e.getPressure(0, true) > 0.7f ) { - ((com.jogamp.newt.Window) e.getSource()).setKeyboardVisible(true); - } - } - }; - - @Override - public void onCreate(final Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - final String[] streamLocs = new String[] { - System.getProperty("jnlp.media0_url0"), - System.getProperty("jnlp.media0_url1"), - System.getProperty("jnlp.media0_url2") }; - final Uri streamLoc = getUri(streamLocs, 0, false); - if(null == streamLoc) { throw new RuntimeException("no media reachable: "+Arrays.asList(streamLocs)); } - - // also initializes JOGL - final GLCapabilities capsMain = new GLCapabilities(GLProfile.getGL2ES2()); - capsMain.setBackgroundOpaque(false); - - // screen for layout params .. - final com.jogamp.newt.Display dpy = NewtFactory.createDisplay(null); - final com.jogamp.newt.Screen scrn = NewtFactory.createScreen(dpy, 0); - scrn.addReference(); - - try { - final Animator anim = new Animator(); - - // Main - final GLWindow glWindowMain = GLWindow.create(scrn, capsMain); - glWindowMain.setFullscreen(true); - setContentView(getWindow(), glWindowMain); - anim.add(glWindowMain); - glWindowMain.setVisible(true); - glWindowMain.addMouseListener(showKeyboardMouseListener); - - final MovieCube demoMain = new MovieCube(MovieCube.zoom_def, 0f, 0f, false); - final GLMediaPlayer mPlayer = demoMain.getGLMediaPlayer(); - mPlayer.addEventListener(new GLMediaEventListener() { - @Override - public void newFrameAvailable(final GLMediaPlayer ts, final TextureFrame newFrame, final long when) { - } - - @Override - public void attributesChanged(final GLMediaPlayer mp, final int event_mask, final long when) { - System.err.println("MovieCubeActivity0 AttributesChanges: events_mask 0x"+Integer.toHexString(event_mask)+", when "+when); - System.err.println("MovieCubeActivity0 State: "+mp); - if( 0 != ( GLMediaEventListener.EVENT_CHANGE_INIT & event_mask ) ) { - glWindowMain.addGLEventListener(demoMain); - anim.setUpdateFPSFrames(60*5, null); - anim.resetFPSCounter(); - } - if( 0 != ( GLMediaEventListener.EVENT_CHANGE_PLAY & event_mask ) ) { - anim.resetFPSCounter(); - } - if( 0 != ( ( GLMediaEventListener.EVENT_CHANGE_ERR | GLMediaEventListener.EVENT_CHANGE_EOS ) & event_mask ) ) { - final StreamException se = mPlayer.getStreamException(); - if( null != se ) { - se.printStackTrace(); - } - getActivity().finish(); - } - } - }); - demoMain.initStream(streamLoc, GLMediaPlayer.STREAM_ID_AUTO, GLMediaPlayer.STREAM_ID_AUTO, 0); - } catch (final IOException e) { - e.printStackTrace(); - } - - scrn.removeReference(); - - Log.d(TAG, "onCreate - X"); - } - - static Uri getUri(final String path[], final int off, final boolean checkAvail) { - Uri uri = null; - for(int i=off; null==uri && i<path.length; i++) { - if(null != path[i] && path[i].length()>0) { - if( checkAvail ) { - final URLConnection uc = IOUtil.getResource(path[i], null); - if( null != uc ) { - try { - uri = Uri.valueOf(uc.getURL()); - } catch (final URISyntaxException e) { - uri = null; - } - if( uc instanceof HttpURLConnection ) { - ((HttpURLConnection)uc).disconnect(); - } - } - } else { - try { - uri = Uri.cast(path[i]); - } catch (final URISyntaxException e) { - uri = null; - } - } - Log.d(TAG, "Stream: <"+path[i]+">: "+(null!=uri)); - } - } - return uri; - } -} diff --git a/src/test/com/jogamp/opengl/test/android/MovieCubeActivity0b.java b/src/test/com/jogamp/opengl/test/android/MovieCubeActivity0b.java deleted file mode 100644 index 841404516..000000000 --- a/src/test/com/jogamp/opengl/test/android/MovieCubeActivity0b.java +++ /dev/null @@ -1,168 +0,0 @@ -/** - * Copyright 2011 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.android; - -import java.io.IOException; -import java.net.HttpURLConnection; -import java.net.URISyntaxException; -import java.net.URLConnection; -import java.util.Arrays; - -import com.jogamp.opengl.GLCapabilities; -import com.jogamp.opengl.GLProfile; - -import jogamp.newt.driver.android.NewtBaseActivity; - -import com.jogamp.common.net.Uri; -import com.jogamp.common.util.IOUtil; -import com.jogamp.newt.NewtFactory; -import com.jogamp.newt.event.MouseAdapter; -import com.jogamp.newt.event.MouseEvent; -import com.jogamp.newt.opengl.GLWindow; -import com.jogamp.opengl.test.junit.jogl.demos.es2.av.MovieCube; -import com.jogamp.opengl.util.Animator; -import com.jogamp.opengl.util.av.GLMediaPlayer; -import com.jogamp.opengl.util.av.GLMediaPlayer.GLMediaEventListener; -import com.jogamp.opengl.util.av.GLMediaPlayer.StreamException; -import com.jogamp.opengl.util.texture.TextureSequence.TextureFrame; - -import android.os.Bundle; -import android.util.Log; - -public class MovieCubeActivity0b extends NewtBaseActivity { - static String TAG = "MovieCubeActivity0a"; - - MouseAdapter showKeyboardMouseListener = new MouseAdapter() { - @Override - public void mousePressed(final MouseEvent e) { - if( e.getPointerCount() == 4 && e.getPressure(0, true) > 0.7f ) { - ((com.jogamp.newt.Window) e.getSource()).setKeyboardVisible(true); - } - } - }; - - @Override - public void onCreate(final Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - final String[] streamLocs = new String[] { - System.getProperty("jnlp.media0_url0"), - System.getProperty("jnlp.media0_url1"), - System.getProperty("jnlp.media0_url2") }; - final Uri streamLoc = getUri(streamLocs, 0, false); - if(null == streamLoc) { throw new RuntimeException("no media reachable: "+Arrays.asList(streamLocs)); } - - // also initializes JOGL - final GLCapabilities capsMain = new GLCapabilities(GLProfile.getGL2ES2()); - capsMain.setNumSamples(4); - capsMain.setSampleBuffers(true); - capsMain.setBackgroundOpaque(false); - - // screen for layout params .. - final com.jogamp.newt.Display dpy = NewtFactory.createDisplay(null); - final com.jogamp.newt.Screen scrn = NewtFactory.createScreen(dpy, 0); - scrn.addReference(); - - try { - final Animator anim = new Animator(); - - // Main - final GLWindow glWindowMain = GLWindow.create(scrn, capsMain); - glWindowMain.setFullscreen(true); - setContentView(getWindow(), glWindowMain); - anim.add(glWindowMain); - glWindowMain.setVisible(true); - glWindowMain.addMouseListener(showKeyboardMouseListener); - - final MovieCube demoMain = new MovieCube(MovieCube.zoom_def, 0f, 0f, true); - final GLMediaPlayer mPlayer = demoMain.getGLMediaPlayer(); - mPlayer.addEventListener(new GLMediaEventListener() { - @Override - public void newFrameAvailable(final GLMediaPlayer ts, final TextureFrame newFrame, final long when) { - } - - @Override - public void attributesChanged(final GLMediaPlayer mp, final int event_mask, final long when) { - System.err.println("MovieCubeActivity0 AttributesChanges: events_mask 0x"+Integer.toHexString(event_mask)+", when "+when); - System.err.println("MovieCubeActivity0 State: "+mp); - if( 0 != ( GLMediaEventListener.EVENT_CHANGE_INIT & event_mask ) ) { - glWindowMain.addGLEventListener(demoMain); - anim.setUpdateFPSFrames(60*5, null); - anim.resetFPSCounter(); - } - if( 0 != ( GLMediaEventListener.EVENT_CHANGE_PLAY & event_mask ) ) { - anim.resetFPSCounter(); - } - if( 0 != ( ( GLMediaEventListener.EVENT_CHANGE_ERR | GLMediaEventListener.EVENT_CHANGE_EOS ) & event_mask ) ) { - final StreamException se = mPlayer.getStreamException(); - if( null != se ) { - se.printStackTrace(); - } - getActivity().finish(); - } - } - }); - demoMain.initStream(streamLoc, GLMediaPlayer.STREAM_ID_AUTO, GLMediaPlayer.STREAM_ID_AUTO, 0); - } catch (final IOException e) { - e.printStackTrace(); - } - - scrn.removeReference(); - - Log.d(TAG, "onCreate - X"); - } - - static Uri getUri(final String path[], final int off, final boolean checkAvail) { - Uri uri = null; - for(int i=off; null==uri && i<path.length; i++) { - if(null != path[i] && path[i].length()>0) { - if( checkAvail ) { - final URLConnection uc = IOUtil.getResource(path[i], null); - if( null != uc ) { - try { - uri = Uri.valueOf(uc.getURL()); - } catch (final URISyntaxException e) { - uri = null; - } - if( uc instanceof HttpURLConnection ) { - ((HttpURLConnection)uc).disconnect(); - } - } - } else { - try { - uri = Uri.cast(path[i]); - } catch (final URISyntaxException e) { - uri = null; - } - } - Log.d(TAG, "Stream: <"+path[i]+">: "+(null!=uri)); - } - } - return uri; - } -} diff --git a/src/test/com/jogamp/opengl/test/android/MovieCubeActivityLauncher0a.java b/src/test/com/jogamp/opengl/test/android/MovieCubeActivityLauncher0a.java deleted file mode 100644 index a8223a76f..000000000 --- a/src/test/com/jogamp/opengl/test/android/MovieCubeActivityLauncher0a.java +++ /dev/null @@ -1,86 +0,0 @@ -/** - * Copyright 2012 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.android; - -import java.util.Arrays; -import java.util.List; - -import com.jogamp.opengl.test.android.LauncherUtil.OrderedProperties; - -public class MovieCubeActivityLauncher0a extends LauncherUtil.BaseActivityLauncher { - - static String demo = "com.jogamp.opengl.test.android.MovieCubeActivity0a"; - static String[] sys_pkgs = new String[] { "com.jogamp.common", "com.jogamp.opengl" }; - static String[] usr_pkgs = new String[] { "com.jogamp.opengl.test" }; - - @Override - public void init() { - final OrderedProperties props = getProperties(); - props.setProperty("jnlp.media0_url0", "http://archive.org/download/BigBuckBunny_328/BigBuckBunny_512kb.mp4"); - props.setProperty("jnlp.media1_url1", "http://archive.org/download/ElephantsDream/ed_1024_512kb.mp4"); - props.setProperty("jnlp.media0_url2", "file:///mnt/sdcard/Movies/BigBuckBunny_320x180.mp4"); - // props.setProperty("jogamp.debug.JNILibLoader", "true"); - // props.setProperty("jogamp.debug.NativeLibrary", "true"); - // props.setProperty("jogamp.debug.NativeLibrary.Lookup", "true"); - // props.setProperty("jogamp.debug.IOUtil", "true"); - // props.setProperty("jogamp.debug.Lock", "true"); - // props.setProperty("jogamp.debug.Lock.TraceLock", "true"); - // props.setProperty("nativewindow.debug", "all"); - // props.setProperty("nativewindow.debug.GraphicsConfiguration", "true"); - // props.setProperty("jogl.debug", "all"); - // props.setProperty("jogl.debug.GLProfile", "true"); - // props.setProperty("jogl.debug.GLDrawable", "true"); - // props.setProperty("jogl.debug.GLContext", "true"); - props.setProperty("jogl.debug.GLMediaPlayer", "true"); - props.setProperty("jogl.debug.GLSLCode", "true"); - // props.setProperty("jogl.debug.CapabilitiesChooser", "true"); - // props.setProperty("jogl.debug.GLSLState", "true"); - // props.setProperty("jogl.debug.DebugGL", "true"); - // props.setProperty("jogl.debug.TraceGL", "true"); - // props.setProperty("newt.debug", "all"); - // props.setProperty("newt.debug.Window", "true"); - // props.setProperty("newt.debug.Window.MouseEvent", "true"); - // props.setProperty("newt.debug.Window.KeyEvent", "true"); - props.setProperty("jogamp.debug.IOUtil", "true"); - } - - @Override - public String getActivityName() { - return demo; - } - - @Override - public List<String> getSysPackages() { - return Arrays.asList(sys_pkgs); - } - - @Override - public List<String> getUsrPackages() { - return Arrays.asList(usr_pkgs); - } -} diff --git a/src/test/com/jogamp/opengl/test/android/MovieCubeActivityLauncher0b.java b/src/test/com/jogamp/opengl/test/android/MovieCubeActivityLauncher0b.java deleted file mode 100644 index 3286f673a..000000000 --- a/src/test/com/jogamp/opengl/test/android/MovieCubeActivityLauncher0b.java +++ /dev/null @@ -1,86 +0,0 @@ -/** - * Copyright 2012 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.android; - -import java.util.Arrays; -import java.util.List; - -import com.jogamp.opengl.test.android.LauncherUtil.OrderedProperties; - -public class MovieCubeActivityLauncher0b extends LauncherUtil.BaseActivityLauncher { - - static String demo = "com.jogamp.opengl.test.android.MovieCubeActivity0b"; - static String[] sys_pkgs = new String[] { "com.jogamp.common", "com.jogamp.opengl" }; - static String[] usr_pkgs = new String[] { "com.jogamp.opengl.test" }; - - @Override - public void init() { - final OrderedProperties props = getProperties(); - props.setProperty("jnlp.media0_url0", "http://archive.org/download/BigBuckBunny_328/BigBuckBunny_512kb.mp4"); - props.setProperty("jnlp.media1_url1", "http://archive.org/download/ElephantsDream/ed_1024_512kb.mp4"); - props.setProperty("jnlp.media0_url2", "file:///mnt/sdcard/Movies/BigBuckBunny_320x180.mp4"); - // props.setProperty("jogamp.debug.JNILibLoader", "true"); - // props.setProperty("jogamp.debug.NativeLibrary", "true"); - // props.setProperty("jogamp.debug.NativeLibrary.Lookup", "true"); - // props.setProperty("jogamp.debug.IOUtil", "true"); - // props.setProperty("jogamp.debug.Lock", "true"); - // props.setProperty("jogamp.debug.Lock.TraceLock", "true"); - // props.setProperty("nativewindow.debug", "all"); - // props.setProperty("nativewindow.debug.GraphicsConfiguration", "true"); - // props.setProperty("jogl.debug", "all"); - // props.setProperty("jogl.debug.GLProfile", "true"); - // props.setProperty("jogl.debug.GLDrawable", "true"); - // props.setProperty("jogl.debug.GLContext", "true"); - // props.setProperty("jogl.debug.GLMediaPlayer", "true"); - props.setProperty("jogl.debug.GLSLCode", "true"); - // props.setProperty("jogl.debug.CapabilitiesChooser", "true"); - // props.setProperty("jogl.debug.GLSLState", "true"); - // props.setProperty("jogl.debug.DebugGL", "true"); - // props.setProperty("jogl.debug.TraceGL", "true"); - // props.setProperty("newt.debug", "all"); - // props.setProperty("newt.debug.Window", "true"); - // props.setProperty("newt.debug.Window.MouseEvent", "true"); - // props.setProperty("newt.debug.Window.KeyEvent", "true"); - props.setProperty("jogamp.debug.IOUtil", "true"); - } - - @Override - public String getActivityName() { - return demo; - } - - @Override - public List<String> getSysPackages() { - return Arrays.asList(sys_pkgs); - } - - @Override - public List<String> getUsrPackages() { - return Arrays.asList(usr_pkgs); - } -} diff --git a/src/test/com/jogamp/opengl/test/android/MovieCubeActivityLauncher1a.java b/src/test/com/jogamp/opengl/test/android/MovieCubeActivityLauncher1a.java deleted file mode 100644 index 1b1743f5b..000000000 --- a/src/test/com/jogamp/opengl/test/android/MovieCubeActivityLauncher1a.java +++ /dev/null @@ -1,86 +0,0 @@ -/** - * Copyright 2012 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.android; - -import java.util.Arrays; -import java.util.List; - -import com.jogamp.opengl.test.android.LauncherUtil.OrderedProperties; - -public class MovieCubeActivityLauncher1a extends LauncherUtil.BaseActivityLauncher { - - static String demo = "com.jogamp.opengl.test.android.MovieCubeActivity0a"; - static String[] sys_pkgs = new String[] { "com.jogamp.common", "com.jogamp.opengl" }; - static String[] usr_pkgs = new String[] { "com.jogamp.opengl.test" }; - - @Override - public void init() { - final OrderedProperties props = getProperties(); - props.setProperty("jnlp.media0_url0", "camera:/0"); - props.setProperty("jnlp.media0_url1", ""); - props.setProperty("jnlp.media1_url2", ""); - // props.setProperty("jogamp.debug.JNILibLoader", "true"); - // props.setProperty("jogamp.debug.NativeLibrary", "true"); - // props.setProperty("jogamp.debug.NativeLibrary.Lookup", "true"); - // props.setProperty("jogamp.debug.IOUtil", "true"); - // props.setProperty("jogamp.debug.Lock", "true"); - // props.setProperty("jogamp.debug.Lock.TraceLock", "true"); - // props.setProperty("nativewindow.debug", "all"); - // props.setProperty("nativewindow.debug.GraphicsConfiguration", "true"); - // props.setProperty("jogl.debug", "all"); - // props.setProperty("jogl.debug.GLProfile", "true"); - // props.setProperty("jogl.debug.GLDrawable", "true"); - // props.setProperty("jogl.debug.GLContext", "true"); - props.setProperty("jogl.debug.GLMediaPlayer", "true"); - props.setProperty("jogl.debug.GLSLCode", "true"); - // props.setProperty("jogl.debug.CapabilitiesChooser", "true"); - // props.setProperty("jogl.debug.GLSLState", "true"); - // props.setProperty("jogl.debug.DebugGL", "true"); - // props.setProperty("jogl.debug.TraceGL", "true"); - // props.setProperty("newt.debug", "all"); - // props.setProperty("newt.debug.Window", "true"); - // props.setProperty("newt.debug.Window.MouseEvent", "true"); - // props.setProperty("newt.debug.Window.KeyEvent", "true"); - // props.setProperty("jogamp.debug.IOUtil", "true"); - } - - @Override - public String getActivityName() { - return demo; - } - - @Override - public List<String> getSysPackages() { - return Arrays.asList(sys_pkgs); - } - - @Override - public List<String> getUsrPackages() { - return Arrays.asList(usr_pkgs); - } -} diff --git a/src/test/com/jogamp/opengl/test/android/MovieCubeActivityLauncher1b.java b/src/test/com/jogamp/opengl/test/android/MovieCubeActivityLauncher1b.java deleted file mode 100644 index 5135122a1..000000000 --- a/src/test/com/jogamp/opengl/test/android/MovieCubeActivityLauncher1b.java +++ /dev/null @@ -1,86 +0,0 @@ -/** - * Copyright 2012 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.android; - -import java.util.Arrays; -import java.util.List; - -import com.jogamp.opengl.test.android.LauncherUtil.OrderedProperties; - -public class MovieCubeActivityLauncher1b extends LauncherUtil.BaseActivityLauncher { - - static String demo = "com.jogamp.opengl.test.android.MovieCubeActivity0b"; - static String[] sys_pkgs = new String[] { "com.jogamp.common", "com.jogamp.opengl" }; - static String[] usr_pkgs = new String[] { "com.jogamp.opengl.test" }; - - @Override - public void init() { - final OrderedProperties props = getProperties(); - props.setProperty("jnlp.media0_url0", "camera:/1"); - props.setProperty("jnlp.media0_url1", ""); - props.setProperty("jnlp.media1_url2", ""); - // props.setProperty("jogamp.debug.JNILibLoader", "true"); - // props.setProperty("jogamp.debug.NativeLibrary", "true"); - // props.setProperty("jogamp.debug.NativeLibrary.Lookup", "true"); - // props.setProperty("jogamp.debug.IOUtil", "true"); - // props.setProperty("jogamp.debug.Lock", "true"); - // props.setProperty("jogamp.debug.Lock.TraceLock", "true"); - // props.setProperty("nativewindow.debug", "all"); - // props.setProperty("nativewindow.debug.GraphicsConfiguration", "true"); - // props.setProperty("jogl.debug", "all"); - // props.setProperty("jogl.debug.GLProfile", "true"); - // props.setProperty("jogl.debug.GLDrawable", "true"); - // props.setProperty("jogl.debug.GLContext", "true"); - // props.setProperty("jogl.debug.GLMediaPlayer", "true"); - props.setProperty("jogl.debug.GLSLCode", "true"); - // props.setProperty("jogl.debug.CapabilitiesChooser", "true"); - // props.setProperty("jogl.debug.GLSLState", "true"); - // props.setProperty("jogl.debug.DebugGL", "true"); - // props.setProperty("jogl.debug.TraceGL", "true"); - // props.setProperty("newt.debug", "all"); - // props.setProperty("newt.debug.Window", "true"); - // props.setProperty("newt.debug.Window.MouseEvent", "true"); - // props.setProperty("newt.debug.Window.KeyEvent", "true"); - // props.setProperty("jogamp.debug.IOUtil", "true"); - } - - @Override - public String getActivityName() { - return demo; - } - - @Override - public List<String> getSysPackages() { - return Arrays.asList(sys_pkgs); - } - - @Override - public List<String> getUsrPackages() { - return Arrays.asList(usr_pkgs); - } -} diff --git a/src/test/com/jogamp/opengl/test/android/MovieSimpleActivity0.java b/src/test/com/jogamp/opengl/test/android/MovieSimpleActivity0.java deleted file mode 100644 index e6aba9455..000000000 --- a/src/test/com/jogamp/opengl/test/android/MovieSimpleActivity0.java +++ /dev/null @@ -1,159 +0,0 @@ -/** - * Copyright 2011 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.android; - -import java.net.HttpURLConnection; -import java.net.URISyntaxException; -import java.net.URLConnection; -import java.util.Arrays; - -import com.jogamp.opengl.GLCapabilities; -import com.jogamp.opengl.GLProfile; - -import jogamp.newt.driver.android.NewtBaseActivity; - -import com.jogamp.common.net.Uri; -import com.jogamp.common.util.IOUtil; -import com.jogamp.newt.NewtFactory; -import com.jogamp.newt.Window; -import com.jogamp.newt.event.MouseAdapter; -import com.jogamp.newt.event.MouseEvent; -import com.jogamp.newt.opengl.GLWindow; -import com.jogamp.opengl.test.junit.jogl.demos.es2.av.MovieSimple; -import com.jogamp.opengl.util.Animator; -import com.jogamp.opengl.util.av.GLMediaPlayer; -import com.jogamp.opengl.util.av.GLMediaPlayer.GLMediaEventListener; -import com.jogamp.opengl.util.av.GLMediaPlayer.StreamException; -import com.jogamp.opengl.util.texture.TextureSequence.TextureFrame; - -import android.os.Bundle; -import android.util.Log; - -public class MovieSimpleActivity0 extends NewtBaseActivity { - static String TAG = "MovieSimpleActivity0"; - - MouseAdapter toFrontMouseListener = new MouseAdapter() { - public void mouseClicked(final MouseEvent e) { - final Object src = e.getSource(); - if(src instanceof Window) { - ((Window)src).requestFocus(false); - } - } }; - - @Override - public void onCreate(final Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - final String[] streamLocs = new String[] { - System.getProperty("jnlp.media0_url0"), - System.getProperty("jnlp.media0_url1"), - System.getProperty("jnlp.media0_url2") }; - final Uri streamLoc = getUri(streamLocs, 0, false); - if(null == streamLoc) { throw new RuntimeException("no media reachable: "+Arrays.asList(streamLocs)); } - - // also initializes JOGL - final GLCapabilities capsMain = new GLCapabilities(GLProfile.getGL2ES2()); - capsMain.setNumSamples(4); - capsMain.setSampleBuffers(true); - capsMain.setBackgroundOpaque(false); - - // screen for layout params .. - final com.jogamp.newt.Display dpy = NewtFactory.createDisplay(null); - final com.jogamp.newt.Screen scrn = NewtFactory.createScreen(dpy, 0); - scrn.addReference(); - - final Animator anim = new Animator(); - - // Main - final GLWindow glWindowMain = GLWindow.create(scrn, capsMain); - glWindowMain.setFullscreen(true); - setContentView(getWindow(), glWindowMain); - anim.add(glWindowMain); - glWindowMain.setVisible(true); - - final MovieSimple demoMain = new MovieSimple(null); - demoMain.setScaleOrig(true); - final GLMediaPlayer mPlayer = demoMain.getGLMediaPlayer(); - mPlayer.addEventListener( new GLMediaPlayer.GLMediaEventListener() { - @Override - public void newFrameAvailable(final GLMediaPlayer ts, final TextureFrame newFrame, final long when) { } - - @Override - public void attributesChanged(final GLMediaPlayer mp, final int event_mask, final long when) { - System.err.println("MovieSimpleActivity0 AttributesChanges: events_mask 0x"+Integer.toHexString(event_mask)+", when "+when); - System.err.println("MovieSimpleActivity0 State: "+mp); - if( 0 != ( GLMediaEventListener.EVENT_CHANGE_INIT & event_mask ) ) { - glWindowMain.addGLEventListener(demoMain); - anim.setUpdateFPSFrames(60*5, System.err); - anim.resetFPSCounter(); - } - if( 0 != ( ( GLMediaEventListener.EVENT_CHANGE_ERR | GLMediaEventListener.EVENT_CHANGE_EOS ) & event_mask ) ) { - final StreamException se = mPlayer.getStreamException(); - if( null != se ) { - se.printStackTrace(); - } - getActivity().finish(); - } - } - }); - demoMain.initStream(streamLoc, GLMediaPlayer.STREAM_ID_AUTO, GLMediaPlayer.STREAM_ID_AUTO, 0); - - scrn.removeReference(); - - Log.d(TAG, "onCreate - X"); - } - - static Uri getUri(final String path[], final int off, final boolean checkAvail) { - Uri uri = null; - for(int i=off; null==uri && i<path.length; i++) { - if(null != path[i] && path[i].length()>0) { - if( checkAvail ) { - final URLConnection uc = IOUtil.getResource(path[i], null); - if( null != uc ) { - try { - uri = Uri.valueOf(uc.getURL()); - } catch (final URISyntaxException e) { - uri = null; - } - if( uc instanceof HttpURLConnection ) { - ((HttpURLConnection)uc).disconnect(); - } - } - } else { - try { - uri = Uri.cast(path[i]); - } catch (final URISyntaxException e) { - uri = null; - } - } - Log.d(TAG, "Stream: <"+path[i]+">: "+(null!=uri)); - } - } - return uri; - } -} diff --git a/src/test/com/jogamp/opengl/test/android/MovieSimpleActivity1.java b/src/test/com/jogamp/opengl/test/android/MovieSimpleActivity1.java deleted file mode 100644 index 086532015..000000000 --- a/src/test/com/jogamp/opengl/test/android/MovieSimpleActivity1.java +++ /dev/null @@ -1,262 +0,0 @@ -/** - * Copyright 2011 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.android; - -import java.net.HttpURLConnection; -import java.net.URISyntaxException; -import java.net.URLConnection; -import java.util.Arrays; - -import com.jogamp.nativewindow.util.Rectangle; -import com.jogamp.opengl.GLAutoDrawable; -import com.jogamp.opengl.GLCapabilities; -import com.jogamp.opengl.GLProfile; -import com.jogamp.opengl.GLRunnable; - -import jogamp.newt.driver.android.NewtBaseActivity; - -import com.jogamp.common.net.Uri; -import com.jogamp.common.util.IOUtil; -import com.jogamp.newt.NewtFactory; -import com.jogamp.newt.Window; -import com.jogamp.newt.event.MouseAdapter; -import com.jogamp.newt.event.MouseEvent; -import com.jogamp.newt.opengl.GLWindow; -import com.jogamp.opengl.test.junit.jogl.demos.es2.av.MovieSimple; -import com.jogamp.opengl.util.Animator; -import com.jogamp.opengl.util.av.GLMediaPlayer; -import com.jogamp.opengl.util.av.GLMediaPlayer.GLMediaEventListener; -import com.jogamp.opengl.util.av.GLMediaPlayer.StreamException; -import com.jogamp.opengl.util.texture.TextureSequence.TextureFrame; - -import android.os.Bundle; -import android.util.Log; -import android.view.Gravity; - -public class MovieSimpleActivity1 extends NewtBaseActivity { - static String TAG = "MovieSimpleActivity1"; - - MouseAdapter toFrontMouseListener = new MouseAdapter() { - public void mouseClicked(final MouseEvent e) { - final Object src = e.getSource(); - if(src instanceof Window) { - ((Window)src).requestFocus(false); - } - } }; - - @Override - public void onCreate(final Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - final boolean mPlayerNoZoom = Boolean.valueOf(System.getProperty("jnlp.mplayer.nozoom")); - final boolean mPlayerHUD = Boolean.valueOf(System.getProperty("jnlp.mplayer.hud")); - final boolean mPlayerSharedHUD = mPlayerHUD && Boolean.valueOf(System.getProperty("jnlp.mplayer.hud.shared")); - Log.d(TAG, "onCreate - 0 - mPlayerNoScale "+mPlayerNoZoom+", mPlayerHUD "+mPlayerHUD+", mPlayerSharedHUD "+mPlayerSharedHUD); - - final String[] streamLocs = new String[] { - System.getProperty("jnlp.media0_url0"), - System.getProperty("jnlp.media0_url1"), - System.getProperty("jnlp.media0_url2") }; - final Uri streamLoc0 = getUri(streamLocs, 2, false); - if(null == streamLoc0) { throw new RuntimeException("no media reachable: "+Arrays.asList(streamLocs)); } - - final Uri streamLoc1; - { - Uri _streamLoc1 = null; - if(mPlayerHUD && !mPlayerSharedHUD) { - final String[] urls1 = new String[] { System.getProperty("jnlp.media1_url0") }; - _streamLoc1 = getUri(urls1, 1, false); - } - if(null == _streamLoc1) { _streamLoc1 = streamLoc0; } - streamLoc1 = _streamLoc1; - } - - setTransparencyTheme(); - setFullscreenFeature(getWindow(), true); - - final android.view.ViewGroup viewGroup = new android.widget.FrameLayout(getActivity().getApplicationContext()); - getWindow().setContentView(viewGroup); - - // also initializes JOGL - final GLCapabilities capsMain = new GLCapabilities(GLProfile.getGL2ES2()); - capsMain.setNumSamples(4); - capsMain.setSampleBuffers(true); - capsMain.setBackgroundOpaque(!mPlayerHUD); - - // screen for layout params .. - final com.jogamp.newt.Display dpy = NewtFactory.createDisplay(null); - final com.jogamp.newt.Screen scrn = NewtFactory.createScreen(dpy, 0); - scrn.addReference(); - - final Animator anim = new Animator(); - - // Main - final GLWindow glWindowMain = GLWindow.create(scrn, capsMain); - { - final int padding = mPlayerHUD ? 32 : 0; - final android.view.View androidView = ((jogamp.newt.driver.android.WindowDriver)glWindowMain.getDelegatedWindow()).getAndroidView(); - glWindowMain.setSurfaceSize(scrn.getWidth()-padding, scrn.getHeight()-padding); - glWindowMain.setUndecorated(true); - // setContentView(getWindow(), glWindowMain); - viewGroup.addView(androidView, new android.widget.FrameLayout.LayoutParams(glWindowMain.getSurfaceWidth(), glWindowMain.getSurfaceHeight(), Gravity.BOTTOM|Gravity.RIGHT)); - registerNEWTWindow(glWindowMain); - } - anim.add(glWindowMain); - glWindowMain.setVisible(true); - - final MovieSimple demoMain = new MovieSimple(null); - final GLMediaPlayer mPlayerMain = demoMain.getGLMediaPlayer(); - if(mPlayerHUD) { - demoMain.setEffects(MovieSimple.EFFECT_GRADIENT_BOTTOM2TOP); - demoMain.setTransparency(0.9f); - } - demoMain.setScaleOrig(mPlayerNoZoom); - mPlayerMain.addEventListener( new GLMediaPlayer.GLMediaEventListener() { - @Override - public void newFrameAvailable(final GLMediaPlayer ts, final TextureFrame newFrame, final long when) { } - - @Override - public void attributesChanged(final GLMediaPlayer mp, final int event_mask, final long when) { - System.err.println("MovieSimpleActivity1 AttributesChanges: events_mask 0x"+Integer.toHexString(event_mask)+", when "+when); - System.err.println("MovieSimpleActivity1 State: "+mp); - if( 0 != ( GLMediaEventListener.EVENT_CHANGE_INIT & event_mask ) ) { - glWindowMain.addGLEventListener(demoMain); - anim.setUpdateFPSFrames(60*5, System.err); - anim.resetFPSCounter(); - } - if( 0 != ( ( GLMediaEventListener.EVENT_CHANGE_ERR | GLMediaEventListener.EVENT_CHANGE_EOS ) & event_mask ) ) { - final StreamException se = mPlayerMain.getStreamException(); - if( null != se ) { - se.printStackTrace(); - } - getActivity().finish(); - } - } - }); - demoMain.initStream(streamLoc0, GLMediaPlayer.STREAM_ID_AUTO, GLMediaPlayer.STREAM_ID_AUTO, 0); - - if(mPlayerHUD) { - final GLMediaPlayer mPlayerShared = mPlayerSharedHUD ? mPlayerMain : null; - final GLCapabilities capsHUD = new GLCapabilities(GLProfile.getGL2ES2()); - capsHUD.setNumSamples(4); - capsHUD.setSampleBuffers(true); - capsHUD.setBackgroundOpaque(false); - final GLWindow glWindowHUD = GLWindow.create(scrn, capsHUD); - glWindowMain.invoke(false, new GLRunnable() { - @Override - public boolean run(final GLAutoDrawable drawable) { - final GLMediaPlayer mPlayerSub; - final MovieSimple demoHUD; - final Rectangle windowBounds = (Rectangle) scrn.getViewportInWindowUnits().cloneMutable(); - if(null != mPlayerShared) { - if(0 < mPlayerShared.getWidth() && mPlayerShared.getWidth()<scrn.getWidth()/2 && - 0 < mPlayerShared.getHeight() && mPlayerShared.getHeight()<scrn.getHeight()/2) { - final int[] wh = glWindowHUD.convertToWindowUnits(new int[]{mPlayerShared.getWidth(), mPlayerShared.getHeight()}); - windowBounds.setWidth( wh[0] ); - windowBounds.setHeight( wh[1] ); - } - glWindowHUD.setSharedAutoDrawable(glWindowMain); - demoHUD = new MovieSimple(mPlayerShared); - mPlayerSub = mPlayerShared; - } else { - demoHUD = new MovieSimple(null); - mPlayerSub = demoHUD.getGLMediaPlayer(); - } - mPlayerSub.addEventListener( new GLMediaPlayer.GLMediaEventListener() { - @Override - public void newFrameAvailable(final GLMediaPlayer ts, final TextureFrame newFrame, final long when) { } - - @Override - public void attributesChanged(final GLMediaPlayer mp, final int event_mask, final long when) { - if( 0 != ( GLMediaEventListener.EVENT_CHANGE_INIT & event_mask ) ) { - glWindowHUD.addGLEventListener(demoHUD); - } - if( 0 != ( ( GLMediaEventListener.EVENT_CHANGE_ERR | GLMediaEventListener.EVENT_CHANGE_EOS ) & event_mask ) ) { - final StreamException se = mPlayerMain.getStreamException(); - if( null != se ) { - se.printStackTrace(); - } - getActivity().finish(); - } - } - }); - demoHUD.initStream(streamLoc1, GLMediaPlayer.STREAM_ID_AUTO, GLMediaPlayer.STREAM_ID_AUTO, 0); - - glWindowHUD.setPosition(windowBounds.getX(), windowBounds.getY()); - glWindowHUD.setSize(windowBounds.getWidth(), windowBounds.getHeight()); - System.err.println("HUD: "+mPlayerHUD); - System.err.println("HUD: "+windowBounds); - glWindowHUD.addMouseListener(toFrontMouseListener); - - viewGroup.post(new Runnable() { - public void run() { - final android.view.View androidView = ((jogamp.newt.driver.android.WindowDriver)glWindowHUD.getDelegatedWindow()).getAndroidView(); - // addContentView(getWindow(), glWindowHUD, new android.view.ViewGroup.LayoutParams(glWindowHUD.getWidth(), glWindowHUD.getHeight())); - viewGroup.addView(androidView, new android.widget.FrameLayout.LayoutParams(glWindowHUD.getSurfaceWidth(), glWindowHUD.getSurfaceHeight(), Gravity.TOP|Gravity.LEFT)); - registerNEWTWindow(glWindowHUD); - anim.add(glWindowHUD); - glWindowHUD.setVisible(true); - } } ); - return true; - } } ); - } - - scrn.removeReference(); - - Log.d(TAG, "onCreate - X"); - } - - static Uri getUri(final String path[], final int off, final boolean checkAvail) { - Uri uri = null; - for(int i=off; null==uri && i<path.length; i++) { - if(null != path[i] && path[i].length()>0) { - if( checkAvail ) { - final URLConnection uc = IOUtil.getResource(path[i], null); - if( null != uc ) { - try { - uri = Uri.valueOf(uc.getURL()); - } catch (final URISyntaxException e) { - uri = null; - } - if( uc instanceof HttpURLConnection ) { - ((HttpURLConnection)uc).disconnect(); - } - } - } else { - try { - uri = Uri.cast(path[i]); - } catch (final URISyntaxException e) { - uri = null; - } - } - Log.d(TAG, "Stream: <"+path[i]+">: "+(null!=uri)); - } - } - return uri; - } -} diff --git a/src/test/com/jogamp/opengl/test/android/MovieSimpleActivityLauncher00b.java b/src/test/com/jogamp/opengl/test/android/MovieSimpleActivityLauncher00b.java deleted file mode 100644 index 38b7a71db..000000000 --- a/src/test/com/jogamp/opengl/test/android/MovieSimpleActivityLauncher00b.java +++ /dev/null @@ -1,83 +0,0 @@ -/** - * Copyright 2012 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.android; - -import java.util.Arrays; -import java.util.List; - -import com.jogamp.opengl.test.android.LauncherUtil.OrderedProperties; - -public class MovieSimpleActivityLauncher00b extends LauncherUtil.BaseActivityLauncher { - - static String demo = "com.jogamp.opengl.test.android.MovieSimpleActivity0"; - static String[] sys_pkgs = new String[] { "com.jogamp.common", "com.jogamp.opengl" }; - static String[] usr_pkgs = new String[] { "com.jogamp.opengl.test" }; - - @Override - public void init() { - final OrderedProperties props = getProperties(); - props.setProperty("jnlp.media0_url0", "http://archive.org/download/BigBuckBunny_328/BigBuckBunny_512kb.mp4"); - props.setProperty("jnlp.media0_url1", "http://video.webmfiles.org/big-buck-bunny_trailer.webm"); - props.setProperty("jnlp.media0_url2", "file:///mnt/sdcard/Movies/BigBuckBunny_320x180.mp4"); - // props.setProperty("jogamp.debug.JNILibLoader", "true"); - // props.setProperty("jogamp.debug.NativeLibrary", "true"); - // props.setProperty("jogamp.debug.NativeLibrary.Lookup", "true"); - // props.setProperty("jogamp.debug.IOUtil", "true"); - // props.setProperty("nativewindow.debug", "all"); - // props.setProperty("nativewindow.debug.GraphicsConfiguration", "true"); - // props.setProperty("jogl.debug", "all"); - // props.setProperty("jogl.debug.GLProfile", "true"); - // props.setProperty("jogl.debug.GLDrawable", "true"); - props.setProperty("jogl.debug.GLContext", "true"); - props.setProperty("jogl.debug.GLMediaPlayer", "true"); - props.setProperty("jogl.debug.GLSLCode", "true"); - // props.setProperty("jogl.debug.CapabilitiesChooser", "true"); - // props.setProperty("jogl.debug.GLSLState", "true"); - // props.setProperty("jogl.debug.DebugGL", "true"); - // props.setProperty("jogl.debug.TraceGL", "true"); - // props.setProperty("newt.debug", "all"); - // props.setProperty("newt.debug.Window", "true"); - // props.setProperty("newt.debug.Window.MouseEvent", "true"); - // props.setProperty("newt.debug.Window.KeyEvent", "true"); - props.setProperty("jogamp.debug.IOUtil", "true"); - } - - @Override - public String getActivityName() { - return demo; - } - @Override - public List<String> getSysPackages() { - return Arrays.asList(sys_pkgs); - } - - @Override - public List<String> getUsrPackages() { - return Arrays.asList(usr_pkgs); - } -} diff --git a/src/test/com/jogamp/opengl/test/android/MovieSimpleActivityLauncher00c.java b/src/test/com/jogamp/opengl/test/android/MovieSimpleActivityLauncher00c.java deleted file mode 100644 index a65896339..000000000 --- a/src/test/com/jogamp/opengl/test/android/MovieSimpleActivityLauncher00c.java +++ /dev/null @@ -1,83 +0,0 @@ -/** - * Copyright 2012 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.android; - -import java.util.Arrays; -import java.util.List; - -import com.jogamp.opengl.test.android.LauncherUtil.OrderedProperties; - -public class MovieSimpleActivityLauncher00c extends LauncherUtil.BaseActivityLauncher { - - static String demo = "com.jogamp.opengl.test.android.MovieSimpleActivity0"; - static String[] sys_pkgs = new String[] { "com.jogamp.common", "com.jogamp.opengl" }; - static String[] usr_pkgs = new String[] { "com.jogamp.opengl.test" }; - - @Override - public void init() { - final OrderedProperties props = getProperties(); - props.setProperty("jnlp.media0_url0", "camera:/0"); - props.setProperty("jnlp.media0_url1", ""); - props.setProperty("jnlp.media0_url2", ""); - // props.setProperty("jogamp.debug.JNILibLoader", "true"); - // props.setProperty("jogamp.debug.NativeLibrary", "true"); - // props.setProperty("jogamp.debug.NativeLibrary.Lookup", "true"); - // props.setProperty("jogamp.debug.IOUtil", "true"); - // props.setProperty("nativewindow.debug", "all"); - // props.setProperty("nativewindow.debug.GraphicsConfiguration", "true"); - // props.setProperty("jogl.debug", "all"); - // props.setProperty("jogl.debug.GLProfile", "true"); - // props.setProperty("jogl.debug.GLDrawable", "true"); - props.setProperty("jogl.debug.GLContext", "true"); - props.setProperty("jogl.debug.GLMediaPlayer", "true"); - props.setProperty("jogl.debug.GLSLCode", "true"); - // props.setProperty("jogl.debug.CapabilitiesChooser", "true"); - // props.setProperty("jogl.debug.GLSLState", "true"); - // props.setProperty("jogl.debug.DebugGL", "true"); - // props.setProperty("jogl.debug.TraceGL", "true"); - // props.setProperty("newt.debug", "all"); - // props.setProperty("newt.debug.Window", "true"); - // props.setProperty("newt.debug.Window.MouseEvent", "true"); - // props.setProperty("newt.debug.Window.KeyEvent", "true"); - // props.setProperty("jogamp.debug.IOUtil", "true"); - } - - @Override - public String getActivityName() { - return demo; - } - @Override - public List<String> getSysPackages() { - return Arrays.asList(sys_pkgs); - } - - @Override - public List<String> getUsrPackages() { - return Arrays.asList(usr_pkgs); - } -} diff --git a/src/test/com/jogamp/opengl/test/android/MovieSimpleActivityLauncher01a.java b/src/test/com/jogamp/opengl/test/android/MovieSimpleActivityLauncher01a.java deleted file mode 100644 index 739838347..000000000 --- a/src/test/com/jogamp/opengl/test/android/MovieSimpleActivityLauncher01a.java +++ /dev/null @@ -1,86 +0,0 @@ -/** - * Copyright 2012 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.android; - -import java.util.Arrays; -import java.util.List; - -import com.jogamp.opengl.test.android.LauncherUtil.OrderedProperties; - -public class MovieSimpleActivityLauncher01a extends LauncherUtil.BaseActivityLauncher { - - static String demo = "com.jogamp.opengl.test.android.MovieSimpleActivity1"; - static String[] sys_pkgs = new String[] { "com.jogamp.common", "com.jogamp.opengl" }; - static String[] usr_pkgs = new String[] { "com.jogamp.opengl.test" }; - - @Override - public void init() { - final OrderedProperties props = getProperties(); - props.setProperty("jnlp.mplayer.nozoom", "true"); - props.setProperty("jnlp.mplayer.hud", "true"); - props.setProperty("jnlp.mplayer.hud.shared", "true"); - props.setProperty("jnlp.media0_url0", "http://archive.org/download/BigBuckBunny_328/BigBuckBunny_512kb.mp4"); - props.setProperty("jnlp.media1_url1", "http://archive.org/download/ElephantsDream/ed_1024_512kb.mp4"); - props.setProperty("jnlp.media0_url2", "file:///mnt/sdcard/Movies/BigBuckBunny_320x180.mp4"); - // props.setProperty("jogamp.debug.JNILibLoader", "true"); - // props.setProperty("jogamp.debug.NativeLibrary", "true"); - // props.setProperty("jogamp.debug.NativeLibrary.Lookup", "true"); - // props.setProperty("jogamp.debug.IOUtil", "true"); - // props.setProperty("nativewindow.debug", "all"); - // props.setProperty("nativewindow.debug.GraphicsConfiguration", "true"); - // props.setProperty("jogl.debug", "all"); - // props.setProperty("jogl.debug.GLProfile", "true"); - // props.setProperty("jogl.debug.GLDrawable", "true"); - // props.setProperty("jogl.debug.GLContext", "true"); - // props.setProperty("jogl.debug.GLMediaPlayer", "true"); - props.setProperty("jogl.debug.GLSLCode", "true"); - // props.setProperty("jogl.debug.CapabilitiesChooser", "true"); - // props.setProperty("jogl.debug.GLSLState", "true"); - // props.setProperty("jogl.debug.DebugGL", "true"); - // props.setProperty("jogl.debug.TraceGL", "true"); - // props.setProperty("newt.debug", "all"); - // props.setProperty("newt.debug.Window", "true"); - // props.setProperty("newt.debug.Window.MouseEvent", "true"); - // props.setProperty("newt.debug.Window.KeyEvent", "true"); - props.setProperty("jogamp.debug.IOUtil", "true"); - } - - @Override - public String getActivityName() { - return demo; - } - @Override - public List<String> getSysPackages() { - return Arrays.asList(sys_pkgs); - } - - @Override - public List<String> getUsrPackages() { - return Arrays.asList(usr_pkgs); - } -} diff --git a/src/test/com/jogamp/opengl/test/android/MovieSimpleActivityLauncher01b.java b/src/test/com/jogamp/opengl/test/android/MovieSimpleActivityLauncher01b.java deleted file mode 100644 index d5918f84e..000000000 --- a/src/test/com/jogamp/opengl/test/android/MovieSimpleActivityLauncher01b.java +++ /dev/null @@ -1,86 +0,0 @@ -/** - * Copyright 2012 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.android; - -import java.util.Arrays; -import java.util.List; - -import com.jogamp.opengl.test.android.LauncherUtil.OrderedProperties; - -public class MovieSimpleActivityLauncher01b extends LauncherUtil.BaseActivityLauncher { - - static String demo = "com.jogamp.opengl.test.android.MovieSimpleActivity1"; - static String[] sys_pkgs = new String[] { "com.jogamp.common", "com.jogamp.opengl" }; - static String[] usr_pkgs = new String[] { "com.jogamp.opengl.test" }; - - @Override - public void init() { - final OrderedProperties props = getProperties(); - props.setProperty("jnlp.mplayer.nozoom", "false"); - props.setProperty("jnlp.mplayer.hud", "true"); - props.setProperty("jnlp.mplayer.hud.shared", "true"); - props.setProperty("jnlp.media0_url0", "http://archive.org/download/BigBuckBunny_328/BigBuckBunny_512kb.mp4"); - props.setProperty("jnlp.media1_url1", "http://archive.org/download/ElephantsDream/ed_1024_512kb.mp4"); - props.setProperty("jnlp.media0_url2", "file:///mnt/sdcard/Movies/BigBuckBunny_320x180.mp4"); - // props.setProperty("jogamp.debug.JNILibLoader", "true"); - // props.setProperty("jogamp.debug.NativeLibrary", "true"); - // props.setProperty("jogamp.debug.NativeLibrary.Lookup", "true"); - // props.setProperty("jogamp.debug.IOUtil", "true"); - // props.setProperty("nativewindow.debug", "all"); - // props.setProperty("nativewindow.debug.GraphicsConfiguration", "true"); - // props.setProperty("jogl.debug", "all"); - // props.setProperty("jogl.debug.GLProfile", "true"); - // props.setProperty("jogl.debug.GLDrawable", "true"); - // props.setProperty("jogl.debug.GLContext", "true"); - // props.setProperty("jogl.debug.GLMediaPlayer", "true"); - props.setProperty("jogl.debug.GLSLCode", "true"); - // props.setProperty("jogl.debug.CapabilitiesChooser", "true"); - // props.setProperty("jogl.debug.GLSLState", "true"); - // props.setProperty("jogl.debug.DebugGL", "true"); - // props.setProperty("jogl.debug.TraceGL", "true"); - // props.setProperty("newt.debug", "all"); - // props.setProperty("newt.debug.Window", "true"); - // props.setProperty("newt.debug.Window.MouseEvent", "true"); - // props.setProperty("newt.debug.Window.KeyEvent", "true"); - props.setProperty("jogamp.debug.IOUtil", "true"); - } - - @Override - public String getActivityName() { - return demo; - } - @Override - public List<String> getSysPackages() { - return Arrays.asList(sys_pkgs); - } - - @Override - public List<String> getUsrPackages() { - return Arrays.asList(usr_pkgs); - } -} diff --git a/src/test/com/jogamp/opengl/test/android/MovieSimpleActivityLauncher02.java b/src/test/com/jogamp/opengl/test/android/MovieSimpleActivityLauncher02.java deleted file mode 100644 index 9bc85b6b0..000000000 --- a/src/test/com/jogamp/opengl/test/android/MovieSimpleActivityLauncher02.java +++ /dev/null @@ -1,86 +0,0 @@ -/** - * Copyright 2012 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.android; - -import java.util.Arrays; -import java.util.List; - -import com.jogamp.opengl.test.android.LauncherUtil.OrderedProperties; - -public class MovieSimpleActivityLauncher02 extends LauncherUtil.BaseActivityLauncher { - - static String demo = "com.jogamp.opengl.test.android.MovieSimpleActivity1"; - static String[] sys_pkgs = new String[] { "com.jogamp.common", "com.jogamp.opengl" }; - static String[] usr_pkgs = new String[] { "com.jogamp.opengl.test" }; - - @Override - public void init() { - final OrderedProperties props = getProperties(); - props.setProperty("jnlp.mplayer.nozoom", "false"); - props.setProperty("jnlp.mplayer.hud", "true"); - props.setProperty("jnlp.mplayer.hud.shared", "false"); - props.setProperty("jnlp.media0_url0", "http://archive.org/download/BigBuckBunny_328/BigBuckBunny_512kb.mp4"); - props.setProperty("jnlp.media1_url1", "http://archive.org/download/ElephantsDream/ed_1024_512kb.mp4"); - props.setProperty("jnlp.media0_url2", "file:///mnt/sdcard/Movies/BigBuckBunny_320x180.mp4"); - // props.setProperty("jogamp.debug.JNILibLoader", "true"); - // props.setProperty("jogamp.debug.NativeLibrary", "true"); - // props.setProperty("jogamp.debug.NativeLibrary.Lookup", "true"); - // props.setProperty("jogamp.debug.IOUtil", "true"); - // props.setProperty("nativewindow.debug", "all"); - // props.setProperty("nativewindow.debug.GraphicsConfiguration", "true"); - // props.setProperty("jogl.debug", "all"); - // props.setProperty("jogl.debug.GLProfile", "true"); - // props.setProperty("jogl.debug.GLDrawable", "true"); - // props.setProperty("jogl.debug.GLContext", "true"); - // props.setProperty("jogl.debug.GLMediaPlayer", "true"); - props.setProperty("jogl.debug.GLSLCode", "true"); - // props.setProperty("jogl.debug.CapabilitiesChooser", "true"); - // props.setProperty("jogl.debug.GLSLState", "true"); - // props.setProperty("jogl.debug.DebugGL", "true"); - // props.setProperty("jogl.debug.TraceGL", "true"); - // props.setProperty("newt.debug", "all"); - // props.setProperty("newt.debug.Window", "true"); - // props.setProperty("newt.debug.Window.MouseEvent", "true"); - // props.setProperty("newt.debug.Window.KeyEvent", "true"); - props.setProperty("jogamp.debug.IOUtil", "true"); - } - - @Override - public String getActivityName() { - return demo; - } - @Override - public List<String> getSysPackages() { - return Arrays.asList(sys_pkgs); - } - - @Override - public List<String> getUsrPackages() { - return Arrays.asList(usr_pkgs); - } -} diff --git a/src/test/com/jogamp/opengl/test/android/NEWTElektronActivity.java b/src/test/com/jogamp/opengl/test/android/NEWTElektronActivity.java deleted file mode 100644 index ebce37994..000000000 --- a/src/test/com/jogamp/opengl/test/android/NEWTElektronActivity.java +++ /dev/null @@ -1,78 +0,0 @@ -/** - * Copyright 2011 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.android; - -import com.jogamp.opengl.GLCapabilities; -import com.jogamp.opengl.GLProfile; - -import jogamp.newt.driver.android.NewtBaseActivity; - -import com.jogamp.newt.event.MonitorEvent; -import com.jogamp.newt.event.MonitorModeListener; -import com.jogamp.newt.opengl.GLWindow; - -import com.jogamp.opengl.test.junit.jogl.demos.es2.ElektronenMultiplizierer; -import com.jogamp.opengl.util.Animator; - -import android.os.Bundle; -import android.util.Log; - -public class NEWTElektronActivity extends NewtBaseActivity { - static String TAG = "NEWTElektronActivity"; - - @Override - public void onCreate(final Bundle savedInstanceState) { - Log.d(TAG, "onCreate - 0"); - super.onCreate(savedInstanceState); - - // create GLWindow (-> incl. underlying NEWT Display, Screen & Window) - final GLCapabilities caps = new GLCapabilities(GLProfile.get(GLProfile.GL2ES2)); - Log.d(TAG, "req caps: "+caps); - final GLWindow glWindow = GLWindow.create(caps); - glWindow.setFullscreen(true); - setContentView(getWindow(), glWindow); - - glWindow.addGLEventListener(new ElektronenMultiplizierer()); - glWindow.getScreen().addMonitorModeListener(new MonitorModeListener() { - @Override - public void monitorModeChangeNotify(final MonitorEvent me) { } - @Override - public void monitorModeChanged(final MonitorEvent me, final boolean success) { - System.err.println("MonitorMode Changed (success "+success+"): "+me); - } - }); - glWindow.setVisible(true); - final Animator animator = new Animator(glWindow); - - animator.setUpdateFPSFrames(60, System.err); - animator.resetFPSCounter(); - glWindow.resetFPSCounter(); - - Log.d(TAG, "onCreate - X"); - } -} diff --git a/src/test/com/jogamp/opengl/test/android/NEWTElektronActivityLauncher.java b/src/test/com/jogamp/opengl/test/android/NEWTElektronActivityLauncher.java deleted file mode 100644 index f2eb70bb6..000000000 --- a/src/test/com/jogamp/opengl/test/android/NEWTElektronActivityLauncher.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.jogamp.opengl.test.android; - -import java.util.Arrays; -import java.util.List; - -import com.jogamp.opengl.test.android.LauncherUtil.OrderedProperties; - -public class NEWTElektronActivityLauncher extends LauncherUtil.BaseActivityLauncher { - - static String demo = "com.jogamp.opengl.test.android.NEWTElektronActivity"; - static String[] sys_pkgs = new String[] { "com.jogamp.common", "com.jogamp.opengl" }; - static String[] usr_pkgs = new String[] { "com.jogamp.opengl.test" }; - - @Override - public void init() { - final OrderedProperties props = getProperties(); - // props.setProperty("jogamp.debug.JNILibLoader", "true"); - // props.setProperty("jogamp.debug.NativeLibrary", "true"); - // properties.setProperty("jogamp.debug.NativeLibrary.Lookup", "true"); - // properties.setProperty("jogamp.debug.IOUtil", "true"); - // properties.setProperty("nativewindow.debug", "all"); - props.setProperty("nativewindow.debug.GraphicsConfiguration", "true"); - // properties.setProperty("jogl.debug", "all"); - // properties.setProperty("jogl.debug.GLProfile", "true"); - props.setProperty("jogl.debug.GLDrawable", "true"); - props.setProperty("jogl.debug.GLContext", "true"); - props.setProperty("jogl.debug.GLSLCode", "true"); - props.setProperty("jogl.debug.CapabilitiesChooser", "true"); - // properties.setProperty("jogl.debug.GLSLState", "true"); - // properties.setProperty("jogl.debug.DebugGL", "true"); - // properties.setProperty("jogl.debug.TraceGL", "true"); - // properties.setProperty("newt.debug", "all"); - props.setProperty("newt.debug.Window", "true"); - // properties.setProperty("newt.debug.Window.MouseEvent", "true"); - // properties.setProperty("newt.debug.Window.KeyEvent", "true"); - } - - @Override - public String getActivityName() { - return demo; - } - @Override - public List<String> getSysPackages() { - return Arrays.asList(sys_pkgs); - } - - @Override - public List<String> getUsrPackages() { - return Arrays.asList(usr_pkgs); - } -} diff --git a/src/test/com/jogamp/opengl/test/android/NEWTGearsES1Activity.java b/src/test/com/jogamp/opengl/test/android/NEWTGearsES1Activity.java deleted file mode 100644 index 46165e70b..000000000 --- a/src/test/com/jogamp/opengl/test/android/NEWTGearsES1Activity.java +++ /dev/null @@ -1,83 +0,0 @@ -/** - * Copyright 2011 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.android; - -import com.jogamp.opengl.GLCapabilities; -import com.jogamp.opengl.GLProfile; - -import jogamp.newt.driver.android.NewtBaseActivity; - -import com.jogamp.newt.event.MonitorEvent; -import com.jogamp.newt.event.MonitorModeListener; -import com.jogamp.newt.opengl.GLWindow; - -import com.jogamp.opengl.test.junit.jogl.demos.es1.GearsES1; -import com.jogamp.opengl.util.Animator; - -import android.os.Bundle; -import android.util.Log; - -public class NEWTGearsES1Activity extends NewtBaseActivity { - static String TAG = "NEWTGearsES1Activity"; - - @Override - public void onCreate(final Bundle savedInstanceState) { - Log.d(TAG, "onCreate - 0"); - super.onCreate(savedInstanceState); - - // create GLWindow (-> incl. underlying NEWT Display, Screen & Window) - final 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); - final GLWindow glWindow = GLWindow.create(caps); - glWindow.setFullscreen(true); - setContentView(getWindow(), glWindow); - - glWindow.addGLEventListener(new GearsES1(-1)); - glWindow.getScreen().addMonitorModeListener(new MonitorModeListener() { - @Override - public void monitorModeChangeNotify(final MonitorEvent me) { } - @Override - public void monitorModeChanged(final MonitorEvent me, final boolean success) { - System.err.println("MonitorMode Changed (success "+success+"): "+me); - } - }); - glWindow.setVisible(true); - final Animator animator = new Animator(glWindow); - - animator.setUpdateFPSFrames(60, System.err); - animator.resetFPSCounter(); - glWindow.resetFPSCounter(); - - Log.d(TAG, "onCreate - X"); - } -} diff --git a/src/test/com/jogamp/opengl/test/android/NEWTGearsES1ActivityLauncher.java b/src/test/com/jogamp/opengl/test/android/NEWTGearsES1ActivityLauncher.java deleted file mode 100644 index 5e721f32d..000000000 --- a/src/test/com/jogamp/opengl/test/android/NEWTGearsES1ActivityLauncher.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.jogamp.opengl.test.android; - -import java.util.Arrays; -import java.util.List; - -import com.jogamp.opengl.test.android.LauncherUtil.OrderedProperties; - -public class NEWTGearsES1ActivityLauncher extends LauncherUtil.BaseActivityLauncher { - static String demo = "com.jogamp.opengl.test.android.NEWTGearsES1Activity"; - static String[] sys_pkgs = new String[] { "com.jogamp.common", "com.jogamp.opengl" }; - static String[] usr_pkgs = new String[] { "com.jogamp.opengl.test" }; - - @Override - public void init() { - final OrderedProperties props = getProperties(); - // props.setProperty("jogamp.debug.JNILibLoader", "true"); - // props.setProperty("jogamp.debug.NativeLibrary", "true"); - // properties.setProperty("jogamp.debug.NativeLibrary.Lookup", "true"); - // properties.setProperty("jogamp.debug.IOUtil", "true"); - // properties.setProperty("nativewindow.debug", "all"); - props.setProperty("nativewindow.debug.GraphicsConfiguration", "true"); - // properties.setProperty("jogl.debug", "all"); - // properties.setProperty("jogl.debug.GLProfile", "true"); - props.setProperty("jogl.debug.GLDrawable", "true"); - props.setProperty("jogl.debug.GLContext", "true"); - props.setProperty("jogl.debug.GLSLCode", "true"); - props.setProperty("jogl.debug.CapabilitiesChooser", "true"); - // properties.setProperty("jogl.debug.GLSLState", "true"); - // properties.setProperty("jogl.debug.DebugGL", "true"); - // properties.setProperty("jogl.debug.TraceGL", "true"); - // properties.setProperty("newt.debug", "all"); - props.setProperty("newt.debug.Window", "true"); - // properties.setProperty("newt.debug.Window.MouseEvent", "true"); - // properties.setProperty("newt.debug.Window.KeyEvent", "true"); - } - - @Override - public String getActivityName() { - return demo; - } - @Override - public List<String> getSysPackages() { - return Arrays.asList(sys_pkgs); - } - - @Override - public List<String> getUsrPackages() { - return Arrays.asList(usr_pkgs); - } -} diff --git a/src/test/com/jogamp/opengl/test/android/NEWTGearsES2Activity.java b/src/test/com/jogamp/opengl/test/android/NEWTGearsES2Activity.java deleted file mode 100644 index eff2aae49..000000000 --- a/src/test/com/jogamp/opengl/test/android/NEWTGearsES2Activity.java +++ /dev/null @@ -1,133 +0,0 @@ -/** - * Copyright 2011 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.android; - -import java.nio.Buffer; -import java.nio.ByteBuffer; -import java.util.ArrayList; - -import com.jogamp.opengl.GLCapabilities; -import com.jogamp.opengl.GLProfile; - -import jogamp.newt.driver.android.NewtBaseActivity; - -import com.jogamp.common.util.InterruptSource; -import com.jogamp.newt.event.MonitorEvent; -import com.jogamp.newt.event.MouseAdapter; -import com.jogamp.newt.event.MouseEvent; -import com.jogamp.newt.event.MonitorModeListener; -import com.jogamp.newt.opengl.GLWindow; - -import com.jogamp.opengl.test.junit.jogl.demos.es2.GearsES2; -import com.jogamp.opengl.util.Animator; - -import android.os.Bundle; -import android.util.Log; - -public class NEWTGearsES2Activity extends NewtBaseActivity { - static String TAG = "NEWTGearsES2Activity"; - - static final String forceRGBA5650 = "demo.force.rgba5650"; - static final String forceECT = "demo.force.ect"; - static final String forceKillProcessTest = "demo.force.killProcessTest"; - - @Override - public void onCreate(final Bundle savedInstanceState) { - Log.d(TAG, "onCreate - 0"); - super.onCreate(savedInstanceState); - - // create GLWindow (-> incl. underlying NEWT Display, Screen & Window) - final GLCapabilities caps = new GLCapabilities(GLProfile.get(GLProfile.GL2ES2)); - if( null != System.getProperty(forceRGBA5650) ) { - Log.d(TAG, "forceRGBA5650"); - caps.setRedBits(5); caps.setGreenBits(6); caps.setBlueBits(5); - } - - Log.d(TAG, "req caps: "+caps); - final GLWindow glWindow = GLWindow.create(caps); - glWindow.setFullscreen(true); - setContentView(getWindow(), glWindow); - - final GearsES2 demo = new GearsES2(-1); - // demo.enableAndroidTrace(true); - glWindow.addGLEventListener(demo); - glWindow.getScreen().addMonitorModeListener(new MonitorModeListener() { - @Override - public void monitorModeChangeNotify(final MonitorEvent me) { } - @Override - public void monitorModeChanged(final MonitorEvent me, final boolean success) { - System.err.println("MonitorMode Changed (success "+success+"): "+me); - } - }); - if( null != System.getProperty(forceKillProcessTest) ) { - Log.d(TAG, "forceKillProcessTest"); - glWindow.addMouseListener(new MouseAdapter() { - @Override - public void mousePressed(final MouseEvent e) { - if( e.getPointerCount() == 3 ) { - Log.d(TAG, "MemoryHog"); - new InterruptSource.Thread(null, new Runnable() { - public void run() { - final ArrayList<Buffer> buffers = new ArrayList<Buffer>(); - while(true) { - final int halfMB = 512 * 1024; - final float osizeMB = buffers.size() * 0.5f; - final float nsizeMB = osizeMB + 0.5f; - System.err.println("MemoryHog: ****** +4k: "+osizeMB+" MB +"+nsizeMB+" MB - Try"); - buffers.add(ByteBuffer.allocateDirect(halfMB)); // 0.5 MB each - System.err.println("MemoryHog: ****** +4k: "+osizeMB+" MB +"+nsizeMB+" MB - Done"); - try { - Thread.sleep(500); - } catch (final Exception e) { e.printStackTrace(); }; - } - } }, "MemoryHog").start(); - } else if( e.getPointerCount() == 4 ) { - Log.d(TAG, "ForceKill"); - android.os.Process.killProcess( android.os.Process.myPid() ); - } - } - }); - } - final Animator animator = new Animator(glWindow); - // animator.setRunAsFastAsPossible(true); - // glWindow.setSkipContextReleaseThread(animator.getThread()); - - if( null != System.getProperty(forceECT) ) { - Log.d(TAG, "forceECT"); - animator.setExclusiveContext(true); - } - - 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/NEWTGearsES2ActivityLauncher.java b/src/test/com/jogamp/opengl/test/android/NEWTGearsES2ActivityLauncher.java deleted file mode 100644 index aea2f24cd..000000000 --- a/src/test/com/jogamp/opengl/test/android/NEWTGearsES2ActivityLauncher.java +++ /dev/null @@ -1,84 +0,0 @@ -/** - * Copyright 2012 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.android; - -import java.util.Arrays; -import java.util.List; - -import com.jogamp.opengl.test.android.LauncherUtil.OrderedProperties; - -public class NEWTGearsES2ActivityLauncher extends LauncherUtil.BaseActivityLauncher { - - static String demo = "com.jogamp.opengl.test.android.NEWTGearsES2Activity"; - static String[] sys_pkgs = new String[] { "com.jogamp.common", "com.jogamp.opengl" }; - static String[] usr_pkgs = new String[] { "com.jogamp.opengl.test" }; - - @Override - public void init() { - final OrderedProperties props = getProperties(); - // props.setProperty("jogamp.debug.JNILibLoader", "true"); - // props.setProperty("jogamp.debug.NativeLibrary", "true"); - // props.setProperty("jogamp.debug.IOUtil", "true"); - // properties.setProperty("jogamp.debug.NativeLibrary.Lookup", "true"); - // props.setProperty("nativewindow.debug", "all"); - props.setProperty("nativewindow.debug.GraphicsConfiguration", "true"); - // props.setProperty("jogl.debug", "all"); - // properties.setProperty("jogl.debug.GLProfile", "true"); - props.setProperty("jogl.debug.EGLDisplayUtil", "true"); - // props.setProperty("jogl.debug.GLDrawable", "true"); - props.setProperty("jogl.debug.GLContext", "true"); - props.setProperty("jogl.debug.GLSLCode", "true"); - // props.setProperty("jogl.debug.CapabilitiesChooser", "true"); - // props.setProperty("jogl.debug.GLSLState", "true"); - // props.setProperty("jogl.debug.DebugGL", "true"); - // props.setProperty("jogl.debug.TraceGL", "true"); - // props.setProperty("newt.debug", "all"); - props.setProperty("newt.debug.Screen", "true"); - props.setProperty("newt.debug.Window", "true"); - props.setProperty("newt.debug.Window.MouseEvent", "true"); - props.setProperty("newt.debug.Window.KeyEvent", "true"); - // props.setProperty("newt.debug.Android.MouseEvent", "true"); - - // props.setProperty("demo.force.killProcessTest", "true"); - } - - @Override - public String getActivityName() { - return demo; - } - - @Override - public List<String> getSysPackages() { - return Arrays.asList(sys_pkgs); - } - - @Override - public List<String> getUsrPackages() { - return Arrays.asList(usr_pkgs); - } -} diff --git a/src/test/com/jogamp/opengl/test/android/NEWTGearsES2ECTActivityLauncher.java b/src/test/com/jogamp/opengl/test/android/NEWTGearsES2ECTActivityLauncher.java deleted file mode 100644 index 7454058fa..000000000 --- a/src/test/com/jogamp/opengl/test/android/NEWTGearsES2ECTActivityLauncher.java +++ /dev/null @@ -1,80 +0,0 @@ -/** - * Copyright 2012 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.android; - -import java.util.Arrays; -import java.util.List; - -import com.jogamp.opengl.test.android.LauncherUtil.OrderedProperties; - -public class NEWTGearsES2ECTActivityLauncher extends LauncherUtil.BaseActivityLauncher { - - static String demo = "com.jogamp.opengl.test.android.NEWTGearsES2Activity"; - static String[] sys_pkgs = new String[] { "com.jogamp.common", "com.jogamp.opengl" }; - static String[] usr_pkgs = new String[] { "com.jogamp.opengl.test" }; - - @Override - public void init() { - final OrderedProperties props = getProperties(); - // props.setProperty("jogamp.debug.JNILibLoader", "true"); - // props.setProperty("jogamp.debug.NativeLibrary", "true"); - // props.setProperty("jogamp.debug.IOUtil", "true"); - // properties.setProperty("jogamp.debug.NativeLibrary.Lookup", "true"); - // props.setProperty("nativewindow.debug", "all"); - props.setProperty("nativewindow.debug.GraphicsConfiguration", "true"); - // props.setProperty("jogl.debug", "all"); - // properties.setProperty("jogl.debug.GLProfile", "true"); - // props.setProperty("jogl.debug.GLDrawable", "true"); - props.setProperty("jogl.debug.GLContext", "true"); - props.setProperty("jogl.debug.GLSLCode", "true"); - // props.setProperty("jogl.debug.CapabilitiesChooser", "true"); - // props.setProperty("jogl.debug.GLSLState", "true"); - // props.setProperty("jogl.debug.DebugGL", "true"); - // props.setProperty("jogl.debug.TraceGL", "true"); - // props.setProperty("newt.debug", "all"); - props.setProperty("newt.debug.Window", "true"); - props.setProperty("newt.debug.Window.MouseEvent", "true"); - props.setProperty("newt.debug.Window.KeyEvent", "true"); - - props.setProperty("demo.force.ect", "true"); - } - - @Override - public String getActivityName() { - return demo; - } - @Override - public List<String> getSysPackages() { - return Arrays.asList(sys_pkgs); - } - - @Override - public List<String> getUsrPackages() { - return Arrays.asList(usr_pkgs); - } -} diff --git a/src/test/com/jogamp/opengl/test/android/NEWTGearsES2RGB565ActivityLauncher.java b/src/test/com/jogamp/opengl/test/android/NEWTGearsES2RGB565ActivityLauncher.java deleted file mode 100644 index 7e20596cb..000000000 --- a/src/test/com/jogamp/opengl/test/android/NEWTGearsES2RGB565ActivityLauncher.java +++ /dev/null @@ -1,80 +0,0 @@ -/** - * Copyright 2012 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.android; - -import java.util.Arrays; -import java.util.List; - -import com.jogamp.opengl.test.android.LauncherUtil.OrderedProperties; - -public class NEWTGearsES2RGB565ActivityLauncher extends LauncherUtil.BaseActivityLauncher { - - static String demo = "com.jogamp.opengl.test.android.NEWTGearsES2Activity"; - static String[] sys_pkgs = new String[] { "com.jogamp.common", "com.jogamp.opengl" }; - static String[] usr_pkgs = new String[] { "com.jogamp.opengl.test" }; - - @Override - public void init() { - final OrderedProperties props = getProperties(); - // props.setProperty("jogamp.debug.JNILibLoader", "true"); - // props.setProperty("jogamp.debug.NativeLibrary", "true"); - // props.setProperty("jogamp.debug.IOUtil", "true"); - // properties.setProperty("jogamp.debug.NativeLibrary.Lookup", "true"); - // props.setProperty("nativewindow.debug", "all"); - props.setProperty("nativewindow.debug.GraphicsConfiguration", "true"); - // props.setProperty("jogl.debug", "all"); - // properties.setProperty("jogl.debug.GLProfile", "true"); - // props.setProperty("jogl.debug.GLDrawable", "true"); - props.setProperty("jogl.debug.GLContext", "true"); - props.setProperty("jogl.debug.GLSLCode", "true"); - // props.setProperty("jogl.debug.CapabilitiesChooser", "true"); - // props.setProperty("jogl.debug.GLSLState", "true"); - // props.setProperty("jogl.debug.DebugGL", "true"); - // props.setProperty("jogl.debug.TraceGL", "true"); - // props.setProperty("newt.debug", "all"); - props.setProperty("newt.debug.Window", "true"); - props.setProperty("newt.debug.Window.MouseEvent", "true"); - props.setProperty("newt.debug.Window.KeyEvent", "true"); - - props.setProperty("demo.force.rgba5650", "true"); - } - - @Override - public String getActivityName() { - return demo; - } - @Override - public List<String> getSysPackages() { - return Arrays.asList(sys_pkgs); - } - - @Override - public List<String> getUsrPackages() { - return Arrays.asList(usr_pkgs); - } -} diff --git a/src/test/com/jogamp/opengl/test/android/NEWTGearsES2TransActivity.java b/src/test/com/jogamp/opengl/test/android/NEWTGearsES2TransActivity.java deleted file mode 100644 index ebf8f35d6..000000000 --- a/src/test/com/jogamp/opengl/test/android/NEWTGearsES2TransActivity.java +++ /dev/null @@ -1,88 +0,0 @@ -/** - * Copyright 2011 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.android; - -import com.jogamp.opengl.GLCapabilities; -import com.jogamp.opengl.GLProfile; - -import jogamp.newt.driver.android.NewtBaseActivity; - -import com.jogamp.newt.NewtFactory; -import com.jogamp.newt.Screen; -import com.jogamp.newt.event.MonitorEvent; -import com.jogamp.newt.event.MonitorModeListener; -import com.jogamp.newt.opengl.GLWindow; - -import com.jogamp.opengl.test.junit.jogl.demos.es2.GearsES2; -import com.jogamp.opengl.util.Animator; - -import android.os.Bundle; -import android.util.Log; - -public class NEWTGearsES2TransActivity extends NewtBaseActivity { - static String TAG = "NEWTGearsES2TransActivity"; - - @Override - public void onCreate(final Bundle savedInstanceState) { - Log.d(TAG, "onCreate - 0"); - super.onCreate(savedInstanceState); - - // create GLWindow (-> incl. underlying NEWT Display, Screen & Window) - final GLCapabilities caps = new GLCapabilities(GLProfile.get(GLProfile.GL2ES2)); - caps.setBackgroundOpaque(false); - - Log.d(TAG, "req caps: "+caps); - final Screen screen = NewtFactory.createScreen(NewtFactory.createDisplay(null), 0); - screen.addReference(); - final GLWindow glWindow = GLWindow.create(screen, caps); - glWindow.setSurfaceSize(2*screen.getWidth()/3, 2*screen.getHeight()/3); - glWindow.setUndecorated(true); - setContentView(getWindow(), glWindow); - - glWindow.addGLEventListener(new GearsES2(-1)); - glWindow.getScreen().addMonitorModeListener(new MonitorModeListener() { - @Override - public void monitorModeChangeNotify(final MonitorEvent me) { } - @Override - public void monitorModeChanged(final MonitorEvent me, final boolean success) { - System.err.println("MonitorMode Changed (success "+success+"): "+me); - } - }); - final Animator animator = new Animator(glWindow); - // 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/NEWTGearsES2TransActivityLauncher.java b/src/test/com/jogamp/opengl/test/android/NEWTGearsES2TransActivityLauncher.java deleted file mode 100644 index 590199ff9..000000000 --- a/src/test/com/jogamp/opengl/test/android/NEWTGearsES2TransActivityLauncher.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.jogamp.opengl.test.android; - -import java.util.Arrays; -import java.util.List; - -import com.jogamp.opengl.test.android.LauncherUtil.OrderedProperties; - -public class NEWTGearsES2TransActivityLauncher extends LauncherUtil.BaseActivityLauncher { - static String demo = "com.jogamp.opengl.test.android.NEWTGearsES2TransActivity"; - static String[] sys_pkgs = new String[] { "com.jogamp.common", "com.jogamp.opengl" }; - static String[] usr_pkgs = new String[] { "com.jogamp.opengl.test" }; - - @Override - public void init() { - final OrderedProperties props = getProperties(); - // props.setProperty("jnlp.android.translucent", "true"); - // props.setProperty("jogamp.debug.JNILibLoader", "true"); - // props.setProperty("jogamp.debug.NativeLibrary", "true"); - // properties.setProperty("jogamp.debug.NativeLibrary.Lookup", "true"); - // properties.setProperty("jogamp.debug.IOUtil", "true"); - // properties.setProperty("nativewindow.debug", "all"); - props.setProperty("nativewindow.debug.GraphicsConfiguration", "true"); - // properties.setProperty("jogl.debug", "all"); - // properties.setProperty("jogl.debug.GLProfile", "true"); - props.setProperty("jogl.debug.GLDrawable", "true"); - props.setProperty("jogl.debug.GLContext", "true"); - props.setProperty("jogl.debug.GLSLCode", "true"); - props.setProperty("jogl.debug.CapabilitiesChooser", "true"); - // properties.setProperty("jogl.debug.GLSLState", "true"); - // properties.setProperty("jogl.debug.DebugGL", "true"); - // properties.setProperty("jogl.debug.TraceGL", "true"); - // properties.setProperty("newt.debug", "all"); - props.setProperty("newt.debug.Window", "true"); - // properties.setProperty("newt.debug.Window.MouseEvent", "true"); - // properties.setProperty("newt.debug.Window.KeyEvent", "true"); - props.setProperty("jogamp.debug.IOUtil", "true"); - } - - @Override - public String getActivityName() { - return demo; - } - - @Override - public List<String> getSysPackages() { - return Arrays.asList(sys_pkgs); - } - - @Override - public List<String> getUsrPackages() { - return Arrays.asList(usr_pkgs); - } - - @Override - public String getAction() { - return LauncherUtil.LAUNCH_ACTIVITY_TRANSPARENT; - } -} diff --git a/src/test/com/jogamp/opengl/test/android/NEWTGraphUI1pActivity.java b/src/test/com/jogamp/opengl/test/android/NEWTGraphUI1pActivity.java deleted file mode 100644 index a272490bf..000000000 --- a/src/test/com/jogamp/opengl/test/android/NEWTGraphUI1pActivity.java +++ /dev/null @@ -1,80 +0,0 @@ -/** - * Copyright 2011 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.android; - -import com.jogamp.opengl.GLCapabilities; -import com.jogamp.opengl.GLProfile; -import com.jogamp.opengl.test.junit.graph.ui.demos.GPUUISceneGLListener0A; - -import jogamp.newt.driver.android.NewtBaseActivity; - -import com.jogamp.newt.event.MonitorEvent; -import com.jogamp.newt.event.MonitorModeListener; -import com.jogamp.newt.opengl.GLWindow; -import com.jogamp.opengl.util.Animator; - -import android.os.Bundle; -import android.util.Log; - -public class NEWTGraphUI1pActivity extends NewtBaseActivity { - static String TAG = "NEWTGraphUIActivity"; - - @Override - public void onCreate(final Bundle savedInstanceState) { - Log.d(TAG, "onCreate - 0"); - super.onCreate(savedInstanceState); - - // create GLWindow (-> incl. underlying NEWT Display, Screen & Window) - final GLCapabilities caps = new GLCapabilities(GLProfile.get(GLProfile.GL2ES2)); - caps.setAlphaBits(4); - caps.setNumSamples(4); - caps.setSampleBuffers(true); - Log.d(TAG, "req caps: "+caps); - final GLWindow glWindow = GLWindow.create(caps); - glWindow.setFullscreen(true); - setContentView(getWindow(), glWindow); - - glWindow.addGLEventListener(new GPUUISceneGLListener0A(0)); - glWindow.getScreen().addMonitorModeListener(new MonitorModeListener() { - @Override - public void monitorModeChangeNotify(final MonitorEvent me) { } - @Override - public void monitorModeChanged(final MonitorEvent me, final boolean success) { - System.err.println("MonitorMode Changed (success "+success+"): "+me); - } - }); - glWindow.setVisible(true); - final Animator animator = new Animator(glWindow); - - animator.setUpdateFPSFrames(60, System.err); - animator.resetFPSCounter(); - glWindow.resetFPSCounter(); - - Log.d(TAG, "onCreate - X"); - } -} diff --git a/src/test/com/jogamp/opengl/test/android/NEWTGraphUI1pActivityLauncher.java b/src/test/com/jogamp/opengl/test/android/NEWTGraphUI1pActivityLauncher.java deleted file mode 100644 index 27b367772..000000000 --- a/src/test/com/jogamp/opengl/test/android/NEWTGraphUI1pActivityLauncher.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.jogamp.opengl.test.android; - -import java.util.Arrays; -import java.util.List; - -import com.jogamp.opengl.test.android.LauncherUtil.OrderedProperties; - -public class NEWTGraphUI1pActivityLauncher extends LauncherUtil.BaseActivityLauncher { - static String demo = "com.jogamp.opengl.test.android.NEWTGraphUI1pActivity"; - static String[] sys_pkgs = new String[] { "com.jogamp.common", "com.jogamp.opengl" }; - static String[] usr_pkgs = new String[] { "com.jogamp.opengl.test" }; - - @Override - public void init() { - final OrderedProperties props = getProperties(); - // props.setProperty("jogamp.debug.JNILibLoader", "true"); - // props.setProperty("jogamp.debug.NativeLibrary", "true"); - // props.setProperty("jogamp.debug.NativeLibrary.Lookup", "true"); - // props.setProperty("jogamp.debug.IOUtil", "true"); - // props.setProperty("nativewindow.debug", "all"); - props.setProperty("nativewindow.debug.GraphicsConfiguration", "true"); - // props.setProperty("jogl.debug", "all"); - // props.setProperty("jogl.debug.GLProfile", "true"); - props.setProperty("jogl.debug.GLDrawable", "true"); - props.setProperty("jogl.debug.GLContext", "true"); - props.setProperty("jogl.debug.GLSLCode", "true"); - props.setProperty("jogl.debug.CapabilitiesChooser", "true"); - // props.setProperty("jogl.debug.GLSLState", "true"); - // props.setProperty("jogl.debug.DebugGL", "true"); - // props.setProperty("jogl.debug.TraceGL", "true"); - // props.setProperty("newt.debug", "all"); - props.setProperty("newt.debug.Window", "true"); - // props.setProperty("newt.debug.Window.MouseEvent", "true"); - // props.setProperty("newt.debug.Window.KeyEvent", "true"); - } - - @Override - public String getActivityName() { - return demo; - } - - @Override - public List<String> getSysPackages() { - return Arrays.asList(sys_pkgs); - } - - @Override - public List<String> getUsrPackages() { - return Arrays.asList(usr_pkgs); - } -} diff --git a/src/test/com/jogamp/opengl/test/android/NEWTGraphUI2pActivity.java b/src/test/com/jogamp/opengl/test/android/NEWTGraphUI2pActivity.java deleted file mode 100644 index 0acc87690..000000000 --- a/src/test/com/jogamp/opengl/test/android/NEWTGraphUI2pActivity.java +++ /dev/null @@ -1,79 +0,0 @@ -/** - * Copyright 2011 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.android; - -import com.jogamp.opengl.GLCapabilities; -import com.jogamp.opengl.GLProfile; -import com.jogamp.opengl.test.junit.graph.ui.demos.GPUUISceneGLListener0A; - -import jogamp.newt.driver.android.NewtBaseActivity; - -import com.jogamp.graph.curve.Region; -import com.jogamp.newt.event.MonitorEvent; -import com.jogamp.newt.event.MonitorModeListener; -import com.jogamp.newt.opengl.GLWindow; -import com.jogamp.opengl.util.Animator; - -import android.os.Bundle; -import android.util.Log; - -public class NEWTGraphUI2pActivity extends NewtBaseActivity { - static String TAG = "NEWTGraphUIActivity"; - - @Override - public void onCreate(final Bundle savedInstanceState) { - Log.d(TAG, "onCreate - 0"); - super.onCreate(savedInstanceState); - - // create GLWindow (-> incl. underlying NEWT Display, Screen & Window) - final GLCapabilities caps = new GLCapabilities(GLProfile.get(GLProfile.GL2ES2)); - caps.setAlphaBits(4); - Log.d(TAG, "req caps: "+caps); - final GLWindow glWindow = GLWindow.create(caps); - glWindow.setFullscreen(true); - setContentView(getWindow(), glWindow); - - glWindow.addGLEventListener(new GPUUISceneGLListener0A(Region.VBAA_RENDERING_BIT)); - glWindow.getScreen().addMonitorModeListener(new MonitorModeListener() { - @Override - public void monitorModeChangeNotify(final MonitorEvent me) { } - @Override - public void monitorModeChanged(final MonitorEvent me, final boolean success) { - System.err.println("MonitorMode Changed (success "+success+"): "+me); - } - }); - glWindow.setVisible(true); - final Animator animator = new Animator(glWindow); - - animator.setUpdateFPSFrames(60, System.err); - animator.resetFPSCounter(); - glWindow.resetFPSCounter(); - - Log.d(TAG, "onCreate - X"); - } -} diff --git a/src/test/com/jogamp/opengl/test/android/NEWTGraphUI2pActivityLauncher.java b/src/test/com/jogamp/opengl/test/android/NEWTGraphUI2pActivityLauncher.java deleted file mode 100644 index 349d2a17e..000000000 --- a/src/test/com/jogamp/opengl/test/android/NEWTGraphUI2pActivityLauncher.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.jogamp.opengl.test.android; - -import java.util.Arrays; -import java.util.List; - -import com.jogamp.opengl.test.android.LauncherUtil.OrderedProperties; - -public class NEWTGraphUI2pActivityLauncher extends LauncherUtil.BaseActivityLauncher { - static String demo = "com.jogamp.opengl.test.android.NEWTGraphUI2pActivity"; - static String[] sys_pkgs = new String[] { "com.jogamp.common", "com.jogamp.opengl" }; - static String[] usr_pkgs = new String[] { "com.jogamp.opengl.test" }; - - @Override - public void init() { - final OrderedProperties props = getProperties(); - // props.setProperty("jogamp.debug.JNILibLoader", "true"); - // props.setProperty("jogamp.debug.NativeLibrary", "true"); - // properties.setProperty("jogamp.debug.NativeLibrary.Lookup", "true"); - // properties.setProperty("jogamp.debug.IOUtil", "true"); - // properties.setProperty("nativewindow.debug", "all"); - props.setProperty("nativewindow.debug.GraphicsConfiguration", "true"); - // properties.setProperty("jogl.debug", "all"); - // properties.setProperty("jogl.debug.GLProfile", "true"); - props.setProperty("jogl.debug.GLDrawable", "true"); - props.setProperty("jogl.debug.GLContext", "true"); - props.setProperty("jogl.debug.GLSLCode", "true"); - props.setProperty("jogl.debug.CapabilitiesChooser", "true"); - // properties.setProperty("jogl.debug.GLSLState", "true"); - // properties.setProperty("jogl.debug.DebugGL", "true"); - // properties.setProperty("jogl.debug.TraceGL", "true"); - // properties.setProperty("newt.debug", "all"); - props.setProperty("newt.debug.Window", "true"); - // properties.setProperty("newt.debug.Window.MouseEvent", "true"); - // properties.setProperty("newt.debug.Window.KeyEvent", "true"); - } - - @Override - public String getActivityName() { - return demo; - } - - @Override - public List<String> getSysPackages() { - return Arrays.asList(sys_pkgs); - } - - @Override - public List<String> getUsrPackages() { - return Arrays.asList(usr_pkgs); - } -} diff --git a/src/test/com/jogamp/opengl/test/android/NEWTRedSquareES1Activity.java b/src/test/com/jogamp/opengl/test/android/NEWTRedSquareES1Activity.java deleted file mode 100644 index a3a51ef0c..000000000 --- a/src/test/com/jogamp/opengl/test/android/NEWTRedSquareES1Activity.java +++ /dev/null @@ -1,77 +0,0 @@ -/** - * Copyright 2011 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.android; - -import com.jogamp.opengl.GLCapabilities; -import com.jogamp.opengl.GLProfile; - -import jogamp.newt.driver.android.NewtBaseActivity; - -import com.jogamp.newt.event.MonitorEvent; -import com.jogamp.newt.event.MonitorModeListener; -import com.jogamp.newt.opengl.GLWindow; - -import com.jogamp.opengl.test.junit.jogl.demos.es1.RedSquareES1; -import com.jogamp.opengl.util.Animator; - -import android.os.Bundle; -import android.util.Log; - -public class NEWTRedSquareES1Activity extends NewtBaseActivity { - static String TAG = "NEWTGearsES1Activity"; - - @Override - public void onCreate(final Bundle savedInstanceState) { - Log.d(TAG, "onCreate - 0"); - super.onCreate(savedInstanceState); - - // create GLWindow (-> incl. underlying NEWT Display, Screen & Window) - final GLCapabilities caps = new GLCapabilities(GLProfile.get(GLProfile.GLES1)); - Log.d(TAG, "req caps: "+caps); - final GLWindow glWindow = GLWindow.create(caps); - setContentView(getWindow(), glWindow); - - glWindow.addGLEventListener(new RedSquareES1(-1)); - glWindow.getScreen().addMonitorModeListener(new MonitorModeListener() { - @Override - public void monitorModeChangeNotify(final MonitorEvent me) { } - @Override - public void monitorModeChanged(final MonitorEvent me, final boolean success) { - System.err.println("MonitorMode Changed (success "+success+"): "+me); - } - }); - glWindow.setVisible(true); - final Animator animator = new Animator(glWindow); - - animator.setUpdateFPSFrames(60, System.err); - animator.resetFPSCounter(); - glWindow.resetFPSCounter(); - - Log.d(TAG, "onCreate - X"); - } -} diff --git a/src/test/com/jogamp/opengl/test/android/NEWTRedSquareES1ActivityLauncher.java b/src/test/com/jogamp/opengl/test/android/NEWTRedSquareES1ActivityLauncher.java deleted file mode 100644 index 380a37b93..000000000 --- a/src/test/com/jogamp/opengl/test/android/NEWTRedSquareES1ActivityLauncher.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.jogamp.opengl.test.android; - -import java.util.Arrays; -import java.util.List; - -import com.jogamp.opengl.test.android.LauncherUtil.OrderedProperties; - -public class NEWTRedSquareES1ActivityLauncher extends LauncherUtil.BaseActivityLauncher { - static String demo = "com.jogamp.opengl.test.android.NEWTRedSquareES1Activity"; - static String[] sys_pkgs = new String[] { "com.jogamp.common", "com.jogamp.opengl" }; - static String[] usr_pkgs = new String[] { "com.jogamp.opengl.test" }; - - @Override - public void init() { - final OrderedProperties props = getProperties(); - // props.setProperty("jogamp.debug.JNILibLoader", "true"); - // props.setProperty("jogamp.debug.NativeLibrary", "true"); - // properties.setProperty("jogamp.debug.NativeLibrary.Lookup", "true"); - // properties.setProperty("jogamp.debug.IOUtil", "true"); - // properties.setProperty("nativewindow.debug", "all"); - props.setProperty("nativewindow.debug.GraphicsConfiguration", "true"); - // properties.setProperty("jogl.debug", "all"); - // properties.setProperty("jogl.debug.GLProfile", "true"); - props.setProperty("jogl.debug.GLDrawable", "true"); - props.setProperty("jogl.debug.GLContext", "true"); - props.setProperty("jogl.debug.GLSLCode", "true"); - props.setProperty("jogl.debug.CapabilitiesChooser", "true"); - // properties.setProperty("jogl.debug.GLSLState", "true"); - // properties.setProperty("jogl.debug.DebugGL", "true"); - // properties.setProperty("jogl.debug.TraceGL", "true"); - // properties.setProperty("newt.debug", "all"); - props.setProperty("newt.debug.Window", "true"); - // properties.setProperty("newt.debug.Window.MouseEvent", "true"); - // properties.setProperty("newt.debug.Window.KeyEvent", "true"); - } - - @Override - public String getActivityName() { - return demo; - } - - @Override - public List<String> getSysPackages() { - return Arrays.asList(sys_pkgs); - } - - @Override - public List<String> getUsrPackages() { - return Arrays.asList(usr_pkgs); - } -} diff --git a/src/test/com/jogamp/opengl/test/android/NEWTRedSquareES2Activity.java b/src/test/com/jogamp/opengl/test/android/NEWTRedSquareES2Activity.java deleted file mode 100644 index db246c91c..000000000 --- a/src/test/com/jogamp/opengl/test/android/NEWTRedSquareES2Activity.java +++ /dev/null @@ -1,99 +0,0 @@ -/** - * Copyright 2011 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.android; - -import com.jogamp.opengl.GLCapabilities; -import com.jogamp.opengl.GLProfile; - -import jogamp.newt.driver.android.NewtBaseActivity; - -import com.jogamp.newt.event.MonitorEvent; -import com.jogamp.newt.event.MonitorModeListener; -import com.jogamp.newt.opengl.GLWindow; - -import com.jogamp.opengl.test.junit.jogl.demos.es2.RedSquareES2; -import com.jogamp.opengl.util.Animator; - -import android.os.Bundle; -import android.util.Log; - -public class NEWTRedSquareES2Activity extends NewtBaseActivity { - static String TAG = "NEWTGearsES2Activity"; - - @Override - public void onCreate(final Bundle savedInstanceState) { - Log.d(TAG, "onCreate - 0"); - super.onCreate(savedInstanceState); - - // create GLWindow (-> incl. underlying NEWT Display, Screen & Window) - final GLCapabilities caps = new GLCapabilities(GLProfile.get(GLProfile.GL2ES2)); - Log.d(TAG, "req caps: "+caps); - final GLWindow glWindow = GLWindow.create(caps); - // glWindow.setSize(200, 200); - // glWindow.setUndecorated(true); - glWindow.setFullscreen(true); - setContentView(getWindow(), glWindow); - - final RedSquareES2 demo = new RedSquareES2(-1); - // demo.enableAndroidTrace(true); - glWindow.addGLEventListener(demo); - glWindow.getScreen().addMonitorModeListener(new MonitorModeListener() { - @Override - public void monitorModeChangeNotify(final MonitorEvent me) { } - @Override - public void monitorModeChanged(final MonitorEvent me, final boolean success) { - System.err.println("MonitorMode Changed (success "+success+"): "+me); - } - }); - final Animator animator = new Animator(glWindow); - // animator.setRunAsFastAsPossible(true); - // glWindow.setSkipContextReleaseThread(animator.getThread()); - glWindow.setVisible(true); - - animator.setUpdateFPSFrames(60, System.err); - animator.resetFPSCounter(); - glWindow.resetFPSCounter(); - - Log.d(TAG, "onCreate - X"); - } - - @Override - public void onResume() { - // android.os.Debug.startMethodTracing("GearsES2.trace"); - // android.os.Debug.startAllocCounting(); - super.onResume(); - } - - @Override - public void onPause() { - // android.os.Debug.stopAllocCounting(); - // android.os.Debug.stopMethodTracing(); - super.onPause(); - } - -} diff --git a/src/test/com/jogamp/opengl/test/android/NEWTRedSquareES2ActivityLauncher.java b/src/test/com/jogamp/opengl/test/android/NEWTRedSquareES2ActivityLauncher.java deleted file mode 100644 index 22058dd34..000000000 --- a/src/test/com/jogamp/opengl/test/android/NEWTRedSquareES2ActivityLauncher.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.jogamp.opengl.test.android; - -import android.app.Activity; -import android.content.Intent; -import android.net.Uri; -import android.os.Bundle; -import android.util.Log; - -public class NEWTRedSquareES2ActivityLauncher extends Activity { - @Override - public void onCreate(final Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - final Uri uri = Uri.parse("launch://jogamp.org/com.jogamp.opengl.test.android.NEWTRedSquareES2Activity?sys=com.jogamp.common&sys=com.jogamp.opengl&pkg=com.jogamp.opengl.test"); - final Intent intent = new Intent("org.jogamp.launcher.action.LAUNCH_ACTIVITY_NORMAL", uri); - Log.d(getClass().getSimpleName(), "Launching Activity: "+intent); - startActivity (intent); - - finish(); // done - } -} diff --git a/src/test/com/jogamp/opengl/test/junit/graph/demos/GPURegionGLListener01.java b/src/test/com/jogamp/opengl/test/junit/graph/GPURegionGLListener01.java index 506c47f7d..e192cd2b9 100644 --- a/src/test/com/jogamp/opengl/test/junit/graph/demos/GPURegionGLListener01.java +++ b/src/test/com/jogamp/opengl/test/junit/graph/GPURegionGLListener01.java @@ -26,7 +26,7 @@ * or implied, of JogAmp Community. */ -package com.jogamp.opengl.test.junit.graph.demos; +package com.jogamp.opengl.test.junit.graph; import com.jogamp.opengl.GL; import com.jogamp.opengl.GL2ES2; diff --git a/src/test/com/jogamp/opengl/test/junit/graph/demos/GPURegionGLListener10.java b/src/test/com/jogamp/opengl/test/junit/graph/GPURegionGLListener10.java index 188c27495..4cfd61777 100644 --- a/src/test/com/jogamp/opengl/test/junit/graph/demos/GPURegionGLListener10.java +++ b/src/test/com/jogamp/opengl/test/junit/graph/GPURegionGLListener10.java @@ -26,7 +26,7 @@ * or implied, of JogAmp Community. */ -package com.jogamp.opengl.test.junit.graph.demos; +package com.jogamp.opengl.test.junit.graph; import java.util.ArrayList; import java.util.List; diff --git a/src/test/com/jogamp/opengl/test/junit/graph/demos/GPURendererListenerBase01.java b/src/test/com/jogamp/opengl/test/junit/graph/GPURendererListenerBase01.java index 1bce5e72c..b99d91070 100644 --- a/src/test/com/jogamp/opengl/test/junit/graph/demos/GPURendererListenerBase01.java +++ b/src/test/com/jogamp/opengl/test/junit/graph/GPURendererListenerBase01.java @@ -25,7 +25,7 @@ * authors and should not be interpreted as representing official policies, either expressed * or implied, of JogAmp Community. */ -package com.jogamp.opengl.test.junit.graph.demos; +package com.jogamp.opengl.test.junit.graph; import java.io.File; import java.io.IOException; diff --git a/src/test/com/jogamp/opengl/test/junit/graph/demos/GPUTextRendererListenerBase01.java b/src/test/com/jogamp/opengl/test/junit/graph/GPUTextRendererListenerBase01.java index d18766ee1..8f813d537 100644 --- a/src/test/com/jogamp/opengl/test/junit/graph/demos/GPUTextRendererListenerBase01.java +++ b/src/test/com/jogamp/opengl/test/junit/graph/GPUTextRendererListenerBase01.java @@ -25,7 +25,7 @@ * authors and should not be interpreted as representing official policies, either expressed * or implied, of JogAmp Community. */ -package com.jogamp.opengl.test.junit.graph.demos; +package com.jogamp.opengl.test.junit.graph; import java.io.IOException; diff --git a/src/test/com/jogamp/opengl/test/junit/graph/demos/MSAATool.java b/src/test/com/jogamp/opengl/test/junit/graph/MSAATool.java index bd50da534..bd18214dc 100644 --- a/src/test/com/jogamp/opengl/test/junit/graph/demos/MSAATool.java +++ b/src/test/com/jogamp/opengl/test/junit/graph/MSAATool.java @@ -25,7 +25,7 @@ * authors and should not be interpreted as representing official policies, either expressed * or implied, of JogAmp Community. */ -package com.jogamp.opengl.test.junit.graph.demos; +package com.jogamp.opengl.test.junit.graph; import com.jogamp.opengl.GL; import com.jogamp.opengl.GL2ES2; diff --git a/src/test/com/jogamp/opengl/test/junit/graph/TestRegionRendererNEWT01.java b/src/test/com/jogamp/opengl/test/junit/graph/TestRegionRendererNEWT01.java index b7aff2f79..3ffd22fd0 100644 --- a/src/test/com/jogamp/opengl/test/junit/graph/TestRegionRendererNEWT01.java +++ b/src/test/com/jogamp/opengl/test/junit/graph/TestRegionRendererNEWT01.java @@ -48,9 +48,6 @@ import com.jogamp.graph.curve.Region; import com.jogamp.graph.curve.opengl.RenderState; import com.jogamp.graph.geom.SVertex; import com.jogamp.newt.opengl.GLWindow; -import com.jogamp.opengl.test.junit.graph.demos.GPURegionGLListener01; -import com.jogamp.opengl.test.junit.graph.demos.GPURegionGLListener10; -import com.jogamp.opengl.test.junit.graph.demos.GPURendererListenerBase01; import com.jogamp.opengl.test.junit.util.UITestCase; diff --git a/src/test/com/jogamp/opengl/test/junit/graph/TestTextRendererNEWT20.java b/src/test/com/jogamp/opengl/test/junit/graph/TestTextRendererNEWT20.java index 624b1ff94..562688bdc 100644 --- a/src/test/com/jogamp/opengl/test/junit/graph/TestTextRendererNEWT20.java +++ b/src/test/com/jogamp/opengl/test/junit/graph/TestTextRendererNEWT20.java @@ -53,8 +53,6 @@ import com.jogamp.graph.font.Font; import com.jogamp.graph.font.FontFactory; import com.jogamp.graph.geom.SVertex; import com.jogamp.newt.opengl.GLWindow; -import com.jogamp.opengl.test.junit.graph.demos.GPUTextRendererListenerBase01; -import com.jogamp.opengl.test.junit.graph.demos.MSAATool; import com.jogamp.opengl.test.junit.util.UITestCase; import com.jogamp.opengl.util.caps.NonFSAAGLCapsChooser; diff --git a/src/test/com/jogamp/opengl/test/junit/graph/demos/GPURegionGLListener00.java b/src/test/com/jogamp/opengl/test/junit/graph/demos/GPURegionGLListener00.java deleted file mode 100644 index bc53bee2b..000000000 --- a/src/test/com/jogamp/opengl/test/junit/graph/demos/GPURegionGLListener00.java +++ /dev/null @@ -1,134 +0,0 @@ -/** - * Copyright 2010 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ - -package com.jogamp.opengl.test.junit.graph.demos; - -import com.jogamp.opengl.GL; -import com.jogamp.opengl.GL2ES2; -import com.jogamp.opengl.GLAutoDrawable; -import com.jogamp.opengl.GLProfile; -import com.jogamp.opengl.fixedfunc.GLMatrixFunc; - -import com.jogamp.graph.curve.OutlineShape; -import com.jogamp.graph.curve.opengl.GLRegion; -import com.jogamp.graph.curve.opengl.RenderState; -import com.jogamp.graph.curve.opengl.RegionRenderer; -import com.jogamp.opengl.util.PMVMatrix; - -/** Demonstrate the rendering of multiple outlines into one region/OutlineShape - * These Outlines are not necessary connected or contained. - * The output of this demo shows two identical shapes but the left one - * has some vertices with off-curve flag set to true, and the right allt he vertices - * are on the curve. Demos the Res. Independent Nurbs based Curve rendering - * - */ -public class GPURegionGLListener00 extends GPURendererListenerBase01 { - OutlineShape outlineShape = null; - - public GPURegionGLListener00 (final RenderState rs, final int renderModes, final int sampleCount, final boolean debug, final boolean trace) { - super(RegionRenderer.create(rs, RegionRenderer.defaultBlendEnable, RegionRenderer.defaultBlendDisable), renderModes, debug, trace); - rs.setHintMask(RenderState.BITHINT_GLOBAL_DEPTH_TEST_ENABLED); - setMatrix(-20, 00, -50, 0f, sampleCount); - } - - private void createTestOutline(final GLProfile glp){ - outlineShape = new OutlineShape(getRenderer().getRenderState().getVertexFactory()); - outlineShape.addVertex(0.0f,-10.0f, true); - outlineShape.addVertex(15.0f,-10.0f, true); - outlineShape.addVertex(10.0f,5.0f, false); - outlineShape.addVertex(15.0f,10.0f, true); - outlineShape.addVertex(6.0f,15.0f, false); - outlineShape.addVertex(5.0f,8.0f, false); - outlineShape.addVertex(0.0f,10.0f,true); - outlineShape.closeLastOutline(true); - outlineShape.addEmptyOutline(); - outlineShape.addVertex(5.0f,-5.0f,true); - outlineShape.addVertex(10.0f,-5.0f, false); - outlineShape.addVertex(10.0f,0.0f, true); - outlineShape.addVertex(5.0f,0.0f, false); - outlineShape.closeLastOutline(true); - - /** Same shape as above but without any off-curve vertices */ - final float offset = 30; - outlineShape.addEmptyOutline(); - outlineShape.addVertex(offset+0.0f,-10.0f, true); - outlineShape.addVertex(offset+17.0f,-10.0f, true); - outlineShape.addVertex(offset+11.0f,5.0f, true); - outlineShape.addVertex(offset+16.0f,10.0f, true); - outlineShape.addVertex(offset+7.0f,15.0f, true); - outlineShape.addVertex(offset+6.0f,8.0f, true); - outlineShape.addVertex(offset+0.0f,10.0f, true); - outlineShape.closeLastOutline(true); - outlineShape.addEmptyOutline(); - outlineShape.addVertex(offset+5.0f,0.0f, true); - outlineShape.addVertex(offset+5.0f,-5.0f, true); - outlineShape.addVertex(offset+10.0f,-5.0f, true); - outlineShape.addVertex(offset+10.0f,0.0f, true); - outlineShape.closeLastOutline(true); - - region = GLRegion.create(glp, getRenderModes(), null); - region.addOutlineShape(outlineShape, null, region.hasColorChannel() ? getRenderer().getRenderState().getColorStatic(new float[4]) : null); - } - - @Override - public void init(final GLAutoDrawable drawable) { - super.init(drawable); - - final GL2ES2 gl = drawable.getGL().getGL2ES2(); - - final RenderState rs = getRenderer().getRenderState(); - - gl.setSwapInterval(1); - gl.glEnable(GL.GL_DEPTH_TEST); - gl.glEnable(GL.GL_BLEND); - rs.setColorStatic(0.0f, 0.0f, 0.0f, 1.0f); - - createTestOutline(gl.getGLProfile()); - } - - @Override - public void display(final GLAutoDrawable drawable) { - final GL2ES2 gl = drawable.getGL().getGL2ES2(); - - gl.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); - gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); - - final RegionRenderer regionRenderer = getRenderer(); - final PMVMatrix pmv = regionRenderer.getMatrix(); - pmv.glMatrixMode(GLMatrixFunc.GL_MODELVIEW); - pmv.glLoadIdentity(); - pmv.glTranslatef(getXTran(), getYTran(), getZTran()); - pmv.glRotatef(getAngle(), 0, 1, 0); - if( weight != regionRenderer.getRenderState().getWeight() ) { - regionRenderer.getRenderState().setWeight(weight); - } - regionRenderer.enable(gl, true); - region.draw(gl, regionRenderer, getSampleCount()); - regionRenderer.enable(gl, false); - } -} diff --git a/src/test/com/jogamp/opengl/test/junit/graph/demos/GPURegionNewtDemo.java b/src/test/com/jogamp/opengl/test/junit/graph/demos/GPURegionNewtDemo.java deleted file mode 100644 index a5990af89..000000000 --- a/src/test/com/jogamp/opengl/test/junit/graph/demos/GPURegionNewtDemo.java +++ /dev/null @@ -1,163 +0,0 @@ -/** - * Copyright 2010 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ - -package com.jogamp.opengl.test.junit.graph.demos; - -import com.jogamp.opengl.GLCapabilities; -import com.jogamp.opengl.GLProfile; - -import com.jogamp.graph.curve.Region; -import com.jogamp.graph.curve.opengl.RenderState; -import com.jogamp.graph.geom.SVertex; -import com.jogamp.newt.event.KeyAdapter; -import com.jogamp.newt.event.KeyEvent; -import com.jogamp.newt.event.WindowAdapter; -import com.jogamp.newt.event.WindowEvent; -import com.jogamp.newt.opengl.GLWindow; -import com.jogamp.opengl.test.junit.util.MiscUtils; -import com.jogamp.opengl.util.Animator; - -/** Demonstrate the rendering of multiple outlines into one region/OutlineShape - * These Outlines are not necessary connected or contained. - * The output of this demo shows two identical shapes but the left one - * has some vertices with off-curve flag set to true, and the right allt he vertices - * are on the curve. Demos the Res. Independent Nurbs based Curve rendering - * - */ -public class GPURegionNewtDemo { - static final boolean DEBUG = false; - static final boolean TRACE = false; - - static int shape_ctor_mode = 1; - static int SceneMSAASamples = 0; - static int GraphVBAASamples = 4; - static int GraphMSAASamples = 0; - static boolean GraphUseWeight = true; - - public static void main(final String[] args) { - int width = 800, height = 400; - int x = 10, y = 10; - if( 0 != args.length ) { - SceneMSAASamples = 0; - GraphMSAASamples = 0; - GraphVBAASamples = 0; - GraphUseWeight = false; - - for(int i=0; i<args.length; i++) { - if(args[i].equals("-smsaa")) { - i++; - SceneMSAASamples = MiscUtils.atoi(args[i], SceneMSAASamples); - } else if(args[i].equals("-gmsaa")) { - i++; - GraphMSAASamples = MiscUtils.atoi(args[i], GraphMSAASamples); - GraphVBAASamples = 0; - } else if(args[i].equals("-gvbaa")) { - i++; - GraphMSAASamples = 0; - GraphVBAASamples = MiscUtils.atoi(args[i], GraphVBAASamples); - } else if(args[i].equals("-gweight")) { - GraphUseWeight = true; - } else if(args[i].equals("-width")) { - i++; - width = MiscUtils.atoi(args[i], width); - } else if(args[i].equals("-height")) { - i++; - height = MiscUtils.atoi(args[i], height); - } else if(args[i].equals("-x")) { - i++; - x = MiscUtils.atoi(args[i], x); - } else if(args[i].equals("-y")) { - i++; - y = MiscUtils.atoi(args[i], y); - } else if(args[i].equals("-shape_ctor")) { - i++; - shape_ctor_mode = MiscUtils.atoi(args[i], shape_ctor_mode); - } - } - } - System.err.println("Desired win size "+width+"x"+height); - System.err.println("Desired win pos "+x+"/"+y); - System.err.println("Shape_ctor_mode "+shape_ctor_mode); - System.err.println("Scene MSAA Samples "+SceneMSAASamples); - System.err.println("Graph MSAA Samples"+GraphMSAASamples); - System.err.println("Graph VBAA Samples "+GraphVBAASamples); - System.err.println("Graph Weight Mode "+GraphUseWeight); - - final GLProfile glp = GLProfile.getGL2ES2(); - final GLCapabilities caps = new GLCapabilities(glp); - caps.setAlphaBits(4); - if( SceneMSAASamples > 0 ) { - caps.setSampleBuffers(true); - caps.setNumSamples(SceneMSAASamples); - } - System.out.println("Requested: " + caps); - - int rmode = GraphUseWeight ? Region.VARWEIGHT_RENDERING_BIT : 0; - int sampleCount = 0; - if( GraphVBAASamples > 0 ) { - rmode |= Region.VBAA_RENDERING_BIT; - sampleCount += GraphVBAASamples; - } else if( GraphMSAASamples > 0 ) { - rmode |= Region.MSAA_RENDERING_BIT; - sampleCount += GraphMSAASamples; - } - - final GLWindow window = GLWindow.create(caps); - window.setPosition(x, y); - window.setSize(width, height); - window.setTitle("GPU Curve Region Newt Demo - graph[vbaa"+GraphVBAASamples+" msaa"+GraphMSAASamples+"], msaa "+SceneMSAASamples); - - final RenderState rs = RenderState.createRenderState(SVertex.factory()); - final GPURegionGLListener01 regionGLListener = new GPURegionGLListener01 (shape_ctor_mode, rs, rmode, sampleCount, DEBUG, TRACE); - regionGLListener.attachInputListenerTo(window); - window.addGLEventListener(regionGLListener); - window.setVisible(true); - - //FPSAnimator animator = new FPSAnimator(60); - final Animator animator = new Animator(); - animator.setUpdateFPSFrames(60, System.err); - animator.add(window); - - window.addKeyListener(new KeyAdapter() { - @Override - public void keyPressed(final KeyEvent arg0) { - if(arg0.getKeyCode() == KeyEvent.VK_F4) { - window.destroy(); - } - } - }); - window.addWindowListener(new WindowAdapter() { - @Override - public void windowDestroyed(final WindowEvent e) { - animator.stop(); - } - }); - - animator.start(); - } -} diff --git a/src/test/com/jogamp/opengl/test/junit/graph/demos/GPUTextGLListener0A.java b/src/test/com/jogamp/opengl/test/junit/graph/demos/GPUTextGLListener0A.java deleted file mode 100644 index 9c6402a68..000000000 --- a/src/test/com/jogamp/opengl/test/junit/graph/demos/GPUTextGLListener0A.java +++ /dev/null @@ -1,72 +0,0 @@ -/** - * Copyright 2010 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.junit.graph.demos; - - -import com.jogamp.opengl.GL; -import com.jogamp.opengl.GL2ES2; -import com.jogamp.opengl.GLAutoDrawable; -import com.jogamp.opengl.GLProfile; -import com.jogamp.graph.curve.Region; -import com.jogamp.graph.curve.opengl.RenderState; -import com.jogamp.graph.geom.SVertex; -import com.jogamp.newt.opengl.GLWindow; - -public class GPUTextGLListener0A extends GPUTextRendererListenerBase01 { - - public GPUTextGLListener0A(final GLProfile glp, final RenderState rs, final int renderModes, final int sampleCount, final boolean blending, final boolean debug, final boolean trace) { - super(glp, rs, renderModes, sampleCount, blending, debug, trace); - } - - @Override - public void init(final GLAutoDrawable drawable) { - if(drawable instanceof GLWindow) { - final GLWindow glw = (GLWindow) drawable; - attachInputListenerTo(glw); - } - super.init(drawable); - - final GL2ES2 gl = drawable.getGL().getGL2ES2(); - - final RenderState rs = getRenderer().getRenderState(); - - gl.setSwapInterval(1); - gl.glEnable(GL.GL_DEPTH_TEST); - gl.glEnable(GL.GL_BLEND); - rs.setColorStatic(0.1f, 0.1f, 0.1f, 1.0f); - } - - @Override - public void dispose(final GLAutoDrawable drawable) { - if(drawable instanceof GLWindow) { - final GLWindow glw = (GLWindow) drawable; - detachInputListenerFrom(glw); - } - super.dispose(drawable); - } -} diff --git a/src/test/com/jogamp/opengl/test/junit/graph/demos/GPUTextNewtDemo.java b/src/test/com/jogamp/opengl/test/junit/graph/demos/GPUTextNewtDemo.java deleted file mode 100644 index 889f92a69..000000000 --- a/src/test/com/jogamp/opengl/test/junit/graph/demos/GPUTextNewtDemo.java +++ /dev/null @@ -1,193 +0,0 @@ -/** - * Copyright 2010 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.junit.graph.demos; - -import com.jogamp.opengl.GLCapabilities; -import com.jogamp.opengl.GLProfile; -import com.jogamp.opengl.math.geom.AABBox; - -import java.io.File; -import java.io.IOException; - -import com.jogamp.common.util.InterruptSource; -import com.jogamp.graph.curve.Region; -import com.jogamp.graph.curve.opengl.RenderState; -import com.jogamp.graph.font.Font; -import com.jogamp.graph.font.FontFactory; -import com.jogamp.graph.font.FontScale; -import com.jogamp.graph.geom.SVertex; -import com.jogamp.newt.MonitorDevice; -import com.jogamp.newt.event.KeyAdapter; -import com.jogamp.newt.event.KeyEvent; -import com.jogamp.newt.event.WindowAdapter; -import com.jogamp.newt.event.WindowEvent; -import com.jogamp.newt.opengl.GLWindow; -import com.jogamp.opengl.test.junit.util.MiscUtils; -import com.jogamp.opengl.util.Animator; - -public class GPUTextNewtDemo { - /** - * FIXME: - * - * If DEBUG is enabled: - * - * Caused by: com.jogamp.opengl.GLException: Thread[main-Display-X11_:0.0-1-EDT-1,5,main] glGetError() returned the following error codes after a call to glFramebufferRenderbuffer(<int> 0x8D40, <int> 0x1902, <int> 0x8D41, <int> 0x1): GL_INVALID_ENUM ( 1280 0x500), - * at com.jogamp.opengl.DebugGL4bc.checkGLGetError(DebugGL4bc.java:33961) - * at com.jogamp.opengl.DebugGL4bc.glFramebufferRenderbuffer(DebugGL4bc.java:33077) - * at jogamp.graph.curve.opengl.VBORegion2PGL3.initFBOTexture(VBORegion2PGL3.java:295) - */ - static final boolean DEBUG = false; - static final boolean TRACE = false; - - static int SceneMSAASamples = 0; - static int GraphVBAASamples = 4; - static int GraphMSAASamples = 0; - - public static void main(final String[] args) throws IOException { - Font opt_font = null; - int opt_fontSizeHead = -1; - int width = 800, height = 400; - int x = 10, y = 10; - if( 0 != args.length ) { - SceneMSAASamples = 0; - GraphMSAASamples = 0; - GraphVBAASamples = 0; - - for(int i=0; i<args.length; i++) { - if(args[i].equals("-smsaa")) { - i++; - SceneMSAASamples = MiscUtils.atoi(args[i], SceneMSAASamples); - } else if(args[i].equals("-gmsaa")) { - i++; - GraphMSAASamples = MiscUtils.atoi(args[i], GraphMSAASamples); - GraphVBAASamples = 0; - } else if(args[i].equals("-gvbaa")) { - i++; - GraphMSAASamples = 0; - GraphVBAASamples = MiscUtils.atoi(args[i], GraphVBAASamples); - } else if(args[i].equals("-width")) { - i++; - width = MiscUtils.atoi(args[i], width); - } else if(args[i].equals("-height")) { - i++; - height = MiscUtils.atoi(args[i], height); - } else if(args[i].equals("-x")) { - i++; - x = MiscUtils.atoi(args[i], x); - } else if(args[i].equals("-y")) { - i++; - y = MiscUtils.atoi(args[i], y); - } else if(args[i].equals("-font")) { - i++; - opt_font = FontFactory.get(new File(args[i])); - } else if(args[i].equals("-fontSize")) { - i++; - opt_fontSizeHead = MiscUtils.atoi(args[i], opt_fontSizeHead); - } - } - } - System.err.println("Desired win size "+width+"x"+height); - System.err.println("Desired win pos "+x+"/"+y); - System.err.println("Scene MSAA Samples "+SceneMSAASamples); - System.err.println("Graph MSAA Samples "+GraphMSAASamples); - System.err.println("Graph VBAA Samples "+GraphVBAASamples); - - final GLProfile glp = GLProfile.getGL2ES2(); - - final GLCapabilities caps = new GLCapabilities(glp); - caps.setAlphaBits(4); - if( SceneMSAASamples > 0 ) { - caps.setSampleBuffers(true); - caps.setNumSamples(SceneMSAASamples); - } - System.out.println("Requested: " + caps); - - int rmode = 0; // Region.VARIABLE_CURVE_WEIGHT_BIT; - int sampleCount = 0; - if( GraphVBAASamples > 0 ) { - rmode |= Region.VBAA_RENDERING_BIT; - sampleCount += GraphVBAASamples; - } else if( GraphMSAASamples > 0 ) { - rmode |= Region.MSAA_RENDERING_BIT; - sampleCount += GraphMSAASamples; - } - - final GLWindow window = GLWindow.create(caps); - window.setPosition(x, y); - window.setSize(width, height); - window.setTitle("GPU Text Newt Demo - graph[vbaa"+GraphVBAASamples+" msaa"+GraphMSAASamples+"], msaa "+SceneMSAASamples); - - final RenderState rs = RenderState.createRenderState(SVertex.factory()); - final GPUTextGLListener0A textGLListener = new GPUTextGLListener0A(glp, rs, rmode, sampleCount, true, DEBUG, TRACE); - textGLListener.setFont(opt_font); - textGLListener.setFontHeadSize(opt_fontSizeHead); - // ((TextRenderer)textGLListener.getRenderer()).setCacheLimit(32); - window.addGLEventListener(textGLListener); - window.setVisible(true); - - { - final Font font2 = textGLListener.getFont(); - final float[] sDPI = FontScale.perMMToPerInch( window.getPixelsPerMM(new float[2]) ); - final float font_ptpi = 12f; - final float font_ppi = FontScale.toPixels(font_ptpi, sDPI[1]); - final AABBox fontNameBox = font2.getMetricBounds(GPUTextRendererListenerBase01.textX1); - System.err.println("GPU Text Newt Demo: "+font2.fullString()); - System.err.println("GPU Text Newt Demo: screen-dpi: "+sDPI[0]+"x"+sDPI[1]+", font "+font_ptpi+" pt, "+font_ppi+" pixel"); - System.err.println("GPU Text Newt Demo: textX2: "+fontNameBox+" em, "+fontNameBox.scale(font_ppi, new float[3])+" px"); - final MonitorDevice monitor = window.getMainMonitor(); - System.err.println("GPU Text Newt Demo: "+monitor); - // window.setSurfaceSize((int)(fontNameBox.getWidth()*1.1f), (int)(fontNameBox.getHeight()*2f)); - } - - // FPSAnimator animator = new FPSAnimator(60); - final Animator animator = new Animator(); - animator.setUpdateFPSFrames(60, null); - animator.add(window); - - window.addKeyListener(new KeyAdapter() { - @Override - public void keyPressed(final KeyEvent arg0) { - if(arg0.getKeyCode() == KeyEvent.VK_F4) { - new InterruptSource.Thread() { - @Override - public void run() { - window.destroy(); - } }.start(); - } - } - }); - window.addWindowListener(new WindowAdapter() { - @Override - public void windowDestroyed(final WindowEvent e) { - animator.stop(); - } - }); - - animator.start(); - } -} diff --git a/src/test/com/jogamp/opengl/test/junit/graph/ui/demos/GPUUISceneGLListener0A.java b/src/test/com/jogamp/opengl/test/junit/graph/ui/demos/GPUUISceneGLListener0A.java deleted file mode 100644 index f49258832..000000000 --- a/src/test/com/jogamp/opengl/test/junit/graph/ui/demos/GPUUISceneGLListener0A.java +++ /dev/null @@ -1,969 +0,0 @@ -/** - * Copyright 2010-2023 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.junit.graph.ui.demos; - -import java.io.File; -import java.io.IOException; -import java.net.URISyntaxException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Locale; - -import com.jogamp.opengl.GL; -import com.jogamp.opengl.GL2ES2; -import com.jogamp.opengl.GLAnimatorControl; -import com.jogamp.opengl.GLAutoDrawable; -import com.jogamp.opengl.GLEventListener; -import com.jogamp.opengl.GLPipelineFactory; -import com.jogamp.opengl.GLRunnable; -import com.jogamp.opengl.JoglVersion; -import com.jogamp.common.net.Uri; -import com.jogamp.common.util.IOUtil; -import com.jogamp.common.util.InterruptSource; -import com.jogamp.graph.curve.Region; -import com.jogamp.graph.curve.opengl.RegionRenderer; -import com.jogamp.graph.curve.opengl.RenderState; -import com.jogamp.graph.font.Font; -import com.jogamp.graph.font.FontFactory; -import com.jogamp.graph.font.FontScale; -import com.jogamp.graph.geom.SVertex; -import com.jogamp.graph.ui.gl.Scene; -import com.jogamp.graph.ui.gl.Shape; -import com.jogamp.graph.ui.gl.shapes.Button; -import com.jogamp.graph.ui.gl.shapes.GLButton; -import com.jogamp.graph.ui.gl.shapes.ImageButton; -import com.jogamp.graph.ui.gl.shapes.Label; -import com.jogamp.graph.ui.gl.shapes.MediaButton; -import com.jogamp.graph.ui.gl.shapes.RoundButton; -import com.jogamp.newt.MonitorDevice; -import com.jogamp.newt.Window; -import com.jogamp.newt.event.InputEvent; -import com.jogamp.newt.event.MouseEvent; -import com.jogamp.newt.event.PinchToZoomGesture; -import com.jogamp.newt.event.GestureHandler.GestureEvent; -import com.jogamp.newt.event.MouseEvent.PointerClass; -import com.jogamp.newt.opengl.GLWindow; -import com.jogamp.opengl.math.FloatUtil; -import com.jogamp.opengl.math.VectorUtil; -import com.jogamp.opengl.test.junit.graph.FontSet01; -import com.jogamp.opengl.test.junit.graph.demos.MSAATool; -import com.jogamp.opengl.test.junit.jogl.demos.es2.GearsES2; -import com.jogamp.opengl.util.GLReadBufferUtil; -import com.jogamp.opengl.util.av.GLMediaPlayer; -import com.jogamp.opengl.util.av.GLMediaPlayerFactory; -import com.jogamp.opengl.util.texture.ImageSequence; -import com.jogamp.opengl.util.texture.TextureIO; - -public class GPUUISceneGLListener0A implements GLEventListener { - - private boolean debug = false; - private boolean trace = false; - - private final float noAADPIThreshold; - private final Scene sceneUICntrl; - - /** -1 == AUTO, TBD @ init(..) */ - private int renderModes; - - private final Font font; - private final Font fontFPS; - - private final float sceneDist = 3000f; - private final float zNear = 0.1f, zFar = 7000f; - - private final float relTop = 80f/100f; - private final float relMiddle = 22f/100f; - private final float relLeft = 11f/100f; - - /** Proportional Button Size to Window Height, per-vertical-pixels [PVP] */ - private final float buttonYSizePVP = 0.084f; - private final float buttonXSizePVP = 0.084f; // 0.105f; - private final float fontSizePt = 10f; - /** Proportional Font Size to Window Height for Main Text, per-vertical-pixels [PVP] */ - private final float fontSizeFixedPVP = 0.04f; - /** Proportional Font Size to Window Height for FPS Status Line, per-vertical-pixels [PVP] */ - private final float fontSizeFpsPVP = 0.03f; - private float dpiV = 96; - - /** - * Default DPI threshold value to disable {@link Region#VBAA_RENDERING_BIT VBAA}: {@value} dpi - * @see #GPUUISceneGLListener0A(float) - * @see #GPUUISceneGLListener0A(float, boolean, boolean) - */ - public static final float DefaultNoAADPIThreshold = 200f; - - private int currentText = 0; - - private String actionText = null; - private Label[] labels = null; - private String[] strings = null; - private final List<RoundButton> buttons = new ArrayList<RoundButton>(); - private int buttonsLeftCount = 0; - private Label truePtSizeLabel = null; - private Label jogampLabel = null; - private Label fpsLabel = null; - - private GLAutoDrawable cDrawable; - - private final GLReadBufferUtil screenshot; - - private final String jogamp = "JogAmp - Jogl Graph Module Demo"; - private final String truePtSize = fontSizePt+" pt font size label - true scale!"; - - private final String longText = "JOGL: Java™ Binding for the OpenGL® API.\n\n"+ - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec \n"+ - "Ut purus odio, rhoncus sit amet commodo eget, ullamcorper vel\n"+ - "quam iaculis urna cursus ornare. Nullam ut felis a ante ultrices\n"+ - "In hac habitasse platea dictumst. Vivamus et mi a quam lacinia\n"+ - "Morbi quis bibendum nibh. Donec lectus orci, sagittis in consequat\n"+ - "Donec ut dolor et nulla tristique varius. In nulla magna, fermentum\n"+ - "in lorem. Maecenas in ipsum ac justo scelerisque sollicitudin.\n"+ - "\n"+ - "Lyford’s in Texas & L’Anse-aux-Griffons in Québec;\n"+ - "Kwikpak on the Yukon delta, Kvæven in Norway, Kyulu in Kenya, not Rwanda.…\n"+ - "Ytterbium in the periodic table. Are Toussaint L’Ouverture, Wölfflin, Wolfe,\n"+ - "\n"+ - "The quick brown fox jumps over the lazy dog\n"; - - /** - * @param renderModes - */ - public GPUUISceneGLListener0A(final int renderModes) { - this(null, renderModes, false, false); - } - - /** - * @param renderModes - * @param debug - * @param trace - */ - public GPUUISceneGLListener0A(final String fontfilename, final int renderModes, final boolean debug, final boolean trace) { - this(fontfilename, 0f, renderModes, debug, trace); - } - - /** - * @param noAADPIThreshold see {@link #DefaultNoAADPIThreshold} - * @param debug - * @param trace - */ - public GPUUISceneGLListener0A(final String fontfilename, final float noAADPIThreshold, final boolean debug, final boolean trace) { - this(fontfilename, noAADPIThreshold, 0, debug, trace); - } - - private GPUUISceneGLListener0A(final String fontfilename, final float noAADPIThreshold, final int renderModes, final boolean debug, final boolean trace) { - this.noAADPIThreshold = noAADPIThreshold; - this.debug = debug; - this.trace = trace; - - this.renderModes = renderModes; - - try { - if( null == fontfilename ) { - font = FontFactory.get(IOUtil.getResource("fonts/freefont/FreeSerif.ttf", - FontSet01.class.getClassLoader(), FontSet01.class).getInputStream(), true); - } else { - font = FontFactory.get( new File( fontfilename ) ); - } - System.err.println("Font "+font.getFullFamilyName()); - - fontFPS = FontFactory.get(IOUtil.getResource("fonts/freefont/FreeMonoBold.ttf", - FontSet01.class.getClassLoader(), FontSet01.class).getInputStream(), true); - System.err.println("Font FPS "+fontFPS.getFullFamilyName()); - - } catch (final IOException ioe) { - throw new RuntimeException(ioe); - } - { - final RenderState rs = RenderState.createRenderState(SVertex.factory()); - final RegionRenderer renderer = RegionRenderer.create(rs, RegionRenderer.defaultBlendEnable, RegionRenderer.defaultBlendDisable); - rs.setHintMask(RenderState.BITHINT_GLOBAL_DEPTH_TEST_ENABLED); - // renderer = RegionRenderer.create(rs, null, null); - - sceneUICntrl = new Scene(renderer, sceneDist, zNear, zFar); - // sceneUIController.setSampleCount(3); // easy on embedded devices w/ just 3 samples (default is 4)? - } - screenshot = new GLReadBufferUtil(false, false); - } - - private void rotateButtons(float[] angdeg) { - angdeg = VectorUtil.scaleVec3(angdeg, angdeg, FloatUtil.PI / 180.0f); - for(int i=0; i<buttons.size(); i++) { - buttons.get(i).getRotation().rotateByEuler( angdeg ); - } - } - private void translateButtons(final float tx, final float ty, final float tz) { - for(int i=0; i<buttons.size(); i++) { - buttons.get(i).translate(tx, ty, tz); - } - } - - private void setButtonsSpacing(final float dx, final float dy) { - for(int i=0; i<buttons.size(); i++) { - final RoundButton b = buttons.get(i); - if( b instanceof Button ) { - final Button lb = (Button) b; - final float sx = lb.getSpacingX()+dx, sy = lb.getSpacingY()+dy; - System.err.println("Spacing: X "+sx+", Y "+sy); - lb.setSpacing(sx, sy); - } - } - } - - private void setButtonsCorner(final float dc) { - for(int i=0; i<buttons.size(); i++) { - final float c = buttons.get(i).getCorner()+dc; - System.err.println("Corner: "+c); - buttons.get(i).setCorner(c); - } - } - - private void resetButtons() { - for(int i=0; i<buttons.size(); i++) { - final RoundButton b = buttons.get(i); - b.getRotation().setIdentity(); - b.setCorner(RoundButton.DEFAULT_CORNER); - if( b instanceof Button ) { - ((Button)b).setSpacing(Button.DEFAULT_SPACING_X, Button.DEFAULT_SPACING_Y); - } - } - } - - public static final int BUTTON_NEXTTEXT = 100; - public static final int BUTTON_FPS = 101; - public static final int BUTTON_VSYNC = 102; - public static final int BUTTON_QUIT = 102; - public static final int BUTTON_MOVIE = 200; - public static final int BUTTON_GLEL = 200; - - public Shape getShapeByName(final int name) { - return sceneUICntrl.getShapeByName(name); - } - - private void initButtons(final GL2ES2 gl, final int width, final int height) { - final boolean pass2Mode = Region.isTwoPass( renderModes ) ; - buttons.clear(); - - final float buttonXSize = buttonXSizePVP * width; - // final float buttonYSize = buttonYSizePVP * height; - final float buttonYSize = buttonXSize / 2.5f; - System.err.println("Button Size: "+buttonXSizePVP+" x "+buttonYSizePVP+" * "+width+" x "+height+" -> "+buttonXSize+" x "+buttonYSize); - final float xStartLeft = 0f; // aligned to left edge w/ space via reshape - final float yStartTop = 0f; // aligned to top edge w/ space via reshape - final float diffX = 1.2f * buttonXSize; - final float diffY = 1.5f * buttonYSize; - - Button button = new Button(SVertex.factory(), renderModes, font, "Next Text", buttonXSize, buttonYSize); - button.setName(BUTTON_NEXTTEXT); - button.translate(xStartLeft,yStartTop-diffY*buttons.size(), 0f); - button.addMouseListener(new Shape.MouseGestureAdapter() { - @Override - public void mouseClicked(final MouseEvent e) { - if( null != labels[currentText] ) { - labels[currentText].setEnabled(false); - } - currentText = (currentText+1)%labels.length; - if( null != labels[currentText] ) { - labels[currentText].setEnabled(true); - } - } } ); - button.addMouseListener(dragZoomRotateListener); - buttons.add(button); - - button = new Button(SVertex.factory(), renderModes, font, "Show FPS", buttonXSize, buttonYSize); - button.setName(BUTTON_FPS); - button.translate(xStartLeft,yStartTop - diffY*buttons.size(), 0f); - button.setToggleable(true); - button.setToggle(fpsLabel.isEnabled()); - button.addMouseListener(new Shape.MouseGestureAdapter() { - @Override - public void mouseClicked(final MouseEvent e) { - final GLAnimatorControl a = cDrawable.getAnimator(); - if( null != a ) { - a.resetFPSCounter(); - } - fpsLabel.setEnabled(!fpsLabel.isEnabled()); - } } ); - button.addMouseListener(dragZoomRotateListener); - buttons.add(button); - - button = new Button(SVertex.factory(), renderModes, font, "V-Sync", buttonXSize, buttonYSize); - button.setName(BUTTON_VSYNC); - button.translate(xStartLeft,yStartTop - diffY*buttons.size(), 0f); - button.setToggleable(true); - button.setToggle(gl.getSwapInterval()>0); - button.addMouseListener(new Shape.MouseGestureAdapter() { - @Override - public void mouseClicked(final MouseEvent e) { - cDrawable.invoke(false, new GLRunnable() { - @Override - public boolean run(final GLAutoDrawable drawable) { - final GL gl = drawable.getGL(); - gl.setSwapInterval(gl.getSwapInterval()<=0?1:0); - final GLAnimatorControl a = drawable.getAnimator(); - if( null != a ) { - a.resetFPSCounter(); - } - return true; - } - }); - } } ); - button.addMouseListener(dragZoomRotateListener); - buttons.add(button); - - button = new Button(SVertex.factory(), renderModes, font, "< Tilt >", buttonXSize, buttonYSize); - button.translate(xStartLeft,yStartTop - diffY*buttons.size(), 0f); - button.addMouseListener(new Shape.MouseGestureAdapter() { - @Override - public void mouseClicked(final MouseEvent e) { - final Shape.UIShapeEvent shapeEvent = (Shape.UIShapeEvent) e.getAttachment(); - if( shapeEvent.objPos[0] < shapeEvent.shape.getBounds().getCenter()[0] ) { - rotateButtons(new float[] { 0f, -5f, 0f}); // left-half pressed - } else { - rotateButtons(new float[] { 0f, 5f, 0f}); // right-half pressed - } - } - @Override - public void mouseWheelMoved(final MouseEvent e) { - rotateButtons(new float[] { 0f, e.getRotation()[1], 0f}); - } } ); - buttons.add(button); - - if( pass2Mode ) { // second column to the left - button = new Button(SVertex.factory(), renderModes, font, "< Samples >", buttonXSize, buttonYSize); - button.translate(xStartLeft,yStartTop - diffY*buttons.size(), 0f); - button.addMouseListener(new Shape.MouseGestureAdapter() { - @Override - public void mouseClicked(final MouseEvent e) { - final Shape.UIShapeEvent shapeEvent = (Shape.UIShapeEvent) e.getAttachment(); - int sampleCount = sceneUICntrl.getSampleCount(); - if( shapeEvent.objPos[0] < shapeEvent.shape.getBounds().getCenter()[0] ) { - // left-half pressed - sampleCount--; - } else { - // right-half pressed - sampleCount++; - } - sampleCount = sceneUICntrl.setSampleCount(sampleCount); // validated / clipped - } } ); - button.addMouseListener(dragZoomRotateListener); - buttons.add(button); - - button = new Button(SVertex.factory(), renderModes, font, "< Quality >", buttonXSize, buttonYSize); - button.translate(xStartLeft,yStartTop - diffY*buttons.size(), 0f); - button.addMouseListener(new Shape.MouseGestureAdapter() { - @Override - public void mouseClicked(final MouseEvent e) { - final Shape.UIShapeEvent shapeEvent = (Shape.UIShapeEvent) e.getAttachment(); - int quality = shapeEvent.shape.getQuality(); - - if( shapeEvent.objPos[0] < shapeEvent.shape.getBounds().getCenter()[0] ) { - // left-half pressed - if( quality > 0 ) { - quality--; - } - } else { - // right-half pressed - if( quality < Region.MAX_QUALITY ) { - quality++; - } - } - sceneUICntrl.setAllShapesQuality(quality); - } } ); - button.addMouseListener(dragZoomRotateListener); - buttons.add(button); - } - - button = new Button(SVertex.factory(), renderModes, font, "Quit", buttonXSize, buttonYSize); - button.setName(BUTTON_QUIT); - button.translate(xStartLeft,yStartTop - diffY*buttons.size(), 0f); - button.setColor(0.7f, 0.0f, 0.0f, 1.0f); - button.setLabelColor(1.2f, 1.2f, 1.2f); - button.setPressedColorMod(1.1f, 0.0f, 0.0f, 1.0f); - button.addMouseListener(new Shape.MouseGestureAdapter() { - @Override - public void mouseClicked(final MouseEvent e) { - new InterruptSource.Thread() { - @Override - public void run() { - if( null != cDrawable ) { - final GLAnimatorControl actrl = cDrawable.getAnimator(); - if( null != actrl ) { - actrl.stop(); - } - cDrawable.destroy(); - } - } }.start(); - } } ); - button.addMouseListener(dragZoomRotateListener); - buttons.add(button); - - // second column to the left - { - final int j = 1; // column - int k = 0; // row - button = new Button(SVertex.factory(), renderModes, font, "Y Flip", buttonXSize, buttonYSize); - button.translate(xStartLeft - diffX*j,yStartTop - diffY*k, 0f); - button.addMouseListener(new Shape.MouseGestureAdapter() { - @Override - public void mouseClicked(final MouseEvent e) { - rotateButtons(new float[] { 0f, 180f, 0f}); - } } ); - button.addMouseListener(dragZoomRotateListener); - buttons.add(button); - - k++; - button = new Button(SVertex.factory(), renderModes, font, "X Flip", buttonXSize, buttonYSize); - button.translate(xStartLeft - diffX*j,yStartTop - diffY*k, 0f); - button.addMouseListener(new Shape.MouseGestureAdapter() { - @Override - public void mouseClicked(final MouseEvent e) { - rotateButtons(new float[] { 180f, 0f, 0f}); - } } ); - button.addMouseListener(dragZoomRotateListener); - buttons.add(button); - k++; - - button = new Button(SVertex.factory(), renderModes, font, "+", buttonXSize, buttonYSize); - button.translate(xStartLeft - diffX*j,yStartTop - diffY*k, 0f); - button.addMouseListener(new Shape.MouseGestureAdapter() { - @Override - public void mouseClicked(final MouseEvent e) { - final Shape.UIShapeEvent shapeEvent = (Shape.UIShapeEvent) e.getAttachment(); - // rel position to center - final float dx = shapeEvent.objPos[0] - shapeEvent.shape.getBounds().getCenter()[0] ; - final float dy = shapeEvent.objPos[1] - shapeEvent.shape.getBounds().getCenter()[1] ; - // per-cent position to center (remove dependency on dimension) - final float awdx = Math.abs(dx)/shapeEvent.shape.getBounds().getWidth(); - final float awdy = Math.abs(dy)/shapeEvent.shape.getBounds().getHeight(); - float tx = 0, ty = 0; - if ( awdx > awdy ) { - tx = dx < 0 ? -5 : 5; - } else { - ty = dy < 0 ? -5 : 5; - } - translateButtons(tx, ty, 0f); - } } ); - button.addMouseListener(dragZoomRotateListener); - buttons.add(button); - k++; - - button = new Button(SVertex.factory(), renderModes, font, "< Space >", buttonXSize, buttonYSize); - button.translate(xStartLeft - diffX*j,yStartTop - diffY*k, 0f); - button.addMouseListener(new Shape.MouseGestureAdapter() { - @Override - public void mouseClicked(final MouseEvent e) { - final Shape.UIShapeEvent shapeEvent = (Shape.UIShapeEvent) e.getAttachment(); - final float dx, dy; - if( shapeEvent.objPos[0] < shapeEvent.shape.getBounds().getCenter()[0] ) { - dx=-0.01f; dy=-0.005f; - } else { - dx=0.01f; dy=0.005f; - } - setButtonsSpacing(dx, dy); - } - @Override - public void mouseWheelMoved(final MouseEvent e) { - setButtonsSpacing(e.getRotation()[0]/100f, e.getRotation()[1]/200f); - } } ); - buttons.add(button); - k++; - - button = new Button(SVertex.factory(), renderModes, font, "< Corner >", buttonXSize, buttonYSize); - button.translate(xStartLeft - diffX*j,yStartTop - diffY*k, 0f); - button.addMouseListener(new Shape.MouseGestureAdapter() { - @Override - public void mouseClicked(final MouseEvent e) { - final Shape.UIShapeEvent shapeEvent = (Shape.UIShapeEvent) e.getAttachment(); - final float dc; - if( shapeEvent.objPos[0] < shapeEvent.shape.getBounds().getCenter()[0] ) { - dc=-0.1f; - } else { - dc=0.1f; - } - setButtonsCorner(dc); - } - @Override - public void mouseWheelMoved(final MouseEvent e) { - setButtonsCorner(e.getRotation()[1]/20f); - } } ); - buttons.add(button); - k++; - - button = new Button(SVertex.factory(), renderModes, font, "Reset", buttonXSize, buttonYSize); - button.translate(xStartLeft - diffX*j,yStartTop - diffY*k, 0f); - button.addMouseListener(new Shape.MouseGestureAdapter() { - @Override - public void mouseClicked(final MouseEvent e) { - resetButtons(); - } } ); - button.addMouseListener(dragZoomRotateListener); - buttons.add(button); - k++; - - button = new Button(SVertex.factory(), renderModes, font, "Snapshot", buttonXSize, buttonYSize); - button.translate(xStartLeft - diffX*j,yStartTop - diffY*k, 0f); - button.addMouseListener(new Shape.MouseGestureAdapter() { - @Override - public void mouseClicked(final MouseEvent e) { - cDrawable.invoke(false, new GLRunnable() { - @Override - public boolean run(final GLAutoDrawable drawable) { - printScreen(drawable.getGL()); - return true; - } - }); - } } ); - button.addMouseListener(dragZoomRotateListener); - buttons.add(button); - k++; - } - - buttonsLeftCount = buttons.size(); - - final float button2XSize = 2f*buttonXSize; - final float button2YSize = 2f*buttonYSize; - final float xStartRight = -button2XSize - 8f; // aligned to right edge via reshape - final int texUnitMediaPlayer, texUnitImageButton, texUnitGLELButton; - { - // works - but not required .. - texUnitMediaPlayer=1; - texUnitImageButton=2; - texUnitGLELButton=3; - } - - if( true ) { - final GLMediaPlayer mPlayer = GLMediaPlayerFactory.createDefault(); - mPlayer.setTextureUnit(texUnitMediaPlayer); - final MediaButton mPlayerButton = new MediaButton(sceneUICntrl.getVertexFactory(), renderModes, - button2XSize, button2YSize, mPlayer); - mPlayerButton.setName(BUTTON_MOVIE); - mPlayerButton.setVerbose(true); - mPlayerButton.addDefaultEventListener(); - mPlayerButton.translate(xStartRight, yStartTop - diffY*1, 0f); - mPlayerButton.setToggleable(true); - mPlayerButton.setToggle(false); // toggle == false -> mute audio - mPlayerButton.setToggleOffColorMod(0f, 1f, 0f, 1.0f); - mPlayerButton.addMouseListener(dragZoomRotateListener); - mPlayerButton.addMouseListener(new Shape.MouseGestureAdapter() { - @Override - public void mouseClicked(final MouseEvent e) { - mPlayer.setAudioVolume( mPlayerButton.isToggleOn() ? 1f : 0f ); - } } ); - buttons.add(mPlayerButton); - try { - final Uri streamLoc = Uri.cast("http://archive.org/download/BigBuckBunny_328/BigBuckBunny_512kb.mp4"); - mPlayer.initStream(streamLoc, GLMediaPlayer.STREAM_ID_AUTO, GLMediaPlayer.STREAM_ID_AUTO, GLMediaPlayer.TEXTURE_COUNT_DEFAULT); - } catch (final URISyntaxException e1) { - e1.printStackTrace(); - } - } - if( true ) { - final ImageSequence imgSeq = new ImageSequence(texUnitImageButton, true); - final ImageButton imgButton = new ImageButton(sceneUICntrl.getVertexFactory(), renderModes, - button2XSize, button2YSize, imgSeq); - try { - imgSeq.addFrame(gl, GPUUISceneGLListener0A.class, "button-released-145x53.png", TextureIO.PNG); - imgSeq.addFrame(gl, GPUUISceneGLListener0A.class, "button-pressed-145x53.png", TextureIO.PNG); - } catch (final IOException e2) { - e2.printStackTrace(); - } - imgSeq.setManualStepping(true); - imgButton.translate(xStartRight, yStartTop - diffY*2.5f, 0f); - imgButton.addMouseListener(dragZoomRotateListener); - imgButton.addMouseListener(new Shape.MouseGestureAdapter() { - @Override - public void mousePressed(final MouseEvent e) { - imgButton.setCurrentIdx(1); - System.err.println("XXX: "+imgButton); - } - @Override - public void mouseReleased(final MouseEvent e) { - imgButton.setCurrentIdx(0); - } } ); - buttons.add(imgButton); - } - if( true ) { - // Issues w/ OSX and NewtCanvasAWT when rendering / animating - // Probably related to CALayer - FBO - FBO* (of this button) - final GLEventListener glel; - { - final GearsES2 gears = new GearsES2(0); - gears.setVerbose(false); - gears.setClearColor(new float[] { 0.9f, 0.9f, 0.9f, 1f } ); - glel = gears; - } - final GLButton glelButton = new GLButton(sceneUICntrl.getVertexFactory(), renderModes, - button2XSize, button2YSize, - texUnitGLELButton, glel, false /* useAlpha */, - (int)(button2XSize), (int)(button2YSize)); - glelButton.setName(BUTTON_GLEL); - glelButton.setToggleable(true); - glelButton.setToggle(false); // toggle == true -> animation - glelButton.setAnimate(false); - glelButton.translate(xStartRight, yStartTop - diffY*4f, 0f); - glelButton.addMouseListener(dragZoomRotateListener); - glelButton.addMouseListener(new Shape.MouseGestureAdapter() { - @Override - public void mouseClicked(final MouseEvent e) { - glelButton.setAnimate( glelButton.isToggleOn() ); - } } ); - buttons.add(glelButton); - } - } - - private void initTexts() { - strings = new String[4]; - int i = 0; - - strings[i++] = "- Mouse Scroll Over Object\n"+ - " - General\n"+ - " - Z Translation\n"+ - " - Ctrl: Y-Rotation (Shift: X-Rotation)\n"+ - " - Tilt, Space and Corner\n"+ - " - Their respective action via wheel\n"+ - " (shift = other value)\n"+ - "\n"+ - "- Mouse Drag On Object\n"+ - " - Click on Object and drag mouse\n"+ - " - Current postion in status line at bottom\n"+ - "\n"+ - "- Tilt Button Rotate Whole Button Group"; - - strings[i++] = "abcdefghijklmn\nopqrstuvwxyz\n"+ - "ABCDEFGHIJKL\n"+ - "MNOPQRSTUVWXYZ\n"+ - "0123456789.:,;(*!?/\\\")$%^&-+@~#<>{}[]"; - - strings[i++] = "The quick brown fox jumps over the lazy dog"; - - strings[i++] = longText; - - labels = new Label[i]; - - currentText = strings.length - 1; - } - - - private static final boolean enableOthers = true; - private static final boolean reshape_ui = false; // incomplete: button positioning - - - private void setupUI(final GLAutoDrawable drawable) { - final float pixelSizeFixed = fontSizeFixedPVP * drawable.getSurfaceHeight(); - jogampLabel = new Label(sceneUICntrl.getVertexFactory(), renderModes, font, pixelSizeFixed, jogamp); - jogampLabel.addMouseListener(dragZoomRotateListener); - sceneUICntrl.addShape(jogampLabel); - jogampLabel.setEnabled(enableOthers); - - final float pixelSize10Pt = FontScale.toPixels(fontSizePt, dpiV); - System.err.println("10Pt PixelSize: Display "+dpiV+" dpi, fontSize "+fontSizePt+" ppi -> "+pixelSize10Pt+" pixel-size"); - truePtSizeLabel = new Label(sceneUICntrl.getVertexFactory(), renderModes, font, pixelSize10Pt, truePtSize); - sceneUICntrl.addShape(truePtSizeLabel); - truePtSizeLabel.setEnabled(enableOthers); - truePtSizeLabel.translate(0, - 1.5f * jogampLabel.getLineHeight(), 0f); - truePtSizeLabel.setColor(0.1f, 0.1f, 0.1f, 1.0f); - - /** - * - * [Label] Display 112.88889 dpi, fontSize 12.0 ppi -> pixelSize 18.814816 - * [FPS] Display 112.88889 dpi, fontSize 12.0 ppi -> pixelSize 15.679012 - */ - final float pixelSizeFPS = fontSizeFpsPVP * drawable.getSurfaceHeight(); - fpsLabel = new Label(sceneUICntrl.getVertexFactory(), renderModes, fontFPS, pixelSizeFPS, "Nothing there yet"); - fpsLabel.addMouseListener(dragZoomRotateListener); - sceneUICntrl.addShape(fpsLabel); - fpsLabel.setEnabled(enableOthers); - fpsLabel.setColor(0.1f, 0.1f, 0.1f, 1.0f); - fpsLabel.translate(0f, pixelSizeFPS * (fontFPS.getMetrics().getLineGap() - fontFPS.getMetrics().getDescent()), 0f); - - initButtons(drawable.getGL().getGL2ES2(), drawable.getSurfaceWidth(), drawable.getSurfaceHeight()); - for(int i=0; i<buttons.size(); i++) { - sceneUICntrl.addShape(buttons.get(i)); - } - } - - private void reshapeUI(final GLAutoDrawable drawable) { - final float pixelSizeFixed = fontSizeFixedPVP * drawable.getSurfaceHeight(); - jogampLabel.setPixelSize(pixelSizeFixed); - - final float pixelSize10Pt = FontScale.toPixels(fontSizePt, dpiV); - System.err.println("10Pt PixelSize: Display "+dpiV+" dpi, fontSize "+fontSizePt+" ppi -> "+pixelSize10Pt+" pixel-size"); - truePtSizeLabel.setPixelSize(pixelSize10Pt); - - /** - * - * [Label] Display 112.88889 dpi, fontSize 12.0 ppi -> pixelSize 18.814816 - * [FPS] Display 112.88889 dpi, fontSize 12.0 ppi -> pixelSize 15.679012 - */ - final float pixelSizeFPS = fontSizeFpsPVP * drawable.getSurfaceHeight(); - fpsLabel.setPixelSize(pixelSizeFPS); - - final float buttonXSize = buttonXSizePVP * drawable.getSurfaceWidth(); - // final float buttonYSize = buttonYSizePVP * height; - final float buttonYSize = buttonXSize / 2.5f; - final float button2XSize = 2f*buttonXSize; - final float button2YSize = 2f*buttonYSize; - - for(int i=0; i<buttons.size() && i<buttonsLeftCount; i++) { - buttons.get(i).setSize(buttonXSize, buttonYSize); - } - for(int i=buttonsLeftCount; i<buttons.size(); i++) { - buttons.get(i).setSize(button2XSize, button2YSize); - } - - for(int i=0; i<labels.length; i++) { - final Label l = labels[i]; - if( null != l ) { - l.setPixelSize(pixelSizeFixed); - } - } - } - - @Override - public void init(final GLAutoDrawable drawable) { - final Object upObj = drawable.getUpstreamWidget(); - if( upObj instanceof Window ) { - final Window upWin = (Window)upObj; - final MonitorDevice monitor = upWin.getMainMonitor(); - final float[] monitorDPI = MonitorDevice.perMMToPerInch( monitor.getPixelsPerMM(new float[2]) ); - final float[] sDPI = MonitorDevice.perMMToPerInch( upWin.getPixelsPerMM(new float[2]) ); - dpiV = sDPI[1]; - System.err.println("Monitor detected: "+monitor); - System.err.println("Monitor dpi: "+monitorDPI[0]+" x "+monitorDPI[1]); - System.err.println("Surface scale: native "+Arrays.toString(upWin.getMaximumSurfaceScale(new float[2]))+", current "+Arrays.toString(upWin.getCurrentSurfaceScale(new float[2]))); - System.err.println("Surface dpi "+sDPI[0]+" x "+sDPI[1]); - } else { - System.err.println("Using default DPI of "+dpiV); - } - if( 0 == renderModes && !FloatUtil.isZero(noAADPIThreshold, FloatUtil.EPSILON)) { - final boolean noAA = dpiV >= noAADPIThreshold; - final String noAAs = noAA ? " >= " : " < "; - System.err.println("AUTO RenderMode: dpi "+dpiV+noAAs+noAADPIThreshold+" -> noAA "+noAA); - renderModes = noAA ? 0 : Region.VBAA_RENDERING_BIT; - } - if(drawable instanceof GLWindow) { - System.err.println("GPUUISceneGLListener0A: init (1)"); - final GLWindow glw = (GLWindow) drawable; - sceneUICntrl.attachInputListenerTo(glw); - } else { - System.err.println("GPUUISceneGLListener0A: init (0)"); - } - cDrawable = drawable; - GL2ES2 gl = drawable.getGL().getGL2ES2(); - if(debug) { - gl = gl.getContext().setGL( GLPipelineFactory.create("com.jogamp.opengl.Debug", null, gl, null) ).getGL2ES2(); - } - if(trace) { - gl = gl.getContext().setGL( GLPipelineFactory.create("com.jogamp.opengl.Trace", null, gl, new Object[] { System.err } ) ).getGL2ES2(); - } - System.err.println(JoglVersion.getGLInfo(gl, null, false /* withCapsAndExts */).toString()); - System.err.println("VSync Swap Interval: "+gl.getSwapInterval()); - System.err.println("Chosen: "+drawable.getChosenGLCapabilities()); - MSAATool.dump(drawable); - - gl.setSwapInterval(1); - gl.glEnable(GL.GL_DEPTH_TEST); - gl.glEnable(GL.GL_BLEND); - - initTexts(); - - sceneUICntrl.init(drawable); - - final GLAnimatorControl a = drawable.getAnimator(); - if( null != a ) { - a.resetFPSCounter(); - } - - setupUI(drawable); - } - - @Override - public void reshape(final GLAutoDrawable drawable, final int x, final int y, final int width, final int height) { - System.err.println("GPUUISceneGLListener0A: reshape"); - - // - // Layout all shapes: Relational move regarding window coordinates - // - final float dw = width - lastWidth; - final float dh = height - lastHeight; - - final float dz = 0f; - final float dyTop = dh * relTop; - final float dxLeft = dw * relLeft; - final float dxRight = dw; - - if( reshape_ui ) { - reshapeUI(drawable); - } - for(int i=0; i<buttons.size() && i<buttonsLeftCount; i++) { - buttons.get(i).translate(dxLeft, dyTop, dz); - } - for(int i=buttonsLeftCount; i<buttons.size(); i++) { - buttons.get(i).translate(dxRight, dyTop, dz); - } - - final float dxMiddleAbs = width * relMiddle; - final float dyTopLabelAbs = drawable.getSurfaceHeight() - 2f*jogampLabel.getLineHeight(); - jogampLabel.setTranslate(dxMiddleAbs, dyTopLabelAbs, dz); - truePtSizeLabel.setTranslate(dxMiddleAbs, dyTopLabelAbs, dz); - truePtSizeLabel.setTranslate(dxMiddleAbs, dyTopLabelAbs - 1.5f * jogampLabel.getLineHeight(), 0f); - fpsLabel.translate(0f, 0f, 0f); - if( null != labels[currentText] ) { - labels[currentText].setTranslate(dxMiddleAbs, - dyTopLabelAbs - 1.5f * jogampLabel.getLineHeight() - - 1.5f * truePtSizeLabel.getLineHeight(), 0f); - System.err.println("Label["+currentText+"] MOVE: "+labels[currentText]); - System.err.println("Label["+currentText+"] MOVE: "+Arrays.toString(labels[currentText].getTranslate())); - } - - sceneUICntrl.reshape(drawable, x, y, width, height); - - lastWidth = width; - lastHeight = height; - } - float lastWidth = 0f, lastHeight = 0f; - - @Override - public void dispose(final GLAutoDrawable drawable) { - System.err.println("GPUUISceneGLListener0A: dispose"); - - sceneUICntrl.dispose(drawable); // disposes all registered UIShapes - - final GL2ES2 gl = drawable.getGL().getGL2ES2(); - screenshot.dispose(gl); - } - - private int shotCount = 0; - - public void printScreen(final GL gl) { - final RegionRenderer renderer = sceneUICntrl.getRenderer(); - final String modeS = Region.getRenderModeString(jogampLabel.getRenderModes()); - final String filename = String.format((Locale)null, "GraphUIDemo-shot%03d-%03dx%03d-S_%s_%02d.png", - shotCount++, renderer.getWidth(), renderer.getHeight(), - modeS, sceneUICntrl.getSampleCount()); - gl.glFinish(); // just make sure rendering finished .. - if(screenshot.readPixels(gl, false)) { - screenshot.write(new File(filename)); - System.err.println("Wrote: "+filename); - } - } - - @Override - public void display(final GLAutoDrawable drawable) { - // System.err.println("GPUUISceneGLListener0A: display"); - - if(null == labels[currentText]) { - final float pixelSizeFixed = fontSizeFixedPVP * drawable.getSurfaceHeight(); - final float dyTop = drawable.getSurfaceHeight() - 2f*jogampLabel.getLineHeight(); - final float dxMiddle = drawable.getSurfaceWidth() * relMiddle; - labels[currentText] = new Label(sceneUICntrl.getVertexFactory(), renderModes, font, pixelSizeFixed, strings[currentText]); - labels[currentText].setColor(0.1f, 0.1f, 0.1f, 1.0f); - labels[currentText].setEnabled(enableOthers); - labels[currentText].translate(dxMiddle, - dyTop - 1.5f * jogampLabel.getLineHeight() - - 1.5f * truePtSizeLabel.getLineHeight(), 0f); - labels[currentText].addMouseListener(dragZoomRotateListener); - sceneUICntrl.addShape(labels[currentText]); - System.err.println("Label["+currentText+"] CTOR: "+labels[currentText]); - System.err.println("Label["+currentText+"] CTOR: "+Arrays.toString(labels[currentText].getTranslate())); - } - if( fpsLabel.isEnabled() ) { - final String text; - if( null == actionText ) { - text = sceneUICntrl.getStatusText(drawable, renderModes, fpsLabel.getQuality(), dpiV); - } else if( null != drawable.getAnimator() ) { - text = Scene.getStatusText(drawable.getAnimator())+", "+actionText; - } else { - text = actionText; - } - if( fpsLabel.setText(text) ) { // marks dirty only if text differs. - // System.err.println(text); - } - } - sceneUICntrl.display(drawable); - } - - public void attachInputListenerTo(final GLWindow window) { - sceneUICntrl.attachInputListenerTo(window); - } - - public void detachInputListenerFrom(final GLWindow window) { - sceneUICntrl.detachInputListenerFrom(window); - } - - /** - * We can share this instance w/ all UI elements, - * since only mouse action / gesture is complete for a single one (press, drag, released and click). - */ - private final Shape.MouseGestureAdapter dragZoomRotateListener = new Shape.MouseGestureAdapter() { - @Override - public void mouseReleased(final MouseEvent e) { - actionText = null; - } - - @Override - public void mouseDragged(final MouseEvent e) { - final Shape.UIShapeEvent shapeEvent = (Shape.UIShapeEvent) e.getAttachment(); - if( e.getPointerCount() == 1 ) { - final float[] tx = shapeEvent.shape.getTranslate(); - actionText = String.format((Locale)null, "Pos %6.2f / %6.2f / %6.2f", tx[0], tx[1], tx[2]); - } - } - - @Override - public void mouseWheelMoved(final MouseEvent e) { - final Shape.UIShapeEvent shapeEvent = (Shape.UIShapeEvent) e.getAttachment(); - final boolean isOnscreen = PointerClass.Onscreen == e.getPointerType(0).getPointerClass(); - if( 0 == ( ~InputEvent.BUTTONALL_MASK & e.getModifiers() ) && !isOnscreen ) { - // offscreen vertical mouse wheel zoom - final float tz = 100f*e.getRotation()[1]; // vertical: wheel - System.err.println("Rotate.Zoom.W: "+tz); - shapeEvent.shape.translate(0f, 0f, tz); - } else if( isOnscreen || e.isControlDown() ) { - final float[] rot = VectorUtil.scaleVec3(e.getRotation(), e.getRotation(), FloatUtil.PI / 180.0f); - if( isOnscreen ) { - System.err.println("XXX: "+e); - // swap axis for onscreen rotation matching natural feel - final float tmp = rot[0]; rot[0] = rot[1]; rot[1] = tmp; - VectorUtil.scaleVec3(rot, rot, 2f); - } - shapeEvent.shape.getRotation().rotateByEuler( rot ); - } - } - @Override - public void gestureDetected(final GestureEvent e) { - final Shape.UIShapeEvent shapeEvent = (Shape.UIShapeEvent) e.getAttachment(); - if( e instanceof PinchToZoomGesture.ZoomEvent ) { - final PinchToZoomGesture.ZoomEvent ze = (PinchToZoomGesture.ZoomEvent) e; - final float tz = ze.getDelta() * ze.getScale(); - System.err.println("Rotate.Zoom.G: "+tz); - shapeEvent.shape.translate(0f, 0f, tz); - } - } }; -} diff --git a/src/test/com/jogamp/opengl/test/junit/graph/ui/demos/GPUUISceneNewtCanvasAWTDemo.java b/src/test/com/jogamp/opengl/test/junit/graph/ui/demos/GPUUISceneNewtCanvasAWTDemo.java deleted file mode 100644 index c279079b7..000000000 --- a/src/test/com/jogamp/opengl/test/junit/graph/ui/demos/GPUUISceneNewtCanvasAWTDemo.java +++ /dev/null @@ -1,220 +0,0 @@ -/** - * Copyright 2010-2023 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.junit.graph.ui.demos; - -import java.awt.Component; -import java.awt.Frame; -import java.lang.reflect.InvocationTargetException; - -import com.jogamp.nativewindow.ScalableSurface; -import com.jogamp.nativewindow.util.Dimension; -import com.jogamp.nativewindow.util.DimensionImmutable; -import com.jogamp.opengl.GLCapabilities; -import com.jogamp.opengl.GLProfile; -import javax.swing.SwingUtilities; - -import org.junit.Assume; - -import com.jogamp.graph.curve.Region; -import com.jogamp.newt.awt.NewtCanvasAWT; -import com.jogamp.newt.event.WindowAdapter; -import com.jogamp.newt.event.WindowEvent; -import com.jogamp.newt.opengl.GLWindow; -import com.jogamp.opengl.test.junit.util.MiscUtils; -import com.jogamp.opengl.util.Animator; - -public class GPUUISceneNewtCanvasAWTDemo { - static final boolean DEBUG = false; - static final boolean TRACE = false; - - static void setComponentSize(final Component comp, final DimensionImmutable new_sz) { - try { - javax.swing.SwingUtilities.invokeAndWait(new Runnable() { - @Override - public void run() { - final java.awt.Dimension d = new java.awt.Dimension(new_sz.getWidth(), new_sz.getHeight()); - comp.setMinimumSize(d); - comp.setPreferredSize(d); - comp.setSize(d); - } } ); - } catch( final Throwable throwable ) { - throwable.printStackTrace(); - Assume.assumeNoException( throwable ); - } - } - - public static void main(final String[] args) throws InterruptedException, InvocationTargetException { - String fontfilename = null; - - int SceneMSAASamples = 0; - boolean GraphVBAAMode = false; - boolean GraphMSAAMode = false; - float GraphAutoMode = GPUUISceneGLListener0A.DefaultNoAADPIThreshold; - - final float[] reqSurfacePixelScale = new float[] { ScalableSurface.AUTOMAX_PIXELSCALE, ScalableSurface.AUTOMAX_PIXELSCALE }; - - int width = 800, height = 400; - int x = 10, y = 10; - - boolean forceES2 = false; - boolean forceES3 = false; - boolean forceGL3 = false; - boolean forceGLDef = false; - - if( 0 != args.length ) { - for(int i=0; i<args.length; i++) { - if(args[i].equals("-smsaa")) { - i++; - SceneMSAASamples = MiscUtils.atoi(args[i], SceneMSAASamples); - GraphMSAAMode = false; - GraphVBAAMode = false; - GraphAutoMode = 0f; - } else if(args[i].equals("-gmsaa")) { - GraphMSAAMode = true; - GraphVBAAMode = false; - GraphAutoMode = 0f; - } else if(args[i].equals("-gvbaa")) { - GraphMSAAMode = false; - GraphVBAAMode = true; - GraphAutoMode = 0f; - } else if(args[i].equals("-gauto")) { - GraphMSAAMode = false; - GraphVBAAMode = true; - i++; - GraphAutoMode = MiscUtils.atof(args[i], GraphAutoMode); - } else if(args[i].equals("-font")) { - i++; - fontfilename = args[i]; - } else if(args[i].equals("-width")) { - i++; - width = MiscUtils.atoi(args[i], width); - } else if(args[i].equals("-height")) { - i++; - height = MiscUtils.atoi(args[i], height); - } else if(args[i].equals("-x")) { - i++; - x = MiscUtils.atoi(args[i], x); - } else if(args[i].equals("-y")) { - i++; - y = MiscUtils.atoi(args[i], y); - } else if(args[i].equals("-pixelScale")) { - i++; - final float pS = MiscUtils.atof(args[i], reqSurfacePixelScale[0]); - reqSurfacePixelScale[0] = pS; - reqSurfacePixelScale[1] = pS; - } else if(args[i].equals("-es2")) { - forceES2 = true; - } else if(args[i].equals("-es3")) { - forceES3 = true; - } else if(args[i].equals("-gl3")) { - forceGL3 = true; - } else if(args[i].equals("-gldef")) { - forceGLDef = true; - } - } - } - System.err.println("forceES2 "+forceES2); - System.err.println("forceES3 "+forceES3); - System.err.println("forceGL3 "+forceGL3); - System.err.println("forceGLDef "+forceGLDef); - System.err.println("Desired win size "+width+"x"+height); - System.err.println("Desired win pos "+x+"/"+y); - System.err.println("Scene MSAA Samples "+SceneMSAASamples); - System.err.println("Graph MSAA Mode "+GraphMSAAMode); - System.err.println("Graph VBAA Mode "+GraphVBAAMode); - System.err.println("Graph Auto Mode "+GraphAutoMode+" no-AA dpi threshold"); - - final GLProfile glp; - if(forceGLDef) { - glp = GLProfile.getDefault(); - } else if(forceGL3) { - glp = GLProfile.get(GLProfile.GL3); - } else if(forceES3) { - glp = GLProfile.get(GLProfile.GLES3); - } else if(forceES2) { - glp = GLProfile.get(GLProfile.GLES2); - } else { - glp = GLProfile.getGL2ES2(); - } - System.err.println("GLProfile: "+glp); - final GLCapabilities caps = new GLCapabilities(glp); - caps.setAlphaBits(4); - if( SceneMSAASamples > 0 ) { - caps.setSampleBuffers(true); - caps.setNumSamples(SceneMSAASamples); - } - System.out.println("Requested: " + caps); - - final int rmode; - if( GraphVBAAMode ) { - rmode = Region.VBAA_RENDERING_BIT; - } else if( GraphMSAAMode ) { - rmode = Region.MSAA_RENDERING_BIT; - } else { - rmode = 0; - } - - final GLWindow window = GLWindow.create(caps); - window.setPosition(x, y); - window.setSize(width, height); - window.setTitle("GraphUI Newt/AWT Demo: graph["+Region.getRenderModeString(rmode)+"], msaa "+SceneMSAASamples); - window.setSurfaceScale(reqSurfacePixelScale); - final float[] valReqSurfacePixelScale = window.getRequestedSurfaceScale(new float[2]); - - final GPUUISceneGLListener0A sceneGLListener = 0 < GraphAutoMode ? new GPUUISceneGLListener0A(fontfilename, GraphAutoMode, DEBUG, TRACE) : - new GPUUISceneGLListener0A(fontfilename, rmode, DEBUG, TRACE); - - window.addGLEventListener(sceneGLListener); - sceneGLListener.attachInputListenerTo(window); - - final Animator animator = new Animator(); - animator.setUpdateFPSFrames(60, System.err); - animator.add(window); - - window.addWindowListener(new WindowAdapter() { - @Override - public void windowDestroyed(final WindowEvent e) { - animator.stop(); - } - }); - - final NewtCanvasAWT newtCanvasAWT = new NewtCanvasAWT(window); - final Frame frame = new Frame("GraphUI Newt/AWT Demo: graph["+Region.getRenderModeString(rmode)+"], msaa "+SceneMSAASamples); - - setComponentSize(newtCanvasAWT, new Dimension(width, height)); - frame.add(newtCanvasAWT); - SwingUtilities.invokeAndWait(new Runnable() { - @Override - public void run() { - frame.pack(); - frame.setVisible(true); - } - }); - animator.start(); - } -} diff --git a/src/test/com/jogamp/opengl/test/junit/graph/ui/demos/GPUUISceneNewtDemo.java b/src/test/com/jogamp/opengl/test/junit/graph/ui/demos/GPUUISceneNewtDemo.java deleted file mode 100644 index 36e8ee713..000000000 --- a/src/test/com/jogamp/opengl/test/junit/graph/ui/demos/GPUUISceneNewtDemo.java +++ /dev/null @@ -1,197 +0,0 @@ -/** - * Copyright 2010-2023 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.junit.graph.ui.demos; - -import com.jogamp.nativewindow.ScalableSurface; -import com.jogamp.opengl.GLCapabilities; -import com.jogamp.opengl.GLProfile; -import com.jogamp.opengl.JoglVersion; -import com.jogamp.common.util.VersionUtil; -import com.jogamp.graph.curve.Region; -import com.jogamp.newt.Display; -import com.jogamp.newt.NewtFactory; -import com.jogamp.newt.Screen; -import com.jogamp.newt.event.WindowAdapter; -import com.jogamp.newt.event.WindowEvent; -import com.jogamp.newt.opengl.GLWindow; -import com.jogamp.opengl.test.junit.util.MiscUtils; -import com.jogamp.opengl.util.Animator; -import com.jogamp.opengl.util.caps.NonFSAAGLCapsChooser; - -public class GPUUISceneNewtDemo { - static final boolean DEBUG = false; - static final boolean TRACE = false; - - static void sleep(final long ms) { - try { - Thread.sleep(ms); - } catch (final InterruptedException ie) {} - } - - public static void main(final String[] args) { - int SceneMSAASamples = 0; - boolean GraphVBAAMode = false; - boolean GraphMSAAMode = false; - float GraphAutoMode = GPUUISceneGLListener0A.DefaultNoAADPIThreshold; - - final float[] reqSurfacePixelScale = new float[] { ScalableSurface.AUTOMAX_PIXELSCALE, ScalableSurface.AUTOMAX_PIXELSCALE }; - - String fontfilename = null; - - int width = 1280, height = 720; - - boolean forceES2 = false; - boolean forceES3 = false; - boolean forceGL3 = false; - boolean forceGLDef = false; - - if( 0 != args.length ) { - for(int i=0; i<args.length; i++) { - if(args[i].equals("-smsaa")) { - i++; - SceneMSAASamples = MiscUtils.atoi(args[i], SceneMSAASamples); - GraphMSAAMode = false; - GraphVBAAMode = false; - GraphAutoMode = 0f; - } else if(args[i].equals("-gmsaa")) { - GraphMSAAMode = true; - GraphVBAAMode = false; - GraphAutoMode = 0f; - } else if(args[i].equals("-gvbaa")) { - GraphMSAAMode = false; - GraphVBAAMode = true; - GraphAutoMode = 0f; - } else if(args[i].equals("-gauto")) { - GraphMSAAMode = false; - GraphVBAAMode = true; - i++; - GraphAutoMode = MiscUtils.atof(args[i], GraphAutoMode); - } else if(args[i].equals("-font")) { - i++; - fontfilename = args[i]; - } else if(args[i].equals("-width")) { - i++; - width = MiscUtils.atoi(args[i], width); - } else if(args[i].equals("-height")) { - i++; - height = MiscUtils.atoi(args[i], height); - } else if(args[i].equals("-pixelScale")) { - i++; - final float pS = MiscUtils.atof(args[i], reqSurfacePixelScale[0]); - reqSurfacePixelScale[0] = pS; - reqSurfacePixelScale[1] = pS; - } else if(args[i].equals("-es2")) { - forceES2 = true; - } else if(args[i].equals("-es3")) { - forceES3 = true; - } else if(args[i].equals("-gl3")) { - forceGL3 = true; - } else if(args[i].equals("-gldef")) { - forceGLDef = true; - } - } - } - System.err.println("forceES2 "+forceES2); - System.err.println("forceES3 "+forceES3); - System.err.println("forceGL3 "+forceGL3); - System.err.println("forceGLDef "+forceGLDef); - System.err.println("Desired win size "+width+"x"+height); - System.err.println("Scene MSAA Samples "+SceneMSAASamples); - System.err.println("Graph MSAA Mode "+GraphMSAAMode); - System.err.println("Graph VBAA Mode "+GraphVBAAMode); - System.err.println("Graph Auto Mode "+GraphAutoMode+" no-AA dpi threshold"); - - final Display dpy = NewtFactory.createDisplay(null); - final Screen screen = NewtFactory.createScreen(dpy, 0); - System.err.println(VersionUtil.getPlatformInfo()); - System.err.println(JoglVersion.getAllAvailableCapabilitiesInfo(dpy.getGraphicsDevice(), null).toString()); - - final GLProfile glp; - if(forceGLDef) { - glp = GLProfile.getDefault(); - } else if(forceGL3) { - glp = GLProfile.get(GLProfile.GL3); - } else if(forceES3) { - glp = GLProfile.get(GLProfile.GLES3); - } else if(forceES2) { - glp = GLProfile.get(GLProfile.GLES2); - } else { - glp = GLProfile.getGL2ES2(); - } - System.err.println("GLProfile: "+glp); - final GLCapabilities caps = new GLCapabilities(glp); - caps.setAlphaBits(4); - if( SceneMSAASamples > 0 ) { - caps.setSampleBuffers(true); - caps.setNumSamples(SceneMSAASamples); - } - System.out.println("Requested: " + caps); - - final int rmode; - if( GraphVBAAMode ) { - rmode = Region.VBAA_RENDERING_BIT; - } else if( GraphMSAAMode ) { - rmode = Region.MSAA_RENDERING_BIT; - } else { - rmode = 0; - } - - final GLWindow window = GLWindow.create(screen, caps); - if( 0 == SceneMSAASamples ) { - window.setCapabilitiesChooser(new NonFSAAGLCapsChooser(true)); - } - window.setSize(width, height); - window.setTitle("GraphUI Newt Demo: graph["+Region.getRenderModeString(rmode)+"], msaa "+SceneMSAASamples); - window.setSurfaceScale(reqSurfacePixelScale); - // final float[] valReqSurfacePixelScale = window.getRequestedSurfaceScale(new float[2]); - - final GPUUISceneGLListener0A scene = 0 < GraphAutoMode ? new GPUUISceneGLListener0A(fontfilename, GraphAutoMode, DEBUG, TRACE) : - new GPUUISceneGLListener0A(fontfilename, rmode, DEBUG, TRACE); - - window.addGLEventListener(scene); - scene.attachInputListenerTo(window); - - final Animator animator = new Animator(); - animator.setUpdateFPSFrames(5*60, null); - animator.add(window); - - window.addWindowListener(new WindowAdapter() { - @Override - public void windowDestroyed(final WindowEvent e) { - animator.stop(); - } - }); - - window.setVisible(true); - animator.start(); - - // sleep(3000); - // final UIShape movie = scene.getWidget(GPUUISceneGLListener0A.BUTTON_MOVIE); - } - -} diff --git a/src/test/com/jogamp/opengl/test/junit/graph/ui/demos/GPUUISceneTextAnim01.java b/src/test/com/jogamp/opengl/test/junit/graph/ui/demos/GPUUISceneTextAnim01.java deleted file mode 100644 index 49757e7a0..000000000 --- a/src/test/com/jogamp/opengl/test/junit/graph/ui/demos/GPUUISceneTextAnim01.java +++ /dev/null @@ -1,351 +0,0 @@ -/** - * Copyright 2010-2023 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.junit.graph.ui.demos; - -import java.io.File; -import java.io.IOException; -import java.util.Arrays; -import java.util.Locale; - -import com.jogamp.common.util.IOUtil; -import com.jogamp.graph.curve.Region; -import com.jogamp.graph.curve.opengl.RegionRenderer; -import com.jogamp.graph.curve.opengl.RenderState; -import com.jogamp.graph.font.Font; -import com.jogamp.graph.font.FontFactory; -import com.jogamp.graph.font.FontScale; -import com.jogamp.graph.geom.SVertex; -import com.jogamp.graph.ui.gl.Scene; -import com.jogamp.graph.ui.gl.Shape; -import com.jogamp.graph.ui.gl.shapes.Label; -import com.jogamp.newt.MonitorDevice; -import com.jogamp.newt.Window; -import com.jogamp.newt.event.GestureHandler.GestureEvent; -import com.jogamp.newt.event.InputEvent; -import com.jogamp.newt.event.MouseEvent; -import com.jogamp.newt.event.MouseEvent.PointerClass; -import com.jogamp.newt.event.PinchToZoomGesture; -import com.jogamp.newt.opengl.GLWindow; -import com.jogamp.opengl.GL; -import com.jogamp.opengl.GL2ES2; -import com.jogamp.opengl.GLAnimatorControl; -import com.jogamp.opengl.GLAutoDrawable; -import com.jogamp.opengl.GLEventListener; -import com.jogamp.opengl.GLPipelineFactory; -import com.jogamp.opengl.JoglVersion; -import com.jogamp.opengl.math.FloatUtil; -import com.jogamp.opengl.math.VectorUtil; -import com.jogamp.opengl.test.junit.graph.FontSet01; -import com.jogamp.opengl.test.junit.graph.demos.MSAATool; -import com.jogamp.opengl.util.GLReadBufferUtil; - -public class GPUUISceneTextAnim01 implements GLEventListener { - - private boolean debug = false; - private boolean trace = false; - - private final float noAADPIThreshold; - private final Scene sceneUICntrl; - - /** -1 == AUTO, TBD @ init(..) */ - private int renderModes; - - private final Font font; - private final Font fontFPS; - - private final float sceneDist = 3000f; - private final float zNear = 0.1f, zFar = 7000f; - - // private final float relTop = 80f/100f; - private final float relMiddle = 22f/100f; - // private final float relLeft = 11f/100f; - - private final float fontSizePt = 10f; - /** Proportional Font Size to Window Height for Main Text, per-vertical-pixels [PVP] */ - private final float fontSizeFixedPVP = 0.04f; - /** Proportional Font Size to Window Height for FPS Status Line, per-vertical-pixels [PVP] */ - private final float fontSizeFpsPVP = 0.03f; - private float dpiV = 96; - - /** - * Default DPI threshold value to disable {@link Region#VBAA_RENDERING_BIT VBAA}: {@value} dpi - * @see #GPUUISceneGLListener0A(float) - * @see #GPUUISceneGLListener0A(float, boolean, boolean) - */ - public static final float DefaultNoAADPIThreshold = 200f; - - private String actionText = null; - private Label jogampLabel = null; - private Label fpsLabel = null; - - // private GLAutoDrawable cDrawable; - - private final GLReadBufferUtil screenshot; - - private final String jogamp = "JogAmp - Jogl Graph Module Demo"; - - // private final String longText = "JOGL: Java™ Binding for the OpenGL® API."; - - public GPUUISceneTextAnim01(final String fontfilename, final float noAADPIThreshold, final int renderModes, final boolean debug, final boolean trace) { - this.noAADPIThreshold = noAADPIThreshold; - this.debug = debug; - this.trace = trace; - - this.renderModes = renderModes; - - try { - if( null == fontfilename ) { - font = FontFactory.get(IOUtil.getResource("fonts/freefont/FreeSerif.ttf", - FontSet01.class.getClassLoader(), FontSet01.class).getInputStream(), true); - } else { - font = FontFactory.get( new File( fontfilename ) ); - } - System.err.println("Font "+font.getFullFamilyName()); - - fontFPS = FontFactory.get(IOUtil.getResource("fonts/freefont/FreeMonoBold.ttf", - FontSet01.class.getClassLoader(), FontSet01.class).getInputStream(), true); - System.err.println("Font FPS "+fontFPS.getFullFamilyName()); - - } catch (final IOException ioe) { - throw new RuntimeException(ioe); - } - - { - final RenderState rs = RenderState.createRenderState(SVertex.factory()); - final RegionRenderer renderer = RegionRenderer.create(rs, RegionRenderer.defaultBlendEnable, RegionRenderer.defaultBlendDisable); - rs.setHintMask(RenderState.BITHINT_GLOBAL_DEPTH_TEST_ENABLED); - // renderer = RegionRenderer.create(rs, null, null); - - sceneUICntrl = new Scene(renderer, sceneDist, zNear, zFar); - // sceneUIController.setSampleCount(3); // easy on embedded devices w/ just 3 samples (default is 4)? - } - screenshot = new GLReadBufferUtil(false, false); - } - - private void setupUI(final GLAutoDrawable drawable) { - final float pixelSizeFixed = fontSizeFixedPVP * drawable.getSurfaceHeight(); - jogampLabel = new Label(sceneUICntrl.getVertexFactory(), renderModes, font, pixelSizeFixed, jogamp); - jogampLabel.addMouseListener(dragZoomRotateListener); - sceneUICntrl.addShape(jogampLabel); - jogampLabel.setEnabled(true); - - final float pixelSize10Pt = FontScale.toPixels(fontSizePt, dpiV); - System.err.println("10Pt PixelSize: Display "+dpiV+" dpi, fontSize "+fontSizePt+" ppi -> "+pixelSize10Pt+" pixel-size"); - - /** - * - * [Label] Display 112.88889 dpi, fontSize 12.0 ppi -> pixelSize 18.814816 - * [FPS] Display 112.88889 dpi, fontSize 12.0 ppi -> pixelSize 15.679012 - */ - final float pixelSizeFPS = fontSizeFpsPVP * drawable.getSurfaceHeight(); - fpsLabel = new Label(sceneUICntrl.getVertexFactory(), renderModes, fontFPS, pixelSizeFPS, "Nothing there yet"); - fpsLabel.addMouseListener(dragZoomRotateListener); - sceneUICntrl.addShape(fpsLabel); - fpsLabel.setEnabled(true); - fpsLabel.setColor(0.1f, 0.1f, 0.1f, 1.0f); - fpsLabel.translate(0f, pixelSizeFPS * (fontFPS.getMetrics().getLineGap() - fontFPS.getMetrics().getDescent()), 0f); - } - - @Override - public void init(final GLAutoDrawable drawable) { - final Object upObj = drawable.getUpstreamWidget(); - if( upObj instanceof Window ) { - final Window upWin = (Window)upObj; - final MonitorDevice monitor = upWin.getMainMonitor(); - final float[] monitorDPI = MonitorDevice.perMMToPerInch( monitor.getPixelsPerMM(new float[2]) ); - final float[] sDPI = MonitorDevice.perMMToPerInch( upWin.getPixelsPerMM(new float[2]) ); - dpiV = sDPI[1]; - System.err.println("Monitor detected: "+monitor); - System.err.println("Monitor dpi: "+monitorDPI[0]+" x "+monitorDPI[1]); - System.err.println("Surface scale: native "+Arrays.toString(upWin.getMaximumSurfaceScale(new float[2]))+", current "+Arrays.toString(upWin.getCurrentSurfaceScale(new float[2]))); - System.err.println("Surface dpi "+sDPI[0]+" x "+sDPI[1]); - } else { - System.err.println("Using default DPI of "+dpiV); - } - if( 0 == renderModes && !FloatUtil.isZero(noAADPIThreshold, FloatUtil.EPSILON)) { - final boolean noAA = dpiV >= noAADPIThreshold; - final String noAAs = noAA ? " >= " : " < "; - System.err.println("AUTO RenderMode: dpi "+dpiV+noAAs+noAADPIThreshold+" -> noAA "+noAA); - renderModes = noAA ? 0 : Region.VBAA_RENDERING_BIT; - } - if(drawable instanceof GLWindow) { - System.err.println("GPUUISceneGLListener0A: init (1)"); - final GLWindow glw = (GLWindow) drawable; - sceneUICntrl.attachInputListenerTo(glw); - } else { - System.err.println("GPUUISceneGLListener0A: init (0)"); - } - // cDrawable = drawable; - GL2ES2 gl = drawable.getGL().getGL2ES2(); - if(debug) { - gl = gl.getContext().setGL( GLPipelineFactory.create("com.jogamp.opengl.Debug", null, gl, null) ).getGL2ES2(); - } - if(trace) { - gl = gl.getContext().setGL( GLPipelineFactory.create("com.jogamp.opengl.Trace", null, gl, new Object[] { System.err } ) ).getGL2ES2(); - } - System.err.println(JoglVersion.getGLInfo(gl, null, false /* withCapsAndExts */).toString()); - System.err.println("VSync Swap Interval: "+gl.getSwapInterval()); - System.err.println("Chosen: "+drawable.getChosenGLCapabilities()); - MSAATool.dump(drawable); - - gl.setSwapInterval(1); - gl.glEnable(GL.GL_DEPTH_TEST); - gl.glEnable(GL.GL_BLEND); - - sceneUICntrl.init(drawable); - - final GLAnimatorControl a = drawable.getAnimator(); - if( null != a ) { - a.resetFPSCounter(); - } - - setupUI(drawable); - } - - @Override - public void reshape(final GLAutoDrawable drawable, final int x, final int y, final int width, final int height) { - System.err.println("GPUUISceneGLListener0A: reshape"); - - // - // Layout all shapes: Relational move regarding window coordinates - // - final float dz = 0f; - - final float dxMiddleAbs = width * relMiddle; - final float dyTopLabelAbs = drawable.getSurfaceHeight() - 2f*jogampLabel.getLineHeight(); - jogampLabel.setTranslate(dxMiddleAbs, dyTopLabelAbs, dz); - fpsLabel.translate(0f, 0f, 0f); - - sceneUICntrl.reshape(drawable, x, y, width, height); - - lastWidth = width; - lastHeight = height; - } - float lastWidth = 0f, lastHeight = 0f; - - @Override - public void dispose(final GLAutoDrawable drawable) { - System.err.println("GPUUISceneGLListener0A: dispose"); - - sceneUICntrl.dispose(drawable); // disposes all registered UIShapes - - final GL2ES2 gl = drawable.getGL().getGL2ES2(); - screenshot.dispose(gl); - } - - private int shotCount = 0; - - public void printScreen(final GL gl) { - final RegionRenderer renderer = sceneUICntrl.getRenderer(); - final String modeS = Region.getRenderModeString(jogampLabel.getRenderModes()); - final String filename = String.format((Locale)null, "GraphUIDemo-shot%03d-%03dx%03d-S_%s_%02d.png", - shotCount++, renderer.getWidth(), renderer.getHeight(), - modeS, sceneUICntrl.getSampleCount()); - gl.glFinish(); // just make sure rendering finished .. - if(screenshot.readPixels(gl, false)) { - screenshot.write(new File(filename)); - System.err.println("Wrote: "+filename); - } - } - - @Override - public void display(final GLAutoDrawable drawable) { - if( fpsLabel.isEnabled() ) { - final String text; - if( null == actionText ) { - text = sceneUICntrl.getStatusText(drawable, renderModes, fpsLabel.getQuality(), dpiV); - } else if( null != drawable.getAnimator() ) { - text = Scene.getStatusText(drawable.getAnimator())+", "+actionText; - } else { - text = actionText; - } - if( fpsLabel.setText(text) ) { // marks dirty only if text differs. - System.err.println(text); - } - } - sceneUICntrl.display(drawable); - } - - public void attachInputListenerTo(final GLWindow window) { - sceneUICntrl.attachInputListenerTo(window); - } - - public void detachInputListenerFrom(final GLWindow window) { - sceneUICntrl.detachInputListenerFrom(window); - } - - /** - * We can share this instance w/ all UI elements, - * since only mouse action / gesture is complete for a single one (press, drag, released and click). - */ - private final Shape.MouseGestureAdapter dragZoomRotateListener = new Shape.MouseGestureAdapter() { - @Override - public void mouseReleased(final MouseEvent e) { - actionText = null; - } - - @Override - public void mouseDragged(final MouseEvent e) { - final Shape.UIShapeEvent shapeEvent = (Shape.UIShapeEvent) e.getAttachment(); - if( e.getPointerCount() == 1 ) { - final float[] tx = shapeEvent.shape.getTranslate(); - actionText = String.format((Locale)null, "Pos %6.2f / %6.2f / %6.2f", tx[0], tx[1], tx[2]); - } - } - - @Override - public void mouseWheelMoved(final MouseEvent e) { - final Shape.UIShapeEvent shapeEvent = (Shape.UIShapeEvent) e.getAttachment(); - final boolean isOnscreen = PointerClass.Onscreen == e.getPointerType(0).getPointerClass(); - if( 0 == ( ~InputEvent.BUTTONALL_MASK & e.getModifiers() ) && !isOnscreen ) { - // offscreen vertical mouse wheel zoom - final float tz = 100f*e.getRotation()[1]; // vertical: wheel - System.err.println("Rotate.Zoom.W: "+tz); - shapeEvent.shape.translate(0f, 0f, tz); - } else if( isOnscreen || e.isControlDown() ) { - final float[] rot = VectorUtil.scaleVec3(e.getRotation(), e.getRotation(), FloatUtil.PI / 180.0f); - if( isOnscreen ) { - System.err.println("XXX: "+e); - // swap axis for onscreen rotation matching natural feel - final float tmp = rot[0]; rot[0] = rot[1]; rot[1] = tmp; - VectorUtil.scaleVec3(rot, rot, 2f); - } - shapeEvent.shape.getRotation().rotateByEuler( rot ); - } - } - @Override - public void gestureDetected(final GestureEvent e) { - final Shape.UIShapeEvent shapeEvent = (Shape.UIShapeEvent) e.getAttachment(); - if( e instanceof PinchToZoomGesture.ZoomEvent ) { - final PinchToZoomGesture.ZoomEvent ze = (PinchToZoomGesture.ZoomEvent) e; - final float tz = ze.getDelta() * ze.getScale(); - System.err.println("Rotate.Zoom.G: "+tz); - shapeEvent.shape.translate(0f, 0f, tz); - } - } }; -} diff --git a/src/test/com/jogamp/opengl/test/junit/graph/ui/demos/UIShapeDemo01.java b/src/test/com/jogamp/opengl/test/junit/graph/ui/demos/UIShapeDemo01.java deleted file mode 100644 index 7ccd80f46..000000000 --- a/src/test/com/jogamp/opengl/test/junit/graph/ui/demos/UIShapeDemo01.java +++ /dev/null @@ -1,569 +0,0 @@ -/** - * Copyright 2010-2023 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.junit.graph.ui.demos; - -import java.io.File; -import java.io.IOException; - -import com.jogamp.opengl.FPSCounter; -import com.jogamp.opengl.GL; -import com.jogamp.opengl.GL2ES2; -import com.jogamp.opengl.GLAnimatorControl; -import com.jogamp.opengl.GLAutoDrawable; -import com.jogamp.opengl.GLCapabilities; -import com.jogamp.opengl.GLEventListener; -import com.jogamp.opengl.GLException; -import com.jogamp.opengl.GLPipelineFactory; -import com.jogamp.opengl.GLProfile; -import com.jogamp.opengl.GLRunnable; -import com.jogamp.opengl.fixedfunc.GLMatrixFunc; -import com.jogamp.opengl.math.FloatUtil; -import com.jogamp.opengl.math.geom.AABBox; -import com.jogamp.opengl.test.junit.graph.demos.MSAATool; -import com.jogamp.common.util.InterruptSource; -import com.jogamp.graph.curve.Region; -import com.jogamp.graph.curve.opengl.RegionRenderer; -import com.jogamp.graph.curve.opengl.RenderState; -import com.jogamp.graph.curve.opengl.TextRegionUtil; -import com.jogamp.graph.font.Font; -import com.jogamp.graph.font.FontFactory; -import com.jogamp.graph.font.FontSet; -import com.jogamp.graph.geom.SVertex; -import com.jogamp.graph.geom.plane.AffineTransform; -import com.jogamp.graph.ui.gl.Shape; -import com.jogamp.graph.ui.gl.shapes.Button; -import com.jogamp.graph.ui.gl.shapes.CrossHair; -import com.jogamp.newt.Window; -import com.jogamp.newt.event.KeyAdapter; -import com.jogamp.newt.event.KeyEvent; -import com.jogamp.newt.event.KeyListener; -import com.jogamp.newt.event.MouseEvent; -import com.jogamp.newt.event.MouseListener; -import com.jogamp.newt.event.WindowAdapter; -import com.jogamp.newt.event.WindowEvent; -import com.jogamp.newt.opengl.GLWindow; -import com.jogamp.opengl.util.Animator; -import com.jogamp.opengl.util.GLReadBufferUtil; -import com.jogamp.opengl.util.PMVMatrix; - -/** - * Basic UIShape and Type Rendering demo. - * - * Action Keys: - * - 1/2: zoom in/out - * - 4/5: increase/decrease shape/text spacing - * - 6/7: increase/decrease corner size - * - 0/9: rotate - * - v: toggle v-sync - * - s: screenshot - */ -public class UIShapeDemo01 implements GLEventListener { - static final boolean DEBUG = false; - static final boolean TRACE = false; - - public static void main(final String[] args) throws IOException { - Font font = null; - if( 0 != args.length ) { - for(int i=0; i<args.length; i++) { - if(args[i].equals("-font")) { - i++; - font = FontFactory.get(new File(args[i])); - } - } - } - if( null == font ) { - font = FontFactory.get(FontFactory.UBUNTU).get(FontSet.FAMILY_LIGHT, FontSet.STYLE_SERIF); - } - System.err.println("Font: "+font.getFullFamilyName()); - - final GLProfile glp = GLProfile.getGL2ES2(); - final GLCapabilities caps = new GLCapabilities(glp); - caps.setAlphaBits(4); - caps.setSampleBuffers(true); - caps.setNumSamples(4); - System.out.println("Requested: " + caps); - - final GLWindow window = GLWindow.create(caps); - // window.setPosition(10, 10); - window.setSize(800, 400); - window.setTitle(UIShapeDemo01.class.getSimpleName()+": "+window.getSurfaceWidth()+" x "+window.getSurfaceHeight()); - final RenderState rs = RenderState.createRenderState(SVertex.factory()); - final UIShapeDemo01 uiGLListener = new UIShapeDemo01(font, Region.COLORCHANNEL_RENDERING_BIT, rs, DEBUG, TRACE); - uiGLListener.attachInputListenerTo(window); - window.addGLEventListener(uiGLListener); - window.setVisible(true); - - final Animator animator = new Animator(); - // animator.setUpdateFPSFrames(60, System.err); - animator.add(window); - - window.addKeyListener(new KeyAdapter() { - @Override - public void keyPressed(final KeyEvent arg0) { - if(arg0.getKeyCode() == KeyEvent.VK_F4) { - new InterruptSource.Thread() { - @Override - public void run() { - window.destroy(); - } }.start(); - } - } - }); - window.addWindowListener(new WindowAdapter() { - @Override - public void windowDestroyed(final WindowEvent e) { - animator.stop(); - } - }); - - animator.start(); - } - - private final Font font; - private final GLReadBufferUtil screenshot; - private final int renderModes; - private final RegionRenderer rRenderer; - private final boolean debug; - private final boolean trace; - - private final Button button; - private final CrossHair crossHair; - - private KeyAction keyAction; - private MouseAction mouseAction; - - private volatile GLAutoDrawable autoDrawable = null; - - private final float[] position = new float[] {0,0,0}; - - private static final float xTran = 0f; - private static final float yTran = 0f; - private static final float zTran = -1/5f; - private static final float zNear = 0.1f; - private static final float zFar = 7000.0f; - - boolean ignoreInput = false; - - protected final AffineTransform tempT1 = new AffineTransform(); - protected final AffineTransform tempT2 = new AffineTransform(); - - public UIShapeDemo01(final Font font, final int renderModes, final RenderState rs, final boolean debug, final boolean trace) { - this.font = font; - this.renderModes = renderModes; - this.rRenderer = RegionRenderer.create(rs, RegionRenderer.defaultBlendEnable, RegionRenderer.defaultBlendDisable); - this.debug = debug; - this.trace = trace; - this.screenshot = new GLReadBufferUtil(false, false); - - button = new Button(SVertex.factory(), renderModes, font, "Click me!", 1/8f, 1/16f); - button.setLabelColor(0.0f,0.0f,0.0f); - /** Button defaults ! - button.setLabelColor(1.0f,1.0f,1.0f); - button.setButtonColor(0.6f,0.6f,0.6f); - button.setCorner(1.0f); - button.setSpacing(2.0f); - */ - System.err.println(button); - crossHair = new CrossHair(SVertex.factory(), renderModes, 1/20f, 1/20f, 1/1000f); - crossHair.setColor(0f,0f,1f,1f); - crossHair.setEnabled(true); - } - - public final RegionRenderer getRegionRenderer() { return rRenderer; } - public final float[] getPosition() { return position; } - - @Override - public void init(final GLAutoDrawable drawable) { - autoDrawable = drawable; - GL2ES2 gl = drawable.getGL().getGL2ES2(); - if(debug) { - gl = gl.getContext().setGL( GLPipelineFactory.create("com.jogamp.opengl.Debug", null, gl, null) ).getGL2ES2(); - } - if(trace) { - gl = gl.getContext().setGL( GLPipelineFactory.create("com.jogamp.opengl.Trace", null, gl, new Object[] { System.err } ) ).getGL2ES2(); - } - gl.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); - getRegionRenderer().init(gl); - - gl.setSwapInterval(1); - gl.glEnable(GL.GL_DEPTH_TEST); - gl.glEnable(GL.GL_POLYGON_OFFSET_FILL); - MSAATool.dump(drawable); - } - - @Override - public void reshape(final GLAutoDrawable drawable, final int xstart, final int ystart, final int width, final int height) { - final GL2ES2 gl = drawable.getGL().getGL2ES2(); - - gl.glViewport(xstart, ystart, width, height); - rRenderer.reshapePerspective(45.0f, width, height, zNear, zFar); - // rRenderer.reshapeOrtho(width, height, zNear, zFar); - - lastWidth = width; - lastHeight = height; - if( drawable instanceof Window ) { - ((Window)drawable).setTitle(UIShapeDemo01.class.getSimpleName()+": "+drawable.getSurfaceWidth()+" x "+drawable.getSurfaceHeight()); - } - } - float lastWidth = 0f, lastHeight = 0f; - - final int[] sampleCount = { 4 }; - - private void drawShape(final GL2ES2 gl, final PMVMatrix pmv, final RegionRenderer renderer, final Shape shape) { - pmv.glPushMatrix(); - shape.setTransform(pmv); - shape.drawShape(gl, renderer, sampleCount); - pmv.glPopMatrix(); - } - - @Override - public void display(final GLAutoDrawable drawable) { - final GL2ES2 gl = drawable.getGL().getGL2ES2(); - - gl.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); - gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); - - final RegionRenderer renderer = getRegionRenderer(); - final PMVMatrix pmv = renderer.getMatrix(); - pmv.glMatrixMode(GLMatrixFunc.GL_MODELVIEW); - pmv.glLoadIdentity(); - pmv.glTranslatef(xTran, yTran, zTran); - renderer.enable(gl, true); - drawShape(gl, pmv, renderer, button); - drawShape(gl, pmv, renderer, crossHair); - { - final String text = "Hello Origin."; - final float full_width_o; - { - final float orthoDist = -zTran; // assume orthogonal plane at -zTran - float glWinX = 0; - float glWinY = 0; - final float winZ = FloatUtil.getOrthoWinZ(orthoDist, zNear, zFar); - final float[] objCoord0 = new float[3]; - final float[] objCoord1 = new float[3]; - if( pmv.gluUnProject(glWinX, glWinY, winZ, renderer.getViewport(), 0, objCoord0, 0) ) { - if( once ) { - System.err.printf("winToObjCoord: win [%f, %f, %f] -> obj [%f, %f, %f]%n", glWinX, glWinY, winZ, objCoord0[0], objCoord0[1], objCoord0[2]); - } - } - glWinX = drawable.getSurfaceWidth(); - glWinY = drawable.getSurfaceHeight(); - if( pmv.gluUnProject(glWinX, glWinY, winZ, renderer.getViewport(), 0, objCoord1, 0) ) { - if( once ) { - System.err.printf("winToObjCoord: win [%f, %f, %f] -> obj [%f, %f, %f]%n", glWinX, glWinY, winZ, objCoord1[0], objCoord1[1], objCoord1[2]); - } - } - full_width_o = objCoord1[0] - objCoord0[0]; - } - final AABBox txt_box_em = font.getGlyphBounds(text, tempT1, tempT2); - final float full_width_s = full_width_o / txt_box_em.getWidth(); - final float txt_scale = full_width_s/2f; - pmv.glPushMatrix(); - pmv.glScalef(txt_scale, txt_scale, 1f); - pmv.glTranslatef(-txt_box_em.getWidth(), 0f, 0f); - final AABBox txt_box_r = TextRegionUtil.drawString3D(gl, renderModes, renderer, font, text, new float[] { 0, 0, 0, 1 }, sampleCount, tempT1, tempT2); - if( once ) { - final AABBox txt_box_em2 = font.getGlyphShapeBounds(null, text); - System.err.println("XXX: full_width: "+full_width_o+" / "+txt_box_em.getWidth()+" -> "+full_width_s); - System.err.println("XXX: txt_box_em "+txt_box_em); - System.err.println("XXX: txt_box_e2 "+txt_box_em2); - System.err.println("XXX: txt_box_rg "+txt_box_r); - once = false; - } - pmv.glPopMatrix(); - } - renderer.enable(gl, false); - } - static boolean once = true; - - @Override - public void dispose(final GLAutoDrawable drawable) { - final GL2ES2 gl = drawable.getGL().getGL2ES2(); - button.destroy(gl, getRegionRenderer()); - crossHair.destroy(gl, getRegionRenderer()); - - autoDrawable = null; - screenshot.dispose(gl); - rRenderer.destroy(gl); - } - - /** Attach the input listener to the window */ - public void attachInputListenerTo(final GLWindow window) { - if ( null == keyAction ) { - keyAction = new KeyAction(); - window.addKeyListener(keyAction); - } - if ( null == mouseAction ) { - mouseAction = new MouseAction(); - window.addMouseListener(mouseAction); - } - } - - public void detachFrom(final GLWindow window) { - if ( null == keyAction ) { - return; - } - if ( null == mouseAction ) { - return; - } - window.removeGLEventListener(this); - window.removeKeyListener(keyAction); - window.removeMouseListener(mouseAction); - } - - public void printScreen(final GLAutoDrawable drawable, final String dir, final String tech, final String objName, final boolean exportAlpha) throws GLException, IOException { - final String sw = String.format("-%03dx%03d-Z%04d-T%04d-%s", drawable.getSurfaceWidth(), drawable.getSurfaceHeight(), (int)Math.abs(zTran), 0, objName); - - final String filename = dir + tech + sw +".png"; - if(screenshot.readPixels(drawable.getGL(), false)) { - screenshot.write(new File(filename)); - } - } - - int screenshot_num = 0; - - public void setIgnoreInput(final boolean v) { - ignoreInput = v; - } - public boolean getIgnoreInput() { - return ignoreInput; - } - - public class MouseAction implements MouseListener{ - - @Override - public void mouseClicked(final MouseEvent e) { - - } - - @Override - public void mouseEntered(final MouseEvent e) { - } - - @Override - public void mouseExited(final MouseEvent e) { - } - - @Override - public void mousePressed(final MouseEvent e) { - autoDrawable.invoke(false, new GLRunnable() { // avoid data-race - @Override - public boolean run(final GLAutoDrawable drawable) { - System.err.println("\n\nMouse: "+e); - - final RegionRenderer renderer = getRegionRenderer(); - final PMVMatrix pmv = renderer.getMatrix(); - pmv.glMatrixMode(GLMatrixFunc.GL_MODELVIEW); - pmv.glLoadIdentity(); - pmv.glTranslatef(xTran, yTran, zTran); - - // flip to GL window coordinates, origin bottom-left - final int[] viewport = renderer.getViewport(new int[4]); - final int glWinX = e.getX(); - final int glWinY = viewport[3] - e.getY() - 1; - - { - pmv.glPushMatrix(); - button.setTransform(pmv); - - final float[] objPos = new float[3]; - System.err.println("\n\nButton: "+button); - button.winToObjCoord(renderer, glWinX, glWinY, objPos); - System.err.println("Button: Click: Win "+glWinX+"/"+glWinY+" -> Obj "+objPos[0]+"/"+objPos[1]+"/"+objPos[1]); - - final int[] surfaceSize = new int[2]; - button.getSurfaceSize(renderer, surfaceSize); - System.err.println("Button: Size: Pixel "+surfaceSize[0]+" x "+surfaceSize[1]); - - pmv.glPopMatrix(); - } - { - pmv.glPushMatrix(); - crossHair.setTransform(pmv); - - final float[] objPosC = crossHair.getBounds().getCenter(); - final int[] objWinPos = new int[2]; - System.err.println("\n\nCrossHair: "+crossHair); - if( crossHair.objToWinCoord(renderer, objPosC, objWinPos) ) { - System.err.println("CrossHair: Obj: Obj "+objPosC[0]+"/"+objPosC[1]+"/"+objPosC[1]+" -> Win "+objWinPos[0]+"/"+objWinPos[1]); - } - - final float[] objPos2 = new float[3]; - crossHair.winToObjCoord(renderer, objWinPos[0], objWinPos[1], objPos2); - System.err.println("CrossHair: Obj: Win "+objWinPos[0]+"/"+objWinPos[1]+" -> Obj "+objPos2[0]+"/"+objPos2[1]+"/"+objPos2[1]); - - final float[] winObjPos = new float[3]; - if( crossHair.winToObjCoord(renderer, glWinX, glWinY, winObjPos) ) { - // final float[] translate = crossHair.getTranslate(); - // final float[] objPosT = new float[] { objPosC[0]+translate[0], objPosC[1]+translate[1], objPosC[2]+translate[2] }; - final float dx = winObjPos[0] - objPosC[0]; - final float dy = winObjPos[1] - objPosC[1]; - // final float dz = winObjPos[2] - objPosT[2]; - if( !FloatUtil.isZero(dx, FloatUtil.EPSILON) || !FloatUtil.isZero(dy, FloatUtil.EPSILON) ) { - System.err.println("CrossHair: Move.1: Win "+glWinX+"/"+glWinY+" -> Obj "+winObjPos[0]+"/"+winObjPos[1]+"/"+winObjPos[1]+" -> diff "+dx+" / "+dy); - crossHair.translate(dx, dy, 0f); - } else { - System.err.println("CrossHair: Move.0: Win "+glWinX+"/"+glWinY+" -> Obj "+winObjPos[0]+"/"+winObjPos[1]+"/"+winObjPos[1]+" -> diff "+dx+" / "+dy); - } - } - - final int[] surfaceSize = new int[2]; - crossHair.getSurfaceSize(renderer, surfaceSize); - System.err.println("CrossHair: Size: Pixel "+surfaceSize[0]+" x "+surfaceSize[1]); - - pmv.glPopMatrix(); - } - return true; - } } ); - - } - - @Override - public void mouseReleased(final MouseEvent e) { - } - - @Override - public void mouseMoved(final MouseEvent e) { - // TODO Auto-generated method stub - - } - - @Override - public void mouseDragged(final MouseEvent e) { - // TODO Auto-generated method stub - - } - - @Override - public void mouseWheelMoved(final MouseEvent e) { - // TODO Auto-generated method stub - - } - - } - - public class KeyAction implements KeyListener { - @Override - public void keyPressed(final KeyEvent arg0) { - if(ignoreInput) { - return; - } - - if(arg0.getKeyCode() == KeyEvent.VK_1){ - button.translate(0f, 0f, -zTran/10f); - } - else if(arg0.getKeyCode() == KeyEvent.VK_2){ - button.translate(0f, 0f, zTran/10f); - } - else if(arg0.getKeyCode() == KeyEvent.VK_UP){ - button.translate(0f, button.getHeight()/10f, 0f); - } - else if(arg0.getKeyCode() == KeyEvent.VK_DOWN){ - button.translate(0f, -button.getHeight()/10f, 0f); - } - else if(arg0.getKeyCode() == KeyEvent.VK_LEFT){ - button.translate(-button.getWidth()/10f, 0f, 0f); - } - else if(arg0.getKeyCode() == KeyEvent.VK_RIGHT){ - button.translate(button.getWidth()/10f, 0f, 0f); - } - else if(arg0.getKeyCode() == KeyEvent.VK_4){ - button.setSpacing(button.getSpacingX()-0.01f, button.getSpacingY()-0.005f); - System.err.println("Button Spacing: " + button.getSpacingX()); - } - else if(arg0.getKeyCode() == KeyEvent.VK_5){ - button.setSpacing(button.getSpacingX()+0.01f, button.getSpacingY()+0.005f); - System.err.println("Button Spacing: " + button.getSpacingX()); - } - else if(arg0.getKeyCode() == KeyEvent.VK_6){ - button.setCorner(button.getCorner()-0.01f); - System.err.println("Button Corner: " + button.getCorner()); - } - else if(arg0.getKeyCode() == KeyEvent.VK_7){ - button.setCorner(button.getCorner()+0.01f); - System.err.println("Button Corner: " + button.getCorner()); - } - else if(arg0.getKeyCode() == KeyEvent.VK_0){ - // rotate(1); - } - else if(arg0.getKeyCode() == KeyEvent.VK_9){ - // rotate(-1); - } - else if(arg0.getKeyCode() == KeyEvent.VK_V) { - if(null != autoDrawable) { - autoDrawable.invoke(false, new GLRunnable() { - @Override - public boolean run(final GLAutoDrawable drawable) { - final GL gl = drawable.getGL(); - final int _i = gl.getSwapInterval(); - final int i; - switch(_i) { - case 0: i = 1; break; - case 1: i = -1; break; - case -1: i = 0; break; - default: i = 1; break; - } - gl.setSwapInterval(i); - - final GLAnimatorControl a = drawable.getAnimator(); - if( null != a ) { - a.resetFPSCounter(); - } - if(drawable instanceof FPSCounter) { - ((FPSCounter)drawable).resetFPSCounter(); - } - System.err.println("Swap Interval: "+_i+" -> "+i+" -> "+gl.getSwapInterval()); - return true; - } - }); - } - } - else if(arg0.getKeyCode() == KeyEvent.VK_S){ - if(null != autoDrawable) { - autoDrawable.invoke(false, new GLRunnable() { - @Override - public boolean run(final GLAutoDrawable drawable) { - try { - final String type = Region.getRenderModeString(renderModes); - printScreen(drawable, "./", "demo-"+type, "snap"+screenshot_num, false); - screenshot_num++; - } catch (final GLException e) { - e.printStackTrace(); - } catch (final IOException e) { - e.printStackTrace(); - } - return true; - } - }); - } - } - } - @Override - public void keyReleased(final KeyEvent arg0) {} - } -} diff --git a/src/test/com/jogamp/opengl/test/junit/graph/ui/demos/UITypeDemo01.java b/src/test/com/jogamp/opengl/test/junit/graph/ui/demos/UITypeDemo01.java deleted file mode 100644 index b2a1bc772..000000000 --- a/src/test/com/jogamp/opengl/test/junit/graph/ui/demos/UITypeDemo01.java +++ /dev/null @@ -1,617 +0,0 @@ -/** - * Copyright 2010-2023 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.junit.graph.ui.demos; - -import java.io.File; -import java.io.IOException; - -import com.jogamp.opengl.FPSCounter; -import com.jogamp.opengl.GL; -import com.jogamp.opengl.GL2ES2; -import com.jogamp.opengl.GLAnimatorControl; -import com.jogamp.opengl.GLAutoDrawable; -import com.jogamp.opengl.GLCapabilities; -import com.jogamp.opengl.GLEventListener; -import com.jogamp.opengl.GLException; -import com.jogamp.opengl.GLPipelineFactory; -import com.jogamp.opengl.GLProfile; -import com.jogamp.opengl.GLRunnable; -import com.jogamp.opengl.fixedfunc.GLMatrixFunc; -import com.jogamp.opengl.math.FloatUtil; -import com.jogamp.opengl.math.geom.AABBox; -import com.jogamp.opengl.test.junit.graph.demos.MSAATool; -import com.jogamp.opengl.test.junit.graph.ui.testshapes.Glyph03FreeMonoRegular_M; -import com.jogamp.opengl.test.junit.graph.ui.testshapes.Glyph04FreeSans_0; -import com.jogamp.opengl.test.junit.graph.ui.testshapes.Glyph05FreeSerifBoldItalic_ae; -import com.jogamp.opengl.test.junit.util.MiscUtils; -import com.jogamp.common.util.InterruptSource; -import com.jogamp.graph.curve.Region; -import com.jogamp.graph.curve.opengl.GLRegion; -import com.jogamp.graph.curve.opengl.RegionRenderer; -import com.jogamp.graph.curve.opengl.RenderState; -import com.jogamp.graph.curve.opengl.TextRegionUtil; -import com.jogamp.graph.font.Font; -import com.jogamp.graph.font.FontFactory; -import com.jogamp.graph.font.FontSet; -import com.jogamp.graph.font.Font.Glyph; -import com.jogamp.graph.geom.SVertex; -import com.jogamp.graph.geom.plane.AffineTransform; -import com.jogamp.graph.ui.gl.Shape; -import com.jogamp.graph.ui.gl.shapes.CrossHair; -import com.jogamp.graph.ui.gl.shapes.Rectangle; -import com.jogamp.newt.Window; -import com.jogamp.newt.event.KeyAdapter; -import com.jogamp.newt.event.KeyEvent; -import com.jogamp.newt.event.KeyListener; -import com.jogamp.newt.event.MouseEvent; -import com.jogamp.newt.event.MouseListener; -import com.jogamp.newt.event.WindowAdapter; -import com.jogamp.newt.event.WindowEvent; -import com.jogamp.newt.opengl.GLWindow; -import com.jogamp.opengl.util.Animator; -import com.jogamp.opengl.util.GLReadBufferUtil; -import com.jogamp.opengl.util.PMVMatrix; - -/** - * Basic UIShape and Type Rendering demo. - * - * Action Keys: - * - 1/2: zoom in/out - * - 4/5: increase/decrease shape/text spacing - * - 6/7: increase/decrease corner size - * - 0/9: rotate - * - v: toggle v-sync - * - s: screenshot - */ -public class UITypeDemo01 implements GLEventListener { - static final boolean DEBUG = false; - static final boolean TRACE = false; - - public static void main(final String[] args) throws IOException { - Font font = null; - String text = "Hello Origin."; - int glyph_id = Glyph.ID_UNKNOWN; - if( 0 != args.length ) { - for(int i=0; i<args.length; i++) { - if(args[i].equals("-font")) { - i++; - font = FontFactory.get(new File(args[i])); - } else if(args[i].equals("-text")) { - i++; - text = args[i]; - } else if(args[i].equals("-glyph")) { - i++; - glyph_id = MiscUtils.atoi(args[i], 0); - } - } - } - if( null == font ) { - font = FontFactory.get(FontFactory.UBUNTU).get(FontSet.FAMILY_LIGHT, FontSet.STYLE_SERIF); - } - System.err.println("Font: "+font.getFullFamilyName()); - System.err.println("Text: "+text); - - final GLProfile glp = GLProfile.getGL2ES2(); - final GLCapabilities caps = new GLCapabilities(glp); - caps.setAlphaBits(4); - caps.setSampleBuffers(true); - caps.setNumSamples(4); - System.out.println("Requested: " + caps); - - final GLWindow window = GLWindow.create(caps); - // window.setPosition(10, 10); - window.setSize(800, 400); - window.setTitle(UITypeDemo01.class.getSimpleName()+": "+window.getSurfaceWidth()+" x "+window.getSurfaceHeight()); - final RenderState rs = RenderState.createRenderState(SVertex.factory()); - final UITypeDemo01 uiGLListener = new UITypeDemo01(font, glyph_id, text, Region.COLORCHANNEL_RENDERING_BIT, rs, DEBUG, TRACE); - uiGLListener.attachInputListenerTo(window); - window.addGLEventListener(uiGLListener); - window.setVisible(true); - - final Animator animator = new Animator(); - // animator.setUpdateFPSFrames(60, System.err); - animator.add(window); - - window.addKeyListener(new KeyAdapter() { - @Override - public void keyPressed(final KeyEvent arg0) { - if(arg0.getKeyCode() == KeyEvent.VK_F4) { - new InterruptSource.Thread() { - @Override - public void run() { - window.destroy(); - } }.start(); - } - } - }); - window.addWindowListener(new WindowAdapter() { - @Override - public void windowDestroyed(final WindowEvent e) { - animator.stop(); - } - }); - - animator.start(); - } - - private final float[] fg_color = new float[] { 0, 0, 0, 1 }; - private final Font font; - private final String text; - private final int glyph_id; - private final GLReadBufferUtil screenshot; - private final int renderModes; - private final RegionRenderer rRenderer; - private final boolean debug; - private final boolean trace; - - private final CrossHair crossHair; - private final Shape testObj; - - private KeyAction keyAction; - private MouseAction mouseAction; - - private volatile GLAutoDrawable autoDrawable = null; - - private final float[] position = new float[] {0,0,0}; - - private static final float xTran = 0f; - private static final float yTran = 0f; - private static final float zTran = -1/5f; - private static final float zNear = 0.1f; - private static final float zFar = 7000.0f; - - boolean ignoreInput = false; - - protected final AffineTransform tempT1 = new AffineTransform(); - protected final AffineTransform tempT2 = new AffineTransform(); - - @SuppressWarnings("unused") - public UITypeDemo01(final Font font, final int glyph_id, final String text, final int renderModes, final RenderState rs, final boolean debug, final boolean trace) { - this.font = font; - this.text = text; - this.glyph_id = glyph_id; - this.renderModes = renderModes; - this.rRenderer = RegionRenderer.create(rs, RegionRenderer.defaultBlendEnable, RegionRenderer.defaultBlendDisable); - this.debug = debug; - this.trace = trace; - this.screenshot = new GLReadBufferUtil(false, false); - - crossHair = new CrossHair(SVertex.factory(), renderModes, 1/20f, 1/20f, 1/1000f); - crossHair.setColor(0f,0f,1f,1f); - crossHair.setEnabled(true); - - if (false ) { - final Rectangle o = new Rectangle(SVertex.factory(), renderModes, 1/10f, 1/20f, 1/1000f); - o.translate(o.getWidth(), -o.getHeight(), 0f); - testObj = o; - } else { - final float scale = 0.15312886f; - final float size_xz = 0.541f; - final Shape o = new Glyph03FreeMonoRegular_M(SVertex.factory(), renderModes); - o.scale(scale, scale, 1f); - // o.translate(size_xz, -size_xz, 0f); - testObj = o; - } - testObj.setColor(0f, 0f, 0f, 1f); - testObj.setEnabled(true); - } - - public final RegionRenderer getRegionRenderer() { return rRenderer; } - public final float[] getPosition() { return position; } - - @Override - public void init(final GLAutoDrawable drawable) { - autoDrawable = drawable; - GL2ES2 gl = drawable.getGL().getGL2ES2(); - if(debug) { - gl = gl.getContext().setGL( GLPipelineFactory.create("com.jogamp.opengl.Debug", null, gl, null) ).getGL2ES2(); - } - if(trace) { - gl = gl.getContext().setGL( GLPipelineFactory.create("com.jogamp.opengl.Trace", null, gl, new Object[] { System.err } ) ).getGL2ES2(); - } - gl.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); - getRegionRenderer().init(gl); - - gl.setSwapInterval(1); - gl.glEnable(GL.GL_DEPTH_TEST); - gl.glEnable(GL.GL_POLYGON_OFFSET_FILL); - MSAATool.dump(drawable); - } - - @Override - public void reshape(final GLAutoDrawable drawable, final int xstart, final int ystart, final int width, final int height) { - final GL2ES2 gl = drawable.getGL().getGL2ES2(); - - gl.glViewport(xstart, ystart, width, height); - rRenderer.reshapePerspective(45.0f, width, height, zNear, zFar); - // rRenderer.reshapeOrtho(width, height, zNear, zFar); - - lastWidth = width; - lastHeight = height; - if( drawable instanceof Window ) { - ((Window)drawable).setTitle(UITypeDemo01.class.getSimpleName()+": "+drawable.getSurfaceWidth()+" x "+drawable.getSurfaceHeight()); - } - } - float lastWidth = 0f, lastHeight = 0f; - - final int[] sampleCount = { 4 }; - - private void drawShape(final GL2ES2 gl, final PMVMatrix pmv, final RegionRenderer renderer, final Shape shape) { - pmv.glPushMatrix(); - shape.setTransform(pmv); - shape.drawShape(gl, renderer, sampleCount); - pmv.glPopMatrix(); - } - - @Override - public void display(final GLAutoDrawable drawable) { - final GL2ES2 gl = drawable.getGL().getGL2ES2(); - - gl.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); - gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); - - final RegionRenderer renderer = getRegionRenderer(); - final PMVMatrix pmv = renderer.getMatrix(); - pmv.glMatrixMode(GLMatrixFunc.GL_MODELVIEW); - pmv.glLoadIdentity(); - pmv.glTranslatef(xTran, yTran, zTran); - renderer.enable(gl, true); - { - pmv.glPushMatrix(); - pmv.glScalef(0.8f, 0.8f, 1f); - drawShape(gl, pmv, renderer, testObj); - pmv.glPopMatrix(); - } - // drawShape(gl, pmv, renderer, crossHair); - { - final float full_width_o; - final float full_height_o; - { - final float orthoDist = -zTran; // assume orthogonal plane at -zTran - float glWinX = 0; - float glWinY = 0; - final float winZ = FloatUtil.getOrthoWinZ(orthoDist, zNear, zFar); - final float[] objCoord0 = new float[3]; - final float[] objCoord1 = new float[3]; - if( pmv.gluUnProject(glWinX, glWinY, winZ, renderer.getViewport(), 0, objCoord0, 0) ) { - if( once ) { - System.err.printf("winToObjCoord: win [%f, %f, %f] -> obj [%f, %f, %f]%n", glWinX, glWinY, winZ, objCoord0[0], objCoord0[1], objCoord0[2]); - } - } - glWinX = drawable.getSurfaceWidth(); - glWinY = drawable.getSurfaceHeight(); - if( pmv.gluUnProject(glWinX, glWinY, winZ, renderer.getViewport(), 0, objCoord1, 0) ) { - if( once ) { - System.err.printf("winToObjCoord: win [%f, %f, %f] -> obj [%f, %f, %f]%n", glWinX, glWinY, winZ, objCoord1[0], objCoord1[1], objCoord1[2]); - } - } - full_width_o = objCoord1[0] - objCoord0[0]; - full_height_o = objCoord1[1] - objCoord0[1]; - } - pmv.glPushMatrix(); - - final Font.Glyph glyph; - if( Glyph.ID_UNKNOWN < glyph_id ) { - glyph = font.getGlyph(glyph_id); - if( once ) { - System.err.println("glyph_id "+glyph_id+": "+glyph); - } - } else { - glyph = null; - } - if( null != glyph && glyph.getID() != Glyph.ID_UNKNOWN ) { - final AABBox txt_box_em = glyph.getBBox(); - final float full_width_s = full_width_o / txt_box_em.getWidth(); - final float full_height_s = full_height_o / txt_box_em.getHeight(); - final float txt_scale = full_width_s < full_height_s ? full_width_s/2f : full_height_s/2f; - pmv.glScalef(txt_scale, txt_scale, 1f); - pmv.glTranslatef(-txt_box_em.getWidth(), 0f, 0f); - if( null != glyph.getShape() ) { - final GLRegion region = GLRegion.create(gl.getGLProfile(), renderModes, null); - region.addOutlineShape(glyph.getShape(), null, region.hasColorChannel() ? fg_color : null); - region.draw(gl, renderer, sampleCount); - region.destroy(gl); - } - if( once ) { - final AABBox txt_box_em2 = font.getGlyphShapeBounds(null, text); - System.err.println("XXX: full_width: "+full_width_o+" / "+txt_box_em.getWidth()+" -> "+full_width_s); - System.err.println("XXX: full_height: "+full_height_o+" / "+txt_box_em.getHeight()+" -> "+full_height_s); - System.err.println("XXX: txt_scale: "+txt_scale); - System.err.println("XXX: txt_box_em "+txt_box_em); - System.err.println("XXX: txt_box_e2 "+txt_box_em2); - } - } else if( Glyph.ID_UNKNOWN == glyph_id ) { - final AABBox txt_box_em = font.getGlyphBounds(text, tempT1, tempT2); - final float full_width_s = full_width_o / txt_box_em.getWidth(); - final float full_height_s = full_height_o / txt_box_em.getHeight(); - final float txt_scale = full_width_s < full_height_s ? full_width_s/2f : full_height_s/2f; - pmv.glScalef(txt_scale, txt_scale, 1f); - pmv.glTranslatef(-txt_box_em.getWidth(), 0f, 0f); - final AABBox txt_box_r = TextRegionUtil.drawString3D(gl, renderModes, renderer, font, text, fg_color, sampleCount, tempT1, tempT2); - if( once ) { - final AABBox txt_box_em2 = font.getGlyphShapeBounds(null, text); - System.err.println("XXX: full_width: "+full_width_o+" / "+txt_box_em.getWidth()+" -> "+full_width_s); - System.err.println("XXX: full_height: "+full_height_o+" / "+txt_box_em.getHeight()+" -> "+full_height_s); - System.err.println("XXX: txt_scale: "+txt_scale); - System.err.println("XXX: txt_box_em "+txt_box_em); - System.err.println("XXX: txt_box_e2 "+txt_box_em2); - System.err.println("XXX: txt_box_rg "+txt_box_r); - } - } - pmv.glPopMatrix(); - if( once ) { - try { - printScreen(drawable); - } catch (GLException | IOException e) { - e.printStackTrace(); - } - } - once = false; - } - renderer.enable(gl, false); - } - private boolean once = true; - - @Override - public void dispose(final GLAutoDrawable drawable) { - final GL2ES2 gl = drawable.getGL().getGL2ES2(); - crossHair.destroy(gl, getRegionRenderer()); - testObj.destroy(gl, getRegionRenderer()); - - autoDrawable = null; - screenshot.dispose(gl); - rRenderer.destroy(gl); - } - - /** Attach the input listener to the window */ - public void attachInputListenerTo(final GLWindow window) { - if ( null == keyAction ) { - keyAction = new KeyAction(); - window.addKeyListener(keyAction); - } - if ( null == mouseAction ) { - mouseAction = new MouseAction(); - window.addMouseListener(mouseAction); - } - } - - public void detachFrom(final GLWindow window) { - if ( null == keyAction ) { - return; - } - if ( null == mouseAction ) { - return; - } - window.removeGLEventListener(this); - window.removeKeyListener(keyAction); - window.removeMouseListener(mouseAction); - } - - public void printScreen(final GLAutoDrawable drawable) throws GLException, IOException { - final String dir = "./"; - final String tech="demo-"+Region.getRenderModeString(renderModes); - final String objName = "snap"+screenshot_num; - { - final String sw = String.format("-%03dx%03d-Z%04d-T%04d-%s", drawable.getSurfaceWidth(), drawable.getSurfaceHeight(), (int)Math.abs(zTran), 0, objName); - - final String filename = dir + tech + sw +".png"; - if(screenshot.readPixels(drawable.getGL(), false)) { - screenshot.write(new File(filename)); - } - } - screenshot_num++; - } - int screenshot_num = 0; - - public void setIgnoreInput(final boolean v) { - ignoreInput = v; - } - public boolean getIgnoreInput() { - return ignoreInput; - } - - public class MouseAction implements MouseListener{ - - @Override - public void mouseClicked(final MouseEvent e) { - - } - - @Override - public void mouseEntered(final MouseEvent e) { - } - - @Override - public void mouseExited(final MouseEvent e) { - } - - @Override - public void mousePressed(final MouseEvent e) { - autoDrawable.invoke(false, new GLRunnable() { // avoid data-race - @Override - public boolean run(final GLAutoDrawable drawable) { - System.err.println("\n\nMouse: "+e); - - final RegionRenderer renderer = getRegionRenderer(); - final PMVMatrix pmv = renderer.getMatrix(); - pmv.glMatrixMode(GLMatrixFunc.GL_MODELVIEW); - pmv.glLoadIdentity(); - pmv.glTranslatef(xTran, yTran, zTran); - - // flip to GL window coordinates, origin bottom-left - final int[] viewport = renderer.getViewport(new int[4]); - final int glWinX = e.getX(); - final int glWinY = viewport[3] - e.getY() - 1; - - { - pmv.glPushMatrix(); - crossHair.setTransform(pmv); - - final float[] objPosC = crossHair.getBounds().getCenter(); - final int[] objWinPos = new int[2]; - System.err.println("\n\nCrossHair: "+crossHair); - if( crossHair.objToWinCoord(renderer, objPosC, objWinPos) ) { - System.err.println("CrossHair: Obj: Obj "+objPosC[0]+"/"+objPosC[1]+"/"+objPosC[1]+" -> Win "+objWinPos[0]+"/"+objWinPos[1]); - } - - final float[] objPos2 = new float[3]; - crossHair.winToObjCoord(renderer, objWinPos[0], objWinPos[1], objPos2); - System.err.println("CrossHair: Obj: Win "+objWinPos[0]+"/"+objWinPos[1]+" -> Obj "+objPos2[0]+"/"+objPos2[1]+"/"+objPos2[1]); - - final float[] winObjPos = new float[3]; - if( crossHair.winToObjCoord(renderer, glWinX, glWinY, winObjPos) ) { - // final float[] translate = crossHair.getTranslate(); - // final float[] objPosT = new float[] { objPosC[0]+translate[0], objPosC[1]+translate[1], objPosC[2]+translate[2] }; - final float dx = winObjPos[0] - objPosC[0]; - final float dy = winObjPos[1] - objPosC[1]; - // final float dz = winObjPos[2] - objPosT[2]; - if( !FloatUtil.isZero(dx, FloatUtil.EPSILON) || !FloatUtil.isZero(dy, FloatUtil.EPSILON) ) { - System.err.println("CrossHair: Move.1: Win "+glWinX+"/"+glWinY+" -> Obj "+winObjPos[0]+"/"+winObjPos[1]+"/"+winObjPos[1]+" -> diff "+dx+" / "+dy); - crossHair.translate(dx, dy, 0f); - } else { - System.err.println("CrossHair: Move.0: Win "+glWinX+"/"+glWinY+" -> Obj "+winObjPos[0]+"/"+winObjPos[1]+"/"+winObjPos[1]+" -> diff "+dx+" / "+dy); - } - } - - final int[] surfaceSize = new int[2]; - crossHair.getSurfaceSize(renderer, surfaceSize); - System.err.println("CrossHair: Size: Pixel "+surfaceSize[0]+" x "+surfaceSize[1]); - - pmv.glPopMatrix(); - } - return true; - } } ); - - } - - @Override - public void mouseReleased(final MouseEvent e) { - } - - @Override - public void mouseMoved(final MouseEvent e) { - // TODO Auto-generated method stub - - } - - @Override - public void mouseDragged(final MouseEvent e) { - // TODO Auto-generated method stub - - } - - @Override - public void mouseWheelMoved(final MouseEvent e) { - // TODO Auto-generated method stub - - } - - } - - public class KeyAction implements KeyListener { - @Override - public void keyPressed(final KeyEvent arg0) { - if(ignoreInput) { - return; - } - - if(arg0.getKeyCode() == KeyEvent.VK_1){ - crossHair.translate(0f, 0f, -zTran/10f); - } - else if(arg0.getKeyCode() == KeyEvent.VK_2){ - crossHair.translate(0f, 0f, zTran/10f); - } - else if(arg0.getKeyCode() == KeyEvent.VK_UP){ - crossHair.translate(0f, crossHair.getHeight()/10f, 0f); - } - else if(arg0.getKeyCode() == KeyEvent.VK_DOWN){ - crossHair.translate(0f, -crossHair.getHeight()/10f, 0f); - } - else if(arg0.getKeyCode() == KeyEvent.VK_LEFT){ - crossHair.translate(-crossHair.getWidth()/10f, 0f, 0f); - } - else if(arg0.getKeyCode() == KeyEvent.VK_RIGHT){ - crossHair.translate(crossHair.getWidth()/10f, 0f, 0f); - } - else if(arg0.getKeyCode() == KeyEvent.VK_0){ - // rotate(1); - } - else if(arg0.getKeyCode() == KeyEvent.VK_9){ - // rotate(-1); - } - else if(arg0.getKeyCode() == KeyEvent.VK_V) { - if(null != autoDrawable) { - autoDrawable.invoke(false, new GLRunnable() { - @Override - public boolean run(final GLAutoDrawable drawable) { - final GL gl = drawable.getGL(); - final int _i = gl.getSwapInterval(); - final int i; - switch(_i) { - case 0: i = 1; break; - case 1: i = -1; break; - case -1: i = 0; break; - default: i = 1; break; - } - gl.setSwapInterval(i); - - final GLAnimatorControl a = drawable.getAnimator(); - if( null != a ) { - a.resetFPSCounter(); - } - if(drawable instanceof FPSCounter) { - ((FPSCounter)drawable).resetFPSCounter(); - } - System.err.println("Swap Interval: "+_i+" -> "+i+" -> "+gl.getSwapInterval()); - return true; - } - }); - } - } - else if(arg0.getKeyCode() == KeyEvent.VK_S){ - if(null != autoDrawable) { - autoDrawable.invoke(false, new GLRunnable() { - @Override - public boolean run(final GLAutoDrawable drawable) { - try { - printScreen(drawable); - } catch (final GLException e) { - e.printStackTrace(); - } catch (final IOException e) { - e.printStackTrace(); - } - return true; - } - }); - } - } - } - @Override - public void keyReleased(final KeyEvent arg0) {} - } -} diff --git a/src/test/com/jogamp/opengl/test/junit/graph/ui/demos/button-pressed-145x53.png b/src/test/com/jogamp/opengl/test/junit/graph/ui/demos/button-pressed-145x53.png Binary files differdeleted file mode 100644 index 1eba3a09e..000000000 --- a/src/test/com/jogamp/opengl/test/junit/graph/ui/demos/button-pressed-145x53.png +++ /dev/null diff --git a/src/test/com/jogamp/opengl/test/junit/graph/ui/demos/button-released-145x53.png b/src/test/com/jogamp/opengl/test/junit/graph/ui/demos/button-released-145x53.png Binary files differdeleted file mode 100644 index fe223c6d3..000000000 --- a/src/test/com/jogamp/opengl/test/junit/graph/ui/demos/button-released-145x53.png +++ /dev/null diff --git a/src/test/com/jogamp/opengl/test/junit/graph/ui/testshapes/Glyph01UbuntuLight_o.java b/src/test/com/jogamp/opengl/test/junit/graph/ui/testshapes/Glyph01UbuntuLight_o.java deleted file mode 100644 index a79a68d4e..000000000 --- a/src/test/com/jogamp/opengl/test/junit/graph/ui/testshapes/Glyph01UbuntuLight_o.java +++ /dev/null @@ -1,316 +0,0 @@ -/** - * Copyright 2023 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.junit.graph.ui.testshapes; - -import com.jogamp.opengl.GL2ES2; -import com.jogamp.graph.curve.OutlineShape; -import com.jogamp.graph.curve.opengl.RegionRenderer; -import com.jogamp.graph.geom.Vertex; -import com.jogamp.graph.geom.Vertex.Factory; -import com.jogamp.graph.geom.plane.Winding; -import com.jogamp.graph.ui.gl.Shape; - -/** - * GPU based resolution independent test object - * - Ubuntu-Light, lower case 'o' - * - TTF Shape for Glyph 82 - */ -public class Glyph01UbuntuLight_o extends Shape { - - public Glyph01UbuntuLight_o(final Factory<? extends Vertex> factory, final int renderModes) { - super(factory, renderModes); - } - - @Override - protected void clearImpl(final GL2ES2 gl, final RegionRenderer renderer) { - } - - @Override - protected void destroyImpl(final GL2ES2 gl, final RegionRenderer renderer) { - } - - @SuppressWarnings("unused") - @Override - protected void addShapeToRegion(final GL2ES2 gl, final RegionRenderer renderer) { - final OutlineShape shape = new OutlineShape(renderer.getRenderState().getVertexFactory()); - - // Ubuntu-Light, lower case 'o' - // Start TTF Shape for Glyph 82 - if( false ) { - // Original Outer shape: Winding.CW - // Moved into OutlineShape reverse -> Winding.CCW -> OK - // - // Shape.MoveTo: - shape.closeLastOutline(false); - shape.addEmptyOutline(); - shape.addVertex(0, 0.527000f, 0.258000f, true); - // 000: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.527000f, 0.197000f, false); - shape.addVertex(0, 0.510000f, 0.147000f, true); - // 002: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0, 0.492000f, 0.097000f, false); - shape.addVertex(0, 0.461000f, 0.062000f, true); - // 003: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0, 0.429000f, 0.027000f, false); - shape.addVertex(0, 0.386000f, 0.008000f, true); - // 004: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.343000f, -0.012000f, false); - shape.addVertex(0, 0.291000f, -0.012000f, true); - // 005: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.239000f, -0.012000f, false); - shape.addVertex(0, 0.196000f, 0.007000f, true); - // 007: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0, 0.153000f, 0.027000f, false); - shape.addVertex(0, 0.122000f, 0.062000f, true); - // 008: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0, 0.090000f, 0.097000f, false); - shape.addVertex(0, 0.073000f, 0.147000f, true); - // 009: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.055000f, 0.197000f, false); - shape.addVertex(0, 0.055000f, 0.258000f, true); - // 010: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.055000f, 0.319000f, false); - shape.addVertex(0, 0.072000f, 0.369000f, true); - // 012: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0, 0.090000f, 0.419000f, false); - shape.addVertex(0, 0.121000f, 0.454000f, true); - // 013: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0, 0.153000f, 0.490000f, false); - shape.addVertex(0, 0.196000f, 0.509000f, true); - // 014: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.239000f, 0.529000f, false); - shape.addVertex(0, 0.291000f, 0.529000f, true); - // 015: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.343000f, 0.529000f, false); - shape.addVertex(0, 0.386000f, 0.510000f, true); - // 017: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0, 0.429000f, 0.490000f, false); - shape.addVertex(0, 0.460000f, 0.455000f, true); - // 018: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0, 0.492000f, 0.419000f, false); - shape.addVertex(0, 0.509000f, 0.369000f, true); - // 019: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.527000f, 0.319000f, false); - shape.addVertex(0, 0.527000f, 0.258000f, true); - System.err.println("Glyph01UbuntuLight_o.shape01a.winding_area: "+shape.getWindingOfLastOutline()); - shape.closeLastOutline(false); - } else { - // Outer shape: Winding.CW - // Moved into OutlineShape same-order -> Winding.CW -> ERROR (so we fix it in the end, see below) - // - // Shape.MoveTo: - shape.closeLastOutline(false); - shape.addEmptyOutline(); - shape.addVertex(0.527000f, 0.258000f, true); - // 000: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0.527000f, 0.197000f, false); - shape.addVertex(0.510000f, 0.147000f, true); - // 002: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0.492000f, 0.097000f, false); - shape.addVertex(0.461000f, 0.062000f, true); - // 003: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0.429000f, 0.027000f, false); - shape.addVertex(0.386000f, 0.008000f, true); - // 004: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0.343000f, -0.012000f, false); - shape.addVertex(0.291000f, -0.012000f, true); - // 005: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0.239000f, -0.012000f, false); - shape.addVertex(0.196000f, 0.007000f, true); - // 007: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0.153000f, 0.027000f, false); - shape.addVertex(0.122000f, 0.062000f, true); - // 008: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0.090000f, 0.097000f, false); - shape.addVertex(0.073000f, 0.147000f, true); - // 009: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0.055000f, 0.197000f, false); - shape.addVertex(0.055000f, 0.258000f, true); - // 010: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0.055000f, 0.319000f, false); - shape.addVertex(0.072000f, 0.369000f, true); - // 012: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0.090000f, 0.419000f, false); - shape.addVertex(0.121000f, 0.454000f, true); - // 013: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0.153000f, 0.490000f, false); - shape.addVertex(0.196000f, 0.509000f, true); - // 014: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0.239000f, 0.529000f, false); - shape.addVertex(0.291000f, 0.529000f, true); - // 015: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0.343000f, 0.529000f, false); - shape.addVertex(0.386000f, 0.510000f, true); - // 017: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0.429000f, 0.490000f, false); - shape.addVertex(0.460000f, 0.455000f, true); - // 018: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0.492000f, 0.419000f, false); - shape.addVertex(0.509000f, 0.369000f, true); - // 019: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0.527000f, 0.319000f, false); - shape.addVertex(0.527000f, 0.258000f, true); - System.err.println("Glyph01UbuntuLight_o.shape01b.1.winding_area: "+shape.getWindingOfLastOutline()); - shape.setWindingOfLastOutline(Winding.CCW); - System.err.println("Glyph01UbuntuLight_o.shape01b.2.winding_area: "+shape.getWindingOfLastOutline()); - shape.closeLastOutline(false); - } - - if( true ) { - // Original Inner shape: Winding.CCW - // Moved into OutlineShape reverse -> Winding.CW -> OK - // - // Shape.MoveTo: - shape.closeLastOutline(false); - shape.addEmptyOutline(); - shape.addVertex(0, 0.458000f, 0.258000f, true); - // 020: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.458000f, 0.355000f, false); - shape.addVertex(0, 0.413000f, 0.412000f, true); - // 022: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.368000f, 0.470000f, false); - shape.addVertex(0, 0.291000f, 0.470000f, true); - // 023: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.214000f, 0.470000f, false); - shape.addVertex(0, 0.169000f, 0.413000f, true); - // 025: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.124000f, 0.355000f, false); - shape.addVertex(0, 0.124000f, 0.258000f, true); - // 026: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.124000f, 0.161000f, false); - shape.addVertex(0, 0.169000f, 0.104000f, true); - // 028: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.214000f, 0.047000f, false); - shape.addVertex(0, 0.291000f, 0.047000f, true); - // 029: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.368000f, 0.047000f, false); - shape.addVertex(0, 0.413000f, 0.104000f, true); - // 031: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.458000f, 0.161000f, false); - shape.addVertex(0, 0.458000f, 0.258000f, true); - System.err.println("Glyph01UbuntuLight_o.shape02a.winding_area: "+shape.getWindingOfLastOutline()); - shape.closeLastOutline(false); - } else { - // Inner shape: Winding.CCW - // Moved into OutlineShape same-order -> Winding.CCW -> OK - // - // Shape.MoveTo: - shape.closeLastOutline(false); - shape.addEmptyOutline(); - - shape.addVertex(0.458000f, 0.258000f, true); - // 020: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0.458000f, 0.355000f, false); - shape.addVertex(0.413000f, 0.412000f, true); - // 022: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0.368000f, 0.470000f, false); - shape.addVertex(0.291000f, 0.470000f, true); - // 023: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0.214000f, 0.470000f, false); - shape.addVertex(0.169000f, 0.413000f, true); - // 025: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0.124000f, 0.355000f, false); - shape.addVertex(0.124000f, 0.258000f, true); - // 026: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0.124000f, 0.161000f, false); - shape.addVertex(0.169000f, 0.104000f, true); - // 028: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0.214000f, 0.047000f, false); - shape.addVertex(0.291000f, 0.047000f, true); - // 029: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0.368000f, 0.047000f, false); - shape.addVertex(0.413000f, 0.104000f, true); - // 031: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0.458000f, 0.161000f, false); - shape.addVertex(0.458000f, 0.258000f, true); - - System.err.println("Glyph01UbuntuLight_o.shape02b.winding_area: "+shape.getWindingOfLastOutline()); - shape.closeLastOutline(false); - } - // End Shape for Glyph 82 - - shape.setIsQuadraticNurbs(); - shape.setSharpness(shapesSharpness); - region.addOutlineShape(shape, null, rgbaColor); - - box.resize(shape.getBounds()); - } - - @Override - public String getSubString() { - return super.getSubString(); - } -} diff --git a/src/test/com/jogamp/opengl/test/junit/graph/ui/testshapes/Glyph02UbuntuLight_ae.java b/src/test/com/jogamp/opengl/test/junit/graph/ui/testshapes/Glyph02UbuntuLight_ae.java deleted file mode 100644 index b81eb546f..000000000 --- a/src/test/com/jogamp/opengl/test/junit/graph/ui/testshapes/Glyph02UbuntuLight_ae.java +++ /dev/null @@ -1,652 +0,0 @@ -/** - * Copyright 2023 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.junit.graph.ui.testshapes; - -import com.jogamp.opengl.GL2ES2; -import com.jogamp.graph.curve.OutlineShape; -import com.jogamp.graph.curve.opengl.RegionRenderer; -import com.jogamp.graph.geom.Vertex; -import com.jogamp.graph.geom.Vertex.Factory; -import com.jogamp.graph.ui.gl.Shape; - -/** - * GPU based resolution independent test object - * - Ubuntu-Light, lower case 'æ' - * - TTF Shape for Glyph 193 - */ -public class Glyph02UbuntuLight_ae extends Shape { - - public Glyph02UbuntuLight_ae(final Factory<? extends Vertex> factory, final int renderModes) { - super(factory, renderModes); - } - - @Override - protected void clearImpl(final GL2ES2 gl, final RegionRenderer renderer) { - } - - @Override - protected void destroyImpl(final GL2ES2 gl, final RegionRenderer renderer) { - } - - @SuppressWarnings("unused") - @Override - protected void addShapeToRegion(final GL2ES2 gl, final RegionRenderer renderer) { - final OutlineShape shape = new OutlineShape(renderer.getRenderState().getVertexFactory()); - - // Ubuntu-Light, lower case 'æ' - - // Start TTF Shape for Glyph 193 - if( true ) { - // Original Inner e-shape: Winding.CCW - // Moved into OutlineShape reverse -> Winding.CW -> OK - // - // Shape.MoveTo: - shape.closeLastOutline(false); - shape.addEmptyOutline(); - shape.addVertex(0, 0.728000f, 0.300000f, true); - // 000: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.726000f, 0.381000f, false); - shape.addVertex(0, 0.690000f, 0.426000f, true); - // 002: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.654000f, 0.471000f, false); - shape.addVertex(0, 0.588000f, 0.471000f, true); - // 003: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.553000f, 0.471000f, false); - shape.addVertex(0, 0.526000f, 0.457000f, true); - // 005: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0, 0.498000f, 0.443000f, false); - shape.addVertex(0, 0.478000f, 0.420000f, true); - // 006: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0, 0.457000f, 0.396000f, false); - shape.addVertex(0, 0.446000f, 0.365000f, true); - // 007: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.434000f, 0.334000f, false); - shape.addVertex(0, 0.432000f, 0.300000f, true); - // 008: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.728000f, 0.300000f, true); - System.err.println("Glyph02UbuntuLight_ae.shape01a.winding_area: "+shape.getWindingOfLastOutline()); - shape.closeLastOutline(false); - } else { - // Inner e-shape: Winding.CCW - // Moved into OutlineShape same-order -> Winding.CCW -> ?? - // - // Shape.MoveTo: - shape.closeLastOutline(false); - shape.addEmptyOutline(); - shape.addVertex(0.728000f, 0.300000f, true); - // 000: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0.726000f, 0.381000f, false); - shape.addVertex(0.690000f, 0.426000f, true); - // 002: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0.654000f, 0.471000f, false); - shape.addVertex(0.588000f, 0.471000f, true); - // 003: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0.553000f, 0.471000f, false); - shape.addVertex(0.526000f, 0.457000f, true); - // 005: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0.498000f, 0.443000f, false); - shape.addVertex(0.478000f, 0.420000f, true); - // 006: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0.457000f, 0.396000f, false); - shape.addVertex(0.446000f, 0.365000f, true); - // 007: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0.434000f, 0.334000f, false); - shape.addVertex(0.432000f, 0.300000f, true); - // 008: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0.728000f, 0.300000f, true); - System.err.println("Glyph02UbuntuLight_ae.shape01b.winding_area: "+shape.getWindingOfLastOutline()); - shape.closeLastOutline(false); - } - - if( true ) { - // Original Outer shape: Winding.CW - // Moved into OutlineShape reverse -> Winding.CCW -> OK - // - // Shape.MoveTo: - shape.closeLastOutline(false); - shape.addEmptyOutline(); - shape.addVertex(0, 0.252000f, -0.011000f, true); - // 009: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.208000f, -0.011000f, false); - shape.addVertex(0, 0.171000f, -0.002000f, true); - // 011: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0, 0.133000f, 0.007000f, false); - shape.addVertex(0, 0.106000f, 0.026000f, true); - // 012: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0, 0.079000f, 0.046000f, false); - shape.addVertex(0, 0.064000f, 0.076000f, true); - // 013: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.048000f, 0.107000f, false); - shape.addVertex(0, 0.048000f, 0.151000f, true); - // 014: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.048000f, 0.193000f, false); - shape.addVertex(0, 0.064000f, 0.223000f, true); - // 016: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0, 0.080000f, 0.253000f, false); - shape.addVertex(0, 0.109000f, 0.272000f, true); - // 017: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0, 0.138000f, 0.292000f, false); - shape.addVertex(0, 0.178000f, 0.301000f, true); - // 018: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.218000f, 0.310000f, false); - shape.addVertex(0, 0.265000f, 0.310000f, true); - // 019: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.279000f, 0.310000f, false); - shape.addVertex(0, 0.294000f, 0.309000f, true); - // 021: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0, 0.310000f, 0.307000f, false); - shape.addVertex(0, 0.324000f, 0.305000f, true); - // 022: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0, 0.339000f, 0.302000f, false); - shape.addVertex(0, 0.349000f, 0.300000f, true); - // 023: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.360000f, 0.297000f, false); - shape.addVertex(0, 0.364000f, 0.295000f, true); - // 024: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.364000f, 0.327000f, true); - // 025: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.364000f, 0.354000f, false); - shape.addVertex(0, 0.360000f, 0.379000f, true); - // 027: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0, 0.356000f, 0.405000f, false); - shape.addVertex(0, 0.343000f, 0.425000f, true); - // 028: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0, 0.329000f, 0.446000f, false); - shape.addVertex(0, 0.305000f, 0.458000f, true); - // 029: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.280000f, 0.471000f, false); - shape.addVertex(0, 0.240000f, 0.471000f, true); - // 030: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.186000f, 0.471000f, false); - shape.addVertex(0, 0.156000f, 0.464000f, true); - // 032: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.126000f, 0.456000f, false); - shape.addVertex(0, 0.113000f, 0.451000f, true); - // 033: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.105000f, 0.507000f, true); - // 034: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.122000f, 0.515000f, false); - shape.addVertex(0, 0.158000f, 0.522000f, true); - // 036: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.194000f, 0.529000f, false); - shape.addVertex(0, 0.243000f, 0.529000f, true); - // 037: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.314000f, 0.529000f, false); - shape.addVertex(0, 0.354000f, 0.503000f, true); - // 039: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.395000f, 0.476000f, false); - shape.addVertex(0, 0.412000f, 0.431000f, true); - // 040: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.445000f, 0.480000f, false); - shape.addVertex(0, 0.491000f, 0.504000f, true); - // 042: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.537000f, 0.529000f, false); - shape.addVertex(0, 0.587000f, 0.529000f, true); - // 043: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.682000f, 0.529000f, false); - shape.addVertex(0, 0.738000f, 0.467000f, true); - // 045: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.795000f, 0.405000f, false); - shape.addVertex(0, 0.795000f, 0.276000f, true); - // 046: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.795000f, 0.268000f, false); - shape.addVertex(0, 0.795000f, 0.260000f, true); - // 048: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.794000f, 0.252000f, false); - shape.addVertex(0, 0.793000f, 0.245000f, true); - // 049: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.430000f, 0.245000f, true); - // 050: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.433000f, 0.150000f, false); - shape.addVertex(0, 0.477000f, 0.099000f, true); - // 052: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.521000f, 0.048000f, false); - shape.addVertex(0, 0.617000f, 0.048000f, true); - // 053: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.670000f, 0.048000f, false); - shape.addVertex(0, 0.701000f, 0.058000f, true); - // 055: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.732000f, 0.068000f, false); - shape.addVertex(0, 0.746000f, 0.075000f, true); - // 056: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.758000f, 0.019000f, true); - // 057: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.744000f, 0.011000f, false); - shape.addVertex(0, 0.706000f, 0.000000f, true); - // 059: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.667000f, -0.011000f, false); - shape.addVertex(0, 0.615000f, -0.011000f, true); - // 060: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.558000f, -0.011000f, false); - shape.addVertex(0, 0.514000f, 0.003000f, true); - // 062: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.470000f, 0.017000f, false); - shape.addVertex(0, 0.437000f, 0.049000f, true); - // 063: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.426000f, 0.040000f, false); - shape.addVertex(0, 0.410000f, 0.030000f, true); - // 065: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0, 0.393000f, 0.019000f, false); - shape.addVertex(0, 0.370000f, 0.010000f, true); - // 066: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0, 0.347000f, 0.001000f, false); - shape.addVertex(0, 0.318000f, -0.005000f, true); - // 067: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.289000f, -0.011000f, false); - shape.addVertex(0, 0.252000f, -0.011000f, true); - System.err.println("Glyph02UbuntuLight_ae.shape02a.winding_area: "+shape.getWindingOfLastOutline()); - shape.closeLastOutline(false); - } else { - // Outer shape: Winding.CW - // Moved into OutlineShape same-order -> Winding.CW -> OK now - // - // Shape.MoveTo: - shape.closeLastOutline(false); - shape.addEmptyOutline(); - shape.addVertex(0.252000f, -0.011000f, true); - // 009: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0.208000f, -0.011000f, false); - shape.addVertex(0.171000f, -0.002000f, true); - // 011: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0.133000f, 0.007000f, false); - shape.addVertex(0.106000f, 0.026000f, true); - // 012: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0.079000f, 0.046000f, false); - shape.addVertex(0.064000f, 0.076000f, true); - // 013: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0.048000f, 0.107000f, false); - shape.addVertex(0.048000f, 0.151000f, true); - // 014: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0.048000f, 0.193000f, false); - shape.addVertex(0.064000f, 0.223000f, true); - // 016: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0.080000f, 0.253000f, false); - shape.addVertex(0.109000f, 0.272000f, true); - // 017: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0.138000f, 0.292000f, false); - shape.addVertex(0.178000f, 0.301000f, true); - // 018: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0.218000f, 0.310000f, false); - shape.addVertex(0.265000f, 0.310000f, true); - // 019: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0.279000f, 0.310000f, false); - shape.addVertex(0.294000f, 0.309000f, true); - // 021: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0.310000f, 0.307000f, false); - shape.addVertex(0.324000f, 0.305000f, true); - // 022: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0.339000f, 0.302000f, false); - shape.addVertex(0.349000f, 0.300000f, true); - // 023: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0.360000f, 0.297000f, false); - shape.addVertex(0.364000f, 0.295000f, true); - // 024: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0.364000f, 0.327000f, true); - // 025: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0.364000f, 0.354000f, false); - shape.addVertex(0.360000f, 0.379000f, true); - // 027: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0.356000f, 0.405000f, false); - shape.addVertex(0.343000f, 0.425000f, true); - // 028: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0.329000f, 0.446000f, false); - shape.addVertex(0.305000f, 0.458000f, true); - // 029: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0.280000f, 0.471000f, false); - shape.addVertex(0.240000f, 0.471000f, true); - // 030: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0.186000f, 0.471000f, false); - shape.addVertex(0.156000f, 0.464000f, true); - // 032: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0.126000f, 0.456000f, false); - shape.addVertex(0.113000f, 0.451000f, true); - // 033: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0.105000f, 0.507000f, true); - // 034: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0.122000f, 0.515000f, false); - shape.addVertex(0.158000f, 0.522000f, true); - // 036: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0.194000f, 0.529000f, false); - shape.addVertex(0.243000f, 0.529000f, true); - // 037: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0.314000f, 0.529000f, false); - shape.addVertex(0.354000f, 0.503000f, true); - // 039: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0.395000f, 0.476000f, false); - shape.addVertex(0.412000f, 0.431000f, true); - // 040: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0.445000f, 0.480000f, false); - shape.addVertex(0.491000f, 0.504000f, true); - // 042: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0.537000f, 0.529000f, false); - shape.addVertex(0.587000f, 0.529000f, true); - // 043: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0.682000f, 0.529000f, false); - shape.addVertex(0.738000f, 0.467000f, true); - // 045: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0.795000f, 0.405000f, false); - shape.addVertex(0.795000f, 0.276000f, true); - // 046: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0.795000f, 0.268000f, false); - shape.addVertex(0.795000f, 0.260000f, true); - // 048: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0.794000f, 0.252000f, false); - shape.addVertex(0.793000f, 0.245000f, true); - // 049: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0.430000f, 0.245000f, true); - // 050: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0.433000f, 0.150000f, false); - shape.addVertex(0.477000f, 0.099000f, true); - // 052: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0.521000f, 0.048000f, false); - shape.addVertex(0.617000f, 0.048000f, true); - // 053: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0.670000f, 0.048000f, false); - shape.addVertex(0.701000f, 0.058000f, true); - // 055: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0.732000f, 0.068000f, false); - shape.addVertex(0.746000f, 0.075000f, true); - // 056: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0.758000f, 0.019000f, true); - // 057: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0.744000f, 0.011000f, false); - shape.addVertex(0.706000f, 0.000000f, true); - // 059: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0.667000f, -0.011000f, false); - shape.addVertex(0.615000f, -0.011000f, true); - // 060: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0.558000f, -0.011000f, false); - shape.addVertex(0.514000f, 0.003000f, true); - // 062: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0.470000f, 0.017000f, false); - shape.addVertex(0.437000f, 0.049000f, true); - // 063: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0.426000f, 0.040000f, false); - shape.addVertex(0.410000f, 0.030000f, true); - // 065: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0.393000f, 0.019000f, false); - shape.addVertex(0.370000f, 0.010000f, true); - // 066: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0.347000f, 0.001000f, false); - shape.addVertex(0.318000f, -0.005000f, true); - // 067: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0.289000f, -0.011000f, false); - shape.addVertex(0.252000f, -0.011000f, true); - System.err.println("Glyph02UbuntuLight_ae.shape02b.winding_area: "+shape.getWindingOfLastOutline()); - shape.closeLastOutline(false); - } - - if( true ) { - // Original Inner a-shape: Winding.CCW - // Moved into OutlineShape reverse -> Winding.CW -> OK now - // - // Shape.MoveTo: - shape.closeLastOutline(false); - shape.addEmptyOutline(); - shape.addVertex(0, 0.365000f, 0.238000f, true); - // 068: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.354000f, 0.243000f, false); - shape.addVertex(0, 0.330000f, 0.248000f, true); - // 070: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.305000f, 0.254000f, false); - shape.addVertex(0, 0.263000f, 0.254000f, true); - // 071: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.239000f, 0.254000f, false); - shape.addVertex(0, 0.213000f, 0.251000f, true); - // 073: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0, 0.187000f, 0.247000f, false); - shape.addVertex(0, 0.165000f, 0.236000f, true); - // 074: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0, 0.143000f, 0.224000f, false); - shape.addVertex(0, 0.129000f, 0.204000f, true); - // 075: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.115000f, 0.184000f, false); - shape.addVertex(0, 0.115000f, 0.151000f, true); - // 076: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.115000f, 0.122000f, false); - shape.addVertex(0, 0.125000f, 0.102000f, true); - // 078: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0, 0.135000f, 0.082000f, false); - shape.addVertex(0, 0.153000f, 0.070000f, true); - // 079: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0, 0.172000f, 0.058000f, false); - shape.addVertex(0, 0.197000f, 0.053000f, true); - // 080: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.222000f, 0.047000f, false); - shape.addVertex(0, 0.252000f, 0.047000f, true); - // 081: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.314000f, 0.047000f, false); - shape.addVertex(0, 0.350000f, 0.063000f, true); - // 083: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.386000f, 0.080000f, false); - shape.addVertex(0, 0.400000f, 0.093000f, true); - // 084: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.384000f, 0.119000f, false); - shape.addVertex(0, 0.375000f, 0.154000f, true); - // 086: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.366000f, 0.190000f, false); - shape.addVertex(0, 0.365000f, 0.238000f, true); - System.err.println("Glyph02UbuntuLight_ae.shape03a.winding_area: "+shape.getWindingOfLastOutline()); - shape.closeLastOutline(false); - } else { - // Inner a-shape: Winding.CCW - // Moved into OutlineShape same-order -> Winding.CCW -> OK - // - // Shape.MoveTo: - shape.closeLastOutline(false); - shape.addEmptyOutline(); - shape.addVertex(0.365000f, 0.238000f, true); - // 068: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0.354000f, 0.243000f, false); - shape.addVertex(0.330000f, 0.248000f, true); - // 070: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0.305000f, 0.254000f, false); - shape.addVertex(0.263000f, 0.254000f, true); - // 071: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0.239000f, 0.254000f, false); - shape.addVertex(0.213000f, 0.251000f, true); - // 073: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0.187000f, 0.247000f, false); - shape.addVertex(0.165000f, 0.236000f, true); - // 074: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0.143000f, 0.224000f, false); - shape.addVertex(0.129000f, 0.204000f, true); - // 075: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0.115000f, 0.184000f, false); - shape.addVertex(0.115000f, 0.151000f, true); - // 076: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0.115000f, 0.122000f, false); - shape.addVertex(0.125000f, 0.102000f, true); - // 078: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0.135000f, 0.082000f, false); - shape.addVertex(0.153000f, 0.070000f, true); - // 079: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0.172000f, 0.058000f, false); - shape.addVertex(0.197000f, 0.053000f, true); - // 080: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0.222000f, 0.047000f, false); - shape.addVertex(0.252000f, 0.047000f, true); - // 081: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0.314000f, 0.047000f, false); - shape.addVertex(0.350000f, 0.063000f, true); - // 083: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0.386000f, 0.080000f, false); - shape.addVertex(0.400000f, 0.093000f, true); - // 084: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0.384000f, 0.119000f, false); - shape.addVertex(0.375000f, 0.154000f, true); - // 086: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0.366000f, 0.190000f, false); - shape.addVertex(0.365000f, 0.238000f, true); - System.err.println("Glyph02UbuntuLight_ae.shape03b.winding_area: "+shape.getWindingOfLastOutline()); - shape.closeLastOutline(false); - } - // End Shape for Glyph 193 - - shape.setIsQuadraticNurbs(); - shape.setSharpness(shapesSharpness); - region.addOutlineShape(shape, null, rgbaColor); - - box.resize(shape.getBounds()); - } - - @Override - public String getSubString() { - return super.getSubString(); - } -} diff --git a/src/test/com/jogamp/opengl/test/junit/graph/ui/testshapes/Glyph03FreeMonoRegular_M.java b/src/test/com/jogamp/opengl/test/junit/graph/ui/testshapes/Glyph03FreeMonoRegular_M.java deleted file mode 100644 index 053134866..000000000 --- a/src/test/com/jogamp/opengl/test/junit/graph/ui/testshapes/Glyph03FreeMonoRegular_M.java +++ /dev/null @@ -1,804 +0,0 @@ -/** - * Copyright 2023 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.junit.graph.ui.testshapes; - -import com.jogamp.opengl.GL2ES2; -import com.jogamp.graph.curve.OutlineShape; -import com.jogamp.graph.curve.opengl.RegionRenderer; -import com.jogamp.graph.geom.Vertex; -import com.jogamp.graph.geom.Vertex.Factory; -import com.jogamp.graph.ui.gl.Shape; - -/** - * GPU based resolution independent test object - * - FreeMono-Regular, capital case 'M' - * - TTF Shape for Glyph 48 - */ -public class Glyph03FreeMonoRegular_M extends Shape { - - public Glyph03FreeMonoRegular_M(final Factory<? extends Vertex> factory, final int renderModes) { - super(factory, renderModes); - } - - @Override - protected void clearImpl(final GL2ES2 gl, final RegionRenderer renderer) { - } - - @Override - protected void destroyImpl(final GL2ES2 gl, final RegionRenderer renderer) { - } - - @SuppressWarnings("unused") - @Override - protected void addShapeToRegion(final GL2ES2 gl, final RegionRenderer renderer) { - final OutlineShape shape = new OutlineShape(renderer.getRenderState().getVertexFactory()); - - if( false ) { - // Start TTF Shape for Glyph 48 - // GlyphShape<48>: offset 0 of 45/45 points - // pM[044] P[483/522, on true, end true] - // p0[000] P[326/169, on true, end false] - // p1[001] P[280/169, on true, end false] - // p2[002] P[121/522, on true, end false] - // 000: B0a: move-to p0 - // Shape.MoveTo: - shape.closeLastOutline(false); - shape.addEmptyOutline(); - shape.addVertex(0, 0.326000f, 0.169000f, true); - // 000: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.280000f, 0.169000f, true); - // GlyphShape<48>: offset 1 of 45/45 points - // pM[000] P[326/169, on true, end false] - // p0[001] P[280/169, on true, end false] - // p1[002] P[121/522, on true, end false] - // p2[003] P[113/522, on true, end false] - // 001: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.121000f, 0.522000f, true); - // GlyphShape<48>: offset 2 of 45/45 points - // pM[001] P[280/169, on true, end false] - // p0[002] P[121/522, on true, end false] - // p1[003] P[113/522, on true, end false] - // p2[004] P[113/41, on true, end false] - // 002: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.113000f, 0.522000f, true); - // GlyphShape<48>: offset 3 of 45/45 points - // pM[002] P[121/522, on true, end false] - // p0[003] P[113/522, on true, end false] - // p1[004] P[113/41, on true, end false] - // p2[005] P[187/41, on true, end false] - // 003: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.113000f, 0.041000f, true); - // GlyphShape<48>: offset 4 of 45/45 points - // pM[003] P[113/522, on true, end false] - // p0[004] P[113/41, on true, end false] - // p1[005] P[187/41, on true, end false] - // p2[006] P[215/41, on false, end false] - // 004: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.187000f, 0.041000f, true); - // GlyphShape<48>: offset 5 of 45/45 points - // pM[004] P[113/41, on true, end false] - // p0[005] P[187/41, on true, end false] - // p1[006] P[215/41, on false, end false] - // p2[007] P[215/21, on true, end false] - // 005: B2: quad-to p0-p1-p2 - // Shape.QuadTo: - shape.addVertex(0, 0.215000f, 0.041000f, false); - shape.addVertex(0, 0.215000f, 0.021000f, true); - // GlyphShape<48>: offset 7 of 45/45 points - // pM[006] P[215/41, on false, end false] - // p0[007] P[215/21, on true, end false] - // p1[008] P[215/0, on false, end false] - // p2[009] P[187/0, on true, end false] - // 007: B2: quad-to p0-p1-p2 - // Shape.QuadTo: - shape.addVertex(0, 0.215000f, 0.000000f, false); - shape.addVertex(0, 0.187000f, 0.000000f, true); - // GlyphShape<48>: offset 9 of 45/45 points - // pM[008] P[215/0, on false, end false] - // p0[009] P[187/0, on true, end false] - // p1[010] P[38/0, on true, end false] - // p2[011] P[11/0, on false, end false] - // 009: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.038000f, 0.000000f, true); - // GlyphShape<48>: offset 10 of 45/45 points - // pM[009] P[187/0, on true, end false] - // p0[010] P[38/0, on true, end false] - // p1[011] P[11/0, on false, end false] - // p2[012] P[11/21, on true, end false] - // 010: B2: quad-to p0-p1-p2 - // Shape.QuadTo: - shape.addVertex(0, 0.011000f, 0.000000f, false); - shape.addVertex(0, 0.011000f, 0.021000f, true); - // GlyphShape<48>: offset 12 of 45/45 points - // pM[011] P[11/0, on false, end false] - // p0[012] P[11/21, on true, end false] - // p1[013] P[11/41, on false, end false] - // p2[014] P[38/41, on true, end false] - // 012: B2: quad-to p0-p1-p2 - // Shape.QuadTo: - shape.addVertex(0, 0.011000f, 0.041000f, false); - shape.addVertex(0, 0.038000f, 0.041000f, true); - // GlyphShape<48>: offset 14 of 45/45 points - // pM[013] P[11/41, on false, end false] - // p0[014] P[38/41, on true, end false] - // p1[015] P[72/41, on true, end false] - // p2[016] P[72/522, on true, end false] - // 014: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.072000f, 0.041000f, true); - // GlyphShape<48>: offset 15 of 45/45 points - // pM[014] P[38/41, on true, end false] - // p0[015] P[72/41, on true, end false] - // p1[016] P[72/522, on true, end false] - // p2[017] P[47/522, on true, end false] - // 015: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.072000f, 0.522000f, true); - // GlyphShape<48>: offset 16 of 45/45 points - // pM[015] P[72/41, on true, end false] - // p0[016] P[72/522, on true, end false] - // p1[017] P[47/522, on true, end false] - // p2[018] P[20/522, on false, end false] - // 016: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.047000f, 0.522000f, true); - // GlyphShape<48>: offset 17 of 45/45 points - // pM[016] P[72/522, on true, end false] - // p0[017] P[47/522, on true, end false] - // p1[018] P[20/522, on false, end false] - // p2[019] P[20/543, on true, end false] - // 017: B2: quad-to p0-p1-p2 - // Shape.QuadTo: - shape.addVertex(0, 0.020000f, 0.522000f, false); - shape.addVertex(0, 0.020000f, 0.543000f, true); - // GlyphShape<48>: offset 19 of 45/45 points - // pM[018] P[20/522, on false, end false] - // p0[019] P[20/543, on true, end false] - // p1[020] P[20/563, on false, end false] - // p2[021] P[47/563, on true, end false] - // 019: B2: quad-to p0-p1-p2 - // Shape.QuadTo: - shape.addVertex(0, 0.020000f, 0.563000f, false); - shape.addVertex(0, 0.047000f, 0.563000f, true); - // GlyphShape<48>: offset 21 of 45/45 points - // pM[020] P[20/563, on false, end false] - // p0[021] P[47/563, on true, end false] - // p1[022] P[146/563, on true, end false] - // p2[023] P[303/215, on true, end false] - // 021: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.146000f, 0.563000f, true); - // GlyphShape<48>: offset 22 of 45/45 points - // pM[021] P[47/563, on true, end false] - // p0[022] P[146/563, on true, end false] - // p1[023] P[303/215, on true, end false] - // p2[024] P[457/563, on true, end false] - // 022: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.303000f, 0.215000f, true); - // GlyphShape<48>: offset 23 of 45/45 points - // pM[022] P[146/563, on true, end false] - // p0[023] P[303/215, on true, end false] - // p1[024] P[457/563, on true, end false] - // p2[025] P[557/563, on true, end false] - // 023: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.457000f, 0.563000f, true); - // GlyphShape<48>: offset 24 of 45/45 points - // pM[023] P[303/215, on true, end false] - // p0[024] P[457/563, on true, end false] - // p1[025] P[557/563, on true, end false] - // p2[026] P[584/563, on false, end false] - // 024: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.557000f, 0.563000f, true); - // GlyphShape<48>: offset 25 of 45/45 points - // pM[024] P[457/563, on true, end false] - // p0[025] P[557/563, on true, end false] - // p1[026] P[584/563, on false, end false] - // p2[027] P[584/543, on true, end false] - // 025: B2: quad-to p0-p1-p2 - // Shape.QuadTo: - shape.addVertex(0, 0.584000f, 0.563000f, false); - shape.addVertex(0, 0.584000f, 0.543000f, true); - // GlyphShape<48>: offset 27 of 45/45 points - // pM[026] P[584/563, on false, end false] - // p0[027] P[584/543, on true, end false] - // p1[028] P[584/522, on false, end false] - // p2[029] P[557/522, on true, end false] - // 027: B2: quad-to p0-p1-p2 - // Shape.QuadTo: - shape.addVertex(0, 0.584000f, 0.522000f, false); - shape.addVertex(0, 0.557000f, 0.522000f, true); - // GlyphShape<48>: offset 29 of 45/45 points - // pM[028] P[584/522, on false, end false] - // p0[029] P[557/522, on true, end false] - // p1[030] P[532/522, on true, end false] - // p2[031] P[532/41, on true, end false] - // 029: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.532000f, 0.522000f, true); - // GlyphShape<48>: offset 30 of 45/45 points - // pM[029] P[557/522, on true, end false] - // p0[030] P[532/522, on true, end false] - // p1[031] P[532/41, on true, end false] - // p2[032] P[566/41, on true, end false] - // 030: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.532000f, 0.041000f, true); - // GlyphShape<48>: offset 31 of 45/45 points - // pM[030] P[532/522, on true, end false] - // p0[031] P[532/41, on true, end false] - // p1[032] P[566/41, on true, end false] - // p2[033] P[593/41, on false, end false] - // 031: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.566000f, 0.041000f, true); - // GlyphShape<48>: offset 32 of 45/45 points - // pM[031] P[532/41, on true, end false] - // p0[032] P[566/41, on true, end false] - // p1[033] P[593/41, on false, end false] - // p2[034] P[593/21, on true, end false] - // 032: B2: quad-to p0-p1-p2 - // Shape.QuadTo: - shape.addVertex(0, 0.593000f, 0.041000f, false); - shape.addVertex(0, 0.593000f, 0.021000f, true); - // GlyphShape<48>: offset 34 of 45/45 points - // pM[033] P[593/41, on false, end false] - // p0[034] P[593/21, on true, end false] - // p1[035] P[593/0, on false, end false] - // p2[036] P[566/0, on true, end false] - // 034: B2: quad-to p0-p1-p2 - // Shape.QuadTo: - shape.addVertex(0, 0.593000f, 0.000000f, false); - shape.addVertex(0, 0.566000f, 0.000000f, true); - // GlyphShape<48>: offset 36 of 45/45 points - // pM[035] P[593/0, on false, end false] - // p0[036] P[566/0, on true, end false] - // p1[037] P[417/0, on true, end false] - // p2[038] P[390/0, on false, end false] - // 036: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.417000f, 0.000000f, true); - // GlyphShape<48>: offset 37 of 45/45 points - // pM[036] P[566/0, on true, end false] - // p0[037] P[417/0, on true, end false] - // p1[038] P[390/0, on false, end false] - // p2[039] P[390/21, on true, end false] - // 037: B2: quad-to p0-p1-p2 - // Shape.QuadTo: - shape.addVertex(0, 0.390000f, 0.000000f, false); - shape.addVertex(0, 0.390000f, 0.021000f, true); - // GlyphShape<48>: offset 39 of 45/45 points - // pM[038] P[390/0, on false, end false] - // p0[039] P[390/21, on true, end false] - // p1[040] P[390/41, on false, end false] - // p2[041] P[417/41, on true, end false] - // 039: B2: quad-to p0-p1-p2 - // Shape.QuadTo: - shape.addVertex(0, 0.390000f, 0.041000f, false); - shape.addVertex(0, 0.417000f, 0.041000f, true); - // GlyphShape<48>: offset 41 of 45/45 points - // pM[040] P[390/41, on false, end false] - // p0[041] P[417/41, on true, end false] - // p1[042] P[491/41, on true, end false] - // p2[043] P[491/522, on true, end false] - // 041: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.491000f, 0.041000f, true); - // GlyphShape<48>: offset 42 of 45/45 points - // pM[041] P[417/41, on true, end false] - // p0[042] P[491/41, on true, end false] - // p1[043] P[491/522, on true, end false] - // p2[044] P[483/522, on true, end true] - // 042: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.491000f, 0.522000f, true); - // GlyphShape<48>: offset 43 of 45/45 points - // pM[042] P[491/41, on true, end false] - // p0[043] P[491/522, on true, end false] - // p1[044] P[483/522, on true, end true] - // p2[000] P[326/169, on true, end false] - // 043: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.483000f, 0.522000f, true); - // GlyphShape<48>: offset 44 of 45/45 points - // pM[043] P[491/522, on true, end false] - // p0[044] P[483/522, on true, end true] - // p1[000] P[326/169, on true, end false] - // p2[001] P[280/169, on true, end false] - // 044: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.326000f, 0.169000f, true); - System.err.println("Glyph03FreeMonoRegular_M.shape01a.winding_area: "+shape.getWindingOfLastOutline()); - shape.closeLastOutline(false); - - // End Shape for Glyph 48 - } else if( false ) { - // Start TTF Shape for Glyph 48 - // GlyphShape<48>: offset 0 of 45/45 points - // pM[044] P[483/522, on true, end true] - // p0[000] P[326/169, on true, end false] - // p1[001] P[280/169, on true, end false] - // p2[002] P[121/522, on true, end false] - // 000: B0a: move-to p0 - // Shape.MoveTo: - shape.closeLastOutline(false); - shape.addEmptyOutline(); - shape.addVertex(0, 0.326000f, 0.169000f, true); - // 000: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.280000f, 0.169000f, true); - // GlyphShape<48>: offset 1 of 45/45 points - // pM[000] P[326/169, on true, end false] - // p0[001] P[280/169, on true, end false] - // p1[002] P[121/522, on true, end false] - // p2[003] P[113/522, on true, end false] - // 001: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.121000f, 0.522000f, true); - // GlyphShape<48>: offset 2 of 45/45 points - // pM[001] P[280/169, on true, end false] - // p0[002] P[121/522, on true, end false] - // p1[003] P[113/522, on true, end false] - // p2[004] P[113/41, on true, end false] - // 002: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.113000f, 0.522000f, true); - // GlyphShape<48>: offset 3 of 45/45 points - // pM[002] P[121/522, on true, end false] - // p0[003] P[113/522, on true, end false] - // p1[004] P[113/41, on true, end false] - // p2[005] P[187/41, on true, end false] - // 003: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.113000f, 0.041000f, true); - // GlyphShape<48>: offset 4 of 45/45 points - // pM[003] P[113/522, on true, end false] - // p0[004] P[113/41, on true, end false] - // p1[005] P[187/41, on true, end false] - // p2[006] P[215/41, on false, end false] - // 004: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.187000f, 0.041000f, true); - // GlyphShape<48>: offset 5 of 45/45 points - // pM[004] P[113/41, on true, end false] - // p0[005] P[187/41, on true, end false] - // p1[006] P[215/41, on false, end false] - // p2[007] P[215/21, on true, end false] - // 005: B2: quad-to p0-p1-p2 - // Shape.QuadTo: - shape.addVertex(0, 0.215000f, 0.041000f, true); // curve -> line - shape.addVertex(0, 0.215000f, 0.021000f, true); - // GlyphShape<48>: offset 7 of 45/45 points - // pM[006] P[215/41, on false, end false] - // p0[007] P[215/21, on true, end false] - // p1[008] P[215/0, on false, end false] - // p2[009] P[187/0, on true, end false] - // 007: B2: quad-to p0-p1-p2 - // Shape.QuadTo: - shape.addVertex(0, 0.215000f, 0.000000f, true); // curve -> line - shape.addVertex(0, 0.187000f, 0.000000f, true); - // GlyphShape<48>: offset 9 of 45/45 points - // pM[008] P[215/0, on false, end false] - // p0[009] P[187/0, on true, end false] - // p1[010] P[38/0, on true, end false] - // p2[011] P[11/0, on false, end false] - // 009: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.038000f, 0.000000f, true); - // GlyphShape<48>: offset 10 of 45/45 points - // pM[009] P[187/0, on true, end false] - // p0[010] P[38/0, on true, end false] - // p1[011] P[11/0, on false, end false] - // p2[012] P[11/21, on true, end false] - // 010: B2: quad-to p0-p1-p2 - // Shape.QuadTo: - shape.addVertex(0, 0.011000f, 0.000000f, true); // curve -> line - shape.addVertex(0, 0.011000f, 0.021000f, true); - // GlyphShape<48>: offset 12 of 45/45 points - // pM[011] P[11/0, on false, end false] - // p0[012] P[11/21, on true, end false] - // p1[013] P[11/41, on false, end false] - // p2[014] P[38/41, on true, end false] - // 012: B2: quad-to p0-p1-p2 - // Shape.QuadTo: - shape.addVertex(0, 0.011000f, 0.041000f, true); // curve -> line - shape.addVertex(0, 0.038000f, 0.041000f, true); - // GlyphShape<48>: offset 14 of 45/45 points - // pM[013] P[11/41, on false, end false] - // p0[014] P[38/41, on true, end false] - // p1[015] P[72/41, on true, end false] - // p2[016] P[72/522, on true, end false] - // 014: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.072000f, 0.041000f, true); - // GlyphShape<48>: offset 15 of 45/45 points - // pM[014] P[38/41, on true, end false] - // p0[015] P[72/41, on true, end false] - // p1[016] P[72/522, on true, end false] - // p2[017] P[47/522, on true, end false] - // 015: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.072000f, 0.522000f, true); - // GlyphShape<48>: offset 16 of 45/45 points - // pM[015] P[72/41, on true, end false] - // p0[016] P[72/522, on true, end false] - // p1[017] P[47/522, on true, end false] - // p2[018] P[20/522, on false, end false] - // 016: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.047000f, 0.522000f, true); - // GlyphShape<48>: offset 17 of 45/45 points - // pM[016] P[72/522, on true, end false] - // p0[017] P[47/522, on true, end false] - // p1[018] P[20/522, on false, end false] - // p2[019] P[20/543, on true, end false] - // 017: B2: quad-to p0-p1-p2 - // Shape.QuadTo: - shape.addVertex(0, 0.020000f, 0.522000f, true); // curve -> line - shape.addVertex(0, 0.020000f, 0.543000f, true); - // GlyphShape<48>: offset 19 of 45/45 points - // pM[018] P[20/522, on false, end false] - // p0[019] P[20/543, on true, end false] - // p1[020] P[20/563, on false, end false] - // p2[021] P[47/563, on true, end false] - // 019: B2: quad-to p0-p1-p2 - // Shape.QuadTo: - shape.addVertex(0, 0.020000f, 0.563000f, true); // curve -> line - shape.addVertex(0, 0.047000f, 0.563000f, true); - // GlyphShape<48>: offset 21 of 45/45 points - // pM[020] P[20/563, on false, end false] - // p0[021] P[47/563, on true, end false] - // p1[022] P[146/563, on true, end false] - // p2[023] P[303/215, on true, end false] - // 021: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.146000f, 0.563000f, true); - // GlyphShape<48>: offset 22 of 45/45 points - // pM[021] P[47/563, on true, end false] - // p0[022] P[146/563, on true, end false] - // p1[023] P[303/215, on true, end false] - // p2[024] P[457/563, on true, end false] - // 022: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.303000f, 0.215000f, true); - // GlyphShape<48>: offset 23 of 45/45 points - // pM[022] P[146/563, on true, end false] - // p0[023] P[303/215, on true, end false] - // p1[024] P[457/563, on true, end false] - // p2[025] P[557/563, on true, end false] - // 023: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.457000f, 0.563000f, true); - // GlyphShape<48>: offset 24 of 45/45 points - // pM[023] P[303/215, on true, end false] - // p0[024] P[457/563, on true, end false] - // p1[025] P[557/563, on true, end false] - // p2[026] P[584/563, on false, end false] - // 024: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.557000f, 0.563000f, true); - // GlyphShape<48>: offset 25 of 45/45 points - // pM[024] P[457/563, on true, end false] - // p0[025] P[557/563, on true, end false] - // p1[026] P[584/563, on false, end false] - // p2[027] P[584/543, on true, end false] - // 025: B2: quad-to p0-p1-p2 - // Shape.QuadTo: - shape.addVertex(0, 0.584000f, 0.563000f, true); // curve -> line - shape.addVertex(0, 0.584000f, 0.543000f, true); - // GlyphShape<48>: offset 27 of 45/45 points - // pM[026] P[584/563, on false, end false] - // p0[027] P[584/543, on true, end false] - // p1[028] P[584/522, on false, end false] - // p2[029] P[557/522, on true, end false] - // 027: B2: quad-to p0-p1-p2 - // Shape.QuadTo: - shape.addVertex(0, 0.584000f, 0.522000f, true); // curve -> line - shape.addVertex(0, 0.557000f, 0.522000f, true); - // GlyphShape<48>: offset 29 of 45/45 points - // pM[028] P[584/522, on false, end false] - // p0[029] P[557/522, on true, end false] - // p1[030] P[532/522, on true, end false] - // p2[031] P[532/41, on true, end false] - // 029: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.532000f, 0.522000f, true); - // GlyphShape<48>: offset 30 of 45/45 points - // pM[029] P[557/522, on true, end false] - // p0[030] P[532/522, on true, end false] - // p1[031] P[532/41, on true, end false] - // p2[032] P[566/41, on true, end false] - // 030: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.532000f, 0.041000f, true); - // GlyphShape<48>: offset 31 of 45/45 points - // pM[030] P[532/522, on true, end false] - // p0[031] P[532/41, on true, end false] - // p1[032] P[566/41, on true, end false] - // p2[033] P[593/41, on false, end false] - // 031: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.566000f, 0.041000f, true); - // GlyphShape<48>: offset 32 of 45/45 points - // pM[031] P[532/41, on true, end false] - // p0[032] P[566/41, on true, end false] - // p1[033] P[593/41, on false, end false] - // p2[034] P[593/21, on true, end false] - // 032: B2: quad-to p0-p1-p2 - // Shape.QuadTo: - shape.addVertex(0, 0.593000f, 0.041000f, true); // curve -> line - shape.addVertex(0, 0.593000f, 0.021000f, true); - // GlyphShape<48>: offset 34 of 45/45 points - // pM[033] P[593/41, on false, end false] - // p0[034] P[593/21, on true, end false] - // p1[035] P[593/0, on false, end false] - // p2[036] P[566/0, on true, end false] - // 034: B2: quad-to p0-p1-p2 - // Shape.QuadTo: - shape.addVertex(0, 0.593000f, 0.000000f, true); // curve -> line - shape.addVertex(0, 0.566000f, 0.000000f, true); - // GlyphShape<48>: offset 36 of 45/45 points - // pM[035] P[593/0, on false, end false] - // p0[036] P[566/0, on true, end false] - // p1[037] P[417/0, on true, end false] - // p2[038] P[390/0, on false, end false] - // 036: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.417000f, 0.000000f, true); - // GlyphShape<48>: offset 37 of 45/45 points - // pM[036] P[566/0, on true, end false] - // p0[037] P[417/0, on true, end false] - // p1[038] P[390/0, on false, end false] - // p2[039] P[390/21, on true, end false] - // 037: B2: quad-to p0-p1-p2 - // Shape.QuadTo: - shape.addVertex(0, 0.390000f, 0.000000f, true); // curve -> line - shape.addVertex(0, 0.390000f, 0.021000f, true); - // GlyphShape<48>: offset 39 of 45/45 points - // pM[038] P[390/0, on false, end false] - // p0[039] P[390/21, on true, end false] - // p1[040] P[390/41, on false, end false] - // p2[041] P[417/41, on true, end false] - // 039: B2: quad-to p0-p1-p2 - // Shape.QuadTo: - shape.addVertex(0, 0.390000f, 0.041000f, true); // curve -> line - shape.addVertex(0, 0.417000f, 0.041000f, true); - // GlyphShape<48>: offset 41 of 45/45 points - // pM[040] P[390/41, on false, end false] - // p0[041] P[417/41, on true, end false] - // p1[042] P[491/41, on true, end false] - // p2[043] P[491/522, on true, end false] - // 041: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.491000f, 0.041000f, true); - // GlyphShape<48>: offset 42 of 45/45 points - // pM[041] P[417/41, on true, end false] - // p0[042] P[491/41, on true, end false] - // p1[043] P[491/522, on true, end false] - // p2[044] P[483/522, on true, end true] - // 042: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.491000f, 0.522000f, true); - // GlyphShape<48>: offset 43 of 45/45 points - // pM[042] P[491/41, on true, end false] - // p0[043] P[491/522, on true, end false] - // p1[044] P[483/522, on true, end true] - // p2[000] P[326/169, on true, end false] - // 043: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.483000f, 0.522000f, true); - // GlyphShape<48>: offset 44 of 45/45 points - // pM[043] P[491/522, on true, end false] - // p0[044] P[483/522, on true, end true] - // p1[000] P[326/169, on true, end false] - // p2[001] P[280/169, on true, end false] - // 044: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.326000f, 0.169000f, true); - System.err.println("Glyph03FreeMonoRegular_M.shape01a.winding_area: "+shape.getWindingOfLastOutline()); - shape.closeLastOutline(false); - } else { - final boolean with_left_leg = true; // ERROR - final boolean with_right_leg = false; // OK - - // Start TTF Shape for Glyph 48 - // GlyphShape<48>: offset 0 of 45/45 points - // pM[044] P[483/522, on true, end true] - // p0[000] P[326/169, on true, end false] - // p1[001] P[280/169, on true, end false] - // p2[002] P[121/522, on true, end false] - // 000: B0a: move-to p0 - // Shape.MoveTo: - shape.closeLastOutline(false); - shape.addEmptyOutline(); - shape.addVertex(0, 0.326000f, 0.169000f, true); - // 000: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.280000f, 0.169000f, true); - // GlyphShape<48>: offset 1 of 45/45 points - // pM[000] P[326/169, on true, end false] - // p0[001] P[280/169, on true, end false] - // p1[002] P[121/522, on true, end false] - // p2[003] P[113/522, on true, end false] - // 001: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.121000f, 0.522000f, true); // ID 11 - - // GlyphShape<48>: offset 2 of 45/45 points - // pM[001] P[280/169, on true, end false] - // p0[002] P[121/522, on true, end false] - // p1[003] P[113/522, on true, end false] - // p2[004] P[113/41, on true, end false] - // 002: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.113000f, 0.522000f, true); - - if( with_left_leg ) { - // GlyphShape<48>: offset 3 of 45/45 points - // pM[002] P[121/522, on true, end false] - // p0[003] P[113/522, on true, end false] - // p1[004] P[113/41, on true, end false] - // p2[005] P[187/41, on true, end false] - // 003: B1: line-to p0-p1 - // Shape.LineTo: - // shape.addVertex(0, 0.113000f, 0.041000f, true); - - shape.addVertex(0, 0.113000f, 0.000000f, true); - shape.addVertex(0, 0.072000f, 0.000000f, true); - - // GlyphShape<48>: offset 14 of 45/45 points - // pM[013] P[11/41, on false, end false] - // p0[014] P[38/41, on true, end false] - // p1[015] P[72/41, on true, end false] - // p2[016] P[72/522, on true, end false] - // 014: B1: line-to p0-p1 - // Shape.LineTo: - // shape.addVertex(0, 0.072000f, 0.041000f, true); - - // GlyphShape<48>: offset 15 of 45/45 points - // pM[014] P[38/41, on true, end false] - // p0[015] P[72/41, on true, end false] - // p1[016] P[72/522, on true, end false] - // p2[017] P[47/522, on true, end false] - // 015: B1: line-to p0-p1 - // Shape.LineTo: - // shape.addVertex(0, 0.072000f, 0.522000f, true); - - shape.addVertex(0, 0.072000f, 0.563000f, true); // ID 7 - } else { - shape.addVertex(0, 0.113000f, 0.563000f, true); - } - - // GlyphShape<48>: offset 21 of 45/45 points - // pM[020] P[20/563, on false, end false] - // p0[021] P[47/563, on true, end false] - // p1[022] P[146/563, on true, end false] - // p2[023] P[303/215, on true, end false] - // 021: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.146000f, 0.563000f, true); - // GlyphShape<48>: offset 22 of 45/45 points - // pM[021] P[47/563, on true, end false] - // p0[022] P[146/563, on true, end false] - // p1[023] P[303/215, on true, end false] - // p2[024] P[457/563, on true, end false] - // 022: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.303000f, 0.215000f, true); - // GlyphShape<48>: offset 23 of 45/45 points - // pM[022] P[146/563, on true, end false] - // p0[023] P[303/215, on true, end false] - // p1[024] P[457/563, on true, end false] - // p2[025] P[557/563, on true, end false] - // 023: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.457000f, 0.563000f, true); // ID 4 - - if( with_right_leg ) { - shape.addVertex(0, 0.532000f, 0.563000f, true); - - // GlyphShape<48>: offset 29 of 45/45 points - // pM[028] P[584/522, on false, end false] - // p0[029] P[557/522, on true, end false] - // p1[030] P[532/522, on true, end false] - // p2[031] P[532/41, on true, end false] - // 029: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.532000f, 0.522000f, true); - // GlyphShape<48>: offset 30 of 45/45 points - // pM[029] P[557/522, on true, end false] - // p0[030] P[532/522, on true, end false] - // p1[031] P[532/41, on true, end false] - // p2[032] P[566/41, on true, end false] - // 030: B1: line-to p0-p1 - // Shape.LineTo: - // shape.addVertex(0, 0.532000f, 0.041000f, true); - - shape.addVertex(0, 0.532000f, 0.000000f, true); - shape.addVertex(0, 0.491000f, 0.000000f, true); - } else { - shape.addVertex(0, 0.491000f, 0.563000f, true); // ID 3 - } - - // GlyphShape<48>: offset 41 of 45/45 points - // pM[040] P[390/41, on false, end false] - // p0[041] P[417/41, on true, end false] - // p1[042] P[491/41, on true, end false] - // p2[043] P[491/522, on true, end false] - // 041: B1: line-to p0-p1 - // Shape.LineTo: - // shape.addVertex(0, 0.491000f, 0.041000f, true); - - // GlyphShape<48>: offset 42 of 45/45 points - // pM[041] P[417/41, on true, end false] - // p0[042] P[491/41, on true, end false] - // p1[043] P[491/522, on true, end false] - // p2[044] P[483/522, on true, end true] - // 042: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.491000f, 0.522000f, true); // ID 2 - // GlyphShape<48>: offset 43 of 45/45 points - // pM[042] P[491/41, on true, end false] - // p0[043] P[491/522, on true, end false] - // p1[044] P[483/522, on true, end true] - // p2[000] P[326/169, on true, end false] - // 043: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.483000f, 0.522000f, true); // ID 1 - // GlyphShape<48>: offset 44 of 45/45 points - // pM[043] P[491/522, on true, end false] - // p0[044] P[483/522, on true, end true] - // p1[000] P[326/169, on true, end false] - // p2[001] P[280/169, on true, end false] - // 044: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.326000f, 0.169000f, true); - System.err.println("Glyph03FreeMonoRegular_M.shape01a.winding_area: "+shape.getWindingOfLastOutline()); - shape.closeLastOutline(false); - } - - shape.setIsQuadraticNurbs(); - shape.setSharpness(shapesSharpness); - region.addOutlineShape(shape, null, rgbaColor); - - box.resize(shape.getBounds()); - } - - @Override - public String getSubString() { - return super.getSubString(); - } -} diff --git a/src/test/com/jogamp/opengl/test/junit/graph/ui/testshapes/Glyph04FreeSans_0.java b/src/test/com/jogamp/opengl/test/junit/graph/ui/testshapes/Glyph04FreeSans_0.java deleted file mode 100644 index 1f8d87888..000000000 --- a/src/test/com/jogamp/opengl/test/junit/graph/ui/testshapes/Glyph04FreeSans_0.java +++ /dev/null @@ -1,150 +0,0 @@ -/** - * Copyright 2023 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.junit.graph.ui.testshapes; - -import com.jogamp.opengl.GL2ES2; -import com.jogamp.graph.curve.OutlineShape; -import com.jogamp.graph.curve.opengl.RegionRenderer; -import com.jogamp.graph.geom.Vertex; -import com.jogamp.graph.geom.Vertex.Factory; -import com.jogamp.graph.ui.gl.Shape; - -/** - * GPU based resolution independent test object - * - FreeSans, '0' - * - TTF Shape for Glyph 19 - */ -public class Glyph04FreeSans_0 extends Shape { - - public Glyph04FreeSans_0(final Factory<? extends Vertex> factory, final int renderModes) { - super(factory, renderModes); - } - - @Override - protected void clearImpl(final GL2ES2 gl, final RegionRenderer renderer) { - } - - @Override - protected void destroyImpl(final GL2ES2 gl, final RegionRenderer renderer) { - } - - @Override - protected void addShapeToRegion(final GL2ES2 gl, final RegionRenderer renderer) { - final OutlineShape shape = new OutlineShape(renderer.getRenderState().getVertexFactory()); - - // Start TTF Shape for Glyph 19 - // 000: B0a: move-to p0 - // Shape.MoveTo: - shape.closeLastOutline(false); - shape.addEmptyOutline(); - shape.addVertex(0, 0.043000f, 0.343000f, true); - // 000: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.043000f, 0.432000f, false); - shape.addVertex(0, 0.058000f, 0.500000f, true); - // 002: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0, 0.073000f, 0.568000f, false); - shape.addVertex(0, 0.096000f, 0.606000f, true); - // 003: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0, 0.119000f, 0.645000f, false); - shape.addVertex(0, 0.151000f, 0.669000f, true); - // 004: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0, 0.183000f, 0.693000f, false); - shape.addVertex(0, 0.212000f, 0.701000f, true); - // 005: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.242000f, 0.709000f, false); - shape.addVertex(0, 0.275000f, 0.709000f, true); - // 006: B2: quad-to p0-p1-p2 - // Shape.QuadTo: - shape.addVertex(0, 0.507000f, 0.709000f, false); - shape.addVertex(0, 0.507000f, 0.337000f, true); - // 008: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.507000f, 0.162000f, false); - shape.addVertex(0, 0.448000f, 0.070000f, true); - // 010: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.388000f, -0.023000f, false); - shape.addVertex(0, 0.275000f, -0.023000f, true); - // 011: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.161000f, -0.023000f, false); - shape.addVertex(0, 0.102000f, 0.070000f, true); - // 013: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.043000f, 0.164000f, false); - shape.addVertex(0, 0.043000f, 0.343000f, true); - System.err.println("Glyph04FreeSans_0.shape01a.winding_area: "+shape.getWindingOfLastOutline()); - shape.closeLastOutline(false); - - // 021: B0b: move-to pM - // Shape.MoveTo: - shape.closeLastOutline(false); - shape.addEmptyOutline(); - shape.addVertex(0, 0.417000f, 0.345000f, true); - // 021: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.417000f, 0.631000f, false); - shape.addVertex(0, 0.275000f, 0.631000f, true); - // 015: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.133000f, 0.631000f, false); - shape.addVertex(0, 0.133000f, 0.342000f, true); - // 016: B2: quad-to p0-p1-p2 - // Shape.QuadTo: - shape.addVertex(0, 0.133000f, 0.050000f, false); - shape.addVertex(0, 0.273000f, 0.050000f, true); - // 018: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.347000f, 0.050000f, false); - shape.addVertex(0, 0.382000f, 0.122000f, true); - // 020: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.417000f, 0.194000f, false); - shape.addVertex(0, 0.417000f, 0.345000f, true); - System.err.println("Glyph04FreeSans_0.shape02a.winding_area: "+shape.getWindingOfLastOutline()); - shape.closeLastOutline(false); - - // End Shape for Glyph 19 - - shape.setIsQuadraticNurbs(); - shape.setSharpness(shapesSharpness); - region.addOutlineShape(shape, null, rgbaColor); - - box.resize(shape.getBounds()); - } - - @Override - public String getSubString() { - return super.getSubString(); - } -} diff --git a/src/test/com/jogamp/opengl/test/junit/graph/ui/testshapes/Glyph05FreeSerifBoldItalic_ae.java b/src/test/com/jogamp/opengl/test/junit/graph/ui/testshapes/Glyph05FreeSerifBoldItalic_ae.java deleted file mode 100644 index c02ca56bc..000000000 --- a/src/test/com/jogamp/opengl/test/junit/graph/ui/testshapes/Glyph05FreeSerifBoldItalic_ae.java +++ /dev/null @@ -1,287 +0,0 @@ -/** - * Copyright 2023 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.junit.graph.ui.testshapes; - -import com.jogamp.opengl.GL2ES2; -import com.jogamp.graph.curve.OutlineShape; -import com.jogamp.graph.curve.opengl.RegionRenderer; -import com.jogamp.graph.geom.Vertex; -import com.jogamp.graph.geom.Vertex.Factory; -import com.jogamp.graph.ui.gl.Shape; - -/** - * GPU based resolution independent test object - * - FreeSans, '0' - * - TTF Shape for Glyph 19 - */ -public class Glyph05FreeSerifBoldItalic_ae extends Shape { - - public Glyph05FreeSerifBoldItalic_ae(final Factory<? extends Vertex> factory, final int renderModes) { - super(factory, renderModes); - } - - @Override - protected void clearImpl(final GL2ES2 gl, final RegionRenderer renderer) { - } - - @Override - protected void destroyImpl(final GL2ES2 gl, final RegionRenderer renderer) { - } - - @Override - protected void addShapeToRegion(final GL2ES2 gl, final RegionRenderer renderer) { - final OutlineShape shape = new OutlineShape(renderer.getRenderState().getVertexFactory()); - - // Start TTF Shape for Glyph 168 - // 000: B0a: move-to p0 - // Shape.MoveTo: - shape.closeLastOutline(false); - shape.addEmptyOutline(); - shape.addVertex(0, 0.450000f, -0.013000f, true); - // 000: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.386000f, -0.013000f, false); - shape.addVertex(0, 0.353000f, 0.018000f, true); - // 002: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.319000f, 0.049000f, false); - shape.addVertex(0, 0.307000f, 0.118000f, true); - // 003: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.265000f, 0.049000f, false); - shape.addVertex(0, 0.225000f, 0.019000f, true); - // 005: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.184000f, -0.012000f, false); - shape.addVertex(0, 0.134000f, -0.012000f, true); - // 006: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.085000f, -0.012000f, false); - shape.addVertex(0, 0.053000f, 0.021000f, true); - // 008: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.020000f, 0.055000f, false); - shape.addVertex(0, 0.020000f, 0.106000f, true); - // 009: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.020000f, 0.185000f, false); - shape.addVertex(0, 0.062000f, 0.269000f, true); - // 011: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0, 0.105000f, 0.353000f, false); - shape.addVertex(0, 0.170000f, 0.407000f, true); - // 012: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.235000f, 0.462000f, false); - shape.addVertex(0, 0.296000f, 0.462000f, true); - // 013: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.328000f, 0.462000f, false); - shape.addVertex(0, 0.346000f, 0.448000f, true); - // 015: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.364000f, 0.433000f, false); - shape.addVertex(0, 0.377000f, 0.396000f, true); - // 016: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.395000f, 0.454000f, true); - // 017: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.498000f, 0.459000f, true); - // 018: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.478000f, 0.394000f, true); - // 019: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.510000f, 0.431000f, false); - shape.addVertex(0, 0.535000f, 0.445000f, true); - // 021: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.561000f, 0.459000f, false); - shape.addVertex(0, 0.598000f, 0.459000f, true); - // 022: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.645000f, 0.459000f, false); - shape.addVertex(0, 0.671000f, 0.436000f, true); - // 024: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.698000f, 0.413000f, false); - shape.addVertex(0, 0.698000f, 0.372000f, true); - // 025: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.698000f, 0.310000f, false); - shape.addVertex(0, 0.639000f, 0.263000f, true); - // 027: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.579000f, 0.215000f, false); - shape.addVertex(0, 0.470000f, 0.190000f, true); - // 028: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.431000f, 0.181000f, true); - // 029: B2: quad-to p0-p1-p2 - // Shape.QuadTo: - shape.addVertex(0, 0.426000f, 0.156000f, false); - shape.addVertex(0, 0.426000f, 0.134000f, true); - // 031: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.426000f, 0.096000f, false); - shape.addVertex(0, 0.444000f, 0.073000f, true); - // 033: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.462000f, 0.050000f, false); - shape.addVertex(0, 0.493000f, 0.050000f, true); - // 034: B2: quad-to p0-p1-p2 - // Shape.QuadTo: - shape.addVertex(0, 0.565000f, 0.050000f, false); - shape.addVertex(0, 0.616000f, 0.139000f, true); - // 036: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.644000f, 0.122000f, true); - // 037: B2: quad-to p0-p1-p2 - // Shape.QuadTo: - shape.addVertex(0, 0.578000f, -0.013000f, false); - shape.addVertex(0, 0.450000f, -0.013000f, true); - System.err.println("Glyph05FreeSerifBoldItalic_ae.shape01a.winding_area: "+shape.getWindingOfLastOutline()); - shape.closeLastOutline(false); - - // 039: B0a: move-to p0 - // Shape.MoveTo: - shape.closeLastOutline(false); - shape.addEmptyOutline(); - shape.addVertex(0, 0.194000f, 0.058000f, true); - // 039: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.238000f, 0.058000f, false); - shape.addVertex(0, 0.278000f, 0.122000f, true); - // 041: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0, 0.319000f, 0.187000f, false); - shape.addVertex(0, 0.338000f, 0.256000f, true); - // 042: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.358000f, 0.326000f, false); - shape.addVertex(0, 0.358000f, 0.363000f, true); - // 043: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.358000f, 0.387000f, false); - shape.addVertex(0, 0.345000f, 0.403000f, true); - // 045: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.331000f, 0.419000f, false); - shape.addVertex(0, 0.310000f, 0.419000f, true); - // 046: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.267000f, 0.419000f, false); - shape.addVertex(0, 0.227000f, 0.356000f, true); - // 048: B5: quad-to pMh-p0-p1h ***** MID - // Shape.QuadTo: - shape.addVertex(0, 0.187000f, 0.293000f, false); - shape.addVertex(0, 0.167000f, 0.225000f, true); - // 049: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.146000f, 0.156000f, false); - shape.addVertex(0, 0.146000f, 0.119000f, true); - // 050: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.146000f, 0.092000f, false); - shape.addVertex(0, 0.159000f, 0.075000f, true); - // 052: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.172000f, 0.058000f, false); - shape.addVertex(0, 0.194000f, 0.058000f, true); - System.err.println("Glyph05FreeSerifBoldItalic_ae.shape02a.winding_area: "+shape.getWindingOfLastOutline()); - shape.closeLastOutline(false); - - if( true ) { - // GlyphShape<168>: offset 0 of 8/61 points - // pM[060] P[443/231, on true, end true] - // p0[053] P[438/214, on true, end false] - // p1[054] P[498/223, on false, end false] - // p2[055] P[608/320, on false, end false] - // 053: B0a: move-to p0 - // Shape.MoveTo: - shape.closeLastOutline(false); - shape.addEmptyOutline(); - shape.addVertex(0, 0.438000f, 0.214000f, true); - // 053: B4: quad-to p0-p1-p2h **** MID - // Shape.QuadTo: - shape.addVertex(0, 0.498000f, 0.223000f, false); - shape.addVertex(0, 0.553000f, 0.271000f, true); - // GlyphShape<168>: offset 2 of 8/61 points - // pM[054] P[498/223, on false, end false] - // p0[055] P[608/320, on false, end false] - // p1[056] P[608/388, on true, end false] - // p2[057] P[608/429, on false, end false] - // 055: B6: quad-to pMh-p0-p1 - // Shape.QuadTo: - shape.addVertex(0, 0.608000f, 0.320000f, false); - shape.addVertex(0, 0.608000f, 0.388000f, true); - // GlyphShape<168>: offset 3 of 8/61 points - // pM[055] P[608/320, on false, end false] - // p0[056] P[608/388, on true, end false] - // p1[057] P[608/429, on false, end false] - // p2[058] P[575/429, on true, end false] - // 056: B2: quad-to p0-p1-p2 - // Shape.QuadTo: - shape.addVertex(0, 0.608000f, 0.429000f, false); - shape.addVertex(0, 0.575000f, 0.429000f, true); - // GlyphShape<168>: offset 5 of 8/61 points - // pM[057] P[608/429, on false, end false] - // p0[058] P[575/429, on true, end false] - // p1[059] P[502/429, on false, end false] - // p2[060] P[443/231, on true, end true] - // 058: B2: quad-to p0-p1-p2 - // Shape.QuadTo: - shape.addVertex(0, 0.502000f, 0.429000f, false); - shape.addVertex(0, 0.443000f, 0.231000f, true); - // GlyphShape<168>: offset 7 of 8/61 points - // pM[059] P[502/429, on false, end false] - // p0[060] P[443/231, on true, end true] - // p1[053] P[438/214, on true, end false] - // p2[054] P[498/223, on false, end false] - // 060: B1: line-to p0-p1 - // Shape.LineTo: - shape.addVertex(0, 0.438000f, 0.214000f, true); - System.err.println("Glyph05FreeSerifBoldItalic_ae.shape03a.winding_area: "+shape.getWindingOfLastOutline()); - shape.closeLastOutline(false); - } - - // End Shape for Glyph 168 - - shape.setIsQuadraticNurbs(); - shape.setSharpness(shapesSharpness); - region.addOutlineShape(shape, null, rgbaColor); - - box.resize(shape.getBounds()); - } - - @Override - public String getSubString() { - return super.getSubString(); - } -} diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/av/CrossFadePlayer.java b/src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/av/CrossFadePlayer.java deleted file mode 100644 index cc4096672..000000000 --- a/src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/av/CrossFadePlayer.java +++ /dev/null @@ -1,212 +0,0 @@ -/**
- * Copyright 2014 JogAmp Community. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification, are
- * permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice, this list of
- * conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice, this list
- * of conditions and the following disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * The views and conclusions contained in the software and documentation are those of the
- * authors and should not be interpreted as representing official policies, either expressed
- * or implied, of JogAmp Community.
- */
-
-package com.jogamp.opengl.test.junit.jogl.demos.es2.av;
-
-import com.jogamp.common.net.Uri;
-import com.jogamp.common.util.InterruptSource;
-import com.jogamp.opengl.util.av.AudioSink;
-import com.jogamp.opengl.util.av.GLMediaPlayer;
-import com.jogamp.opengl.util.av.GLMediaPlayer.GLMediaEventListener;
-import com.jogamp.opengl.util.av.GLMediaPlayer.StreamException;
-import com.jogamp.opengl.util.av.GLMediaPlayerFactory;
-import com.jogamp.opengl.util.texture.TextureSequence.TextureFrame;
-
-import java.io.File;
-
-/**
- * Parallel media player that demonstrate CrossFade of audio volume during playback.
- * This also demonstrate audio only playback of the GLMediaPlayer.
- */
-public class CrossFadePlayer
-{
- static GLMediaPlayer[] player;
- static volatile boolean stop = false;
-
- public static void main(final String[] args)
- {
-
- if(args.length==0) {
- System.out.println("No files! \n" +
- "pass as many media files you want\n" +
- "to the CrossFadePlayer arguments \n" +
- "and i will try CrossFade-play them all in parallel!");
- }
-
- final GLMediaEventListener mediaEventListener = new GLMediaEventListener()
- {
- @Override
- public void newFrameAvailable(final GLMediaPlayer ts, final TextureFrame newFrame, final long when) { }
-
- @Override
- public void attributesChanged(final GLMediaPlayer mp, final int event_mask, final long when)
- {
- System.out.println("\n***\nEvent mask changed: " + event_mask);
- System.out.println("Timestamp: "+ when);
- System.out.println("State of player: " + mp.getState().toString() +"\n");
-
- if ((event_mask & GLMediaEventListener.EVENT_CHANGE_INIT) !=0) {
- System.out.println("Duration: " + mp.getDuration() + "ms");
- System.out.println("Volume: " + mp.getAudioVolume());
- System.out.println("player.initGL()...");
- new InterruptSource.Thread() {
- public void run() {
- try {
- mp.initGL(null);
- if ( GLMediaPlayer.State.Paused == mp.getState() ) { // init OK
- mp.play();
- }
- } catch (final Exception e) {
- e.printStackTrace();
- }
- }
- }.start();
- } else if ((event_mask & GLMediaEventListener.EVENT_CHANGE_PAUSE) !=0) {
- System.out.println("player.paused()...");
- } else if ((event_mask & GLMediaEventListener.EVENT_CHANGE_PLAY) !=0) {
- System.out.println("playing...");
- System.out.println(mp.toString());
- System.out.println(mp.getAudioSink().toString());
- } else if( 0 != ( GLMediaEventListener.EVENT_CHANGE_EOS & event_mask ) ) {
- final StreamException se = mp.getStreamException();
- if( null != se ) {
- System.err.println("Player State: EOS + Exception");
- stop = true;
- } else {
- System.err.println("Player State: EOS");
- new InterruptSource.Thread() {
- public void run() {
- System.out.println("mp.setPlaySpeed(1f) returned: " + mp.setPlaySpeed(1f));
- mp.seek(0);
- mp.play();
- }
- }.start();
- }
- }
- if( 0 != ( ( GLMediaEventListener.EVENT_CHANGE_ERR | GLMediaEventListener.EVENT_CHANGE_EOS ) & event_mask ) ) {
- final StreamException se = mp.getStreamException();
- if( null != se ) {
- se.printStackTrace();
- }
- new InterruptSource.Thread() {
- public void run() {
- System.out.println("terminating...");
- stop = true;
- }
- }.start();
- }
-
- }
- };
-
- // Initialize media players
- player = new GLMediaPlayer[args.length];
- int i=0;
- for( final String arg: args ) {
- player[i] = GLMediaPlayerFactory.createDefault();
- if(player[i]!=null){
- System.out.println("Created CrossFade player: "+ i + " " + player[i].getClass().getName());
- player[i].addEventListener(mediaEventListener);
- try {
- final String filename = arg;
- if(filename.equals("")){
- System.out.println("No file selected: arg " + i +" = "+ filename);
- player[i]=null;
- } else {
- final File file = new File(filename);
- if(!file.exists()){
- System.out.println("File do not exist");
- } else {
- final Uri uri = Uri.valueOf(file);
- System.out.println("State of player "+ i +": " + player[i].getState().toString());
- System.out.println("...initializing stream "+ i +"...");
- player[i].initStream(uri, GLMediaPlayer.STREAM_ID_NONE, GLMediaPlayer.STREAM_ID_AUTO, GLMediaPlayer.TEXTURE_COUNT_DEFAULT);
-
- }
- }
- } catch (final Exception e1) {
- e1.printStackTrace();
- }
- } else {
- System.out.println("Failed to create player "+ i +"!");
- }
- i++;
- }
-
-
- // Main thread CrossFade until playback is done
- final long startTime = com.jogamp.common.os.Platform.currentTimeMillis();
- final double piPlayers = Math.PI*2.0f/args.length;
- StreamException se = null;
- while( null == se && stop == false ) {
- try {
- Thread.sleep(100);
- } catch (final InterruptedException e) { }
-
- // Find out the longest duration...
- float maxDuration = 1000.0f ;
- for(final GLMediaPlayer p: player) {
- if(p!=null){
- if( p.getDuration() > maxDuration) {
- maxDuration = p.getDuration();
- }
- }
- }
-
- // tune the volume on players to crossfade!
- final float progress = (com.jogamp.common.os.Platform.currentTimeMillis()-startTime)/maxDuration;
-
- i = 0;
- for(final GLMediaPlayer p: player){
- if(p!=null){
- final AudioSink sink = p.getAudioSink();
- if(sink != null){
- final float volume = (float) (0.5f+(0.5f*(Math.cos(40.0f*progress+(piPlayers*i)))));
- final float playbacktime = com.jogamp.common.os.Platform.currentTimeMillis()-startTime;
- // System.out.println("player: "+ i +" volume = " + volume +" progress = "+ progress +" time = "+ playbacktime + " / duration = " + maxDuration);
- sink.setVolume(volume);
- }
-
- se = p.getStreamException();
- if( null != se) {
- se.printStackTrace();
- throw new RuntimeException(se);
- }
- }
-
- i++;
- }
- }
-
- for(final GLMediaPlayer p: player) {
- if(p!=null)
- p.destroy(null);
- }
- System.out.println("...main exit...");
- }
-}
diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/av/MovieCube.java b/src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/av/MovieCube.java deleted file mode 100644 index c43d216dc..000000000 --- a/src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/av/MovieCube.java +++ /dev/null @@ -1,655 +0,0 @@ -/** - * Copyright 2012 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ - -package com.jogamp.opengl.test.junit.jogl.demos.es2.av; - -import java.io.File; -import java.io.IOException; -import java.net.URISyntaxException; - -import com.jogamp.opengl.GL; -import com.jogamp.opengl.GL2ES2; -import com.jogamp.opengl.GLAnimatorControl; -import com.jogamp.opengl.GLAutoDrawable; -import com.jogamp.opengl.GLCapabilities; -import com.jogamp.opengl.GLEventListener; -import com.jogamp.opengl.GLException; -import com.jogamp.opengl.GLProfile; -import com.jogamp.opengl.GLRunnable; -import com.jogamp.common.net.Uri; -import com.jogamp.common.util.InterruptSource; -import com.jogamp.graph.curve.Region; -import com.jogamp.graph.curve.opengl.GLRegion; -import com.jogamp.graph.curve.opengl.RegionRenderer; -import com.jogamp.graph.font.Font; -import com.jogamp.graph.font.FontScale; -import com.jogamp.junit.util.JunitTracer; -import com.jogamp.newt.Window; -import com.jogamp.newt.event.KeyAdapter; -import com.jogamp.newt.event.KeyEvent; -import com.jogamp.newt.event.KeyListener; -import com.jogamp.newt.event.WindowAdapter; -import com.jogamp.newt.event.WindowEvent; -import com.jogamp.newt.opengl.GLWindow; -import com.jogamp.opengl.JoglVersion; -import com.jogamp.opengl.test.junit.graph.TextRendererGLELBase; -import com.jogamp.opengl.test.junit.jogl.demos.es2.TextureSequenceCubeES2; -import com.jogamp.opengl.test.junit.util.MiscUtils; -import com.jogamp.opengl.util.Animator; -import com.jogamp.opengl.util.GLReadBufferUtil; -import com.jogamp.opengl.util.av.GLMediaPlayer; -import com.jogamp.opengl.util.av.GLMediaPlayer.GLMediaEventListener; -import com.jogamp.opengl.util.av.GLMediaPlayer.StreamException; -import com.jogamp.opengl.util.av.GLMediaPlayerFactory; -import com.jogamp.opengl.util.texture.TextureSequence.TextureFrame; - -/** - * Simple cube movie player w/ aspect ration true projection on a cube. - */ -public class MovieCube implements GLEventListener { - public static final float zoom_def = -2.77f; - private static boolean waitForKey = false; - private final float zoom0, rotx, roty; - private TextureSequenceCubeES2 cube=null; - private GLMediaPlayer mPlayer=null; - private int swapInterval = 1; - private boolean swapIntervalSet = true; - private long lastPerfPos = 0; - private volatile boolean resetGLState = false; - private volatile GLAutoDrawable autoDrawable = null; - - /** Blender's Big Buck Bunny: 24f 416p H.264, AAC 48000 Hz, 2 ch, mpeg stream. */ - public static final Uri defURI; - static { - Uri _defURI = null; - try { - // Blender's Big Buck Bunny Trailer: 24f 640p VP8, Vorbis 44100Hz mono, WebM/Matroska Stream. - // _defURI = new URI("http://video.webmfiles.org/big-buck-bunny_trailer.webm"); - _defURI = Uri.cast("http://archive.org/download/BigBuckBunny_328/BigBuckBunny_512kb.mp4"); - } catch (final URISyntaxException e) { - e.printStackTrace(); - } - defURI = _defURI; - } - - /** - * Default constructor which also issues {@link #initStream(URI, int, int, int)} w/ default values - * and polls until the {@link GLMediaPlayer} is {@link GLMediaPlayer.State#Initialized}. - * If {@link GLMediaEventListener#EVENT_CHANGE_EOS} is reached, the stream is started over again. - * <p> - * This default constructor is merely useful for some <i>drop-in</i> test, e.g. using an applet. - * </p> - */ - public MovieCube() throws IOException, URISyntaxException { - this(zoom_def, 0f, 0f, true); - - mPlayer.addEventListener(new GLMediaEventListener() { - @Override - public void newFrameAvailable(final GLMediaPlayer ts, final TextureFrame newFrame, final long when) { } - - @Override - public void attributesChanged(final GLMediaPlayer mp, final int event_mask, final long when) { - System.err.println("MovieCube AttributesChanges: events_mask 0x"+Integer.toHexString(event_mask)+", when "+when); - System.err.println("MovieCube State: "+mp); - if( 0 != ( GLMediaEventListener.EVENT_CHANGE_SIZE & event_mask ) ) { - resetGLState(); - } - if( 0 != ( GLMediaEventListener.EVENT_CHANGE_EOS & event_mask ) ) { - new InterruptSource.Thread() { - @Override - public void run() { - // loop for-ever .. - mPlayer.seek(0); - mPlayer.play(); - } }.start(); - } - } - }); - initStream(defURI, GLMediaPlayer.STREAM_ID_AUTO, GLMediaPlayer.STREAM_ID_AUTO, GLMediaPlayer.TEXTURE_COUNT_DEFAULT); - StreamException se = null; - while( null == se && GLMediaPlayer.State.Initialized != mPlayer.getState() ) { - try { - Thread.sleep(16); - } catch (final InterruptedException e) { } - se = mPlayer.getStreamException(); - } - if( null != se ) { - se.printStackTrace(); - throw new RuntimeException(se); - } - } - - /** - * Custom constructor, user needs to issue {@link #initStream(URI, int, int, int)} afterwards. - */ - public MovieCube(final float zoom0, final float rotx, final float roty, final boolean showText) throws IOException { - this.zoom0 = zoom0; - this.rotx = rotx; - this.roty = roty; - this.showText = showText; - screenshot = new GLReadBufferUtil(false, false); - mPlayer = GLMediaPlayerFactory.createDefault(); - } - - public void initStream(final Uri streamLoc, final int vid, final int aid, final int textureCount) { - mPlayer.initStream(streamLoc, vid, aid, textureCount); - System.out.println("pC.1b "+mPlayer); - } - - public void setSwapInterval(final int v) { this.swapInterval = v; } - - public GLMediaPlayer getGLMediaPlayer() { return mPlayer; } - - public void resetGLState() { - resetGLState = true; - } - - final int[] textSampleCount = { 4 }; - - private final class InfoTextRendererGLELBase extends TextRendererGLELBase { - private static final float z_diff = 0.001f; - private final Font font = getFont(0, 0, 0); - private final float fontSize1 = 12; - private final float fontSize2 = 10; - private final GLRegion regionFPS; - private float pixelSize1, pixelSize2, underlineSize; - - InfoTextRendererGLELBase(final GLProfile glp, final int rmode, final boolean lowPerfDevice) { - // FIXME: Graph TextRenderer does not AA well w/o MSAA and FBO - super(rmode, MovieCube.this.textSampleCount); - this.setRendererCallbacks(RegionRenderer.defaultBlendEnable, RegionRenderer.defaultBlendDisable); - if( lowPerfDevice ) { - regionFPS = null; - } else { - regionFPS = GLRegion.create(glp, renderModes, null); - System.err.println("RegionFPS "+Region.getRenderModeString(renderModes)+", sampleCount "+textSampleCount[0]+", class "+regionFPS.getClass().getName()); - } - staticRGBAColor[0] = 0.1f; - staticRGBAColor[1] = 0.1f; - staticRGBAColor[2] = 0.1f; - staticRGBAColor[3] = 1.0f; - } - - @Override - public void init(final GLAutoDrawable drawable) { - // non-exclusive mode! - this.setSharedPMVMatrix(cube.pmvMatrix); - super.init(drawable); - - autoDrawable = drawable; - - pixelSize1 = FontScale.toPixels(fontSize1, dpiH); - pixelSize2 = FontScale.toPixels(fontSize2, dpiH); - pixelScale = 1.0f / ( pixelSize1 * 20f ); - // underlineSize: 'underline' amount of pixel below 0/0 (Note: lineGap is negative) - final Font.Metrics metrics = font.getMetrics(); - final float lineGap = pixelSize1 * metrics.getLineGap(); - final float descent = pixelSize1 * metrics.getDescent(); - underlineSize = lineGap - descent; - System.err.println("XXX: dpiH "+dpiH+", fontSize "+fontSize1+", pixelSize "+pixelSize1+", pixelScale "+pixelScale+", fLG "+lineGap+", fDesc "+descent+", underlineSize "+underlineSize); - } - - @Override - public void dispose(final GLAutoDrawable drawable) { - autoDrawable = null; - screenshot.dispose(drawable.getGL()); - if( null != regionFPS ) { - regionFPS.destroy(drawable.getGL().getGL2ES2()); - } - super.dispose(drawable); - } - - @Override - public void display(final GLAutoDrawable drawable) { - final GLAnimatorControl anim = drawable.getAnimator(); - final float lfps = null != anim ? anim.getLastFPS() : 0f; - final float tfps = null != anim ? anim.getTotalFPS() : 0f; - final boolean hasVideo = GLMediaPlayer.STREAM_ID_NONE != mPlayer.getVID(); - final float pts = ( hasVideo ? mPlayer.getVideoPTS() : mPlayer.getAudioPTS() ) / 1000f; - - // Note: MODELVIEW is from [ -1 .. 1 ] - - // dy: position right above video rectangle (bottom text line) - final float aspect = (float)mPlayer.getWidth() / (float)mPlayer.getHeight(); - final float aspect_h = 1f/aspect; - final float dy = 1f-aspect_h; - - // yoff1: position right above video rectangle (bottom text line) - // less than underlineSize, so 'underline' pixels are above video. - final float yoff1 = dy-(pixelScale*underlineSize); - - // yoff2: position right below video rectangle (bottom text line) - final float yoff2 = 2f-dy; - - /** - System.err.println("XXX: a "+aspect+", aspect_h "+aspect_h+", dy "+dy+ - "; underlineSize "+underlineSize+" "+(pixelScale*underlineSize)+ - "; yoff "+yoff1+", yoff2 "+yoff2); */ - - final GL gl = drawable.getGL(); - final String ptsPrec = null != regionFPS ? "3.1" : "3.0"; - final String text1 = String.format("%0"+ptsPrec+"f/%0"+ptsPrec+"f s, %s (%01.2fx, vol %01.2f), a %01.2f, fps %02.1f -> %02.1f / %02.1f, v-sync %d", - pts, mPlayer.getDuration() / 1000f, - mPlayer.getState().toString().toLowerCase(), mPlayer.getPlaySpeed(), mPlayer.getAudioVolume(), - aspect, mPlayer.getFramerate(), lfps, tfps, swapInterval); - final String text2 = String.format("audio: id %d, kbps %d, codec %s", - mPlayer.getAID(), mPlayer.getAudioBitrate()/1000, mPlayer.getAudioCodec()); - final String text3 = String.format("video: id %d, kbps %d, codec %s", - mPlayer.getVID(), mPlayer.getVideoBitrate()/1000, mPlayer.getVideoCodec()); - final String text4 = mPlayer.getUri().path.decode(); - if( displayOSD && null != renderer ) { - gl.glClearColor(1.0f, 1.0f, 1.0f, 0.0f); - if( null != regionFPS ) { - renderString(drawable, font, pixelSize1, text1, 1 /* col */, -1 /* row */, -1+z_diff, yoff1, 1f+z_diff, regionFPS.clear(gl.getGL2ES2())); // no-cache - } else { - renderString(drawable, font, pixelSize1, text1, 1 /* col */, -1 /* row */, -1+z_diff, yoff1, 1f+z_diff, true); - } - renderString(drawable, font, pixelSize2, text2, 1 /* col */, 0 /* row */, -1+z_diff, yoff2, 1f+z_diff, true); - renderString(drawable, font, pixelSize2, text3, 1 /* col */, 1 /* row */, -1+z_diff, yoff2, 1f+z_diff, true); - renderString(drawable, font, pixelSize2, text4, 1 /* col */, 2 /* row */, -1+z_diff, yoff2, 1f+z_diff, true); - } - } }; - private InfoTextRendererGLELBase textRendererGLEL = null; - final boolean showText; - private boolean displayOSD = true; - - public void printScreen(final GLAutoDrawable drawable) throws GLException, IOException { - final String filename = String.format("MovieCube-snap%02d-%03dx%03d.png", screenshot_num++, drawable.getSurfaceWidth(), drawable.getSurfaceHeight()); - if(screenshot.readPixels(drawable.getGL(), false)) { - screenshot.write(new File(filename.toString())); - } - } - private final GLReadBufferUtil screenshot; - private int screenshot_num = 0; - - public void printScreenOnGLThread(final GLAutoDrawable drawable) { - drawable.invoke(false, new GLRunnable() { - @Override - public boolean run(final GLAutoDrawable drawable) { - try { - printScreen(drawable); - } catch (final GLException e) { - e.printStackTrace(); - } catch (final IOException e) { - e.printStackTrace(); - } - return true; - } - }); - } - - private final KeyListener keyAction = new KeyAdapter() { - @Override - public void keyReleased(final KeyEvent e) { - if( e.isAutoRepeat() ) { - return; - } - System.err.println("MC "+e); - final int pts0 = GLMediaPlayer.STREAM_ID_NONE != mPlayer.getVID() ? mPlayer.getVideoPTS() : mPlayer.getAudioPTS(); - int pts1 = 0; - switch(e.getKeySymbol()) { - case KeyEvent.VK_V: { - switch(swapInterval) { - case 0: swapInterval = -1; break; - case -1: swapInterval = 1; break; - case 1: swapInterval = 0; break; - default: swapInterval = 1; break; - } - swapIntervalSet = true; - break; - } - case KeyEvent.VK_O: displayOSD = !displayOSD; break; - case KeyEvent.VK_RIGHT: pts1 = pts0 + 1000; break; - case KeyEvent.VK_UP: pts1 = pts0 + 10000; break; - case KeyEvent.VK_PAGE_UP: pts1 = pts0 + 30000; break; - case KeyEvent.VK_LEFT: pts1 = pts0 - 1000; break; - case KeyEvent.VK_DOWN: pts1 = pts0 - 10000; break; - case KeyEvent.VK_PAGE_DOWN: pts1 = pts0 - 30000; break; - case KeyEvent.VK_ESCAPE: - case KeyEvent.VK_HOME: - case KeyEvent.VK_BACK_SPACE: { - mPlayer.seek(0); - break; - } - case KeyEvent.VK_SPACE: { - if(GLMediaPlayer.State.Paused == mPlayer.getState()) { - mPlayer.play(); - } else { - mPlayer.pause(false); - } - break; - } - case KeyEvent.VK_MULTIPLY: - mPlayer.setPlaySpeed(1.0f); - break; - case KeyEvent.VK_SUBTRACT: { - float playSpeed = mPlayer.getPlaySpeed(); - if( e.isShiftDown() ) { - playSpeed /= 2.0f; - } else { - playSpeed -= 0.1f; - } - mPlayer.setPlaySpeed(playSpeed); - } break; - case KeyEvent.VK_ADD: { - float playSpeed = mPlayer.getPlaySpeed(); - if( e.isShiftDown() ) { - playSpeed *= 2.0f; - } else { - playSpeed += 0.1f; - } - mPlayer.setPlaySpeed(playSpeed); - } break; - case KeyEvent.VK_M: { - float audioVolume = mPlayer.getAudioVolume(); - if( audioVolume > 0.5f ) { - audioVolume = 0f; - } else { - audioVolume = 1f; - } - mPlayer.setAudioVolume(audioVolume); - } break; - case KeyEvent.VK_S: - if(null != autoDrawable) { - printScreenOnGLThread(autoDrawable); - } - break; - } - - if( 0 != pts1 ) { - mPlayer.seek(pts1); - } - } - }; - - @Override - public void init(final GLAutoDrawable drawable) { - if(null == mPlayer) { - throw new InternalError("mPlayer null"); - } - if( GLMediaPlayer.State.Uninitialized == mPlayer.getState() ) { - throw new IllegalStateException("mPlayer in uninitialized state: "+mPlayer); - } - if( GLMediaPlayer.STREAM_ID_NONE == mPlayer.getVID() ) { - // throw new IllegalStateException("mPlayer has no VID/stream selected: "+mPlayer); - } - resetGLState = false; - - final GL2ES2 gl = drawable.getGL().getGL2ES2(); - System.err.println(JoglVersion.getGLInfo(gl, null)); - - cube = new TextureSequenceCubeES2(mPlayer, false, zoom0, rotx, roty); - - if(waitForKey) { - JunitTracer.waitForKey("Init>"); - } - - if( GLMediaPlayer.State.Initialized == mPlayer.getState() ) { - try { - mPlayer.initGL(gl); - } catch (final Exception e) { - e.printStackTrace(); - if(null != mPlayer) { - mPlayer.destroy(gl); - mPlayer = null; - } - throw new GLException(e); - } - } - cube.init(drawable); - mPlayer.play(); - System.out.println("play.0 "+mPlayer); - - boolean added; - final Object upstreamWidget = drawable.getUpstreamWidget(); - if (upstreamWidget instanceof Window) { - final Window window = (Window) upstreamWidget; - window.addKeyListener(keyAction); - added = true; - } else { added = false; } - System.err.println("MC.init: kl-added "+added+", "+drawable.getClass().getName()); - - if( showText ) { - final int rmode = drawable.getChosenGLCapabilities().getSampleBuffers() ? 0 : Region.VBAA_RENDERING_BIT; - final boolean lowPerfDevice = gl.isGLES(); - textRendererGLEL = new InfoTextRendererGLELBase(gl.getGLProfile(), rmode, lowPerfDevice); - drawable.addGLEventListener(textRendererGLEL); - } - } - - @Override - public void reshape(final GLAutoDrawable drawable, final int x, final int y, final int width, final int height) { - if(null == mPlayer) { return; } - cube.reshape(drawable, x, y, width, height); - } - - @Override - public void dispose(final GLAutoDrawable drawable) { - System.err.println(Thread.currentThread()+" MovieCube.dispose ... "); - if( null != textRendererGLEL ) { - drawable.disposeGLEventListener(textRendererGLEL, true); - textRendererGLEL = null; - } - disposeImpl(drawable, true); - } - - private void disposeImpl(final GLAutoDrawable drawable, final boolean disposePlayer) { - if(null == mPlayer) { return; } - final Object upstreamWidget = drawable.getUpstreamWidget(); - if (upstreamWidget instanceof Window) { - final Window window = (Window) upstreamWidget; - window.removeKeyListener(keyAction); - } - final GL2ES2 gl = drawable.getGL().getGL2ES2(); - if( disposePlayer ) { - mPlayer.destroy(gl); - mPlayer=null; - } - cube.dispose(drawable); - cube=null; - } - - - @Override - public void display(final GLAutoDrawable drawable) { - if( swapIntervalSet ) { - final GL2ES2 gl = drawable.getGL().getGL2ES2(); - final int _swapInterval = swapInterval; - gl.setSwapInterval(_swapInterval); // in case switching the drawable (impl. may bound attribute there) - drawable.getAnimator().resetFPSCounter(); - swapInterval = gl.getSwapInterval(); - System.err.println("Swap Interval: "+_swapInterval+" -> "+swapInterval); - swapIntervalSet = false; - } - if(null == mPlayer) { return; } - - if( resetGLState ) { - resetGLState = false; - System.err.println("XXX resetGLState"); - disposeImpl(drawable, false); - init(drawable); - reshape(drawable, 0, 0, drawable.getSurfaceWidth(), drawable.getSurfaceHeight()); - } - - final long currentPos = System.currentTimeMillis(); - if( currentPos - lastPerfPos > 2000 ) { - System.err.println( mPlayer.getPerfString() ); - lastPerfPos = currentPos; - } - cube.display(drawable); - } - - public static void main(final String[] args) throws IOException, InterruptedException, URISyntaxException { - int swapInterval = 1; - int width = 800; - int height = 600; - int textureCount = GLMediaPlayer.TEXTURE_COUNT_DEFAULT; // default - threaded - - boolean forceES2 = false; - boolean forceES3 = false; - boolean forceGL3 = false; - boolean forceGLDef = false; - int vid = GLMediaPlayer.STREAM_ID_AUTO; - int aid = GLMediaPlayer.STREAM_ID_AUTO; - final boolean origSize; - - String url_s=null, file_s=null; - { - boolean _origSize = false; - for(int i=0; i<args.length; i++) { - if(args[i].equals("-vid")) { - i++; - vid = MiscUtils.atoi(args[i], vid); - } else if(args[i].equals("-aid")) { - i++; - aid = MiscUtils.atoi(args[i], aid); - } else if(args[i].equals("-width")) { - i++; - width = MiscUtils.atoi(args[i], width); - } else if(args[i].equals("-height")) { - i++; - height = MiscUtils.atoi(args[i], height); - } else if(args[i].equals("-osize")) { - _origSize = true; - } else if(args[i].equals("-textureCount")) { - i++; - textureCount = MiscUtils.atoi(args[i], textureCount); - } else if(args[i].equals("-url")) { - i++; - url_s = args[i]; - } else if(args[i].equals("-file")) { - i++; - file_s = args[i]; - } else if(args[i].equals("-es2")) { - forceES2 = true; - } else if(args[i].equals("-es3")) { - forceES3 = true; - } else if(args[i].equals("-gl3")) { - forceGL3 = true; - } else if(args[i].equals("-gldef")) { - forceGLDef = true; - } else if(args[i].equals("-vsync")) { - i++; - swapInterval = MiscUtils.atoi(args[i], swapInterval); - } else if(args[i].equals("-wait")) { - waitForKey = true; - } - } - origSize = _origSize; - } - final Uri streamLoc; - if( null != url_s ) { - streamLoc = Uri.cast( url_s ); - } else if( null != file_s ) { - streamLoc = Uri.valueOf(new File(file_s)); - } else { - streamLoc = defURI; - } - System.err.println("url_s "+url_s); - System.err.println("file_s "+file_s); - System.err.println("stream "+streamLoc); - System.err.println("vid "+vid+", aid "+aid); - System.err.println("textureCount "+textureCount); - System.err.println("forceES2 "+forceES2); - System.err.println("forceES3 "+forceES3); - System.err.println("forceGL3 "+forceGL3); - System.err.println("forceGLDef "+forceGLDef); - System.err.println("swapInterval "+swapInterval); - - final MovieCube mc = new MovieCube(zoom_def, 0f, 0f, true); - mc.setSwapInterval(swapInterval); - - final GLProfile glp; - if(forceGLDef) { - glp = GLProfile.getDefault(); - } else if(forceGL3) { - glp = GLProfile.get(GLProfile.GL3); - } else if(forceES3) { - glp = GLProfile.get(GLProfile.GLES3); - } else if(forceES2) { - glp = GLProfile.get(GLProfile.GLES2); - } else { - glp = GLProfile.getGL2ES2(); - } - System.err.println("GLProfile: "+glp); - final GLCapabilities caps = new GLCapabilities(glp); - // caps.setAlphaBits(4); // NOTE_ALPHA_BLENDING: We go w/o alpha and blending! - final GLWindow window = GLWindow.create(caps); - final Animator anim = new Animator(window); - window.addWindowListener(new WindowAdapter() { - @Override - public void windowDestroyed(final WindowEvent e) { - anim.stop(); - } - }); - window.setSize(width, height); - window.setVisible(true); - System.err.println("Chosen: "+window.getChosenGLCapabilities()); - anim.start(); - - mc.mPlayer.addEventListener(new GLMediaEventListener() { - @Override - public void newFrameAvailable(final GLMediaPlayer ts, final TextureFrame newFrame, final long when) { - } - - @Override - public void attributesChanged(final GLMediaPlayer mp, final int event_mask, final long when) { - System.err.println("MovieCube AttributesChanges: events_mask 0x"+Integer.toHexString(event_mask)+", when "+when); - System.err.println("MovieCube State: "+mp); - if( 0 != ( GLMediaEventListener.EVENT_CHANGE_SIZE & event_mask ) ) { - if( origSize ) { - window.setSurfaceSize(mp.getWidth(), mp.getHeight()); - } - // window.disposeGLEventListener(ms, false /* remove */ ); - mc.resetGLState(); - } - if( 0 != ( GLMediaEventListener.EVENT_CHANGE_INIT & event_mask ) ) { - window.addGLEventListener(mc); - anim.setUpdateFPSFrames(60, null); - anim.resetFPSCounter(); - } - if( 0 != ( GLMediaEventListener.EVENT_CHANGE_PLAY & event_mask ) ) { - anim.resetFPSCounter(); - } - if( 0 != ( ( GLMediaEventListener.EVENT_CHANGE_ERR | GLMediaEventListener.EVENT_CHANGE_EOS ) & event_mask ) ) { - final StreamException se = mc.mPlayer.getStreamException(); - if( null != se ) { - se.printStackTrace(); - } - new InterruptSource.Thread() { - @Override - public void run() { - window.destroy(); - } }.start(); - } - } - }); - mc.initStream(streamLoc, vid, aid, textureCount); - } -} - diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/av/MovieSBSStereo.java b/src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/av/MovieSBSStereo.java deleted file mode 100644 index d9028822e..000000000 --- a/src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/av/MovieSBSStereo.java +++ /dev/null @@ -1,888 +0,0 @@ -/** - * Copyright 2012 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ - -package com.jogamp.opengl.test.junit.jogl.demos.es2.av; - -import java.net.URISyntaxException; -import java.nio.FloatBuffer; - -import com.jogamp.opengl.GL; -import com.jogamp.opengl.GL2ES2; -import com.jogamp.opengl.GLAnimatorControl; -import com.jogamp.opengl.GLAutoDrawable; -import com.jogamp.opengl.GLES2; -import com.jogamp.opengl.GLException; -import com.jogamp.opengl.GLUniformData; -import com.jogamp.opengl.fixedfunc.GLMatrixFunc; - -import com.jogamp.common.net.Uri; -import com.jogamp.common.os.Platform; -import com.jogamp.common.util.InterruptSource; -import com.jogamp.graph.curve.Region; -import com.jogamp.graph.curve.opengl.GLRegion; -import com.jogamp.graph.curve.opengl.RegionRenderer; -import com.jogamp.graph.font.Font; -import com.jogamp.graph.font.FontScale; -import com.jogamp.junit.util.JunitTracer; -import com.jogamp.newt.Window; -import com.jogamp.newt.event.KeyAdapter; -import com.jogamp.newt.event.KeyEvent; -import com.jogamp.newt.event.KeyListener; -import com.jogamp.newt.event.MouseAdapter; -import com.jogamp.newt.event.MouseEvent; -import com.jogamp.newt.event.MouseListener; -import com.jogamp.newt.opengl.GLWindow; -import com.jogamp.opengl.GLExtensions; -import com.jogamp.opengl.GLProfile; -import com.jogamp.opengl.JoglVersion; -import com.jogamp.opengl.math.FloatUtil; -import com.jogamp.opengl.math.Quaternion; -import com.jogamp.opengl.math.VectorUtil; -import com.jogamp.opengl.test.junit.graph.TextRendererGLELBase; -import com.jogamp.opengl.test.junit.util.UITestCase; -import com.jogamp.opengl.util.CustomGLEventListener; -import com.jogamp.opengl.util.GLArrayDataServer; -import com.jogamp.opengl.util.PMVMatrix; -import com.jogamp.opengl.util.av.GLMediaPlayer; -import com.jogamp.opengl.util.av.GLMediaPlayer.GLMediaEventListener; -import com.jogamp.opengl.util.av.GLMediaPlayerFactory; -import com.jogamp.opengl.util.glsl.ShaderCode; -import com.jogamp.opengl.util.glsl.ShaderProgram; -import com.jogamp.opengl.util.glsl.ShaderState; -import com.jogamp.opengl.util.stereo.EyeParameter; -import com.jogamp.opengl.util.stereo.ViewerPose; -import com.jogamp.opengl.util.stereo.StereoClientRenderer; -import com.jogamp.opengl.util.stereo.StereoGLEventListener; -import com.jogamp.opengl.util.texture.Texture; -import com.jogamp.opengl.util.texture.TextureCoords; -import com.jogamp.opengl.util.texture.TextureSequence; -import com.jogamp.opengl.util.texture.TextureSequence.TextureFrame; - -/** - * Side-By-Side (SBS) 3D Movie Player for {@link StereoClientRenderer} - * <p> - * The movie is assumed to be symmetrical SBS, - * the left-eye receives the left-part of the texture - * and the right-eye the right-part. - * </p> - */ -public class MovieSBSStereo implements StereoGLEventListener { - public static final String WINDOW_KEY = "window"; - public static final String STEREO_RENDERER_KEY = "stereo"; - public static final String PLAYER = "player"; - - private static boolean waitForKey = false; - private int surfWidth, surfHeight; - private int prevMouseX; // , prevMouseY; - private int rotate = 0; - private float zoom0; - private float zoom1; - private float zoom; - private long startTime; - private final float alpha = 1.0f; - - private GLMediaPlayer mPlayer; - private boolean mPlayerScaleOrig; - private float[] verts = null; - private GLArrayDataServer interleavedVBOLeft; - private GLArrayDataServer interleavedVBORight; - private volatile boolean resetGLState = false; - private StereoClientRenderer stereoClientRenderer; - - private ShaderState st; - private PMVMatrix pmvMatrix; - private GLUniformData pmvMatrixUniform; - private static final String shaderBasename = "texsequence_xxx"; - private static final String myTextureLookupName = "myTexture2D"; - - /** Blender's Big Buck Bunny: 24f 416p H.264, AAC 48000 Hz, 2 ch, mpeg stream. */ - public static final Uri defURI; - static { - Uri _defURI = null; - try { - // Blender's Big Buck Bunny Trailer: 24f 640p VP8, Vorbis 44100Hz mono, WebM/Matroska Stream. - // _defURI = new URI("http://video.webmfiles.org/big-buck-bunny_trailer.webm"); - _defURI = Uri.cast("http://archive.org/download/BigBuckBunny_328/BigBuckBunny_512kb.mp4"); - } catch (final URISyntaxException e) { - e.printStackTrace(); - } - defURI = _defURI; - } - - final int[] textSampleCount = { 4 }; - - private final class InfoTextRendererGLELBase extends TextRendererGLELBase { - private final Font font = getFont(0, 0, 0); - private final float fontSize = 1f; // 0.01f; - private final GLRegion regionFPS; - - InfoTextRendererGLELBase(final GLProfile glp, final int rmode, final boolean lowPerfDevice) { - // FIXME: Graph TextRenderer does not AA well w/o MSAA and FBO - super(rmode, textSampleCount); - this.setRendererCallbacks(RegionRenderer.defaultBlendEnable, RegionRenderer.defaultBlendDisable); - if( lowPerfDevice ) { - regionFPS = null; - } else { - regionFPS = GLRegion.create(glp, renderModes, null); - System.err.println("RegionFPS "+Region.getRenderModeString(renderModes)+", sampleCount "+textSampleCount[0]+", class "+regionFPS.getClass().getName()); - } - staticRGBAColor[0] = 0.9f; - staticRGBAColor[1] = 0.9f; - staticRGBAColor[2] = 0.9f; - staticRGBAColor[3] = 1.0f; - } - - @Override - public void init(final GLAutoDrawable drawable) { - super.init(drawable); - } - - @Override - public void dispose(final GLAutoDrawable drawable) { - if( null != regionFPS ) { - regionFPS.destroy(drawable.getGL().getGL2ES2()); - } - super.dispose(drawable); - } - - @Override - public void display(final GLAutoDrawable drawable) { - final GLAnimatorControl anim = drawable.getAnimator(); - final float lfps = null != anim ? anim.getLastFPS() : 0f; - final float tfps = null != anim ? anim.getTotalFPS() : 0f; - final boolean hasVideo = GLMediaPlayer.STREAM_ID_NONE != mPlayer.getVID(); - final float pts = ( hasVideo ? mPlayer.getVideoPTS() : mPlayer.getAudioPTS() ) / 1000f; - - // Note: MODELVIEW is from [ 0 .. height ] - - final int height = 0; // drawable.getSurfaceHeight(); - - final float aspect = (float)mPlayer.getWidth() / (float)mPlayer.getHeight(); - - final String ptsPrec = null != regionFPS ? "3.1" : "3.0"; - final String text1 = String.format("%0"+ptsPrec+"f/%0"+ptsPrec+"f s, %s (%01.2fx, vol %01.2f), a %01.2f, fps %02.1f -> %02.1f / %02.1f", - pts, mPlayer.getDuration() / 1000f, - mPlayer.getState().toString().toLowerCase(), mPlayer.getPlaySpeed(), mPlayer.getAudioVolume(), - aspect, mPlayer.getFramerate(), lfps, tfps); - final String text2 = String.format("audio: id %d, kbps %d, codec %s", - mPlayer.getAID(), mPlayer.getAudioBitrate()/1000, mPlayer.getAudioCodec()); - final String text3 = String.format("video: id %d, kbps %d, codec %s", - mPlayer.getVID(), mPlayer.getVideoBitrate()/1000, mPlayer.getVideoCodec()); - final String text4 = mPlayer.getUri().path.decode(); - if( displayOSD && null != renderer ) { - // We share ClearColor w/ MovieSimple's init ! - final float pixelSize = FontScale.toPixels(fontSize, dpiH); - if( null != regionFPS ) { - final GL2ES2 gl = drawable.getGL().getGL2ES2(); - renderString(drawable, font, pixelSize, text1, 1 /* col */, 1 /* row */, 0, 0, -1, regionFPS.clear(gl)); // no-cache - } else { - renderString(drawable, font, pixelSize, text1, 1 /* col */, 1 /* row */, 0, 0, -1, true); - } - renderString(drawable, font, pixelSize, text2, 1 /* col */, -4 /* row */, 0, height, -1, true); - renderString(drawable, font, pixelSize, text3, 1 /* col */, -3 /* row */, 0, height, 0, true); - renderString(drawable, font, pixelSize, text4, 1 /* col */, -2 /* row */, 0, height, 1, true); - } - } }; - private final boolean enableTextRendererGLEL = false; - private InfoTextRendererGLELBase textRendererGLEL = null; - private boolean displayOSD = false; - - private final MouseListener mouseAction = new MouseAdapter() { - @Override - public void mousePressed(final MouseEvent e) { - if(e.getY()<=surfHeight/2 && null!=mPlayer && 1 == e.getClickCount()) { - if(GLMediaPlayer.State.Playing == mPlayer.getState()) { - mPlayer.pause(false); - } else { - mPlayer.play(); - } - } - } - @Override - public void mouseReleased(final MouseEvent e) { - if(e.getY()<=surfHeight/2) { - rotate = -1; - zoom = zoom0; - System.err.println("zoom: "+zoom); - } - } - @Override - public void mouseMoved(final MouseEvent e) { - prevMouseX = e.getX(); - // prevMouseY = e.getY(); - } - @Override - public void mouseDragged(final MouseEvent e) { - final int x = e.getX(); - final int y = e.getY(); - - if(y>surfHeight/2) { - final float dp = (float)(x-prevMouseX)/(float)surfWidth; - final int pts0 = GLMediaPlayer.STREAM_ID_NONE != mPlayer.getVID() ? mPlayer.getVideoPTS() : mPlayer.getAudioPTS(); - mPlayer.seek(pts0 + (int) (mPlayer.getDuration() * dp)); - } else { - mPlayer.play(); - rotate = 1; - zoom = zoom1; - } - - prevMouseX = x; - // prevMouseY = y; - } - @Override - public void mouseWheelMoved(final MouseEvent e) { - if( !e.isShiftDown() ) { - zoom += e.getRotation()[1]/10f; // vertical: wheel - System.err.println("zoom: "+zoom); - } - } }; - - private final KeyListener keyAction = new KeyAdapter() { - @Override - public void keyReleased(final KeyEvent e) { - if( e.isAutoRepeat() ) { - return; - } - System.err.println("MC "+e); - final int pts0 = GLMediaPlayer.STREAM_ID_NONE != mPlayer.getVID() ? mPlayer.getVideoPTS() : mPlayer.getAudioPTS(); - int pts1 = 0; - switch(e.getKeySymbol()) { - case KeyEvent.VK_O: displayOSD = !displayOSD; break; - case KeyEvent.VK_RIGHT: pts1 = pts0 + 1000; break; - case KeyEvent.VK_UP: pts1 = pts0 + 10000; break; - case KeyEvent.VK_PAGE_UP: pts1 = pts0 + 30000; break; - case KeyEvent.VK_LEFT: pts1 = pts0 - 1000; break; - case KeyEvent.VK_DOWN: pts1 = pts0 - 10000; break; - case KeyEvent.VK_PAGE_DOWN: pts1 = pts0 - 30000; break; - case KeyEvent.VK_ESCAPE: - case KeyEvent.VK_HOME: - case KeyEvent.VK_BACK_SPACE: { - mPlayer.seek(0); - break; - } - case KeyEvent.VK_SPACE: { - if(GLMediaPlayer.State.Paused == mPlayer.getState()) { - mPlayer.play(); - } else { - mPlayer.pause(false); - } - break; - } - case KeyEvent.VK_MULTIPLY: - mPlayer.setPlaySpeed(1.0f); - break; - case KeyEvent.VK_SUBTRACT: { - float playSpeed = mPlayer.getPlaySpeed(); - if( e.isShiftDown() ) { - playSpeed /= 2.0f; - } else { - playSpeed -= 0.1f; - } - mPlayer.setPlaySpeed(playSpeed); - } break; - case KeyEvent.VK_ADD: { - float playSpeed = mPlayer.getPlaySpeed(); - if( e.isShiftDown() ) { - playSpeed *= 2.0f; - } else { - playSpeed += 0.1f; - } - mPlayer.setPlaySpeed(playSpeed); - } break; - case KeyEvent.VK_M: { - float audioVolume = mPlayer.getAudioVolume(); - if( audioVolume > 0.5f ) { - audioVolume = 0f; - } else { - audioVolume = 1f; - } - mPlayer.setAudioVolume(audioVolume); - } break; - } - - if( 0 != pts1 ) { - mPlayer.seek(pts1); - } - } }; - - /** user needs to issue {@link #initStream(URI, int, int, int)} afterwards. */ - public MovieSBSStereo() throws IllegalStateException { - mPlayerScaleOrig = false; - mPlayer = GLMediaPlayerFactory.createDefault(); - mPlayer.attachObject(PLAYER, this); - System.out.println("pC.1a "+mPlayer); - } - - public void initStream(final Uri streamLoc, final int vid, final int aid, final int textureCount) { - mPlayer.initStream(streamLoc, vid, aid, textureCount); - System.out.println("pC.1b "+mPlayer); - } - - public GLMediaPlayer getGLMediaPlayer() { return mPlayer; } - - public void setScaleOrig(final boolean v) { - mPlayerScaleOrig = v; - } - - public void setStereoClientRenderer(final StereoClientRenderer scr) { - stereoClientRenderer = scr; - } - public StereoClientRenderer getStereoClientRenderer() { return stereoClientRenderer; } - - public void resetGLState() { - resetGLState = true; - } - - private void initShader(final GL2ES2 gl) { - // Create & Compile the shader objects - final ShaderCode rsVp = ShaderCode.create(gl, GL2ES2.GL_VERTEX_SHADER, MovieSBSStereo.class, - "../shader", "../shader/bin", shaderBasename, true); - final ShaderCode rsFp = ShaderCode.create(gl, GL2ES2.GL_FRAGMENT_SHADER, MovieSBSStereo.class, - "../shader", "../shader/bin", shaderBasename, true); - - boolean preludeGLSLVersion = true; - if( GLES2.GL_TEXTURE_EXTERNAL_OES == mPlayer.getTextureTarget() ) { - if( !gl.isExtensionAvailable(GLExtensions.OES_EGL_image_external) ) { - throw new GLException(GLExtensions.OES_EGL_image_external+" requested but not available"); - } - if( Platform.OSType.ANDROID == Platform.getOSType() && gl.isGLES3() ) { - // Bug on Nexus 10, ES3 - Android 4.3, where - // GL_OES_EGL_image_external extension directive leads to a failure _with_ '#version 300 es' ! - // P0003: Extension 'GL_OES_EGL_image_external' not supported - preludeGLSLVersion = false; - } - } - rsVp.defaultShaderCustomization(gl, preludeGLSLVersion, true); - - int rsFpPos = preludeGLSLVersion ? rsFp.addGLSLVersion(gl) : 0; - rsFpPos = rsFp.insertShaderSource(0, rsFpPos, mPlayer.getRequiredExtensionsShaderStub()); - rsFp.addDefaultShaderPrecision(gl, rsFpPos); - - final String texLookupFuncName = mPlayer.getTextureLookupFunctionName(myTextureLookupName); - rsFp.replaceInShaderSource(myTextureLookupName, texLookupFuncName); - - // Inject TextureSequence shader details - final StringBuilder sFpIns = new StringBuilder(); - sFpIns.append("uniform ").append(mPlayer.getTextureSampler2DType()).append(" mgl_ActiveTexture;\n"); - sFpIns.append(mPlayer.getTextureLookupFragmentShaderImpl()); - rsFp.insertShaderSource(0, "TEXTURE-SEQUENCE-CODE-BEGIN", 0, sFpIns); - - // Create & Link the shader program - final ShaderProgram sp = new ShaderProgram(); - sp.add(rsVp); - sp.add(rsFp); - if(!sp.link(gl, System.err)) { - throw new GLException("Couldn't link program: "+sp); - } - - // Let's manage all our states using ShaderState. - st = new ShaderState(); - st.attachShaderProgram(gl, sp, false); - } - - @Override - public void init(final GLAutoDrawable drawable) { - if(null == mPlayer) { - throw new InternalError("mPlayer null"); - } - if( GLMediaPlayer.State.Uninitialized == mPlayer.getState() ) { - throw new IllegalStateException("mPlayer in uninitialized state: "+mPlayer); - } - final boolean hasVideo = GLMediaPlayer.STREAM_ID_NONE != mPlayer.getVID(); - resetGLState = false; - - zoom0 = -2.1f; - zoom1 = -5f; - zoom = 0f; - - final GL2ES2 gl = drawable.getGL().getGL2ES2(); - System.err.println(JoglVersion.getGLInfo(gl, null)); - System.err.println("Alpha: "+alpha+", opaque "+drawable.getChosenGLCapabilities().isBackgroundOpaque()+ - ", "+drawable.getClass().getName()+", "+drawable); - - if(waitForKey) { - JunitTracer.waitForKey("Init>"); - } - final Texture tex; - try { - System.out.println("p0 "+mPlayer); - if(GLMediaPlayer.State.Initialized == mPlayer.getState() ) { - mPlayer.initGL(gl); - } - System.out.println("p1 "+mPlayer); - final TextureFrame frame = mPlayer.getLastTexture(); - if( null != frame ) { - if( !hasVideo ) { - throw new InternalError("XXX: "+mPlayer); - } - tex = frame.getTexture(); - if( null == tex ) { - throw new InternalError("XXX: "+mPlayer); - } - } else { - tex = null; - if( hasVideo ) { - throw new InternalError("XXX: "+mPlayer); - } - } - mPlayer.setTextureMinMagFilter( new int[] { GL.GL_NEAREST, GL.GL_NEAREST } ); - } catch (final Exception glex) { - glex.printStackTrace(); - if(null != mPlayer) { - mPlayer.destroy(gl); - mPlayer = null; - } - throw new GLException(glex); - } - - if( hasVideo ) { - initShader(gl); - - // Push the 1st uniform down the path - st.useProgram(gl, true); - - final int[] viewPort = new int[] { 0, 0, drawable.getSurfaceWidth(), drawable.getSurfaceHeight()}; - pmvMatrix = new PMVMatrix(); - reshapePMV(viewPort[2], viewPort[3]); - pmvMatrixUniform = new GLUniformData("mgl_PMVMatrix", 4, 4, pmvMatrix.glGetPMvMatrixf()); - if(!st.uniform(gl, pmvMatrixUniform)) { - throw new GLException("Error setting PMVMatrix in shader: "+st); - } - if(!st.uniform(gl, new GLUniformData("mgl_ActiveTexture", mPlayer.getTextureUnit()))) { - throw new GLException("Error setting mgl_ActiveTexture in shader: "+st); - } - - final float dWidth = drawable.getSurfaceWidth(); - final float dHeight = drawable.getSurfaceHeight(); - final float mWidth = mPlayer.getWidth(); - final float mHeight = mPlayer.getHeight(); - final float mAspect = mWidth/mHeight; - System.err.println("XXX0: mov aspect: "+mAspect); - float xs, ys; - if(mPlayerScaleOrig && mWidth < dWidth && mHeight < dHeight) { - xs = mAspect * ( mWidth / dWidth ) ; ys = xs / mAspect ; - } else { - xs = mAspect; ys = 1f; // b>h - } - verts = new float[] { -1f*xs, -1f*ys, 0f, // LB - 1f*xs, 1f*ys, 0f // RT - }; - { - System.err.println("XXX0: pixel LB: "+verts[0]+", "+verts[1]+", "+verts[2]); - System.err.println("XXX0: pixel RT: "+verts[3]+", "+verts[4]+", "+verts[5]); - final float[] winLB = new float[3]; - final float[] winRT = new float[3]; - pmvMatrix.gluProject(verts[0], verts[1], verts[2], viewPort, 0, winLB, 0); - pmvMatrix.gluProject(verts[3], verts[4], verts[5], viewPort, 0, winRT, 0); - System.err.println("XXX0: win LB: "+winLB[0]+", "+winLB[1]+", "+winLB[2]); - System.err.println("XXX0: win RT: "+winRT[0]+", "+winRT[1]+", "+winRT[2]); - } - - interleavedVBOLeft = GLArrayDataServer.createGLSLInterleaved(3+4+2, GL.GL_FLOAT, false, 3*4, GL.GL_STATIC_DRAW); - { - interleavedVBOLeft.addGLSLSubArray("mgl_Vertex", 3, GL.GL_ARRAY_BUFFER); - interleavedVBOLeft.addGLSLSubArray("mgl_Color", 4, GL.GL_ARRAY_BUFFER); - interleavedVBOLeft.addGLSLSubArray("mgl_MultiTexCoord", 2, GL.GL_ARRAY_BUFFER); - } - interleavedVBORight = GLArrayDataServer.createGLSLInterleaved(3+4+2, GL.GL_FLOAT, false, 3*4, GL.GL_STATIC_DRAW); - { - interleavedVBORight.addGLSLSubArray("mgl_Vertex", 3, GL.GL_ARRAY_BUFFER); - interleavedVBORight.addGLSLSubArray("mgl_Color", 4, GL.GL_ARRAY_BUFFER); - interleavedVBORight.addGLSLSubArray("mgl_MultiTexCoord", 2, GL.GL_ARRAY_BUFFER); - } - updateInterleavedVBO(gl, interleavedVBOLeft, tex, 0); - updateInterleavedVBO(gl, interleavedVBORight, tex, 1); - - st.ownAttribute(interleavedVBOLeft, true); - st.ownAttribute(interleavedVBORight, true); - gl.glClearColor(0.3f, 0.3f, 0.3f, 0.3f); - - gl.glEnable(GL.GL_DEPTH_TEST); - - st.useProgram(gl, false); - - // Let's show the completed shader state .. - System.out.println("iVBOLeft : "+interleavedVBOLeft); - System.out.println("iVBORight: "+interleavedVBORight); - System.out.println(st); - } - - mPlayer.play(); - System.out.println("play.0 "+mPlayer); - startTime = System.currentTimeMillis(); - - final Object upstreamWidget = drawable.getUpstreamWidget(); - if (upstreamWidget instanceof Window) { - final Window window = (Window) upstreamWidget; - window.addMouseListener(mouseAction); - window.addKeyListener(keyAction); - surfWidth = window.getSurfaceWidth(); - surfHeight = window.getSurfaceHeight(); - } - final int rmode = drawable.getChosenGLCapabilities().getSampleBuffers() ? 0 : Region.VBAA_RENDERING_BIT; - final boolean lowPerfDevice = gl.isGLES(); - if( enableTextRendererGLEL ) { - textRendererGLEL = new InfoTextRendererGLELBase(gl.getGLProfile(), rmode, lowPerfDevice); - textRendererGLEL.init(drawable); - } else { - textRendererGLEL = null; - } - } - - protected void updateInterleavedVBO(final GL gl, final GLArrayDataServer iVBO, final Texture tex, final int eyeNum) { - final boolean wasEnabled = iVBO.enabled(); - iVBO.seal(gl, false); - iVBO.rewind(); - { - final FloatBuffer ib = (FloatBuffer)iVBO.getBuffer(); - final TextureCoords tc = tex.getImageTexCoords(); - final float texHalfWidth = tc.right()/2f; - System.err.println("XXX0: "+tc+", texHalfWidth "+texHalfWidth); - System.err.println("XXX0: tex aspect: "+tex.getAspectRatio()); - System.err.println("XXX0: tex y-flip: "+tex.getMustFlipVertically()); - - // left-bottom - ib.put(verts[0]); ib.put(verts[1]); ib.put(verts[2]); - ib.put( 1); ib.put( 1); ib.put( 1); ib.put(alpha); - if( 0 == eyeNum ) { - ib.put( tc.left() ); ib.put( tc.bottom() ); - } else { - ib.put( tc.left() + texHalfWidth ); ib.put( tc.bottom() ); - } - - // right-bottom - ib.put(verts[3]); ib.put(verts[1]); ib.put(verts[2]); - ib.put( 1); ib.put( 1); ib.put( 1); ib.put(alpha); - if( 0 == eyeNum ) { - ib.put( texHalfWidth ); ib.put( tc.bottom() ); - } else { - ib.put( tc.right() ); ib.put( tc.bottom() ); - } - - // left-top - ib.put(verts[0]); ib.put(verts[4]); ib.put(verts[2]); - ib.put( 1); ib.put( 1); ib.put( 1); ib.put(alpha); - if( 0 == eyeNum ) { - ib.put( tc.left() ); ib.put( tc.top() ); - } else { - ib.put( tc.left() + texHalfWidth ); ib.put( tc.top() ); - } - - // right-top - ib.put(verts[3]); ib.put(verts[4]); ib.put(verts[2]); - ib.put( 1); ib.put( 1); ib.put( 1); ib.put(alpha); - if( 0 == eyeNum ) { - ib.put( texHalfWidth ); ib.put( tc.top() ); - } else { - ib.put( tc.right() ); ib.put( tc.top() ); - } - } - iVBO.seal(gl, true); - if( !wasEnabled ) { - iVBO.enableBuffer(gl, false); - } - } - - @Override - public void reshape(final GLAutoDrawable drawable, final int x, final int y, final int width, final int height) { - final GL2ES2 gl = drawable.getGL().getGL2ES2(); - surfWidth = width; - surfHeight = height; - - if(null == mPlayer) { return; } - - if(null != st) { - reshapePMV(width, height); - st.useProgram(gl, true); - st.uniform(gl, pmvMatrixUniform); - st.useProgram(gl, false); - } - - System.out.println("pR "+mPlayer); - if( null != textRendererGLEL ) { - textRendererGLEL.reshape(drawable, 0, 0, width, height); - } - } - - private final float zNear = 0.1f; - private final float zFar = 10000f; - - private void reshapePMV(final int width, final int height) { - pmvMatrix.glMatrixMode(GLMatrixFunc.GL_PROJECTION); - pmvMatrix.glLoadIdentity(); - pmvMatrix.gluPerspective(45.0f, (float)width / (float)height, zNear, zFar); - - pmvMatrix.glMatrixMode(GLMatrixFunc.GL_MODELVIEW); - pmvMatrix.glLoadIdentity(); - pmvMatrix.glTranslatef(0, 0, zoom0); - } - - private final float[] mat4Tmp1 = new float[16]; - private final float[] mat4Tmp2 = new float[16]; - private final float[] vec3Tmp1 = new float[3]; - private final float[] vec3Tmp2 = new float[3]; - private final float[] vec3Tmp3 = new float[3]; - - GLArrayDataServer interleavedVBOCurrent = null; - - private static final float[] vec3ScalePos = new float[] { 4f, 4f, 4f }; - - @Override - public void reshapeForEye(final GLAutoDrawable drawable, final int x, final int y, final int width, final int height, - final EyeParameter eyeParam, final ViewerPose viewerPose) { - final GL2ES2 gl = drawable.getGL().getGL2ES2(); - interleavedVBOCurrent = 0 == eyeParam.number ? interleavedVBOLeft : interleavedVBORight; - - surfWidth = drawable.getSurfaceWidth(); - surfHeight = drawable.getSurfaceHeight(); - - if(null == mPlayer) { return; } - if(null == st) { return; } - - pmvMatrix.glMatrixMode(GLMatrixFunc.GL_PROJECTION); - final float[] mat4Projection = FloatUtil.makePerspective(mat4Tmp1, 0, true, eyeParam.fovhv, zNear, zFar); - pmvMatrix.glLoadMatrixf(mat4Projection, 0); - - pmvMatrix.glMatrixMode(GLMatrixFunc.GL_MODELVIEW); - final Quaternion rollPitchYaw = new Quaternion(); - final float[] shiftedEyePos = rollPitchYaw.rotateVector(vec3Tmp1, 0, viewerPose.position, 0); - VectorUtil.scaleVec3(shiftedEyePos, shiftedEyePos, vec3ScalePos); // amplify viewerPose position - VectorUtil.addVec3(shiftedEyePos, shiftedEyePos, eyeParam.positionOffset); - - rollPitchYaw.mult(viewerPose.orientation); - final float[] up = rollPitchYaw.rotateVector(vec3Tmp2, 0, VectorUtil.VEC3_UNIT_Y, 0); - final float[] forward = rollPitchYaw.rotateVector(vec3Tmp3, 0, VectorUtil.VEC3_UNIT_Z_NEG, 0); - final float[] center = VectorUtil.addVec3(forward, shiftedEyePos, forward); - - final float[] mLookAt = FloatUtil.makeLookAt(mat4Tmp1, 0, shiftedEyePos, 0, center, 0, up, 0, mat4Tmp2); - final float[] mViewAdjust = FloatUtil.makeTranslation(mat4Tmp2, true, eyeParam.distNoseToPupilX, eyeParam.distMiddleToPupilY, eyeParam.eyeReliefZ); - final float[] mat4Modelview = FloatUtil.multMatrix(mViewAdjust, mLookAt); - pmvMatrix.glLoadMatrixf(mat4Modelview, 0); - pmvMatrix.glTranslatef(0, 0, zoom0); - st.useProgram(gl, true); - st.uniform(gl, pmvMatrixUniform); - st.useProgram(gl, false); - if( null != textRendererGLEL ) { - textRendererGLEL.reshape(drawable, 0, 0, width, height); - } - } - - @Override - public void dispose(final GLAutoDrawable drawable) { - if( null != textRendererGLEL ) { - textRendererGLEL.dispose(drawable); - textRendererGLEL = null; - } - disposeImpl(drawable, true); - } - - private void disposeImpl(final GLAutoDrawable drawable, final boolean disposePlayer) { - if(null == mPlayer) { return; } - - final Object upstreamWidget = drawable.getUpstreamWidget(); - if (upstreamWidget instanceof Window) { - final Window window = (Window) upstreamWidget; - window.removeMouseListener(mouseAction); - window.removeKeyListener(keyAction); - } - - System.out.println("pD.1 "+mPlayer+", disposePlayer "+disposePlayer); - final GL2ES2 gl = drawable.getGL().getGL2ES2(); - if( disposePlayer ) { - mPlayer.destroy(gl); - System.out.println("pD.X "+mPlayer); - mPlayer=null; - } - pmvMatrixUniform = null; - if(null != pmvMatrix) { - pmvMatrix=null; - } - if(null != st) { - st.destroy(gl); - st=null; - } - } - - long lastPerfPos = 0; - - @Override - public void display(final GLAutoDrawable drawable) { - display(drawable, 0); - } - - @Override - public void display(final GLAutoDrawable drawable, final int flags) { - // TODO Auto-generated method stub - final boolean repeatedFrame = 0 != ( CustomGLEventListener.DISPLAY_REPEAT & flags ); - final boolean dontClear = 0 != ( CustomGLEventListener.DISPLAY_DONTCLEAR & flags ); - final GLArrayDataServer iVBO = null != interleavedVBOCurrent ? interleavedVBOCurrent : interleavedVBOLeft; - - final GL2ES2 gl = drawable.getGL().getGL2ES2(); - if(null == mPlayer) { return; } - - if( resetGLState ) { - resetGLState = false; - System.err.println("XXX resetGLState"); - disposeImpl(drawable, false); - init(drawable); - reshape(drawable, 0, 0, drawable.getSurfaceWidth(), drawable.getSurfaceHeight()); - } - - final long currentPos = System.currentTimeMillis(); - if( currentPos - lastPerfPos > 2000 ) { - System.err.println( mPlayer.getPerfString() ); - lastPerfPos = currentPos; - } - - if( !dontClear ) { - gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); - } - - if(null == st) { - return; - } - - st.useProgram(gl, true); - - pmvMatrix.glMatrixMode(GLMatrixFunc.GL_MODELVIEW); - pmvMatrix.glPushMatrix(); - pmvMatrix.glTranslatef(0, 0, zoom); - if( rotate > 0) { - final float ang = ((System.currentTimeMillis() - startTime) * 360.0f) / 8000.0f; - pmvMatrix.glRotatef(ang, 0, 0, 1); - } else { - rotate = 0; - } - st.uniform(gl, pmvMatrixUniform); - iVBO.enableBuffer(gl, true); - Texture tex = null; - if(null!=mPlayer) { - final TextureSequence.TextureFrame texFrame; - if( repeatedFrame ) { - texFrame=mPlayer.getLastTexture(); - } else { - texFrame=mPlayer.getNextTexture(gl); - } - if(null != texFrame) { - tex = texFrame.getTexture(); - gl.glActiveTexture(GL.GL_TEXTURE0+mPlayer.getTextureUnit()); - tex.enable(gl); - tex.bind(gl); - } - } - gl.glDrawArrays(GL.GL_TRIANGLE_STRIP, 0, 4); - if(null != tex) { - tex.disable(gl); - } - iVBO.enableBuffer(gl, false); - st.useProgram(gl, false); - pmvMatrix.glPopMatrix(); - - if( null != textRendererGLEL ) { - textRendererGLEL.display(drawable); - } - } - - static class StereoGLMediaEventListener implements GLMediaEventListener { - void destroyWindow(final Window window) { - new InterruptSource.Thread() { - @Override - public void run() { - window.destroy(); - } }.start(); - } - - @Override - public void newFrameAvailable(final GLMediaPlayer ts, final TextureFrame newFrame, final long when) { - } - - @Override - public void attributesChanged(final GLMediaPlayer mp, final int event_mask, final long when) { - System.err.println("MovieSimple AttributesChanges: events_mask 0x"+Integer.toHexString(event_mask)+", when "+when); - System.err.println("MovieSimple State: "+mp); - final GLWindow window = (GLWindow) mp.getAttachedObject(WINDOW_KEY); - final MovieSBSStereo ms = (MovieSBSStereo)mp.getAttachedObject(PLAYER); - final StereoClientRenderer stereoClientRenderer = (StereoClientRenderer) mp.getAttachedObject(STEREO_RENDERER_KEY); - - if( 0 != ( GLMediaEventListener.EVENT_CHANGE_SIZE & event_mask ) ) { - System.err.println("MovieSimple State: CHANGE_SIZE"); - // window.disposeGLEventListener(ms, false /* remove */ ); - ms.resetGLState(); - } - if( 0 != ( GLMediaEventListener.EVENT_CHANGE_INIT & event_mask ) ) { - System.err.println("MovieSimple State: INIT"); - // Use GLEventListener in all cases [A+V, V, A] - stereoClientRenderer.addGLEventListener(ms); - final GLAnimatorControl anim = window.getAnimator(); - anim.setUpdateFPSFrames(60, null); - anim.resetFPSCounter(); - ms.setStereoClientRenderer(stereoClientRenderer); - } - if( 0 != ( GLMediaEventListener.EVENT_CHANGE_PLAY & event_mask ) ) { - window.getAnimator().resetFPSCounter(); - } - - boolean destroy = false; - Throwable err = null; - - if( 0 != ( GLMediaEventListener.EVENT_CHANGE_EOS & event_mask ) ) { - err = ms.mPlayer.getStreamException(); - if( null != err ) { - System.err.println("MovieSimple State: EOS + Exception"); - destroy = true; - } else { - System.err.println("MovieSimple State: EOS"); - new InterruptSource.Thread() { - @Override - public void run() { - mp.setPlaySpeed(1f); - mp.seek(0); - mp.play(); - } - }.start(); - } - } - if( 0 != ( GLMediaEventListener.EVENT_CHANGE_ERR & event_mask ) ) { - err = ms.mPlayer.getStreamException(); - if( null != err ) { - System.err.println("MovieSimple State: ERR + Exception"); - } else { - System.err.println("MovieSimple State: ERR"); - } - destroy = true; - } - if( destroy ) { - if( null != err ) { - err.printStackTrace(); - } - destroyWindow(window); - } - } - }; - public final static StereoGLMediaEventListener stereoGLMediaEventListener = new StereoGLMediaEventListener(); -} diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/av/MovieSimple.java b/src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/av/MovieSimple.java deleted file mode 100644 index 2b2bcbcc4..000000000 --- a/src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/av/MovieSimple.java +++ /dev/null @@ -1,1123 +0,0 @@ -/** - * Copyright 2012 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ - -package com.jogamp.opengl.test.junit.jogl.demos.es2.av; - -import java.io.File; -import java.io.IOException; -import java.net.URISyntaxException; -import java.nio.FloatBuffer; - -import com.jogamp.opengl.GL; -import com.jogamp.opengl.GL2ES2; -import com.jogamp.opengl.GLAnimatorControl; -import com.jogamp.opengl.GLAutoDrawable; -import com.jogamp.opengl.GLCapabilities; -import com.jogamp.opengl.GLES2; -import com.jogamp.opengl.GLEventListener; -import com.jogamp.opengl.GLException; -import com.jogamp.opengl.GLProfile; -import com.jogamp.opengl.GLRunnable; -import com.jogamp.opengl.GLUniformData; -import com.jogamp.opengl.fixedfunc.GLMatrixFunc; - -import com.jogamp.common.net.Uri; -import com.jogamp.common.os.Platform; -import com.jogamp.common.util.InterruptSource; -import com.jogamp.graph.curve.Region; -import com.jogamp.graph.curve.opengl.GLRegion; -import com.jogamp.graph.curve.opengl.RegionRenderer; -import com.jogamp.graph.font.Font; -import com.jogamp.graph.font.FontScale; -import com.jogamp.junit.util.JunitTracer; -import com.jogamp.newt.Window; -import com.jogamp.newt.event.KeyAdapter; -import com.jogamp.newt.event.KeyEvent; -import com.jogamp.newt.event.KeyListener; -import com.jogamp.newt.event.MouseAdapter; -import com.jogamp.newt.event.MouseEvent; -import com.jogamp.newt.event.MouseListener; -import com.jogamp.newt.event.WindowAdapter; -import com.jogamp.newt.event.WindowEvent; -import com.jogamp.newt.opengl.GLWindow; -import com.jogamp.opengl.GLExtensions; -import com.jogamp.opengl.JoglVersion; -import com.jogamp.opengl.test.junit.graph.TextRendererGLELBase; -import com.jogamp.opengl.test.junit.util.MiscUtils; -import com.jogamp.opengl.util.Animator; -import com.jogamp.opengl.util.GLArrayDataServer; -import com.jogamp.opengl.util.GLReadBufferUtil; -import com.jogamp.opengl.util.PMVMatrix; -import com.jogamp.opengl.util.av.GLMediaPlayer; -import com.jogamp.opengl.util.av.GLMediaPlayer.GLMediaEventListener; -import com.jogamp.opengl.util.av.GLMediaPlayer.StreamException; -import com.jogamp.opengl.util.av.GLMediaPlayerFactory; -import com.jogamp.opengl.util.glsl.ShaderCode; -import com.jogamp.opengl.util.glsl.ShaderProgram; -import com.jogamp.opengl.util.glsl.ShaderState; -import com.jogamp.opengl.util.texture.Texture; -import com.jogamp.opengl.util.texture.TextureCoords; -import com.jogamp.opengl.util.texture.TextureSequence; -import com.jogamp.opengl.util.texture.TextureSequence.TextureFrame; - -/** - * Simple planar movie player w/ orthogonal 1:1 projection. - */ -public class MovieSimple implements GLEventListener { - public static final int EFFECT_NORMAL = 0; - public static final int EFFECT_GRADIENT_BOTTOM2TOP = 1<<1; - public static final int EFFECT_TRANSPARENT = 1<<3; - - public static final String WINDOW_KEY = "window"; - public static final String PLAYER = "player"; - - private static boolean waitForKey = false; - private int surfWidth, surfHeight; - private int prevMouseX; // , prevMouseY; - private int rotate = 0; - private boolean orthoProjection = true; - private float nearPlaneNormalized; - private float zoom0; - private float zoom1; - private float zoom; - private long startTime; - private int effects = EFFECT_NORMAL; - private float alpha = 1.0f; - private int swapInterval = 1; - private boolean swapIntervalSet = true; - - private GLMediaPlayer mPlayer; - private final boolean mPlayerShared; - private boolean mPlayerScaleOrig; - private float[] verts = null; - private GLArrayDataServer interleavedVBO; - private volatile boolean resetGLState = false; - - private volatile GLAutoDrawable autoDrawable = null; - - private ShaderState st; - private PMVMatrix pmvMatrix; - private GLUniformData pmvMatrixUniform; - private static final String shaderBasename = "texsequence_xxx"; - private static final String myTextureLookupName = "myTexture2D"; - - /** Blender's Big Buck Bunny: 24f 416p H.264, AAC 48000 Hz, 2 ch, mpeg stream. */ - public static final Uri defURI; - static { - Uri _defURI = null; - try { - // Blender's Big Buck Bunny Trailer: 24f 640p VP8, Vorbis 44100Hz mono, WebM/Matroska Stream. - // _defURI = new URI("http://video.webmfiles.org/big-buck-bunny_trailer.webm"); - _defURI = Uri.cast("http://archive.org/download/BigBuckBunny_328/BigBuckBunny_512kb.mp4"); - } catch (final URISyntaxException e) { - e.printStackTrace(); - } - defURI = _defURI; - } - - final int[] textSampleCount = { 4 }; - - private final class InfoTextRendererGLELBase extends TextRendererGLELBase { - private final Font font = getFont(0, 0, 0); - private final float fontSize = 10f; - private final GLRegion regionFPS; - - InfoTextRendererGLELBase(final GLProfile glp, final int rmode, final boolean lowPerfDevice) { - // FIXME: Graph TextRenderer does not AA well w/o MSAA and FBO - super(rmode, textSampleCount); - this.setRendererCallbacks(RegionRenderer.defaultBlendEnable, RegionRenderer.defaultBlendDisable); - if( lowPerfDevice ) { - regionFPS = null; - } else { - regionFPS = GLRegion.create(glp, renderModes, null); - System.err.println("RegionFPS "+Region.getRenderModeString(renderModes)+", sampleCount "+textSampleCount[0]+", class "+regionFPS.getClass().getName()); - } - staticRGBAColor[0] = 0.9f; - staticRGBAColor[1] = 0.9f; - staticRGBAColor[2] = 0.9f; - staticRGBAColor[3] = 1.0f; - } - - @Override - public void init(final GLAutoDrawable drawable) { - super.init(drawable); - } - - @Override - public void dispose(final GLAutoDrawable drawable) { - if( null != regionFPS ) { - regionFPS.destroy(drawable.getGL().getGL2ES2()); - } - super.dispose(drawable); - } - - @Override - public void display(final GLAutoDrawable drawable) { - final GLAnimatorControl anim = drawable.getAnimator(); - final float lfps = null != anim ? anim.getLastFPS() : 0f; - final float tfps = null != anim ? anim.getTotalFPS() : 0f; - final boolean hasVideo = GLMediaPlayer.STREAM_ID_NONE != mPlayer.getVID(); - final float pts = ( hasVideo ? mPlayer.getVideoPTS() : mPlayer.getAudioPTS() ) / 1000f; - - // Note: MODELVIEW is from [ 0 .. height ] - - final int height = drawable.getSurfaceHeight(); - - final float aspect = (float)mPlayer.getWidth() / (float)mPlayer.getHeight(); - - final String ptsPrec = null != regionFPS ? "3.1" : "3.0"; - final String text1 = String.format("%0"+ptsPrec+"f/%0"+ptsPrec+"f s, %s (%01.2fx, vol %01.2f), a %01.2f, fps %02.1f -> %02.1f / %02.1f, v-sync %b", - pts, mPlayer.getDuration() / 1000f, - mPlayer.getState().toString().toLowerCase(), mPlayer.getPlaySpeed(), mPlayer.getAudioVolume(), - aspect, mPlayer.getFramerate(), lfps, tfps, swapIntervalSet); - final String text2 = String.format("audio: id %d, kbps %d, codec %s", - mPlayer.getAID(), mPlayer.getAudioBitrate()/1000, mPlayer.getAudioCodec()); - final String text3 = String.format("video: id %d, kbps %d, codec %s", - mPlayer.getVID(), mPlayer.getVideoBitrate()/1000, mPlayer.getVideoCodec()); - final String text4 = mPlayer.getUri().path.decode(); - if( displayOSD && null != renderer ) { - // We share ClearColor w/ MovieSimple's init ! - final float pixelSize = FontScale.toPixels(fontSize, dpiH); - if( null != regionFPS ) { - final GL2ES2 gl = drawable.getGL().getGL2ES2(); - renderString(drawable, font, pixelSize, text1, 1 /* col */, 1 /* row */, 0, 0, -1, regionFPS.clear(gl)); // no-cache - } else { - renderString(drawable, font, pixelSize, text1, 1 /* col */, 1 /* row */, 0, 0, -1, true); - } - renderString(drawable, font, pixelSize, text2, 1 /* col */, -4 /* row */, 0, height, -1, true); - renderString(drawable, font, pixelSize, text3, 1 /* col */, -3 /* row */, 0, height, -1, true); - renderString(drawable, font, pixelSize, text4, 1 /* col */, -2 /* row */, 0, height, -1, true); - } - } }; - private InfoTextRendererGLELBase textRendererGLEL = null; - private boolean displayOSD = true; - - public void printScreen(final GLAutoDrawable drawable) throws GLException, IOException { - final String filename = String.format("MovieSimple-snap%02d-%03dx%03d.png", screenshot_num++, drawable.getSurfaceWidth(), drawable.getSurfaceHeight()); - if(screenshot.readPixels(drawable.getGL(), false)) { - screenshot.write(new File(filename.toString())); - } - } - private final GLReadBufferUtil screenshot; - private int screenshot_num = 0; - - public void printScreenOnGLThread(final GLAutoDrawable drawable) { - drawable.invoke(false, new GLRunnable() { - @Override - public boolean run(final GLAutoDrawable drawable) { - try { - printScreen(drawable); - } catch (final GLException e) { - e.printStackTrace(); - } catch (final IOException e) { - e.printStackTrace(); - } - return true; - } - }); - } - - private final MouseListener mouseAction = new MouseAdapter() { - @Override - public void mousePressed(final MouseEvent e) { - if(e.getY()<=surfHeight/2 && null!=mPlayer && 1 == e.getClickCount()) { - if(GLMediaPlayer.State.Playing == mPlayer.getState()) { - mPlayer.pause(false); - } else { - mPlayer.play(); - } - } - } - @Override - public void mouseReleased(final MouseEvent e) { - if(e.getY()<=surfHeight/2) { - rotate = -1; - zoom = zoom0; - System.err.println("zoom: "+zoom); - } - } - @Override - public void mouseMoved(final MouseEvent e) { - prevMouseX = e.getX(); - // prevMouseY = e.getY(); - } - @Override - public void mouseDragged(final MouseEvent e) { - final int x = e.getX(); - final int y = e.getY(); - - if(y>surfHeight/2) { - final float dp = (float)(x-prevMouseX)/(float)surfWidth; - final int pts0 = GLMediaPlayer.STREAM_ID_NONE != mPlayer.getVID() ? mPlayer.getVideoPTS() : mPlayer.getAudioPTS(); - mPlayer.seek(pts0 + (int) (mPlayer.getDuration() * dp)); - } else { - mPlayer.play(); - rotate = 1; - zoom = zoom1; - } - - prevMouseX = x; - // prevMouseY = y; - } - @Override - public void mouseWheelMoved(final MouseEvent e) { - if( !e.isShiftDown() ) { - zoom += e.getRotation()[1]/10f; // vertical: wheel - System.err.println("zoom: "+zoom); - } - } }; - - private final KeyListener keyAction = new KeyAdapter() { - @Override - public void keyReleased(final KeyEvent e) { - if( e.isAutoRepeat() ) { - return; - } - System.err.println("MC "+e); - final int pts0 = GLMediaPlayer.STREAM_ID_NONE != mPlayer.getVID() ? mPlayer.getVideoPTS() : mPlayer.getAudioPTS(); - int pts1 = 0; - switch(e.getKeySymbol()) { - case KeyEvent.VK_V: { - switch(swapInterval) { - case 0: swapInterval = -1; break; - case -1: swapInterval = 1; break; - case 1: swapInterval = 0; break; - default: swapInterval = 1; break; - } - swapIntervalSet = true; - break; - } - case KeyEvent.VK_O: displayOSD = !displayOSD; break; - case KeyEvent.VK_RIGHT: pts1 = pts0 + 1000; break; - case KeyEvent.VK_UP: pts1 = pts0 + 10000; break; - case KeyEvent.VK_PAGE_UP: pts1 = pts0 + 30000; break; - case KeyEvent.VK_LEFT: pts1 = pts0 - 1000; break; - case KeyEvent.VK_DOWN: pts1 = pts0 - 10000; break; - case KeyEvent.VK_PAGE_DOWN: pts1 = pts0 - 30000; break; - case KeyEvent.VK_ESCAPE: - case KeyEvent.VK_HOME: - case KeyEvent.VK_BACK_SPACE: { - mPlayer.seek(0); - break; - } - case KeyEvent.VK_SPACE: { - if(GLMediaPlayer.State.Paused == mPlayer.getState()) { - mPlayer.play(); - } else { - mPlayer.pause(false); - } - break; - } - case KeyEvent.VK_MULTIPLY: - mPlayer.setPlaySpeed(1.0f); - break; - case KeyEvent.VK_SUBTRACT: { - float playSpeed = mPlayer.getPlaySpeed(); - if( e.isShiftDown() ) { - playSpeed /= 2.0f; - } else { - playSpeed -= 0.1f; - } - mPlayer.setPlaySpeed(playSpeed); - } break; - case KeyEvent.VK_ADD: { - float playSpeed = mPlayer.getPlaySpeed(); - if( e.isShiftDown() ) { - playSpeed *= 2.0f; - } else { - playSpeed += 0.1f; - } - mPlayer.setPlaySpeed(playSpeed); - } break; - case KeyEvent.VK_M: { - float audioVolume = mPlayer.getAudioVolume(); - if( audioVolume > 0.5f ) { - audioVolume = 0f; - } else { - audioVolume = 1f; - } - mPlayer.setAudioVolume(audioVolume); - } break; - case KeyEvent.VK_S: - if(null != autoDrawable) { - printScreenOnGLThread(autoDrawable); - } - break; - } - - if( 0 != pts1 ) { - mPlayer.seek(pts1); - } - } }; - - /** - * Default constructor which also issues {@link #initStream(URI, int, int, int)} w/ default values - * and polls until the {@link GLMediaPlayer} is {@link GLMediaPlayer.State#Initialized}. - * If {@link GLMediaEventListener#EVENT_CHANGE_EOS} is reached, the stream is started over again. - * <p> - * This default constructor is merely useful for some <i>drop-in</i> test, e.g. using an applet. - * </p> - */ - public MovieSimple() { - this(null); - - mPlayer.addEventListener(new GLMediaEventListener() { - @Override - public void newFrameAvailable(final GLMediaPlayer ts, final TextureFrame newFrame, final long when) { } - - @Override - public void attributesChanged(final GLMediaPlayer mp, final int event_mask, final long when) { - System.err.println("MovieCube AttributesChanges: events_mask 0x"+Integer.toHexString(event_mask)+", when "+when); - System.err.println("MovieCube State: "+mp); - if( 0 != ( GLMediaEventListener.EVENT_CHANGE_SIZE & event_mask ) ) { - resetGLState(); - } - if( 0 != ( GLMediaEventListener.EVENT_CHANGE_EOS & event_mask ) ) { - new InterruptSource.Thread() { - @Override - public void run() { - // loop for-ever .. - mPlayer.seek(0); - mPlayer.play(); - } }.start(); - } - } - }); - initStream(defURI, GLMediaPlayer.STREAM_ID_AUTO, GLMediaPlayer.STREAM_ID_AUTO, 3 /* textureCount */); - StreamException se = null; - while( null == se && GLMediaPlayer.State.Initialized != mPlayer.getState() ) { - try { - Thread.sleep(16); - } catch (final InterruptedException e) { } - se = mPlayer.getStreamException(); - } - if( null != se ) { - se.printStackTrace(); - throw new RuntimeException(se); - } - } - - /** Custom constructor, user needs to issue {@link #initStream(URI, int, int, int)} afterwards. */ - public MovieSimple(final GLMediaPlayer sharedMediaPlayer) throws IllegalStateException { - screenshot = new GLReadBufferUtil(false, false); - mPlayer = sharedMediaPlayer; - mPlayerScaleOrig = false; - mPlayerShared = null != mPlayer; - if( !mPlayerShared ) { - mPlayer = GLMediaPlayerFactory.createDefault(); - mPlayer.attachObject(PLAYER, this); - } - System.out.println("pC.1a shared "+mPlayerShared+", "+mPlayer); - } - - public void initStream(final Uri streamLoc, final int vid, final int aid, final int textureCount) { - mPlayer.initStream(streamLoc, vid, aid, textureCount); - System.out.println("pC.1b "+mPlayer); - } - - public void setSwapInterval(final int v) { this.swapInterval = v; } - - public GLMediaPlayer getGLMediaPlayer() { return mPlayer; } - - public void setScaleOrig(final boolean v) { - mPlayerScaleOrig = v; - } - - /** defaults to true */ - public void setOrthoProjection(final boolean v) { orthoProjection=v; } - public boolean getOrthoProjection() { return orthoProjection; } - - public boolean hasEffect(final int e) { return 0 != ( effects & e ) ; } - public void setEffects(final int e) { effects = e; }; - public void setTransparency(final float alpha) { - this.effects |= EFFECT_TRANSPARENT; - this.alpha = alpha; - } - - public void resetGLState() { - resetGLState = true; - } - - private void initShader(final GL2ES2 gl) { - // Create & Compile the shader objects - final ShaderCode rsVp = ShaderCode.create(gl, GL2ES2.GL_VERTEX_SHADER, MovieSimple.class, - "../shader", "../shader/bin", shaderBasename, true); - final ShaderCode rsFp = ShaderCode.create(gl, GL2ES2.GL_FRAGMENT_SHADER, MovieSimple.class, - "../shader", "../shader/bin", shaderBasename, true); - - boolean preludeGLSLVersion = true; - if( GLES2.GL_TEXTURE_EXTERNAL_OES == mPlayer.getTextureTarget() ) { - if( !gl.isExtensionAvailable(GLExtensions.OES_EGL_image_external) ) { - throw new GLException(GLExtensions.OES_EGL_image_external+" requested but not available"); - } - if( Platform.OSType.ANDROID == Platform.getOSType() && gl.isGLES3() ) { - // Bug on Nexus 10, ES3 - Android 4.3, where - // GL_OES_EGL_image_external extension directive leads to a failure _with_ '#version 300 es' ! - // P0003: Extension 'GL_OES_EGL_image_external' not supported - preludeGLSLVersion = false; - } - } - rsVp.defaultShaderCustomization(gl, preludeGLSLVersion, true); - - int rsFpPos = preludeGLSLVersion ? rsFp.addGLSLVersion(gl) : 0; - rsFpPos = rsFp.insertShaderSource(0, rsFpPos, mPlayer.getRequiredExtensionsShaderStub()); - rsFp.addDefaultShaderPrecision(gl, rsFpPos); - - final String texLookupFuncName = mPlayer.getTextureLookupFunctionName(myTextureLookupName); - rsFp.replaceInShaderSource(myTextureLookupName, texLookupFuncName); - - // Inject TextureSequence shader details - final StringBuilder sFpIns = new StringBuilder(); - sFpIns.append("uniform ").append(mPlayer.getTextureSampler2DType()).append(" mgl_ActiveTexture;\n"); - sFpIns.append(mPlayer.getTextureLookupFragmentShaderImpl()); - rsFp.insertShaderSource(0, "TEXTURE-SEQUENCE-CODE-BEGIN", 0, sFpIns); - - // Create & Link the shader program - final ShaderProgram sp = new ShaderProgram(); - sp.add(rsVp); - sp.add(rsFp); - if(!sp.link(gl, System.err)) { - throw new GLException("Couldn't link program: "+sp); - } - - // Let's manage all our states using ShaderState. - st = new ShaderState(); - st.attachShaderProgram(gl, sp, false); - } - - @Override - public void init(final GLAutoDrawable drawable) { - if(null == mPlayer) { - throw new InternalError("mPlayer null"); - } - if( GLMediaPlayer.State.Uninitialized == mPlayer.getState() ) { - throw new IllegalStateException("mPlayer in uninitialized state: "+mPlayer); - } - final boolean hasVideo = GLMediaPlayer.STREAM_ID_NONE != mPlayer.getVID(); - resetGLState = false; - - zoom0 = orthoProjection ? 0f : -2.5f; - zoom1 = orthoProjection ? 0f : -5f; - zoom = zoom0; - - autoDrawable = drawable; - - final GL2ES2 gl = drawable.getGL().getGL2ES2(); - System.err.println(JoglVersion.getGLInfo(gl, null)); - System.err.println("Alpha: "+alpha+", opaque "+drawable.getChosenGLCapabilities().isBackgroundOpaque()+ - ", "+drawable.getClass().getName()+", "+drawable); - - if(waitForKey) { - JunitTracer.waitForKey("Init>"); - } - final Texture tex; - try { - System.out.println("p0 "+mPlayer+", shared "+mPlayerShared); - if(!mPlayerShared && GLMediaPlayer.State.Initialized == mPlayer.getState() ) { - mPlayer.initGL(gl); - } - System.out.println("p1 "+mPlayer+", shared "+mPlayerShared); - final TextureFrame frame = mPlayer.getLastTexture(); - if( null != frame ) { - if( !hasVideo ) { - throw new InternalError("XXX: "+mPlayer); - } - tex = frame.getTexture(); - if( null == tex ) { - throw new InternalError("XXX: "+mPlayer); - } - } else { - tex = null; - if( hasVideo ) { - throw new InternalError("XXX: "+mPlayer); - } - } - if(!mPlayerShared) { - mPlayer.setTextureMinMagFilter( new int[] { GL.GL_NEAREST, GL.GL_LINEAR } ); - } - } catch (final Exception glex) { - glex.printStackTrace(); - if(!mPlayerShared && null != mPlayer) { - mPlayer.destroy(gl); - mPlayer = null; - } - throw new GLException(glex); - } - - if( hasVideo ) { - initShader(gl); - - // Push the 1st uniform down the path - st.useProgram(gl, true); - - final int[] viewPort = new int[] { 0, 0, drawable.getSurfaceWidth(), drawable.getSurfaceHeight()}; - pmvMatrix = new PMVMatrix(); - reshapePMV(viewPort[2], viewPort[3]); - pmvMatrixUniform = new GLUniformData("mgl_PMVMatrix", 4, 4, pmvMatrix.glGetPMvMatrixf()); - if(!st.uniform(gl, pmvMatrixUniform)) { - throw new GLException("Error setting PMVMatrix in shader: "+st); - } - if(!st.uniform(gl, new GLUniformData("mgl_ActiveTexture", mPlayer.getTextureUnit()))) { - throw new GLException("Error setting mgl_ActiveTexture in shader: "+st); - } - - final float dWidth = drawable.getSurfaceWidth(); - final float dHeight = drawable.getSurfaceHeight(); - final float mWidth = mPlayer.getWidth(); - final float mHeight = mPlayer.getHeight(); - final float mAspect = mWidth/mHeight; - System.err.println("XXX0: mov aspect: "+mAspect); - float xs, ys; - if(orthoProjection) { - if(mPlayerScaleOrig && mWidth < dWidth && mHeight < dHeight) { - xs = mWidth/2f; ys = xs / mAspect; - } else { - xs = dWidth/2f; ys = xs / mAspect; // w>h - } - } else { - if(mPlayerScaleOrig && mWidth < dWidth && mHeight < dHeight) { - xs = mAspect * ( mWidth / dWidth ) ; ys = xs / mAspect ; - } else { - xs = mAspect; ys = 1f; // b>h - } - } - verts = new float[] { -1f*xs, -1f*ys, 0f, // LB - 1f*xs, 1f*ys, 0f // RT - }; - { - System.err.println("XXX0: pixel LB: "+verts[0]+", "+verts[1]+", "+verts[2]); - System.err.println("XXX0: pixel RT: "+verts[3]+", "+verts[4]+", "+verts[5]); - final float[] winLB = new float[3]; - final float[] winRT = new float[3]; - pmvMatrix.gluProject(verts[0], verts[1], verts[2], viewPort, 0, winLB, 0); - pmvMatrix.gluProject(verts[3], verts[4], verts[5], viewPort, 0, winRT, 0); - System.err.println("XXX0: win LB: "+winLB[0]+", "+winLB[1]+", "+winLB[2]); - System.err.println("XXX0: win RT: "+winRT[0]+", "+winRT[1]+", "+winRT[2]); - } - - interleavedVBO = GLArrayDataServer.createGLSLInterleaved(3+4+2, GL.GL_FLOAT, false, 3*4, GL.GL_STATIC_DRAW); - { - interleavedVBO.addGLSLSubArray("mgl_Vertex", 3, GL.GL_ARRAY_BUFFER); - interleavedVBO.addGLSLSubArray("mgl_Color", 4, GL.GL_ARRAY_BUFFER); - interleavedVBO.addGLSLSubArray("mgl_MultiTexCoord", 2, GL.GL_ARRAY_BUFFER); - } - updateInterleavedVBO(gl, tex); - - st.ownAttribute(interleavedVBO, true); - gl.glClearColor(0.3f, 0.3f, 0.3f, 0.3f); - - gl.glEnable(GL.GL_DEPTH_TEST); - - st.useProgram(gl, false); - - // Let's show the completed shader state .. - System.out.println("iVBO: "+interleavedVBO); - System.out.println(st); - } - - if(!mPlayerShared) { - mPlayer.play(); - System.out.println("play.0 "+mPlayer); - } - startTime = System.currentTimeMillis(); - - final Object upstreamWidget = drawable.getUpstreamWidget(); - if (upstreamWidget instanceof Window) { - final Window window = (Window) upstreamWidget; - window.addMouseListener(mouseAction); - window.addKeyListener(keyAction); - surfWidth = window.getSurfaceWidth(); - surfHeight = window.getSurfaceHeight(); - } - final int rmode = drawable.getChosenGLCapabilities().getSampleBuffers() ? 0 : Region.VBAA_RENDERING_BIT; - final boolean lowPerfDevice = gl.isGLES(); - textRendererGLEL = new InfoTextRendererGLELBase(gl.getGLProfile(), rmode, lowPerfDevice); - drawable.addGLEventListener(textRendererGLEL); - } - - protected void updateInterleavedVBO(final GL gl, final Texture tex) { - final float ss = 1f, ts = 1f; // scale tex-coord - final boolean wasEnabled = interleavedVBO.enabled(); - interleavedVBO.seal(gl, false); - interleavedVBO.rewind(); - { - final FloatBuffer ib = (FloatBuffer)interleavedVBO.getBuffer(); - final TextureCoords tc = tex.getImageTexCoords(); - System.err.println("XXX0: "+tc); - System.err.println("XXX0: tex aspect: "+tex.getAspectRatio()); - System.err.println("XXX0: tex y-flip: "+tex.getMustFlipVertically()); - - // left-bottom - ib.put(verts[0]); ib.put(verts[1]); ib.put(verts[2]); - if( hasEffect(EFFECT_GRADIENT_BOTTOM2TOP) ) { - ib.put( 0); ib.put( 0); ib.put( 0); ib.put(alpha); - } else { - ib.put( 1); ib.put( 1); ib.put( 1); ib.put(alpha); - } - ib.put( tc.left() *ss); ib.put( tc.bottom() *ts); - - // right-bottom - ib.put(verts[3]); ib.put(verts[1]); ib.put(verts[2]); - if( hasEffect(EFFECT_GRADIENT_BOTTOM2TOP) ) { - ib.put( 0); ib.put( 0); ib.put( 0); ib.put(alpha); - } else { - ib.put( 1); ib.put( 1); ib.put( 1); ib.put(alpha); - } - ib.put( tc.right() *ss); ib.put( tc.bottom() *ts); - - // left-top - ib.put(verts[0]); ib.put(verts[4]); ib.put(verts[2]); - ib.put( 1); ib.put( 1); ib.put( 1); ib.put(alpha); - ib.put( tc.left() *ss); ib.put( tc.top() *ts); - - // right-top - ib.put(verts[3]); ib.put(verts[4]); ib.put(verts[2]); - ib.put( 1); ib.put( 1); ib.put( 1); ib.put(alpha); - ib.put( tc.right() *ss); ib.put( tc.top() *ts); - } - interleavedVBO.seal(gl, true); - if( !wasEnabled ) { - interleavedVBO.enableBuffer(gl, false); - } - } - - @Override - public void reshape(final GLAutoDrawable drawable, final int x, final int y, final int width, final int height) { - final GL2ES2 gl = drawable.getGL().getGL2ES2(); - if(null == mPlayer) { return; } - surfWidth = width; - surfHeight = height; - - if(null != st) { - reshapePMV(width, height); - st.useProgram(gl, true); - st.uniform(gl, pmvMatrixUniform); - st.useProgram(gl, false); - } - - System.out.println("pR "+mPlayer); - } - - private final float zNear = 1f; - private final float zFar = 10f; - - private void reshapePMV(final int width, final int height) { - pmvMatrix.glMatrixMode(GLMatrixFunc.GL_PROJECTION); - pmvMatrix.glLoadIdentity(); - if(orthoProjection) { - final float fw = width / 2f; - final float fh = height/ 2f; - pmvMatrix.glOrthof(-fw, fw, -fh, fh, -1.0f, 1.0f); - nearPlaneNormalized = 0f; - } else { - pmvMatrix.gluPerspective(45.0f, (float)width / (float)height, zNear, zFar); - nearPlaneNormalized = 1f/(10f-1f); - } - System.err.println("XXX0: Perspective nearPlaneNormalized: "+nearPlaneNormalized); - - pmvMatrix.glMatrixMode(GLMatrixFunc.GL_MODELVIEW); - pmvMatrix.glLoadIdentity(); - pmvMatrix.glTranslatef(0, 0, zoom0); - } - - @Override - public void dispose(final GLAutoDrawable drawable) { - autoDrawable = null; - drawable.disposeGLEventListener(textRendererGLEL, true); - textRendererGLEL = null; - screenshot.dispose(drawable.getGL()); - disposeImpl(drawable, true); - } - - private void disposeImpl(final GLAutoDrawable drawable, final boolean disposePlayer) { - if(null == mPlayer) { return; } - - final Object upstreamWidget = drawable.getUpstreamWidget(); - if (upstreamWidget instanceof Window) { - final Window window = (Window) upstreamWidget; - window.removeMouseListener(mouseAction); - window.removeKeyListener(keyAction); - } - - System.out.println("pD.1 "+mPlayer+", disposePlayer "+disposePlayer); - final GL2ES2 gl = drawable.getGL().getGL2ES2(); - if( disposePlayer ) { - if(!mPlayerShared) { - mPlayer.destroy(gl); - } - System.out.println("pD.X "+mPlayer); - mPlayer=null; - } - pmvMatrixUniform = null; - if(null != pmvMatrix) { - pmvMatrix=null; - } - if(null != st) { - st.destroy(gl); - st=null; - } - } - - long lastPerfPos = 0; - - @Override - public void display(final GLAutoDrawable drawable) { - final GL2ES2 gl = drawable.getGL().getGL2ES2(); - if( swapIntervalSet ) { - final int _swapInterval = swapInterval; - gl.setSwapInterval(_swapInterval); // in case switching the drawable (impl. may bound attribute there) - drawable.getAnimator().resetFPSCounter(); - swapInterval = gl.getSwapInterval(); - System.err.println("Swap Interval: "+_swapInterval+" -> "+swapInterval); - swapIntervalSet = false; - } - if(null == mPlayer) { return; } - - if( resetGLState ) { - resetGLState = false; - System.err.println("XXX resetGLState"); - disposeImpl(drawable, false); - init(drawable); - reshape(drawable, 0, 0, drawable.getSurfaceWidth(), drawable.getSurfaceHeight()); - } - - final long currentPos = System.currentTimeMillis(); - if( currentPos - lastPerfPos > 2000 ) { - System.err.println( mPlayer.getPerfString() ); - lastPerfPos = currentPos; - } - - gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); - - if(null == st) { - return; - } - - st.useProgram(gl, true); - - pmvMatrix.glMatrixMode(GLMatrixFunc.GL_MODELVIEW); - pmvMatrix.glLoadIdentity(); - pmvMatrix.glTranslatef(0, 0, zoom); - if(rotate > 0) { - final float ang = ((System.currentTimeMillis() - startTime) * 360.0f) / 8000.0f; - pmvMatrix.glRotatef(ang, 0, 0, 1); - } else { - rotate = 0; - } - st.uniform(gl, pmvMatrixUniform); - interleavedVBO.enableBuffer(gl, true); - Texture tex = null; - if(null!=mPlayer) { - final TextureSequence.TextureFrame texFrame; - if( mPlayerShared ) { - texFrame=mPlayer.getLastTexture(); - } else { - texFrame=mPlayer.getNextTexture(gl); - } - if(null != texFrame) { - tex = texFrame.getTexture(); - gl.glActiveTexture(GL.GL_TEXTURE0+mPlayer.getTextureUnit()); - tex.enable(gl); - tex.bind(gl); - } - } - gl.glDrawArrays(GL.GL_TRIANGLE_STRIP, 0, 4); - if(null != tex) { - tex.disable(gl); - } - interleavedVBO.enableBuffer(gl, false); - st.useProgram(gl, false); - } - - static class MyGLMediaEventListener implements GLMediaEventListener { - void destroyWindow(final Window window) { - new InterruptSource.Thread() { - @Override - public void run() { - window.destroy(); - } }.start(); - } - - @Override - public void newFrameAvailable(final GLMediaPlayer ts, final TextureFrame newFrame, final long when) { - } - - @Override - public void attributesChanged(final GLMediaPlayer mp, final int event_mask, final long when) { - System.err.println("MovieSimple AttributesChanges: events_mask 0x"+Integer.toHexString(event_mask)+", when "+when); - System.err.println("MovieSimple State: "+mp); - final GLWindow window = (GLWindow) mp.getAttachedObject(WINDOW_KEY); - final MovieSimple ms = (MovieSimple)mp.getAttachedObject(PLAYER); - if( 0 != ( GLMediaEventListener.EVENT_CHANGE_SIZE & event_mask ) ) { - System.err.println("MovieSimple State: CHANGE_SIZE"); - if( origSize ) { - window.setSurfaceSize(mp.getWidth(), mp.getHeight()); - } - // window.disposeGLEventListener(ms, false /* remove */ ); - ms.resetGLState(); - } - if( 0 != ( GLMediaEventListener.EVENT_CHANGE_INIT & event_mask ) ) { - System.err.println("MovieSimple State: INIT"); - // Use GLEventListener in all cases [A+V, V, A] - window.addGLEventListener(ms); - final GLAnimatorControl anim = window.getAnimator(); - anim.setUpdateFPSFrames(60, null); - anim.resetFPSCounter(); - /** - * Kick off player w/o GLEventListener, i.e. for audio only. - * - new InterruptSource.Thread() { - public void run() { - try { - mp.initGL(null); - if ( GLMediaPlayer.State.Paused == mp.getState() ) { // init OK - mp.play(); - } - System.out.println("play.1 "+mp); - } catch (Exception e) { - e.printStackTrace(); - destroyWindow(); - return; - } - } - }.start(); - */ - } - if( 0 != ( GLMediaEventListener.EVENT_CHANGE_PLAY & event_mask ) ) { - window.getAnimator().resetFPSCounter(); - } - - boolean destroy = false; - Throwable err = null; - - if( 0 != ( GLMediaEventListener.EVENT_CHANGE_EOS & event_mask ) ) { - err = ms.mPlayer.getStreamException(); - if( null != err ) { - System.err.println("MovieSimple State: EOS + Exception"); - destroy = true; - } else { - System.err.println("MovieSimple State: EOS"); - if( loopEOS ) { - new InterruptSource.Thread() { - @Override - public void run() { - mp.setPlaySpeed(1f); - mp.seek(0); - mp.play(); - } - }.start(); - } else { - destroy = true; - } - } - } - if( 0 != ( GLMediaEventListener.EVENT_CHANGE_ERR & event_mask ) ) { - err = ms.mPlayer.getStreamException(); - if( null != err ) { - System.err.println("MovieSimple State: ERR + Exception"); - } else { - System.err.println("MovieSimple State: ERR"); - } - destroy = true; - } - if( destroy ) { - if( null != err ) { - err.printStackTrace(); - } - destroyWindow(window); - } - } - }; - public final static MyGLMediaEventListener myGLMediaEventListener = new MyGLMediaEventListener(); - - static boolean loopEOS = false; - static boolean origSize; - - public static void main(final String[] args) throws IOException, URISyntaxException { - int swapInterval = 1; - int width = 800; - int height = 600; - int textureCount = 3; // default - threaded - boolean ortho = true; - boolean zoom = false; - - boolean forceES2 = false; - boolean forceES3 = false; - boolean forceGL3 = false; - boolean forceGLDef = false; - int vid = GLMediaPlayer.STREAM_ID_AUTO; - int aid = GLMediaPlayer.STREAM_ID_AUTO; - - final int windowCount; - { - int _windowCount = 1; - for(int i=0; i<args.length; i++) { - if(args[i].equals("-windows")) { - i++; - _windowCount = MiscUtils.atoi(args[i], _windowCount); - } - } - windowCount = _windowCount; - } - final String[] urls_s = new String[windowCount]; - String file_s1=null, file_s2=null; - { - boolean _origSize = false; - for(int i=0; i<args.length; i++) { - if(args[i].equals("-vid")) { - i++; - vid = MiscUtils.atoi(args[i], vid); - } else if(args[i].equals("-aid")) { - i++; - aid = MiscUtils.atoi(args[i], aid); - } else if(args[i].equals("-width")) { - i++; - width = MiscUtils.atoi(args[i], width); - } else if(args[i].equals("-height")) { - i++; - height = MiscUtils.atoi(args[i], height); - } else if(args[i].equals("-osize")) { - _origSize = true; - } else if(args[i].equals("-textureCount")) { - i++; - textureCount = MiscUtils.atoi(args[i], textureCount); - } else if(args[i].equals("-es2")) { - forceES2 = true; - } else if(args[i].equals("-es3")) { - forceES3 = true; - } else if(args[i].equals("-gl3")) { - forceGL3 = true; - } else if(args[i].equals("-gldef")) { - forceGLDef = true; - } else if(args[i].equals("-vsync")) { - i++; - swapInterval = MiscUtils.atoi(args[i], swapInterval); - } else if(args[i].equals("-projection")) { - ortho=false; - } else if(args[i].equals("-zoom")) { - zoom=true; - } else if(args[i].equals("-loop")) { - loopEOS=true; - } else if(args[i].equals("-urlN")) { - i++; - final int n = MiscUtils.atoi(args[i], 0); - i++; - urls_s[n] = args[i]; - } else if(args[i].equals("-url")) { - i++; - urls_s[0] = args[i]; - } else if(args[i].equals("-file1")) { - i++; - file_s1 = args[i]; - } else if(args[i].equals("-file2")) { - i++; - file_s2 = args[i]; - } else if(args[i].equals("-wait")) { - waitForKey = true; - } - } - origSize = _origSize; - } - final Uri streamLoc0; - if( null != urls_s[0] ) { - streamLoc0 = Uri.cast( urls_s[0] ); - } else if( null != file_s1 ) { - final File movieFile = new File(file_s1); - streamLoc0 = Uri.valueOf(movieFile); - } else if( null != file_s2 ) { - streamLoc0 = Uri.valueOf(new File(file_s2)); - } else { - streamLoc0 = defURI; - } - System.err.println("url_s "+urls_s[0]); - System.err.println("file_s 1: "+file_s1+", 2: "+file_s2); - System.err.println("stream0 "+streamLoc0); - System.err.println("vid "+vid+", aid "+aid); - System.err.println("textureCount "+textureCount); - System.err.println("forceES2 "+forceES2); - System.err.println("forceES3 "+forceES3); - System.err.println("forceGL3 "+forceGL3); - System.err.println("forceGLDef "+forceGLDef); - System.err.println("swapInterval "+swapInterval); - - final GLProfile glp; - if(forceGLDef) { - glp = GLProfile.getDefault(); - } else if(forceGL3) { - glp = GLProfile.get(GLProfile.GL3); - } else if(forceES3) { - glp = GLProfile.get(GLProfile.GLES3); - } else if(forceES2) { - glp = GLProfile.get(GLProfile.GLES2); - } else { - glp = GLProfile.getGL2ES2(); - } - System.err.println("GLProfile: "+glp); - final GLCapabilities caps = new GLCapabilities(glp); - // caps.setAlphaBits(4); // NOTE_ALPHA_BLENDING: We go w/o alpha and blending! - - final MovieSimple[] mss = new MovieSimple[windowCount]; - final GLWindow[] windows = new GLWindow[windowCount]; - for(int i=0; i<windowCount; i++) { - final Animator anim = new Animator(); - anim.start(); - windows[i] = GLWindow.create(caps); - windows[i].addWindowListener(new WindowAdapter() { - @Override - public void windowDestroyed(final WindowEvent e) { - anim.stop(); - } - }); - mss[i] = new MovieSimple(null); - mss[i].setSwapInterval(swapInterval); - mss[i].setScaleOrig(!zoom); - mss[i].setOrthoProjection(ortho); - mss[i].mPlayer.attachObject(WINDOW_KEY, windows[i]); - mss[i].mPlayer.addEventListener(myGLMediaEventListener); - - windows[i].setTitle("Player "+i); - windows[i].setSize(width, height); - windows[i].setVisible(true); - anim.add(windows[i]); - - final Uri streamLocN; - if( 0 == i ) { - streamLocN = streamLoc0; - } else { - if( null != urls_s[i] ) { - streamLocN = Uri.cast(urls_s[i]); - } else { - streamLocN = defURI; - } - } - System.err.println("Win #"+i+": stream "+streamLocN); - mss[i].initStream(streamLocN, vid, aid, textureCount); - } - } - -} diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/stereo/StereoDemo01.java b/src/test/com/jogamp/opengl/test/junit/jogl/stereo/StereoDemo01.java deleted file mode 100644 index 0d1f1700d..000000000 --- a/src/test/com/jogamp/opengl/test/junit/jogl/stereo/StereoDemo01.java +++ /dev/null @@ -1,404 +0,0 @@ -/** - * Copyright 2014 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package com.jogamp.opengl.test.junit.jogl.stereo; - -import java.io.File; -import java.net.URISyntaxException; -import java.util.Arrays; - -import com.jogamp.nativewindow.util.DimensionImmutable; -import com.jogamp.nativewindow.util.PointImmutable; -import com.jogamp.opengl.GL; -import com.jogamp.opengl.GLAutoDrawable; -import com.jogamp.opengl.GLCapabilities; -import com.jogamp.opengl.GLProfile; -import com.jogamp.opengl.GLRunnable; - -import jogamp.opengl.util.stereo.GenericStereoDevice; - -import com.jogamp.common.net.Uri; -import com.jogamp.newt.MonitorDevice; -import com.jogamp.newt.Screen; -import com.jogamp.newt.event.KeyAdapter; -import com.jogamp.newt.event.KeyEvent; -import com.jogamp.newt.opengl.GLWindow; -import com.jogamp.newt.opengl.util.stereo.StereoDeviceUtil; -import com.jogamp.opengl.math.FovHVHalves; -import com.jogamp.opengl.test.junit.jogl.demos.es2.GearsES2; -import com.jogamp.opengl.test.junit.jogl.demos.es2.av.MovieSBSStereo; -import com.jogamp.opengl.test.junit.jogl.demos.es2.av.MovieSimple; -import com.jogamp.opengl.test.junit.util.MiscUtils; -import com.jogamp.opengl.test.junit.util.QuitAdapter; -import com.jogamp.opengl.util.Animator; -import com.jogamp.opengl.util.AnimatorBase; -import com.jogamp.opengl.util.av.GLMediaPlayer; -import com.jogamp.opengl.util.stereo.StereoDevice; -import com.jogamp.opengl.util.stereo.StereoDeviceRenderer; -import com.jogamp.opengl.util.stereo.StereoDeviceFactory; -import com.jogamp.opengl.util.stereo.StereoClientRenderer; -import com.jogamp.opengl.util.stereo.StereoGLEventListener; -import com.jogamp.opengl.util.stereo.StereoUtil; - -/** - * All distortions, no multisampling, bilinear filtering, manual-swap and using two FBOs (default, good) - * <pre> - * java StereoDemo01 -time 10000000 - * </pre> - * All distortions, 8x multisampling, bilinear filtering, manual-swap and using two FBOs (best - slowest) - * <pre> - * java StereoDemo01 -time 10000000 -samples 8 - * </pre> - * All distortions, 8x multisampling, bilinear filtering, manual-swap and using one a big single FBO (w/ all commandline params) - * <pre> - * java StereoDemo01 -time 10000000 -vignette true -chromatic true -timewarp false -samples 8 -biLinear true -autoSwap false -singleFBO true -mainScreen false - * </pre> - * No distortions, no multisampling, no filtering, auto-swap and using a big single FBO (worst and fastest) - * <pre> - * java StereoDemo01 -time 10000000 -vignette false -chromatic false -timewarp false -samples 0 -biLinear false -autoSwap true -singleFBO true - * </pre> - * Test on main screen: - * <pre> - * java StereoDemo01 -time 10000000 -mainScreen true - * </pre> - * Test a 3D SBS Movie: - * <pre> - * java StereoDemo01 -time 10000000 -filmFile Some_SBS_3D_Movie.mkv - * java StereoDemo01 -time 10000000 -filmURI http://whoknows.not/Some_SBS_3D_Movie.mkv - * </pre> - * <p> - * In case user likes to utilize the {@link StereoDeviceFactory.DeviceType#Generic Generic} software implementation, - * which is selected {@link StereoDeviceFactory.DeviceType#Default Default} if no other device is available - * or explicit via <code>-device Generic</code>, the user can chose between different <i>generic</i> stereo modes: - * <pre> - * mono : <code>-device Generic -deviceIndex 0</code> - * stereo-sbs : <code>-device Generic -deviceIndex 1</code> - * stereo-sbs-lense: <code>-device Generic -deviceIndex 2</code> - * </pre> - * </p> - * <p> - * Key 'R' enables/disables the VR's sensors, i.e. head rotation .. - * </p> - * - */ -public class StereoDemo01 { - static long duration = 10000; // ms - - static boolean useStereoScreen = true; - - static int numSamples = 0; - static boolean biLinear = true; - static boolean useSingleFBO = false; - static boolean useVignette = true; - static boolean useChromatic = true; - static boolean useTimewarp = true; - static boolean useAutoSwap = false; - static String useFilmFile = null; - static String useFilmURI = null; - static StereoDeviceFactory.DeviceType deviceType = StereoDeviceFactory.DeviceType.Default; - static int deviceIndex = 0; - - public static void main(final String args[]) throws InterruptedException, URISyntaxException { - boolean useRecommendedDistortionBits = true; - int posx = -1; - int posy = -1; - - for(int i=0; i<args.length; i++) { - if(args[i].equals("-time")) { - i++; - duration = MiscUtils.atol(args[i], duration); - } else if(args[i].equals("-samples")) { - i++; - numSamples = MiscUtils.atoi(args[i], numSamples); - } else if(args[i].equals("-biLinear")) { - i++; - biLinear = MiscUtils.atob(args[i], biLinear); - } else if(args[i].equals("-singleFBO")) { - i++; - useSingleFBO = MiscUtils.atob(args[i], useSingleFBO); - } else if(args[i].equals("-vignette")) { - i++; - useVignette = MiscUtils.atob(args[i], useVignette); - useRecommendedDistortionBits = false; - } else if(args[i].equals("-chromatic")) { - i++; - useChromatic = MiscUtils.atob(args[i], useChromatic); - useRecommendedDistortionBits = false; - } else if(args[i].equals("-timewarp")) { - i++; - useTimewarp = MiscUtils.atob(args[i], useTimewarp); - useRecommendedDistortionBits = false; - } else if(args[i].equals("-vignette")) { - i++; - useVignette = MiscUtils.atob(args[i], useVignette); - useRecommendedDistortionBits = false; - } else if(args[i].equals("-mainScreen")) { - i++; - useStereoScreen = !MiscUtils.atob(args[i], useStereoScreen); - } else if(args[i].equals("-device")) { - i++; - deviceType = StereoDeviceFactory.DeviceType.valueOf(args[i]); - } else if(args[i].equals("-deviceIndex")) { - i++; - deviceIndex = MiscUtils.atoi(args[i], deviceIndex); - } else if(args[i].equals("-posx")) { - i++; - posx = MiscUtils.atoi(args[i], posx); - } else if(args[i].equals("-posy")) { - i++; - posy = MiscUtils.atoi(args[i], posy); - } else if(args[i].equals("-autoSwap")) { - i++; - useAutoSwap = MiscUtils.atob(args[i], useAutoSwap); - } else if(args[i].equals("-filmFile")) { - i++; - useFilmFile = args[i]; - } else if(args[i].equals("-filmURI")) { - i++; - useFilmURI = args[i]; - } - } - final StereoGLEventListener upstream; - final MovieSBSStereo movieSimple; - final Uri movieURI; - if( null != useFilmFile ) { - movieSimple = new MovieSBSStereo(); - movieURI = Uri.valueOf(new File(useFilmFile)); - upstream = movieSimple; - } else if( null != useFilmURI ) { - movieSimple = new MovieSBSStereo(); - movieURI = Uri.cast(useFilmURI); - upstream = movieSimple; - } else { - final GearsES2 demo = new GearsES2(0); - demo.setZ(2f, 10000f, 20f); // start closer to eye - demo.setVerbose(false); - upstream = demo; - movieSimple = null; - movieURI = null; - } - final StereoDemo01 demo01 = new StereoDemo01(); - demo01.doIt(deviceType, deviceIndex, posx, posy, - upstream, movieSimple, movieURI, biLinear, numSamples, useSingleFBO, - useRecommendedDistortionBits, useVignette, useChromatic, useTimewarp, - useAutoSwap, true /* useAnimator */, false /* exclusiveContext*/); - } - - public void doIt(final StereoDeviceFactory.DeviceType deviceType, final int deviceIndex, final int posx, final int posy, - final StereoGLEventListener upstream, final MovieSBSStereo movieSimple, final Uri movieURI, - final boolean biLinear, final int numSamples, final boolean useSingleFBO, - final boolean useRecommendedDistortionBits, final boolean useVignette, final boolean useChromatic, final boolean useTimewarp, - final boolean useAutoSwap, final boolean useAnimator, final boolean exclusiveContext) throws InterruptedException { - - System.err.println("glob duration "+duration); - System.err.println("glob useStereoScreen "+useStereoScreen); - System.err.println("deviceType "+deviceType); - System.err.println("deviceIndex "+deviceIndex); - System.err.println("biLinear "+biLinear); - System.err.println("numSamples "+numSamples); - System.err.println("useSingleFBO "+useSingleFBO); - System.err.println("useRecommendedDistortionBits "+useRecommendedDistortionBits); - System.err.println("useVignette "+useVignette); - System.err.println("useChromatic "+useChromatic); - System.err.println("useTimewarp "+useTimewarp); - System.err.println("useAutoSwap "+useAutoSwap); - - final StereoDeviceFactory stereoDeviceFactory = StereoDeviceFactory.createFactory(deviceType); - if( null == stereoDeviceFactory ) { - System.err.println("No StereoDeviceFactory available"); - return; - } - - final StereoDevice stereoDevice = stereoDeviceFactory.createDevice(deviceIndex, null, true /* verbose */); - if( null == stereoDevice ) { - System.err.println("No StereoDevice.Context available for index "+deviceIndex); - return; - } - - final boolean isGenericDevice = stereoDevice instanceof GenericStereoDevice; - - if( 0 <= posx && 0 <= posy && isGenericDevice ) { - ((GenericStereoDevice)stereoDevice).setSurfacePosition(posx, posy); - } - System.err.println("StereoDevice "+stereoDevice); - - // - // - // - final PointImmutable devicePos = stereoDevice.getPosition(); - final DimensionImmutable deviceRes = stereoDevice.getSurfaceSize(); - System.err.println("Device Res "+deviceRes+", reqRotation "+stereoDevice.getRequiredRotation()); - System.err.println("Device Pos "+devicePos); - - final MonitorDevice monitor = StereoDeviceUtil.getMonitorDevice(stereoDevice, true); - final Screen screen = monitor.getScreen(); - - // Start the sensor which provides the Rift’s pose and motion. - if( !stereoDevice.startSensors(stereoDevice.getSupportedSensorBits(), 0) ) { - System.err.println("Could not start sensors on device "+deviceIndex); - } - - final GLCapabilities caps = new GLCapabilities(GLProfile.getMaxProgrammable(true /* favorHardwareRasterizer */)); - final GLWindow window = GLWindow.create(screen, caps); - - if( useStereoScreen ) { - window.setPosition(devicePos.getX(), devicePos.getY()); - } - window.setSurfaceSize(deviceRes.getWidth(), deviceRes.getHeight()); - window.setAutoSwapBufferMode(useAutoSwap); - window.setUndecorated(true); - - final Animator animator = useAnimator ? new Animator() : null; - if( useAnimator ) { - animator.setModeBits(false, AnimatorBase.MODE_EXPECT_AWT_RENDERING_THREAD); - animator.setExclusiveContext(exclusiveContext); - } - - // - // Stereo Device Setup - // - // EyePos.y = ovrHmd_GetFloat(HMD, OVR_KEY_EYE_HEIGHT, EyePos.y); - final FovHVHalves[] defaultEyeFov = stereoDevice.getDefaultFOV(); - System.err.println("Default Fov[0]: "+defaultEyeFov[0]); - System.err.println("Default Fov[0]: "+defaultEyeFov[0].toStringInDegrees()); - if( defaultEyeFov.length > 1 ) { - System.err.println("Default Fov[1]: "+defaultEyeFov[1]); - System.err.println("Default Fov[1]: "+defaultEyeFov[1].toStringInDegrees()); - } - - final boolean usesLenses = 0 != ( StereoDeviceRenderer.DISTORTION_BARREL & stereoDevice.getMinimumDistortionBits() ); - final float[] eyePositionOffset = null != movieSimple && usesLenses ? new float[] { 0f, 0.3f, 0f } // better fixed movie position w/ lenses - : stereoDevice.getDefaultEyePositionOffset(); // default - System.err.println("Eye Position Offset: "+Arrays.toString(eyePositionOffset)); - - final int textureUnit = 0; - final int reqDistortionBits; - if( useRecommendedDistortionBits ) { - reqDistortionBits = stereoDevice.getRecommendedDistortionBits(); - } else { - reqDistortionBits = ( useVignette ? StereoDeviceRenderer.DISTORTION_VIGNETTE : 0 ) | - ( useChromatic ? StereoDeviceRenderer.DISTORTION_CHROMATIC : 0 ) | - ( useTimewarp ? StereoDeviceRenderer.DISTORTION_TIMEWARP : 0 ); - } - System.err.println("Requesting Distortion Bits: "+StereoUtil.distortionBitsToString(reqDistortionBits)); - - final float pixelsPerDisplayPixel = 1f; - final StereoDeviceRenderer stereoDeviceRenderer = - stereoDevice.createRenderer(reqDistortionBits, useSingleFBO ? 1 : 2, eyePositionOffset, - defaultEyeFov, pixelsPerDisplayPixel, textureUnit); - System.err.println("StereoDeviceRenderer: "+stereoDeviceRenderer); - - final int texFilter = biLinear ? GL.GL_LINEAR : GL.GL_NEAREST; - final StereoClientRenderer renderer = new StereoClientRenderer(stereoDeviceRenderer, true /* ownsDist */, texFilter, texFilter, numSamples); - if( null != movieSimple && null != movieURI) { - movieSimple.setScaleOrig(true); - final GLMediaPlayer mp = movieSimple.getGLMediaPlayer(); - mp.attachObject(MovieSimple.WINDOW_KEY, window); - mp.attachObject(MovieSBSStereo.STEREO_RENDERER_KEY, renderer); - mp.addEventListener(MovieSBSStereo.stereoGLMediaEventListener); - movieSimple.initStream(movieURI, GLMediaPlayer.STREAM_ID_AUTO, GLMediaPlayer.STREAM_ID_AUTO, 3); - } else { - renderer.addGLEventListener(upstream); - } - window.addGLEventListener(renderer); - - final QuitAdapter quitAdapter = new QuitAdapter(); - window.addKeyListener(quitAdapter); - window.addWindowListener(quitAdapter); - - window.addKeyListener(new KeyAdapter() { - public void keyReleased(final KeyEvent e) { - if( e.isAutoRepeat() ) { - return; - } - switch(e.getKeySymbol()) { - case KeyEvent.VK_O: { - window.invoke(false, new GLRunnable() { - @Override - public boolean run(final GLAutoDrawable drawable) { - stereoDevice.resetLocationSensorOrigin(); - return true; - } }); - break; - } - case KeyEvent.VK_P: { - window.invoke(false, new GLRunnable() { - @Override - public boolean run(final GLAutoDrawable drawable) { - System.err.println(stereoDeviceRenderer.getLastViewerPose()); - return true; - } }); - break; - } - case KeyEvent.VK_R: { - if( stereoDevice.getSensorsStarted() ) { - stereoDevice.stopSensors(); - } else { - stereoDevice.startSensors(stereoDevice.getSupportedSensorBits(), 0); - } - break; - } - } - } } ); - - if( useAnimator ) { - animator.add(window); - animator.start(); - } - window.setVisible(true); - - // Correct window size to actual pixel size, - // which ration is unknown before window creation when using multiple displays! - System.err.println("Window.0.windowSize : "+window.getWidth()+" x "+window.getHeight()); - System.err.println("Window.0.surfaceSize: "+window.getSurfaceWidth()+" x "+window.getSurfaceHeight()); - window.setSurfaceSize(deviceRes.getWidth(), deviceRes.getHeight()); - if( useStereoScreen ) { - window.setPosition(devicePos.getX(), devicePos.getY()); - } - System.err.println("Window.1.windowSize : "+window.getWidth()+" x "+window.getHeight()); - System.err.println("Window.1.surfaceSize: "+window.getSurfaceWidth()+" x "+window.getSurfaceHeight()); - - if( useAnimator ) { - animator.setUpdateFPSFrames(60, System.err); - } - - final long t0 = System.currentTimeMillis(); - long t1 = t0; - while(!quitAdapter.shouldQuit() && t1-t0<duration) { - Thread.sleep(100); - t1 = System.currentTimeMillis(); - } - - if( useAnimator ) { - animator.stop(); - } - window.destroy(); - screen.removeReference(); // StereoDeviceUtil.getMonitorDevice(stereoDevice, true); - stereoDevice.dispose(); - stereoDeviceFactory.shutdown(); - } -} |