OSDN Git Service

added robovm backend, initial commit
authorbadlogic <badlogicgames@gmail.com>
Fri, 31 May 2013 02:07:36 +0000 (04:07 +0200)
committerbadlogic <badlogicgames@gmail.com>
Fri, 31 May 2013 02:07:36 +0000 (04:07 +0200)
28 files changed:
backends/gdx-backend-robovm/.classpath [new file with mode: 0644]
backends/gdx-backend-robovm/.project [new file with mode: 0644]
backends/gdx-backend-robovm/.settings/org.eclipse.jdt.core.prefs [new file with mode: 0644]
backends/gdx-backend-robovm/libs/robovm-cocoatouch-sources.jar [new file with mode: 0644]
backends/gdx-backend-robovm/libs/robovm-cocoatouch.jar [new file with mode: 0644]
backends/gdx-backend-robovm/libs/robovm-objc-sources.jar [new file with mode: 0644]
backends/gdx-backend-robovm/libs/robovm-objc.jar [new file with mode: 0644]
backends/gdx-backend-robovm/libs/robovm-rt-sources.jar [new file with mode: 0644]
backends/gdx-backend-robovm/libs/robovm-rt.jar [new file with mode: 0644]
backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSApplication.java [new file with mode: 0644]
backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSApplicationConfiguration.java [new file with mode: 0644]
backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSAudio.java [new file with mode: 0644]
backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSFileHandle.java [new file with mode: 0644]
backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSFiles.java [new file with mode: 0644]
backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSGLES20.java [new file with mode: 0644]
backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSGraphics.java [new file with mode: 0644]
backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSInput.java [new file with mode: 0644]
backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSMusic.java [new file with mode: 0644]
backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSNet.java [new file with mode: 0644]
backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSPreferences.java [new file with mode: 0644]
backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSServerSocket.java [new file with mode: 0644]
backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSSocket.java [new file with mode: 0644]
backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSSound.java [new file with mode: 0644]
gdx/jni/Android.mk
gdx/jni/com.badlogic.gdx.graphics.g2d.Gdx2DPixmap.cpp
gdx/jni/com.badlogic.gdx.physics.box2d.Contact.h
gdx/jni/iosgl/iosgl20.cpp [new file with mode: 0644]
gdx/jni/iosgl/iosgl20.h [new file with mode: 0644]

diff --git a/backends/gdx-backend-robovm/.classpath b/backends/gdx-backend-robovm/.classpath
new file mode 100644 (file)
index 0000000..5c6a439
--- /dev/null
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="src" path="src"/>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+       <classpathentry kind="lib" path="libs/robovm-cocoatouch-sources.jar"/>
+       <classpathentry kind="lib" path="libs/robovm-cocoatouch.jar"/>
+       <classpathentry kind="lib" path="libs/robovm-objc-sources.jar"/>
+       <classpathentry kind="lib" path="libs/robovm-objc.jar"/>
+       <classpathentry kind="lib" path="libs/robovm-rt-sources.jar"/>
+       <classpathentry kind="lib" path="libs/robovm-rt.jar"/>
+       <classpathentry combineaccessrules="false" kind="src" path="/gdx"/>
+       <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/backends/gdx-backend-robovm/.project b/backends/gdx-backend-robovm/.project
new file mode 100644 (file)
index 0000000..e963855
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>gdx-backend-robovm</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.jdt.core.javabuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.jdt.core.javanature</nature>
+       </natures>
+</projectDescription>
diff --git a/backends/gdx-backend-robovm/.settings/org.eclipse.jdt.core.prefs b/backends/gdx-backend-robovm/.settings/org.eclipse.jdt.core.prefs
new file mode 100644 (file)
index 0000000..7341ab1
--- /dev/null
@@ -0,0 +1,11 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/backends/gdx-backend-robovm/libs/robovm-cocoatouch-sources.jar b/backends/gdx-backend-robovm/libs/robovm-cocoatouch-sources.jar
new file mode 100644 (file)
index 0000000..de7d1f3
Binary files /dev/null and b/backends/gdx-backend-robovm/libs/robovm-cocoatouch-sources.jar differ
diff --git a/backends/gdx-backend-robovm/libs/robovm-cocoatouch.jar b/backends/gdx-backend-robovm/libs/robovm-cocoatouch.jar
new file mode 100644 (file)
index 0000000..927ed4b
Binary files /dev/null and b/backends/gdx-backend-robovm/libs/robovm-cocoatouch.jar differ
diff --git a/backends/gdx-backend-robovm/libs/robovm-objc-sources.jar b/backends/gdx-backend-robovm/libs/robovm-objc-sources.jar
new file mode 100644 (file)
index 0000000..bf45ea9
Binary files /dev/null and b/backends/gdx-backend-robovm/libs/robovm-objc-sources.jar differ
diff --git a/backends/gdx-backend-robovm/libs/robovm-objc.jar b/backends/gdx-backend-robovm/libs/robovm-objc.jar
new file mode 100644 (file)
index 0000000..537a0ef
Binary files /dev/null and b/backends/gdx-backend-robovm/libs/robovm-objc.jar differ
diff --git a/backends/gdx-backend-robovm/libs/robovm-rt-sources.jar b/backends/gdx-backend-robovm/libs/robovm-rt-sources.jar
new file mode 100644 (file)
index 0000000..af1862c
Binary files /dev/null and b/backends/gdx-backend-robovm/libs/robovm-rt-sources.jar differ
diff --git a/backends/gdx-backend-robovm/libs/robovm-rt.jar b/backends/gdx-backend-robovm/libs/robovm-rt.jar
new file mode 100644 (file)
index 0000000..faf0056
Binary files /dev/null and b/backends/gdx-backend-robovm/libs/robovm-rt.jar differ
diff --git a/backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSApplication.java b/backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSApplication.java
new file mode 100644 (file)
index 0000000..fabbee3
--- /dev/null
@@ -0,0 +1,395 @@
+package com.badlogic.gdx.backends.robovm;
+
+import java.io.File;
+
+import org.robovm.cocoatouch.coregraphics.CGSize;
+import org.robovm.cocoatouch.foundation.NSDictionary;
+import org.robovm.cocoatouch.foundation.NSMutableDictionary;
+import org.robovm.cocoatouch.uikit.UIApplication;
+import org.robovm.cocoatouch.uikit.UIApplicationDelegate;
+import org.robovm.cocoatouch.uikit.UIDevice;
+import org.robovm.cocoatouch.uikit.UIInterfaceOrientation;
+import org.robovm.cocoatouch.uikit.UIScreen;
+import org.robovm.cocoatouch.uikit.UIUserInterfaceIdiom;
+import org.robovm.cocoatouch.uikit.UIViewController;
+import org.robovm.cocoatouch.uikit.UIWindow;
+
+import com.badlogic.gdx.Application;
+import com.badlogic.gdx.ApplicationListener;
+import com.badlogic.gdx.Audio;
+import com.badlogic.gdx.Files;
+import com.badlogic.gdx.Gdx;
+import com.badlogic.gdx.Graphics;
+import com.badlogic.gdx.Input;
+import com.badlogic.gdx.LifecycleListener;
+import com.badlogic.gdx.Net;
+import com.badlogic.gdx.Preferences;
+import com.badlogic.gdx.graphics.GL20;
+import com.badlogic.gdx.utils.Array;
+import com.badlogic.gdx.utils.Clipboard;
+
+public class IOSApplication implements Application {
+       
+       public static abstract class Delegate extends UIApplicationDelegate.Adapter {
+               private IOSApplication app;
+               
+               protected abstract IOSApplication createApplication();
+
+               @Override
+               public boolean didFinishLaunching (UIApplication application, NSDictionary launchOptions) {
+                       application.addStrongRef(this); // Prevent this from being GCed until the ObjC UIApplication is deallocated
+                       this.app = createApplication();
+                       return app.didFinishLaunching(application, launchOptions);
+               }
+
+               @Override
+               public void didBecomeActive (UIApplication application) {
+                       app.didBecomeActive(application);
+               }
+               
+               @Override
+               public void willResignActive (UIApplication application) {
+                       app.willResignActive(application);
+               }
+
+               @Override
+               public void willTerminate (UIApplication application) {
+                       app.willTerminate(application);
+               }
+       }
+       
+       UIApplication uiApp;
+       UIWindow uiWindow;
+       ApplicationListener listener;
+       IOSApplicationConfiguration config;
+       IOSGraphics graphics;
+       IOSAudio audio;
+       IOSFiles files;
+       IOSInput input;
+       IOSNet net;
+       int logLevel = Application.LOG_DEBUG;
+
+       /** The display scale factor (1.0f for normal; 2.0f to use retina coordinates/dimensions). */
+       float displayScaleFactor;
+
+       Array<Runnable> runnables = new Array<Runnable>();
+       Array<Runnable> executedRunnables = new Array<Runnable>();
+       Array<LifecycleListener> lifecycleListeners = new Array<LifecycleListener>();
+
+       public IOSApplication (ApplicationListener listener, IOSApplicationConfiguration config) {
+               this.listener = listener;
+               this.config = config;
+       }
+       
+       final boolean didFinishLaunching (UIApplication uiApp, NSDictionary options) {
+               Gdx.app = this;
+               this.uiApp = uiApp;
+
+               // enable or disable screen dimming
+               UIApplication.getSharedApplication().setIdleTimerDisabled(config.preventScreenDimming);
+
+               // fix the scale factor if we have a retina device (NOTE: iOS screen sizes are in "points" not pixels by default!)
+               if (UIScreen.getMainScreen().getScale() == 2.0f) {
+                       // we have a retina device!
+                       if (UIDevice.getCurrentDevice().getUserInterfaceIdiom() == UIUserInterfaceIdiom.Pad) {
+                               // it's an iPad!
+                               displayScaleFactor = config.displayScaleLargeScreenIfRetina * 2.0f;
+                       } else {
+                               // it's an iPod or iPhone
+                               displayScaleFactor = config.displayScaleSmallScreenIfRetina * 2.0f;
+                       }
+               } 
+               else {
+                       // no retina screen: no scaling!
+                       if (UIDevice.getCurrentDevice().getUserInterfaceIdiom() == UIUserInterfaceIdiom.Pad) {
+                               // it's an iPad!
+                               displayScaleFactor = config.displayScaleLargeScreenIfNonRetina;
+                       } else {
+                               // it's an iPod or iPhone
+                               displayScaleFactor = config.displayScaleSmallScreenIfNonRetina;
+                       }
+               }
+
+               GL20 gl20 = new IOSGLES20();
+               
+               Gdx.gl = gl20;
+               Gdx.gl20 = gl20;
+               
+               // setup libgdx
+               this.input = new IOSInput(this);
+               this.graphics = new IOSGraphics(getBounds(null), this, input, gl20);
+               this.files = new IOSFiles();
+               this.audio = new IOSAudio();
+               this.net = new IOSNet(this);
+
+               Gdx.files = this.files;
+               Gdx.graphics = this.graphics;
+               Gdx.audio = this.audio;
+               Gdx.input = this.input;
+               Gdx.net = this.net;
+
+               this.input.setupPeripherals();
+
+               this.uiWindow = new UIWindow(UIScreen.getMainScreen().getBounds());
+               this.uiWindow.setRootViewController(this.graphics.viewController);
+               this.uiWindow.makeKeyAndVisible();
+               Gdx.app.debug("IOSApplication", "created");
+               return true;
+       }
+       
+       /**
+        * Return the UI view controller of IOSApplication
+        * @return the view controller of IOSApplication
+        */
+       public UIViewController getUIViewController(){
+               return graphics.viewController;
+       }
+
+       /** Returns our real display dimension based on screen orientation.
+        * 
+        * @param viewController The view controller.
+        * @return Or real display dimension. */
+       CGSize getBounds (UIViewController viewController) {
+               // or screen size (always portrait)
+               CGSize bounds = UIScreen.getMainScreen().getBounds().size();
+
+               // determine orientation and resulting width + height
+               UIInterfaceOrientation orientation = viewController != null 
+                       ? viewController.getInterfaceOrientation() : uiApp.getStatusBarOrientation();
+               int width;
+               int height;
+               switch (orientation) {
+               case LandscapeLeft:
+               case LandscapeRight:
+                       height = (int)bounds.width();
+                       width = (int)bounds.height();
+                       break;
+               default:
+                       // assume portrait
+                       width = (int)bounds.width();
+                       height = (int)bounds.height();
+               }
+
+               // update width/height depending on display scaling selected 
+               width *= displayScaleFactor;
+               height *= displayScaleFactor;
+
+               // log screen dimensions
+               Gdx.app.debug("IOSApplication", "View: " + orientation.toString() + " " + width + "x" + height);
+
+               // return resulting view size (based on orientation)
+               return new CGSize(width, height);
+       }
+
+       final void didBecomeActive (UIApplication uiApp) {
+               Gdx.app.debug("IOSApplication", "resumed");
+               if (config.useObjectAL)
+               {
+                       // workaround for ObjectAL crash problem
+                       // see: https://groups.google.com/forum/?fromgroups=#!topic/objectal-for-iphone/ubRWltp_i1Q
+//                     OALAudioSession.sharedInstance().forceEndInterrupt();
+               }
+               graphics.makeCurrent();
+               graphics.resume();
+       }
+
+       final void willResignActive (UIApplication uiApp) {
+               Gdx.app.debug("IOSApplication", "paused");
+               graphics.makeCurrent();
+               graphics.pause();
+               Gdx.gl.glFlush();
+       }
+
+       final void willTerminate (UIApplication uiApp) {
+               Gdx.app.debug("IOSApplication", "disposed");
+               graphics.makeCurrent();
+               Array<LifecycleListener> listeners = lifecycleListeners;
+               synchronized(listeners) {
+                       for(LifecycleListener listener: listeners) {
+                               listener.pause();
+                       }
+               }
+               listener.dispose();
+               Gdx.gl.glFlush();
+       }
+
+       @Override
+       public ApplicationListener getApplicationListener () {
+               return listener;
+       }
+       
+       @Override
+       public Graphics getGraphics () {
+               return graphics;
+       }
+
+       @Override
+       public Audio getAudio () {
+               return audio;
+       }
+
+       @Override
+       public Input getInput () {
+               return input;
+       }
+
+       @Override
+       public Files getFiles () {
+               return files;
+       }
+
+       @Override
+       public Net getNet () {
+               return net;
+       }
+
+       @Override
+       public void log (String tag, String message) {
+               if (logLevel > LOG_NONE) {
+                       System.out.println("[info] " + tag + ": " + message);
+               }
+       }
+
+       @Override
+       public void log (String tag, String message, Exception exception) {
+               if (logLevel > LOG_NONE) {
+                       System.out.println("[info] " + tag + ": " + message);
+                       exception.printStackTrace();
+               }
+       }
+
+       @Override
+       public void error (String tag, String message) {
+               if (logLevel >= LOG_ERROR) {
+                       System.out.println("[error] " + tag + ": " + message);
+               }
+       }
+
+       @Override
+       public void error (String tag, String message, Throwable exception) {
+               if (logLevel >= LOG_ERROR) {
+                       System.out.println("[error] " + tag + ": " + message);
+                       exception.printStackTrace();
+               }
+       }
+
+       @Override
+       public void debug (String tag, String message) {
+               if (logLevel >= LOG_DEBUG) {
+                       System.out.println("[debug] " + tag + ": " + message);
+               }
+       }
+
+       @Override
+       public void debug (String tag, String message, Throwable exception) {
+               if (logLevel >= LOG_DEBUG) {
+                       System.out.println("[error] " + tag + ": " + message);
+                       exception.printStackTrace();
+               }
+       }
+
+       @Override
+       public void setLogLevel (int logLevel) {
+               this.logLevel = logLevel;
+       }
+
+       @Override
+       public ApplicationType getType () {
+               return ApplicationType.iOS;
+       }
+
+       @Override
+       public int getVersion () {
+               // FIXME return iOS version
+               return 0;
+       }
+
+       @Override
+       public long getJavaHeap () {
+               // FIXME check what mono offers
+               return 0;
+       }
+
+       @Override
+       public long getNativeHeap () {
+               // FIXME check what mono offers
+               return 0;
+       }
+
+       @Override
+       public Preferences getPreferences (String name) {
+               File libraryPath = new File(System.getenv("HOME"), "Library");
+               String finalPath = new File(libraryPath, name + ".plist").getAbsolutePath();
+               
+               Gdx.app.debug("IOSApplication", "Loading NSDictionary from file " + finalPath);
+               NSMutableDictionary nsDictionary = NSMutableDictionary.fromFile(finalPath);
+
+               // if it fails to get an existing dictionary, create a new one.
+               if (nsDictionary == null) {
+                       Gdx.app.debug("IOSApplication", "NSDictionary not found, creating a new one");
+                       nsDictionary = new NSMutableDictionary();
+                       boolean fileWritten = nsDictionary.writeToFile(finalPath, false);
+                       if (fileWritten)
+                               Gdx.app.debug("IOSApplication", "NSDictionary file written");
+                       else 
+                               Gdx.app.debug("IOSApplication", "Failed to write NSDictionary to file " + finalPath);
+               }
+               return new IOSPreferences(nsDictionary, finalPath);
+       }
+
+       @Override
+       public void postRunnable (Runnable runnable) {
+               synchronized (runnables) {
+                       runnables.add(runnable);
+               }
+       }
+
+       public void processRunnables () {
+               synchronized (runnables) {
+                       executedRunnables.clear();
+                       executedRunnables.addAll(runnables);
+                       runnables.clear();
+               }
+               for (int i = 0; i < executedRunnables.size; i++) {
+                       try {
+                               executedRunnables.get(i).run();
+                       } catch (Throwable t) {
+                               t.printStackTrace();
+                       }
+               }
+       }
+
+       @Override
+       public void exit () {
+               System.exit(0);
+       }
+
+       @Override
+       public Clipboard getClipboard () {
+               // FIXME implement clipboard
+               return new Clipboard() {
+                       @Override
+                       public void setContents (String content) {
+                       }
+
+                       @Override
+                       public String getContents () {
+                               return null;
+                       }
+               };
+       }
+       
+       @Override
+       public void addLifecycleListener (LifecycleListener listener) {
+               synchronized(lifecycleListeners) {
+                       lifecycleListeners.add(listener);
+               }
+       }
+
+       @Override
+       public void removeLifecycleListener (LifecycleListener listener) {
+               synchronized(lifecycleListeners) {
+                       lifecycleListeners.removeValue(listener, true);
+               }               
+       }
+}
\ No newline at end of file
diff --git a/backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSApplicationConfiguration.java b/backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSApplicationConfiguration.java
new file mode 100644 (file)
index 0000000..309c67f
--- /dev/null
@@ -0,0 +1,62 @@
+package com.badlogic.gdx.backends.robovm;
+
+public class IOSApplicationConfiguration {
+       // FIXME add compass, framebuffer bit depth, stencil, just like on Android if possible
+       /** whether to enable screen dimming. */
+       public boolean preventScreenDimming = true;
+       /** whether or not portrait orientation is supported. */
+       public boolean orientationPortrait = true;
+       /** whether or not landscape orientation is supported. */
+       public boolean orientationLandscape = true;
+       
+       /**
+        * Scale factor to use on large screens  with retina display, i.e. iPad 3+ (has no effect on non-retina screens).
+        * <ul>
+        *   <li>1.0 = no scaling (everything is in pixels)
+        *   <li>0.5 = LibGDX will behave as you would only have half the pixels. I.e. instead of 2048x1536 you 
+        *       will work in 1024x768. This looks pixel perfect and will save you the trouble to create bigger
+        *       graphics for the retina display. 
+        *   <li>any other value: scales the screens according to your scale factor. A scale factor
+        *       oof 0.75, 0.8, 1.2, 1.5 etc. works very well without any artifacts! 
+        * </ul>
+    */
+       public float displayScaleLargeScreenIfRetina = 1.0f;
+       /**
+        * Scale factor to use on small screens with retina display, i.e. iPhone 4+, iPod 4+ (has no effect on non-retina screens).
+        * <ul>
+        *   <li>1.0 = no scaling (everything is in pixels)
+        *   <li>0.5 = LibGDX will behave as you would only have half the pixels. I.e. instead of 960x640 you 
+        *       will work in 480x320. This looks pixel perfect and will save you the trouble to create bigger
+        *       graphics for the retina display. 
+        *   <li>any other value: scales the screens according to your scale factor. A scale factor
+        *       of 0.75, 0.8, 1.2, 1.5 etc. works very well without any artifacts! 
+        * </ul>
+    */
+       public float displayScaleSmallScreenIfRetina = 1.0f;
+       /**
+        * Scale factor to use on large screens  without retina display, i.e. iPad 1+2 (has no effect on retina screens).
+        * <ul>
+        *   <li>1.0 = no scaling (everything is in pixels)
+        *   <li>any other value: scales the screens according to your scale factor. A scale factor
+        *       of 0.75, 0.8, 1.2, 1.5 etc. works very well without any artifacts! 
+        * </ul>
+    */
+       public float displayScaleLargeScreenIfNonRetina = 1.0f;
+       /**
+        * Scale factor to use on small screens without retina display, i.e. iPhone 1-3, iPod 1-3 (has no effect on retina screens).
+        * <ul>
+        *   <li>1.0 = no scaling (everything is in pixels)
+        *   <li>any other value: scales the screens according to your scale factor. A scale factor
+        *       of 0.75, 0.8, 1.2, 1.5 etc. works very well without any artifacts! 
+        * </ul>
+    */
+       public float displayScaleSmallScreenIfNonRetina = 1.0f;
+       
+       /** whether to use the accelerometer **/
+       public boolean useAccelerometer = true;
+       /** the update interval to poll the accelerometer with, in seconds **/
+       public float accelerometerUpdate = 0.05f;
+       
+       /** whether to use ObjectAL for sound implementation or not.  */
+       public boolean useObjectAL = true;
+}
\ No newline at end of file
diff --git a/backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSAudio.java b/backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSAudio.java
new file mode 100644 (file)
index 0000000..9885928
--- /dev/null
@@ -0,0 +1,38 @@
+package com.badlogic.gdx.backends.robovm;
+
+import com.badlogic.gdx.Audio;
+import com.badlogic.gdx.Gdx;
+import com.badlogic.gdx.audio.AudioDevice;
+import com.badlogic.gdx.audio.AudioRecorder;
+import com.badlogic.gdx.audio.Music;
+import com.badlogic.gdx.audio.Sound;
+import com.badlogic.gdx.files.FileHandle;
+import com.badlogic.gdx.utils.GdxRuntimeException;
+
+public class IOSAudio implements Audio {
+
+       @Override
+       public AudioDevice newAudioDevice (int samplingRate, boolean isMono) {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+       @Override
+       public AudioRecorder newAudioRecorder (int samplingRate, boolean isMono) {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+       @Override
+       public Sound newSound (FileHandle fileHandle) {
+               // TODO Auto-generated method stub
+               return new IOSSound();
+       }
+
+       @Override
+       public Music newMusic (FileHandle file) {
+               // TODO Auto-generated method stub
+               return new IOSMusic();
+       }
+
+}
\ No newline at end of file
diff --git a/backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSFileHandle.java b/backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSFileHandle.java
new file mode 100644 (file)
index 0000000..545f591
--- /dev/null
@@ -0,0 +1,39 @@
+package com.badlogic.gdx.backends.robovm;
+
+import java.io.File;
+
+import com.badlogic.gdx.Files.FileType;
+import com.badlogic.gdx.files.FileHandle;
+import com.badlogic.gdx.utils.GdxRuntimeException;
+
+public class IOSFileHandle extends FileHandle {
+       protected IOSFileHandle (String fileName, FileType type) {
+               super(fileName, type);
+       }
+
+       protected IOSFileHandle (File file, FileType type) {
+               super(file, type);
+       }
+
+       public FileHandle child (String name) {
+               if (file.getPath().length() == 0) return new IOSFileHandle(new File(name), type);
+               return new IOSFileHandle(new File(file, name), type);
+       }
+
+       public FileHandle parent () {
+               File parent = file.getParentFile();
+               if (parent == null) {
+                       if (type == FileType.Absolute)
+                               parent = new File("/");
+                       else
+                               parent = new File("");
+               }
+               return new IOSFileHandle(parent, type);
+       }
+
+       public File file () {
+               if (type == FileType.External) return new File(IOSFiles.externalPath, file.getPath());
+               if (type == FileType.Local) return new File(IOSFiles.localPath, file.getPath());
+               return file;
+       }
+}
\ No newline at end of file
diff --git a/backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSFiles.java b/backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSFiles.java
new file mode 100644 (file)
index 0000000..eeb5fef
--- /dev/null
@@ -0,0 +1,73 @@
+package com.badlogic.gdx.backends.robovm;
+
+import java.io.File;
+
+import org.robovm.cocoatouch.foundation.NSBundle;
+
+import com.badlogic.gdx.Files;
+import com.badlogic.gdx.files.FileHandle;
+import com.badlogic.gdx.utils.GdxRuntimeException;
+
+public class IOSFiles implements Files {
+       // TODO: Use NSSearchPathForDirectoriesInDomains instead?
+       // $HOME should point to the app root dir.
+       static final String appDir = System.getenv("HOME");
+       static final String externalPath = appDir + "/Documents";
+       static final String localPath = appDir + "/Library/local";
+       static final String internalPath = NSBundle.getMainBundle().getBundlePath();
+       
+       public IOSFiles() {
+               new FileHandle(externalPath).mkdirs();
+               new FileHandle(localPath).mkdirs();
+       }
+       
+       @Override
+       public FileHandle getFileHandle (String fileName, FileType type) {
+               return new IOSFileHandle(fileName, type);
+       }
+
+       @Override
+       public FileHandle classpath (String path) {
+               return new IOSFileHandle(path, FileType.Classpath);
+       }
+
+       @Override
+       public FileHandle internal (String path) {
+               return new IOSFileHandle(new File(internalPath, path), FileType.Internal);
+       }
+
+       @Override
+       public FileHandle external (String path) {
+               return new IOSFileHandle(path, FileType.External);
+       }
+
+       @Override
+       public FileHandle absolute (String path) {
+               return new IOSFileHandle(path, FileType.Absolute);
+       }
+
+       @Override
+       public FileHandle local (String path) {
+               return new IOSFileHandle(path, FileType.Local);
+       }
+
+       @Override
+       public String getExternalStoragePath() {
+               return externalPath;
+       }
+
+       @Override
+       public boolean isExternalStorageAvailable() {
+               return true;
+       }
+
+       @Override
+       public String getLocalStoragePath() {
+               return localPath;
+       }
+
+       @Override
+       public boolean isLocalStorageAvailable() {
+               return true;
+       }
+}
\ No newline at end of file
diff --git a/backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSGLES20.java b/backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSGLES20.java
new file mode 100644 (file)
index 0000000..e7f225e
--- /dev/null
@@ -0,0 +1,307 @@
+package com.badlogic.gdx.backends.robovm;
+
+import java.nio.Buffer;
+import java.nio.FloatBuffer;
+import java.nio.IntBuffer;
+
+import com.badlogic.gdx.Gdx;
+import com.badlogic.gdx.graphics.GL20;
+import com.badlogic.gdx.graphics.GLCommon;
+
+
+public class IOSGLES20 implements GL20, GLCommon
+{      
+       public IOSGLES20() {
+               init();
+       }
+       
+       private static native void init( );     
+       
+       public native void glActiveTexture ( int texture );
+
+       public native void glAttachShader ( int program, int shader );
+
+       public native void glBindAttribLocation ( int program, int index, String name );
+
+       public native void glBindBuffer ( int target, int buffer );
+
+       public native void glBindFramebuffer ( int target, int framebuffer );
+
+       public native void glBindRenderbuffer ( int target, int renderbuffer );
+
+       public native void glBindTexture ( int target, int texture );
+
+       public native void glBlendColor ( float red, float green, float blue, float alpha );
+
+       public native void glBlendEquation (  int mode  );
+
+       public native void glBlendEquationSeparate ( int modeRGB, int modeAlpha );
+
+       public native void glBlendFunc ( int sfactor, int dfactor );
+
+       public native void glBlendFuncSeparate ( int srcRGB, int dstRGB, int srcAlpha, int dstAlpha );
+
+       public native void glBufferData ( int target, int size, Buffer data, int usage );
+
+       public native void glBufferSubData ( int target, int offset, int size, Buffer data );
+
+       public native int glCheckFramebufferStatus ( int target );
+
+       public native void glClear ( int mask );
+
+       public native void glClearColor ( float red, float green, float blue, float alpha );
+
+       public native void glClearDepthf ( float depth );
+
+       public native void glClearStencil ( int s );
+
+       public native void glColorMask ( boolean red, boolean green, boolean blue, boolean alpha );
+
+       public native void glCompileShader ( int shader );
+
+       public native void glCompressedTexImage2D ( int target, int level, int internalformat, int width, int height, int border, int imageSize, Buffer data );
+
+       public native void glCompressedTexSubImage2D ( int target, int level, int xoffset, int yoffset, int width, int height, int format, int imageSize, Buffer data );
+
+       public native void glCopyTexImage2D ( int target, int level, int internalformat, int x, int y, int width, int height, int border );
+
+       public native void glCopyTexSubImage2D ( int target, int level, int xoffset, int yoffset, int x, int y, int width, int height );
+
+       public native int glCreateProgram (  );
+
+       public native int glCreateShader ( int type );
+
+       public native void glCullFace ( int mode );
+
+       public native void glDeleteBuffers ( int n, IntBuffer buffers );
+
+       public native void glDeleteFramebuffers ( int n, IntBuffer framebuffers );
+
+       public native void glDeleteProgram ( int program );
+
+       public native void glDeleteRenderbuffers ( int n, IntBuffer renderbuffers );
+
+       public native void glDeleteShader ( int shader );
+
+       public native void glDeleteTextures ( int n, IntBuffer textures );
+
+       public native void glDepthFunc ( int func );
+
+       public native void glDepthMask ( boolean flag );
+
+       public native void glDepthRangef ( float zNear, float zFar );
+
+       public native void glDetachShader ( int program, int shader );
+
+       public native void glDisable ( int cap );
+
+       public native void glDisableVertexAttribArray ( int index );
+
+       public native void glDrawArrays ( int mode, int first, int count );
+
+       public native void glDrawElements ( int mode, int count, int type, Buffer indices );
+       
+       public native void glDrawElements ( int mode, int count, int type, int indices );
+
+       public native void glEnable ( int cap );
+
+       public native void glEnableVertexAttribArray ( int index );
+
+       public native void glFinish (  );
+
+       public native void glFlush (  );
+
+       public native void glFramebufferRenderbuffer ( int target, int attachment, int renderbuffertarget, int renderbuffer );
+
+       public native void glFramebufferTexture2D ( int target, int attachment, int textarget, int texture, int level );
+
+       public native void glFrontFace ( int mode );
+
+       public native void glGenBuffers ( int n, IntBuffer buffers );
+
+       public native void glGenerateMipmap ( int target );
+
+       public native void glGenFramebuffers ( int n, IntBuffer framebuffers );
+
+       public native void glGenRenderbuffers ( int n, IntBuffer renderbuffers );
+
+       public native void glGenTextures ( int n, IntBuffer textures );
+
+       public native String glGetActiveAttrib ( int program, int index, IntBuffer size, Buffer type );
+
+       public native String glGetActiveUniform ( int program, int index, IntBuffer size, Buffer type );
+
+       public native void glGetAttachedShaders ( int program, int maxcount, Buffer count, IntBuffer shaders );
+
+       public native int glGetAttribLocation ( int program, String name );
+
+       public native void glGetBooleanv ( int pname, Buffer params );
+
+       public native void glGetBufferParameteriv ( int target, int pname, IntBuffer params );
+
+       public native int glGetError (  );
+
+       public native void glGetFloatv ( int pname, FloatBuffer params );
+
+       public native void glGetFramebufferAttachmentParameteriv ( int target, int attachment, int pname, IntBuffer params );
+
+       public native void glGetIntegerv ( int pname, IntBuffer params );
+
+       public native void glGetProgramiv ( int program, int pname, IntBuffer params );
+
+       public native String glGetProgramInfoLog ( int program );
+
+       public native void glGetRenderbufferParameteriv ( int target, int pname, IntBuffer params );
+
+       public native void glGetShaderiv ( int shader, int pname, IntBuffer params );
+
+       public native String glGetShaderInfoLog ( int shader );
+
+       public native void glGetShaderPrecisionFormat ( int shadertype, int precisiontype, IntBuffer range, IntBuffer precision );
+
+       public native void glGetShaderSource ( int shader, int bufsize, Buffer length, String source );
+
+       public native String glGetString ( int name );
+
+       public native void glGetTexParameterfv ( int target, int pname, FloatBuffer params );
+
+       public native void glGetTexParameteriv ( int target, int pname, IntBuffer params );
+
+       public native void glGetUniformfv ( int program, int location, FloatBuffer params );
+
+       public native void glGetUniformiv ( int program, int location, IntBuffer params );
+
+       public native int glGetUniformLocation ( int program, String name );
+
+       public native void glGetVertexAttribfv ( int index, int pname, FloatBuffer params );
+
+       public native void glGetVertexAttribiv ( int index, int pname, IntBuffer params );
+
+       public native void glGetVertexAttribPointerv ( int index, int pname, Buffer pointer );
+
+       public native void glHint ( int target, int mode );
+
+       public native boolean glIsBuffer ( int buffer );
+
+       public native boolean glIsEnabled ( int cap );
+
+       public native boolean glIsFramebuffer ( int framebuffer );
+
+       public native boolean glIsProgram ( int program );
+
+       public native boolean glIsRenderbuffer ( int renderbuffer );
+
+       public native boolean glIsShader ( int shader );
+
+       public native boolean glIsTexture ( int texture );
+
+       public native void glLineWidth ( float width );
+
+       public native void glLinkProgram ( int program );
+
+       public native void glPixelStorei ( int pname, int param );
+
+       public native void glPolygonOffset ( float factor, float units );
+
+       public native void glReadPixels ( int x, int y, int width, int height, int format, int type, Buffer pixels );
+
+       public native void glReleaseShaderCompiler (  );
+
+       public native void glRenderbufferStorage ( int target, int internalformat, int width, int height );
+
+       public native void glSampleCoverage ( float value, boolean invert );
+
+       public native void glScissor ( int x, int y, int width, int height );
+
+       public native void glShaderBinary ( int n, IntBuffer shaders, int binaryformat, Buffer binary, int length );
+
+       public native void glShaderSource ( int shader, String string );
+
+       public native void glStencilFunc ( int func, int ref, int mask );
+
+       public native void glStencilFuncSeparate ( int face, int func, int ref, int mask );
+
+       public native void glStencilMask ( int mask );
+
+       public native void glStencilMaskSeparate ( int face, int mask );
+
+       public native void glStencilOp ( int fail, int zfail, int zpass );
+
+       public native void glStencilOpSeparate ( int face, int fail, int zfail, int zpass );
+
+       public native void glTexImage2D ( int target, int level, int internalformat, int width, int height, int border, int format, int type, Buffer pixels );
+
+       public native void glTexParameterf ( int target, int pname, float param );
+
+       public native void glTexParameterfv ( int target, int pname, FloatBuffer params );
+
+       public native void glTexParameteri ( int target, int pname, int param );
+
+       public native void glTexParameteriv ( int target, int pname, IntBuffer params );
+
+       public native void glTexSubImage2D ( int target, int level, int xoffset, int yoffset, int width, int height, int format, int type, Buffer pixels );
+
+       public native void glUniform1f ( int location, float x );
+
+       public native void glUniform1fv ( int location, int count, FloatBuffer v );
+
+       public native void glUniform1i ( int location, int x );
+
+       public native void glUniform1iv ( int location, int count, IntBuffer v );
+
+       public native void glUniform2f ( int location, float x, float y );
+
+       public native void glUniform2fv ( int location, int count, FloatBuffer v );
+
+       public native void glUniform2i ( int location, int x, int y );
+
+       public native void glUniform2iv ( int location, int count, IntBuffer v );
+
+       public native void glUniform3f ( int location, float x, float y, float z );
+
+       public native void glUniform3fv ( int location, int count, FloatBuffer v );
+
+       public native void glUniform3i ( int location, int x, int y, int z );
+
+       public native void glUniform3iv ( int location, int count, IntBuffer v );
+
+       public native void glUniform4f ( int location, float x, float y, float z, float w );
+
+       public native void glUniform4fv ( int location, int count, FloatBuffer v );
+
+       public native void glUniform4i ( int location, int x, int y, int z, int w );
+
+       public native void glUniform4iv ( int location, int count, IntBuffer v );
+
+       public native void glUniformMatrix2fv ( int location, int count, boolean transpose, FloatBuffer value );
+
+       public native void glUniformMatrix3fv ( int location, int count, boolean transpose, FloatBuffer value );
+
+       public native void glUniformMatrix4fv ( int location, int count, boolean transpose, FloatBuffer value );
+
+       public native void glUseProgram ( int program );
+
+       public native void glValidateProgram ( int program );
+
+       public native void glVertexAttrib1f ( int indx, float x );
+
+       public native void glVertexAttrib1fv ( int indx, FloatBuffer values );
+
+       public native void glVertexAttrib2f ( int indx, float x, float y );
+
+       public native void glVertexAttrib2fv ( int indx, FloatBuffer values );
+
+       public native void glVertexAttrib3f ( int indx, float x, float y, float z );
+
+       public native void glVertexAttrib3fv ( int indx, FloatBuffer values );
+
+       public native void glVertexAttrib4f ( int indx, float x, float y, float z, float w );
+
+       public native void glVertexAttrib4fv ( int indx, FloatBuffer values );
+
+       public native void glVertexAttribPointer ( int indx, int size, int type, boolean normalized, int stride, Buffer ptr );
+       
+       public native void glVertexAttribPointer ( int indx, int size, int type, boolean normalized, int stride, int ptr );
+
+       public native void glViewport ( int x, int y, int width, int height );
+}
\ No newline at end of file
diff --git a/backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSGraphics.java b/backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSGraphics.java
new file mode 100644 (file)
index 0000000..2ed352b
--- /dev/null
@@ -0,0 +1,441 @@
+package com.badlogic.gdx.backends.robovm;
+
+import org.robovm.cocoatouch.coregraphics.CGPoint;
+import org.robovm.cocoatouch.coregraphics.CGRect;
+import org.robovm.cocoatouch.coregraphics.CGSize;
+import org.robovm.cocoatouch.foundation.NSObject;
+import org.robovm.cocoatouch.foundation.NSSet;
+import org.robovm.cocoatouch.glkit.GLKView;
+import org.robovm.cocoatouch.glkit.GLKViewController;
+import org.robovm.cocoatouch.glkit.GLKViewControllerDelegate;
+import org.robovm.cocoatouch.glkit.GLKViewDelegate;
+import org.robovm.cocoatouch.glkit.GLKViewDrawableColorFormat;
+import org.robovm.cocoatouch.opengles.EAGLContext;
+import org.robovm.cocoatouch.opengles.EAGLRenderingAPI;
+import org.robovm.cocoatouch.uikit.UIDevice;
+import org.robovm.cocoatouch.uikit.UIEvent;
+import org.robovm.cocoatouch.uikit.UIInterfaceOrientation;
+import org.robovm.cocoatouch.uikit.UIScreen;
+import org.robovm.cocoatouch.uikit.UIUserInterfaceIdiom;
+import org.robovm.objc.Selector;
+import org.robovm.objc.annotation.BindSelector;
+import org.robovm.rt.bro.annotation.Callback;
+
+import com.badlogic.gdx.Gdx;
+import com.badlogic.gdx.Graphics;
+import com.badlogic.gdx.LifecycleListener;
+import com.badlogic.gdx.graphics.GL10;
+import com.badlogic.gdx.graphics.GL11;
+import com.badlogic.gdx.graphics.GL20;
+import com.badlogic.gdx.graphics.GLCommon;
+import com.badlogic.gdx.utils.Array;
+
+// FIXME add GL 1.x support by ripping Android's classes
+public class IOSGraphics extends NSObject implements Graphics, GLKViewDelegate, GLKViewControllerDelegate {
+
+       private static final String tag = "IOSGraphics";
+
+       static class IOSUIViewController extends GLKViewController {
+               final IOSApplication app;
+               final IOSGraphics graphics;
+               IOSUIViewController (IOSApplication app, IOSGraphics graphics) {
+                       this.app = app;
+                       this.graphics = graphics;
+               }
+
+               @Override
+       public void viewDidAppear (boolean animated) {
+                       super.viewDidAppear(animated);
+                       graphics.makeCurrent();
+               app.listener.create();
+       }
+       
+               @Override
+               public void didRotate (UIInterfaceOrientation orientation) {
+                       super.didRotate(orientation);
+                       // get the view size and update graphics
+                       // FIXME: supporting BOTH (landscape+portrait at same time) is currently not working correctly (needs fix)
+                       // FIXME screen orientation needs to be stored for Input#getNativeOrientation
+                       CGSize bounds = app.getBounds(this);
+                       graphics.width = (int)bounds.width();
+                       graphics.height = (int)bounds.height();
+                       graphics.makeCurrent(); // not sure if that's needed? badlogic: yes it is, so resize can do OpenGL stuff, not sure if
+// it's on the correct thread though
+                       app.listener.resize(graphics.width, graphics.height);
+               }
+
+               public boolean shouldAutorotateToInterfaceOrientation (UIInterfaceOrientation orientation) {
+                       // we return "true" if we support the orientation
+                       switch (orientation) {
+                       case LandscapeLeft:
+                       case LandscapeRight:
+                               return app.config.orientationLandscape;
+                       default:
+                               // assume portrait
+                               return app.config.orientationPortrait;
+                       }
+               }
+               @Callback @BindSelector("shouldAutorotateToInterfaceOrientation:")
+               private static boolean shouldAutorotateToInterfaceOrientation (IOSUIViewController self, Selector sel, UIInterfaceOrientation orientation) {
+                       return self.shouldAutorotateToInterfaceOrientation(orientation);
+               }
+       }
+       
+       static class IOSUIView extends GLKView {
+
+               public IOSUIView (CGRect frame, EAGLContext context) {
+                       super(frame, context);
+               }
+       }
+       
+       IOSApplication app;
+       IOSInput input;
+       GL20 gl20;
+       int width;
+       int height;
+       long lastFrameTime;
+       float deltaTime;
+       long framesStart;
+       int frames;
+       int fps;
+       BufferFormat bufferFormat;
+       String extensions;
+
+       private float ppiX = 0;
+       private float ppiY = 0;
+       private float ppcX = 0;
+       private float ppcY = 0;
+       private float density = 1;
+       
+       volatile boolean paused;
+       boolean wasPaused;
+
+       EAGLContext context;
+       GLKView view;
+       IOSUIViewController viewController;
+       
+       public IOSGraphics (CGSize bounds, IOSApplication app, IOSInput input, GL20 gl20) {
+               // setup view and OpenGL
+               width = (int)bounds.width();
+               height = (int)bounds.height();
+               app.debug(tag, bounds.width() + "x" + bounds.height() + ", " + UIScreen.getMainScreen().getScale());
+               this.gl20 = gl20;
+               
+               context = new EAGLContext(EAGLRenderingAPI.OpenGLES2);
+               
+      view = new GLKView(new CGRect(new CGPoint(0, 0), bounds), context) {
+       @Override
+       public void touchesBegan (NSSet touches, UIEvent event) {
+               super.touchesBegan(touches, event);
+               IOSGraphics.this.input.touchDown(touches, event);
+       }
+
+       @Override
+       public void touchesCancelled (NSSet touches, UIEvent event) {
+               super.touchesCancelled(touches, event);
+               IOSGraphics.this.input.touchUp(touches, event);
+       }
+
+       @Override
+       public void touchesEnded (NSSet touches, UIEvent event) {
+               super.touchesEnded(touches, event);
+               IOSGraphics.this.input.touchUp(touches, event);
+       }
+
+       @Override
+       public void touchesMoved (NSSet touches, UIEvent event) {
+               super.touchesMoved(touches, event);
+               IOSGraphics.this.input.touchMoved(touches, event);
+       }
+
+       @Override
+       public void draw (CGRect rect) {
+               IOSGraphics.this.draw(this, rect);
+       }
+       
+      };
+      view.setDelegate(this);
+      view.setDrawableColorFormat(GLKViewDrawableColorFormat.RGB565);
+               
+      viewController = new IOSUIViewController(app, this);
+      viewController.setView(view);
+      viewController.setDelegate(this);
+      viewController.setPreferredFramesPerSecond(60);
+      
+               this.app = app;
+               this.input = input;
+
+               // FIXME fix this if we add rgba/depth/stencil flags to IOSApplicationConfiguration
+               bufferFormat = new BufferFormat(5, 6, 5, 0, 16, 0, 0, false);
+               this.gl20 = gl20;
+
+               // determine display density and PPI (PPI values via Wikipedia!)
+               density = 1f;
+
+//             if ((UIScreen.getMainScreen().respondsToSelector(new Selector("scale")))) {
+                       float scale = UIScreen.getMainScreen().getScale();
+                       app.debug(tag, "Calculating density, UIScreen.mainScreen.scale: " + scale);
+                       if (scale == 2f) density = 2f;
+//             }
+
+               int ppi;
+               if (UIDevice.getCurrentDevice().getUserInterfaceIdiom() == UIUserInterfaceIdiom.Pad) {
+                       // iPad
+                       ppi = Math.round(density * 132);
+               } else {
+                       // iPhone or iPodTouch
+                       ppi = Math.round(density * 163);
+               }
+               ppiX = ppi;
+               ppiY = ppi;
+               ppcX = ppiX / 2.54f;
+               ppcY = ppcY / 2.54f;
+               app.debug(tag, "Display: ppi=" + ppi + ", density=" + density);
+
+               // time + FPS
+               lastFrameTime = System.nanoTime();
+               framesStart = lastFrameTime;
+               
+               paused = false;
+               wasPaused = true;
+       }
+       
+       public void resume() {
+               paused = false;
+       }
+       
+       public void pause() {
+               paused = true;
+       }
+
+       @Override
+       public void draw (GLKView view, CGRect rect) {
+               if (paused) {
+                       if (!wasPaused) {
+                               Array<LifecycleListener> listeners = app.lifecycleListeners;
+                               synchronized(listeners) {
+                                       for(LifecycleListener listener: listeners) {
+                                               listener.pause();
+                                       }
+                               }
+                               app.listener.pause();
+                               wasPaused = true;
+                       }
+                       return;
+               } else {
+                       if (wasPaused) {
+                               Array<LifecycleListener> listeners = app.lifecycleListeners;
+                               synchronized(listeners) {
+                                       for(LifecycleListener listener: listeners) {
+                                               listener.resume();
+                                       }
+                               }
+                               app.listener.resume();
+                               wasPaused = false;
+                       }
+               }
+
+               long time = System.nanoTime();
+               deltaTime = (time - lastFrameTime) / 1000000000.0f;
+               lastFrameTime = time;
+
+               frames++;
+               if (time - framesStart >= 1000000000l) {
+                       framesStart = time;
+                       fps = frames;
+                       frames = 0;
+               }
+
+               makeCurrent();
+               ((IOSInput)Gdx.input).processEvents();
+               app.listener.render();
+//             SwapBuffers();
+       }
+       
+       void makeCurrent() {
+               EAGLContext.setCurrentContext(context);
+       }
+       
+       @Override
+       public void update (GLKViewController controller) {
+               makeCurrent();
+               app.processRunnables();
+       }
+
+       @Override
+       public void willPause (GLKViewController controller, boolean pause) {
+               if (pause) {
+                       pause();
+               } else {
+                       resume();
+               }
+       }
+       
+//     @Override
+//     protected void OnResize (EventArgs event) {
+//             super.OnResize(event);
+//
+//             // not used on iOS
+//             // FIXME resize could happen if app supports both portrait and landscape, so this should be implemented
+//             Gdx.app.debug("IOSGraphics", "iOS OnResize(...) is not implement (don't think it is needed?).");
+//     }
+
+       @Override
+       public boolean isGL11Available () {
+               return false;
+       }
+
+       @Override
+       public boolean isGL20Available () {
+               return true;
+       }
+
+       @Override
+       public GLCommon getGLCommon () {
+               return gl20;
+       }
+
+       @Override
+       public GL10 getGL10 () {
+               return null;
+       }
+
+       @Override
+       public GL11 getGL11 () {
+               return null;
+       }
+
+       @Override
+       public GL20 getGL20 () {
+               return gl20;
+       }
+
+       @Override
+       public int getWidth () {
+               return width;
+       }
+
+       @Override
+       public int getHeight () {
+               return height;
+       }
+
+       @Override
+       public float getDeltaTime () {
+               return deltaTime;
+       }
+
+       @Override
+       public float getRawDeltaTime () {
+               return deltaTime;
+       }
+
+       @Override
+       public int getFramesPerSecond () {
+               return fps;
+       }
+
+       @Override
+       public GraphicsType getType () {
+               return GraphicsType.iOSGL;
+       }
+
+       @Override
+       public float getPpiX () {
+               return ppiX;
+       }
+
+       @Override
+       public float getPpiY () {
+               return ppiY;
+       }
+
+       @Override
+       public float getPpcX () {
+               return ppcX;
+       }
+
+       @Override
+       public float getPpcY () {
+               return ppcY;
+       }
+
+       /** Returns the display density.
+        * 
+        * @return 1.0f for non-retina devices, 2.0f for retina devices. */
+       @Override
+       public float getDensity () {
+               return density;
+       }
+
+       @Override
+       public boolean supportsDisplayModeChange () {
+               return false;
+       }
+
+       @Override
+       public DisplayMode[] getDisplayModes () {
+               return new DisplayMode[] {getDesktopDisplayMode()};
+       }
+
+       @Override
+       public DisplayMode getDesktopDisplayMode () {
+               return new IOSDisplayMode(getWidth(), getHeight(), 60, 0);
+       }
+
+       private static class IOSDisplayMode extends DisplayMode {
+               protected IOSDisplayMode (int width, int height, int refreshRate, int bitsPerPixel) {
+                       super(width, height, refreshRate, bitsPerPixel);
+               }
+       }
+
+       @Override
+       public boolean setDisplayMode (DisplayMode displayMode) {
+               return false;
+       }
+
+       @Override
+       public boolean setDisplayMode (int width, int height, boolean fullscreen) {
+               return false;
+       }
+
+       @Override
+       public void setTitle (String title) {
+       }
+
+       @Override
+       public void setVSync (boolean vsync) {
+       }
+
+       @Override
+       public BufferFormat getBufferFormat () {
+               return bufferFormat;
+       }
+
+       @Override
+       public boolean supportsExtension (String extension) {
+               if (extensions == null) extensions = Gdx.gl.glGetString(GL10.GL_EXTENSIONS);
+               return extensions.contains(extension);
+       }
+
+       @Override
+       public void setContinuousRendering (boolean isContinuous) {
+               // FIXME implement this if possible
+       }
+
+       @Override
+       public boolean isContinuousRendering () {
+               // FIXME implement this if possible
+               return true;
+       }
+
+       @Override
+       public void requestRendering () {
+               // FIXME implement this if possible
+       }
+
+       @Override
+       public boolean isFullscreen () {
+               return true;
+       }
+}
\ No newline at end of file
diff --git a/backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSInput.java b/backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSInput.java
new file mode 100644 (file)
index 0000000..c3f2d60
--- /dev/null
@@ -0,0 +1,424 @@
+package com.badlogic.gdx.backends.robovm;
+
+import org.robovm.cocoatouch.coregraphics.CGPoint;
+import org.robovm.cocoatouch.foundation.NSArray;
+import org.robovm.cocoatouch.foundation.NSSet;
+import org.robovm.cocoatouch.uikit.UIAlertView;
+import org.robovm.cocoatouch.uikit.UIAlertViewDelegate;
+import org.robovm.cocoatouch.uikit.UIAlertViewStyle;
+import org.robovm.cocoatouch.uikit.UIEvent;
+import org.robovm.cocoatouch.uikit.UITextField;
+import org.robovm.cocoatouch.uikit.UITouch;
+import org.robovm.cocoatouch.uikit.UITouchPhase;
+import org.robovm.cocoatouch.uikit.UIView;
+import org.robovm.objc.ObjCClass;
+
+import com.badlogic.gdx.Input;
+import com.badlogic.gdx.InputProcessor;
+import com.badlogic.gdx.utils.Array;
+import com.badlogic.gdx.utils.GdxRuntimeException;
+import com.badlogic.gdx.utils.Pool;
+
+public class IOSInput implements Input {
+       static final int MAX_TOUCHES = 20;
+
+       static {
+               // HACK: Make sure UITouch has been registered
+               ObjCClass.getByType(UITouch.class);
+       }
+       
+       IOSApplication app;
+       IOSApplicationConfiguration config;
+       int[] deltaX = new int[MAX_TOUCHES];
+       int[] deltaY = new int[MAX_TOUCHES];
+       int[] touchX = new int[MAX_TOUCHES];
+       int[] touchY = new int[MAX_TOUCHES];
+       // we store the pointer to the UITouch struct here, or 0
+       int[] touchDown = new int[MAX_TOUCHES];
+       int numTouched = 0;
+       boolean justTouched = false;
+       Pool<TouchEvent> touchEventPool = new Pool<TouchEvent>() {
+               @Override
+               protected TouchEvent newObject() {
+                       return new TouchEvent();
+               }
+       };
+       Array<TouchEvent> touchEvents = new Array<TouchEvent>();
+       TouchEvent currentEvent = null;
+       float[] acceleration = new float[3];
+       InputProcessor inputProcessor = null;
+       
+       public IOSInput(IOSApplication app) {
+               this.app = app;
+               this.config = app.config;
+       }
+       
+       void setupPeripherals() {
+               setupAccelerometer();
+       }
+
+       private void setupAccelerometer() {
+//             if(config.useAccelerometer) {
+//                     UIAccelerometer.get_SharedAccelerometer().set_Delegate(new UIAccelerometerDelegate() {
+//
+//                             @Override
+//                             public void DidAccelerate(UIAccelerometer accelerometer, UIAcceleration values) {
+//                                     //super.DidAccelerate(accelerometer, values);
+//                                     // FIXME take orientation into account, these values here get flipped by iOS...
+//                                     acceleration[0] = (float)values.get_X() * 10;
+//                                     acceleration[1] = (float)values.get_Y() * 10;
+//                                     acceleration[2] = (float)values.get_Z() * 10;
+//                             }
+//                     });
+//                     UIAccelerometer.get_SharedAccelerometer().set_UpdateInterval(config.accelerometerUpdate);
+//             }
+       }
+
+       @Override
+       public float getAccelerometerX() {
+               return acceleration[0];
+       }
+
+       @Override
+       public float getAccelerometerY() {
+               return acceleration[1];
+       }
+
+       @Override
+       public float getAccelerometerZ() {
+               return acceleration[2];
+       }
+
+       @Override
+       public float getAzimuth() {
+               // FIXME implement this
+               return 0;
+       }
+
+       @Override
+       public float getPitch() {
+               // FIXME implement this
+               return 0;
+       }
+
+       @Override
+       public float getRoll() {
+               // FIXME implement this
+               return 0;
+       }
+
+       @Override
+       public void getRotationMatrix(float[] matrix) {
+               // FIXME implement this
+       }
+
+       @Override
+       public int getX() {
+               return touchX[0];
+       }
+
+       @Override
+       public int getX(int pointer) {
+               return touchX[pointer];
+       }
+
+       @Override
+       public int getDeltaX() {
+               return deltaX[0];
+       }
+
+       @Override
+       public int getDeltaX(int pointer) {
+               return deltaX[pointer];
+       }
+
+       @Override
+       public int getY() {
+               return touchY[0];
+       }
+
+       @Override
+       public int getY(int pointer) {
+               return touchY[pointer];
+       }
+
+       @Override
+       public int getDeltaY() {
+               return deltaY[0];
+       }
+
+       @Override
+       public int getDeltaY(int pointer) {
+               return deltaY[pointer];
+       }
+
+       @Override
+       public boolean isTouched() {
+               return touchDown[0] != 0;
+       }
+
+       @Override
+       public boolean justTouched() {
+               return justTouched;
+       }
+
+       @Override
+       public boolean isTouched(int pointer) {
+               return touchDown[pointer] != 0;
+       }
+
+       @Override
+       public boolean isButtonPressed(int button) {
+               return button == Buttons.LEFT && numTouched > 0;
+       }
+
+       @Override
+       public boolean isKeyPressed(int key) {
+               return false;
+       }
+
+       @Override
+       public void getTextInput(TextInputListener listener, String title, String text) {
+               final UIAlertView uiAlertView = buildUIAlertView(listener, title, text);
+               //app.uiViewController.add(uiAlertView);
+               uiAlertView.show();
+       }
+       
+       /** Builds an {@link UIAlertView} with an added {@link UITextField} for inputting text.
+        * @param listener Text input listener
+        * @param title Dialog title
+        * @param text Text for text field
+        * @return UiAlertView */
+       private UIAlertView buildUIAlertView (final TextInputListener listener, String title, String text) {
+               UIAlertViewDelegate delegate = new UIAlertViewDelegate.Adapter() {
+                       @Override
+                       public void clicked (UIAlertView view, int clicked) {
+                               if (clicked == 0) {
+                                       // user clicked "Cancel" button
+                                       listener.canceled();
+                               } else if (clicked == 1) {
+                                       // user clicked "Ok" button
+                                       NSArray<UIView> views = view.getSubviews();
+                                       for (UIView uiView : views) {
+                                               // find text field from sub views
+                                               if (uiView != null && uiView instanceof UITextField) {
+                                                       UITextField tf = (UITextField)uiView;
+                                                       listener.input(tf.getText());
+                                               }
+                                       }
+                               }
+                       }
+
+                       @Override
+                       public void cancel (UIAlertView view) {
+                               listener.canceled();
+                       }
+               };
+
+               // build the view
+               final UIAlertView uiAlertView = new UIAlertView();
+               uiAlertView.setTitle(title);
+               uiAlertView.addButton("Cancel");
+               uiAlertView.addButton("Ok");
+               uiAlertView.setAlertViewStyle(UIAlertViewStyle.PlainTextInput);
+               uiAlertView.setDelegate(delegate);
+
+               for (UIView uiView : (NSArray<UIView>) uiAlertView.getSubviews()) {
+                       // find text field from sub views and add default text
+                       if (uiView != null && uiView instanceof UITextField) {
+                               UITextField tf = (UITextField)uiView;
+                               tf.setText(text);
+                       }
+               }
+
+               return uiAlertView;
+       }
+
+       @Override
+       public void getPlaceholderTextInput(TextInputListener listener, String title, String placeholder) {
+               // FIXME implement this
+       }
+
+       @Override
+       public void setOnscreenKeyboardVisible(boolean visible) {
+       }
+
+       @Override
+       public void vibrate(int milliseconds) {
+               // FIXME implement this
+       }
+
+       @Override
+       public void vibrate(long[] pattern, int repeat) {
+               // FIXME implement this
+       }
+
+       @Override
+       public void cancelVibrate() {
+               // FIXME implement this
+       }
+
+       @Override
+       public long getCurrentEventTime() {
+               return currentEvent.timestamp;
+       }
+
+       @Override
+       public void setCatchBackKey(boolean catchBack) {
+       }
+
+       @Override
+       public void setCatchMenuKey(boolean catchMenu) {
+       }
+
+       @Override
+       public void setInputProcessor(InputProcessor processor) {
+               this.inputProcessor = processor;
+       }
+
+       @Override
+       public InputProcessor getInputProcessor() {
+               return inputProcessor;
+       }
+
+       @Override
+       public boolean isPeripheralAvailable(Peripheral peripheral) {
+               if(peripheral == Peripheral.Accelerometer && config.useAccelerometer) return true;
+               if(peripheral == Peripheral.MultitouchScreen) return true;
+               // FIXME implement this (not sure if possible)
+//             if(peripheral == Peripheral.OnscreenKeyboard) return true;
+               // FIXME implement this
+//             if(peripheral == Peripheral.Compass) return true;
+               
+               return false;
+       }
+
+       @Override
+       public int getRotation() {
+               // FIXME implement this
+               return 0;
+       }
+
+       @Override
+       public Orientation getNativeOrientation() {
+               // FIXME implement this
+               return null;
+       }
+
+       @Override
+       public void setCursorCatched(boolean catched) {
+       }
+
+       @Override
+       public boolean isCursorCatched() {
+               return false;
+       }
+
+       @Override
+       public void setCursorPosition(int x, int y) {
+       }
+
+       public void touchDown(NSSet touches, UIEvent event) {
+               toTouchEvents(touches, event);
+       }
+
+       public void touchUp(NSSet touches, UIEvent event) {
+               toTouchEvents(touches, event);
+       }
+
+       public void touchMoved(NSSet touches, UIEvent event) {
+               toTouchEvents(touches, event);
+       }
+       
+       void processEvents() {
+               synchronized(touchEvents) {
+                       justTouched = false;
+                       for(TouchEvent event: touchEvents) {
+                               currentEvent = event;
+                               switch(event.phase) {
+                               case Began:
+                                       if(inputProcessor != null) inputProcessor.touchDown(event.x, event.y, event.pointer, Buttons.LEFT);
+                                       if(numTouched == 1)
+                                               justTouched = true;
+                                       break;
+                               case Cancelled:
+                               case Ended:
+                                       if(inputProcessor != null) inputProcessor.touchUp(event.x, event.y, event.pointer, Buttons.LEFT);
+                                       break;
+                               case Moved:
+                               case Stationary:
+                                       if(inputProcessor != null) inputProcessor.touchDragged(event.x, event.y, event.pointer);
+                                       break;
+                               }
+                       }
+                       touchEventPool.freeAll(touchEvents);
+                       touchEvents.clear();
+               }
+       }
+       
+       private int getFreePointer() {
+               for(int i = 0; i < touchDown.length; i++) {
+                       if(touchDown[i] == 0) return i;
+               }
+               throw new GdxRuntimeException("Couldn't find free pointer id!");
+       }
+       
+       private int findPointer(UITouch touch) {
+               int ptr = (int) touch.getHandle();
+               for(int i = 0; i < touchDown.length; i++) {
+                       if(touchDown[i] == ptr) return i;
+               }
+               throw new GdxRuntimeException("Couldn't find pointer id for touch event!");
+       }
+
+       private void toTouchEvents(NSSet touches, UIEvent uiEvent) {
+               for (UITouch touch : (NSSet<UITouch>) touches) {
+                       CGPoint loc = touch.getLocation(touch.getView());
+                       synchronized(touchEvents) {
+                               TouchEvent event = touchEventPool.obtain();
+                               event.x = (int)(loc.x() * app.displayScaleFactor);
+                               event.y = (int)(loc.y() * app.displayScaleFactor);
+                               event.phase = touch.getPhase();
+                               event.timestamp = (long)(touch.getTimestamp() * 1000000000);
+                               touchEvents.add(event);
+                               
+                               if(touch.getPhase() == UITouchPhase.Began) {
+                                       event.pointer = getFreePointer();
+                                       touchDown[event.pointer] = (int) touch.getHandle();
+                                       touchX[event.pointer] = event.x;
+                                       touchY[event.pointer] = event.y;
+                                       deltaX[event.pointer] = 0;
+                                       deltaY[event.pointer] = 0; 
+                                       numTouched++;
+                               }
+                               
+                               if(touch.getPhase() == UITouchPhase.Moved ||
+                                       touch.getPhase() == UITouchPhase.Stationary) {
+                                       event.pointer = findPointer(touch);
+                                       deltaX[event.pointer] = event.x - touchX[event.pointer];
+                                       deltaY[event.pointer] = event.y - touchY[event.pointer]; 
+                                       touchX[event.pointer] = event.x;
+                                       touchY[event.pointer] = event.y;
+                               }
+                               
+                               if(touch.getPhase() == UITouchPhase.Cancelled ||
+                                       touch.getPhase() == UITouchPhase.Ended) {
+                                       event.pointer = findPointer(touch);
+                                       touchDown[event.pointer] = 0; 
+                                       touchX[event.pointer] = event.x;
+                                       touchY[event.pointer] = event.y;
+                                       deltaX[event.pointer] = 0;
+                                       deltaY[event.pointer] = 0;
+                                       numTouched--;
+                               }
+                       }
+               }
+       }
+       
+       static class TouchEvent {
+               UITouchPhase phase;
+               long timestamp;
+               int x, y;
+               int pointer;
+       }
+}
\ No newline at end of file
diff --git a/backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSMusic.java b/backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSMusic.java
new file mode 100644 (file)
index 0000000..83581e9
--- /dev/null
@@ -0,0 +1,72 @@
+package com.badlogic.gdx.backends.robovm;
+
+import com.badlogic.gdx.audio.Music;
+
+/** A music player, suitable for background music. Supports MP3 and WAV files which are played via hardware on iOS.
+ * <p>
+ * Limitations: does not play OGG.
+ * 
+ * @author noblemaster */
+public class IOSMusic implements Music {
+
+       @Override
+       public void play () {
+               // TODO Auto-generated method stub
+               
+       }
+
+       @Override
+       public void pause () {
+               // TODO Auto-generated method stub
+               
+       }
+
+       @Override
+       public void stop () {
+               // TODO Auto-generated method stub
+               
+       }
+
+       @Override
+       public boolean isPlaying () {
+               // TODO Auto-generated method stub
+               return false;
+       }
+
+       @Override
+       public void setLooping (boolean isLooping) {
+               // TODO Auto-generated method stub
+               
+       }
+
+       @Override
+       public boolean isLooping () {
+               // TODO Auto-generated method stub
+               return false;
+       }
+
+       @Override
+       public void setVolume (float volume) {
+               // TODO Auto-generated method stub
+               
+       }
+
+       @Override
+       public float getPosition () {
+               // TODO Auto-generated method stub
+               return 0;
+       }
+
+       @Override
+       public void dispose () {
+               // TODO Auto-generated method stub
+               
+       }
+
+       @Override
+       public float getVolume() {
+               // TODO Auto-generated method stub
+               return 0;
+       }
+
+}
\ No newline at end of file
diff --git a/backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSNet.java b/backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSNet.java
new file mode 100644 (file)
index 0000000..fcae37d
--- /dev/null
@@ -0,0 +1,41 @@
+package com.badlogic.gdx.backends.robovm;
+
+import org.robovm.cocoatouch.foundation.NSURL;
+import org.robovm.cocoatouch.uikit.UIApplication;
+
+import com.badlogic.gdx.Net;
+import com.badlogic.gdx.net.NetJavaImpl;
+import com.badlogic.gdx.net.ServerSocket;
+import com.badlogic.gdx.net.ServerSocketHints;
+import com.badlogic.gdx.net.Socket;
+import com.badlogic.gdx.net.SocketHints;
+
+public class IOSNet implements Net {
+
+       NetJavaImpl netJavaImpl = new NetJavaImpl();
+       final UIApplication uiApp;
+
+       public IOSNet (IOSApplication app) {
+               uiApp = app.uiApp;
+       }
+
+       @Override
+       public void sendHttpRequest (HttpRequest httpRequest, HttpResponseListener httpResponseListener) {
+               netJavaImpl.sendHttpRequest(httpRequest, httpResponseListener);
+       }
+
+       @Override
+       public ServerSocket newServerSocket (Protocol protocol, int port, ServerSocketHints hints) {
+               return new IOSServerSocket(protocol, port, hints);
+       }
+
+       @Override
+       public Socket newClientSocket (Protocol protocol, String host, int port, SocketHints hints) {
+               return new IOSSocket(protocol, host, port, hints);
+       }
+
+       @Override
+       public void openURI (String URI) {
+               uiApp.openURL(new NSURL(URI));
+       }
+}
\ No newline at end of file
diff --git a/backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSPreferences.java b/backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSPreferences.java
new file mode 100644 (file)
index 0000000..321238e
--- /dev/null
@@ -0,0 +1,172 @@
+package com.badlogic.gdx.backends.robovm;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+import org.robovm.cocoatouch.foundation.NSMutableDictionary;
+import org.robovm.cocoatouch.foundation.NSNumber;
+import org.robovm.cocoatouch.foundation.NSObject;
+import org.robovm.cocoatouch.foundation.NSString;
+
+import com.badlogic.gdx.Gdx;
+import com.badlogic.gdx.Preferences;
+
+public class IOSPreferences implements Preferences {
+
+       NSMutableDictionary<NSString, NSObject> nsDictionary;
+       String filePath;
+
+       public IOSPreferences (NSMutableDictionary<NSString, NSObject> nsDictionary, String filePath) {
+               this.nsDictionary = nsDictionary;
+               this.filePath = filePath;
+       }
+
+       @Override
+       public void putBoolean (String key, boolean val) {
+               nsDictionary.put(convertKey(key), NSNumber.valueOf(val));
+       }
+
+       @Override
+       public void putInteger (String key, int val) {
+               nsDictionary.put(convertKey(key), NSNumber.valueOf(val));
+       }
+
+       @Override
+       public void putLong (String key, long val) {
+               nsDictionary.put(convertKey(key), NSNumber.valueOf(val));
+       }
+
+       @Override
+       public void putFloat (String key, float val) {
+               nsDictionary.put(convertKey(key), NSNumber.valueOf(val));
+       }
+
+       @Override
+       public void putString (String key, String val) {
+               nsDictionary.put(convertKey(key), new NSString(val));
+       }
+
+       @Override
+       public void put (Map<String, ?> vals) {
+               Set<String> keySet = vals.keySet();
+               for (String key : keySet) {
+                       Object value = vals.get(key);
+                       if (value instanceof String) {
+                               putString(key, (String)value);
+                       } else if (value instanceof Boolean) {
+                               putBoolean(key, (Boolean)value);
+                       } else if (value instanceof Integer) {
+                               putInteger(key, (Integer)value);
+                       } else if (value instanceof Long) {
+                               putLong(key, (Long)value);
+                       } else if (value instanceof Float) {
+                               putFloat(key, (Float)value);
+                       }
+               }
+       }
+
+       @Override
+       public boolean getBoolean (String key) {
+               NSNumber value = (NSNumber)nsDictionary.get(convertKey(key));
+               if (value == null) return false;
+               return value.booleanValue();
+       }
+
+       @Override
+       public int getInteger (String key) {
+               NSNumber value = (NSNumber)nsDictionary.get(convertKey(key));
+               if (value == null) return 0;
+               return value.intValue();
+       }
+
+       @Override
+       public long getLong (String key) {
+               NSNumber value = (NSNumber)nsDictionary.get(convertKey(key));
+               if (value == null) return 0L;
+               return value.longValue();
+       }
+
+       @Override
+       public float getFloat (String key) {
+               NSNumber value = (NSNumber)nsDictionary.get(convertKey(key));
+               if (value == null) return 0f;
+               return value.floatValue();
+       }
+
+       @Override
+       public String getString (String key) {
+               NSString value = (NSString)nsDictionary.get(convertKey(key));
+               if (value == null) return "";
+               return value.toString();
+       }
+
+       @Override
+       public boolean getBoolean (String key, boolean defValue) {
+               if (!contains(key)) return defValue;
+               return getBoolean(key);
+       }
+
+       @Override
+       public int getInteger (String key, int defValue) {
+               if (!contains(key)) return defValue;
+               return getInteger(key);
+       }
+
+       @Override
+       public long getLong (String key, long defValue) {
+               if (!contains(key)) return defValue;
+               return getLong(key);
+       }
+
+       @Override
+       public float getFloat (String key, float defValue) {
+               if (!contains(key)) return defValue;
+               return getFloat(key);
+       }
+
+       @Override
+       public String getString (String key, String defValue) {
+               if (!contains(key)) return defValue;
+               return getString(key);
+       }
+
+       @Override
+       public Map<String, ?> get () {
+                Map<String, Object> map = new HashMap<String, Object>();
+                for (NSString key : nsDictionary.keySet()) {
+                        NSObject value = nsDictionary.get(key);
+                        map.put(key.toString(), value.toString());
+                }
+                return map;
+       }
+
+       @Override
+       public boolean contains (String key) {
+               return nsDictionary.containsKey(convertKey(key));
+       }
+
+       @Override
+       public void clear () {
+               nsDictionary.clear();
+       }
+
+       @Override
+       public void remove (String key) {
+               nsDictionary.remove(convertKey(key));
+       }
+
+       private NSString convertKey (String key) {
+               return new NSString(key);
+       }
+
+       @Override
+       public void flush () {
+               boolean fileWritten = nsDictionary.writeToFile(filePath, false);
+               if (fileWritten)
+                       Gdx.app.debug("IOSPreferences", "NSDictionary file written");
+               else
+                       Gdx.app.debug("IOSPreferences", "Failed to write NSDictionary to file " + filePath);
+       }
+
+}
\ No newline at end of file
diff --git a/backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSServerSocket.java b/backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSServerSocket.java
new file mode 100644 (file)
index 0000000..3918d91
--- /dev/null
@@ -0,0 +1,82 @@
+package com.badlogic.gdx.backends.robovm;
+
+import java.net.InetSocketAddress;
+
+import com.badlogic.gdx.Net.Protocol;
+import com.badlogic.gdx.net.ServerSocket;
+import com.badlogic.gdx.net.ServerSocketHints;
+import com.badlogic.gdx.net.Socket;
+import com.badlogic.gdx.net.SocketHints;
+import com.badlogic.gdx.utils.GdxRuntimeException;
+
+/**
+ * Server socket implementation using java.net.ServerSocket.
+ * 
+ * @author noblemaster
+ */
+public class IOSServerSocket implements ServerSocket {
+
+       private Protocol protocol;
+       
+       /** Our server or null for disposed, aka closed. */
+       private java.net.ServerSocket server;
+       
+       
+       public IOSServerSocket(Protocol protocol, int port, ServerSocketHints hints) {
+               this.protocol = protocol;
+               
+               // create the server socket
+               try {
+                       // initialize
+                       server = new java.net.ServerSocket();
+                       if (hints != null) {
+                               server.setPerformancePreferences(hints.performancePrefConnectionTime, 
+                                                                                                                       hints.performancePrefLatency, 
+                                                                                                                       hints.performancePrefBandwidth);
+                               server.setReuseAddress(hints.reuseAddress);
+                               server.setSoTimeout(hints.acceptTimeout);
+                               server.setReceiveBufferSize(hints.receiveBufferSize);
+                       }
+                       
+                       // and bind the server...
+                       InetSocketAddress address = new InetSocketAddress(port);
+                       if (hints != null) {
+                               server.bind(address, hints.backlog);
+                       }
+                       else {
+                               server.bind(address);
+                       }
+               }
+               catch (Exception e) {
+                       throw new GdxRuntimeException("Cannot create a server socket at port " + port + ".", e);
+               }
+       }
+
+       @Override
+       public Protocol getProtocol () {
+               return protocol;
+       }
+
+       @Override
+       public Socket accept(SocketHints hints) {
+               try {
+                       return new IOSSocket(server.accept(), hints);
+               }
+               catch (Exception e) {
+                       throw new GdxRuntimeException("Error accepting socket.", e);
+               }
+       }
+
+       @Override
+       public void dispose() {
+               if (server != null) {
+                       try {
+                               server.close();
+                               server = null;
+                       }
+                       catch (Exception e) {
+                               throw new GdxRuntimeException("Error closing server.", e);
+                       }
+               }
+       }
+}
\ No newline at end of file
diff --git a/backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSSocket.java b/backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSSocket.java
new file mode 100644 (file)
index 0000000..d59e18d
--- /dev/null
@@ -0,0 +1,109 @@
+package com.badlogic.gdx.backends.robovm;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.InetSocketAddress;
+
+import com.badlogic.gdx.Net.Protocol;
+import com.badlogic.gdx.net.Socket;
+import com.badlogic.gdx.net.SocketHints;
+import com.badlogic.gdx.utils.GdxRuntimeException;
+
+/**
+ * Socket implementation using java.net.Socket.
+ * 
+ * @author noblemaster
+ */
+public class IOSSocket implements Socket {
+
+       /** Our socket or null for disposed, aka closed. */
+       private java.net.Socket socket;
+       
+       
+       public IOSSocket(Protocol protocol, String host, int port, SocketHints hints) {
+               try {
+                       // create the socket
+                       socket = new java.net.Socket();
+                       applyHints(hints);  // better to call BEFORE socket is connected!
+                       
+                       // and connect...
+                       InetSocketAddress address = new InetSocketAddress(host, port);
+                       if (hints != null) {
+                               socket.connect(address, hints.connectTimeout);
+                       }
+                       else {
+                               socket.connect(address);
+                       }
+               }
+               catch (Exception e) {
+                       throw new GdxRuntimeException("Error making a socket connection to " + host + ":" + port, e);
+               }
+       }
+       
+       public IOSSocket(java.net.Socket socket, SocketHints hints) {
+               this.socket = socket;
+               applyHints(hints);
+       }
+       
+       private void applyHints(SocketHints hints) {
+               if (hints != null) {
+                       try {   
+                               socket.setPerformancePreferences(hints.performancePrefConnectionTime, 
+                                                                                                                       hints.performancePrefLatency, 
+                                                                                                                       hints.performancePrefBandwidth);
+                               socket.setTrafficClass(hints.trafficClass);
+                               socket.setTcpNoDelay(hints.tcpNoDelay);
+                               socket.setKeepAlive(hints.keepAlive);
+                               socket.setSendBufferSize(hints.sendBufferSize);
+                               socket.setReceiveBufferSize(hints.receiveBufferSize);
+                               socket.setSoLinger(hints.linger, hints.lingerDuration);
+                       }
+                       catch (Exception e) {
+                               throw new GdxRuntimeException("Error setting socket hints." , e);
+                       }
+               }
+       }
+       
+       @Override
+       public boolean isConnected () {
+               if (socket != null) {
+                       return socket.isConnected();
+               }
+               else {
+                       return false;
+               }
+       }
+
+       @Override
+       public InputStream getInputStream () {
+               try {
+                       return socket.getInputStream();
+               }
+               catch (Exception e) {
+                       throw new GdxRuntimeException("Error getting input stream from socket.", e);
+               }
+       }
+
+       @Override
+       public OutputStream getOutputStream () {
+               try {
+                       return socket.getOutputStream();
+               }
+               catch (Exception e) {
+                       throw new GdxRuntimeException("Error getting output stream from socket.", e);
+               }
+       }
+
+       @Override
+       public void dispose() {
+               if (socket != null) {
+                       try {
+                               socket.close();
+                               socket = null;
+                       }
+                       catch (Exception e) {
+                               throw new GdxRuntimeException("Error closing socket.", e);
+                       }
+               }
+       }
+}
\ No newline at end of file
diff --git a/backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSSound.java b/backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/robovm/IOSSound.java
new file mode 100644 (file)
index 0000000..f6e8405
--- /dev/null
@@ -0,0 +1,94 @@
+package com.badlogic.gdx.backends.robovm;
+
+import com.badlogic.gdx.audio.Sound;
+
+/**
+ * Stub
+ */
+public class IOSSound implements Sound {
+
+       @Override
+       public long play () {
+               // TODO Auto-generated method stub
+               return 0;
+       }
+
+       @Override
+       public long play (float volume) {
+               // TODO Auto-generated method stub
+               return 0;
+       }
+
+       @Override
+       public long play (float volume, float pitch, float pan) {
+               // TODO Auto-generated method stub
+               return 0;
+       }
+
+       @Override
+       public long loop () {
+               // TODO Auto-generated method stub
+               return 0;
+       }
+
+       @Override
+       public long loop (float volume) {
+               // TODO Auto-generated method stub
+               return 0;
+       }
+
+       @Override
+       public long loop (float volume, float pitch, float pan) {
+               // TODO Auto-generated method stub
+               return 0;
+       }
+
+       @Override
+       public void stop () {
+               // TODO Auto-generated method stub
+               
+       }
+
+       @Override
+       public void dispose () {
+               // TODO Auto-generated method stub
+               
+       }
+
+       @Override
+       public void stop (long soundId) {
+               // TODO Auto-generated method stub
+               
+       }
+
+       @Override
+       public void setLooping (long soundId, boolean looping) {
+               // TODO Auto-generated method stub
+               
+       }
+
+       @Override
+       public void setPitch (long soundId, float pitch) {
+               // TODO Auto-generated method stub
+               
+       }
+
+       @Override
+       public void setVolume (long soundId, float volume) {
+               // TODO Auto-generated method stub
+               
+       }
+
+       @Override
+       public void setPan (long soundId, float pan, float volume) {
+               // TODO Auto-generated method stub
+               
+       }
+
+       @Override
+       public void setPriority (long soundId, int priority) {
+               // TODO Auto-generated method stub
+               
+       }
+
+}
\ No newline at end of file
index 82f235d..d5d5706 100644 (file)
@@ -85,6 +85,7 @@ LOCAL_SRC_FILES := Box2D/Collision/b2BroadPhase.cpp\
        etc1/etc1_utils.cpp\
        gdx2d/gdx2d.c\
        gdx2d/stb_image.c\
+       iosgl/iosgl20.cpp\
        memcpy_wrap.c
  \r
 include $(BUILD_SHARED_LIBRARY)\r
index 1585060..167c345 100644 (file)
@@ -1,12 +1,12 @@
 #include <com.badlogic.gdx.graphics.g2d.Gdx2DPixmap.h>
 
-//@line:237
+//@line:241
 
        #include <gdx2d/gdx2d.h>
        #include <stdlib.h>
         JNIEXPORT jobject JNICALL Java_com_badlogic_gdx_graphics_g2d_Gdx2DPixmap_load(JNIEnv* env, jclass clazz, jlongArray nativeData, jbyteArray buffer, jint offset, jint len, jint requestedFormat) {
 
-//@line:242
+//@line:246
        \r
                const unsigned char* p_buffer = (const unsigned char*)env->GetPrimitiveArrayCritical(buffer, 0);\r
                gdx2d_pixmap* pixmap = gdx2d_load(p_buffer + offset, len, requestedFormat);\r
@@ -29,7 +29,7 @@
 
 JNIEXPORT jobject JNICALL Java_com_badlogic_gdx_graphics_g2d_Gdx2DPixmap_newPixmap(JNIEnv* env, jclass clazz, jlongArray nativeData, jint width, jint height, jint format) {
 
-//@line:261
+//@line:265
 \r
                gdx2d_pixmap* pixmap = gdx2d_new(width, height, format);\r
                if(pixmap==0)\r
@@ -50,7 +50,7 @@ JNIEXPORT jobject JNICALL Java_com_badlogic_gdx_graphics_g2d_Gdx2DPixmap_newPixm
 JNIEXPORT void JNICALL Java_com_badlogic_gdx_graphics_g2d_Gdx2DPixmap_free(JNIEnv* env, jclass clazz, jlong pixmap) {
 
 
-//@line:277
+//@line:281
 \r
                gdx2d_free((gdx2d_pixmap*)pixmap);\r
        
@@ -60,7 +60,7 @@ JNIEXPORT void JNICALL Java_com_badlogic_gdx_graphics_g2d_Gdx2DPixmap_free(JNIEn
 JNIEXPORT void JNICALL Java_com_badlogic_gdx_graphics_g2d_Gdx2DPixmap_clear(JNIEnv* env, jclass clazz, jlong pixmap, jint color) {
 
 
-//@line:281
+//@line:285
 \r
                gdx2d_clear((gdx2d_pixmap*)pixmap, color);\r
        
@@ -70,7 +70,7 @@ JNIEXPORT void JNICALL Java_com_badlogic_gdx_graphics_g2d_Gdx2DPixmap_clear(JNIE
 JNIEXPORT void JNICALL Java_com_badlogic_gdx_graphics_g2d_Gdx2DPixmap_setPixel(JNIEnv* env, jclass clazz, jlong pixmap, jint x, jint y, jint color) {
 
 
-//@line:285
+//@line:289
 \r
                gdx2d_set_pixel((gdx2d_pixmap*)pixmap, x, y, color);\r
        
@@ -80,7 +80,7 @@ JNIEXPORT void JNICALL Java_com_badlogic_gdx_graphics_g2d_Gdx2DPixmap_setPixel(J
 JNIEXPORT jint JNICALL Java_com_badlogic_gdx_graphics_g2d_Gdx2DPixmap_getPixel(JNIEnv* env, jclass clazz, jlong pixmap, jint x, jint y) {
 
 
-//@line:289
+//@line:293
 \r
                return gdx2d_get_pixel((gdx2d_pixmap*)pixmap, x, y);\r
        
@@ -90,7 +90,7 @@ JNIEXPORT jint JNICALL Java_com_badlogic_gdx_graphics_g2d_Gdx2DPixmap_getPixel(J
 JNIEXPORT void JNICALL Java_com_badlogic_gdx_graphics_g2d_Gdx2DPixmap_drawLine(JNIEnv* env, jclass clazz, jlong pixmap, jint x, jint y, jint x2, jint y2, jint color) {
 
 
-//@line:293
+//@line:297
 \r
                gdx2d_draw_line((gdx2d_pixmap*)pixmap, x, y, x2, y2, color);\r
        
@@ -100,7 +100,7 @@ JNIEXPORT void JNICALL Java_com_badlogic_gdx_graphics_g2d_Gdx2DPixmap_drawLine(J
 JNIEXPORT void JNICALL Java_com_badlogic_gdx_graphics_g2d_Gdx2DPixmap_drawRect(JNIEnv* env, jclass clazz, jlong pixmap, jint x, jint y, jint width, jint height, jint color) {
 
 
-//@line:297
+//@line:301
 \r
                gdx2d_draw_rect((gdx2d_pixmap*)pixmap, x, y, width, height, color);\r
        
@@ -110,7 +110,7 @@ JNIEXPORT void JNICALL Java_com_badlogic_gdx_graphics_g2d_Gdx2DPixmap_drawRect(J
 JNIEXPORT void JNICALL Java_com_badlogic_gdx_graphics_g2d_Gdx2DPixmap_drawCircle(JNIEnv* env, jclass clazz, jlong pixmap, jint x, jint y, jint radius, jint color) {
 
 
-//@line:301
+//@line:305
 \r
                gdx2d_draw_circle((gdx2d_pixmap*)pixmap, x, y, radius, color);  \r
        
@@ -120,7 +120,7 @@ JNIEXPORT void JNICALL Java_com_badlogic_gdx_graphics_g2d_Gdx2DPixmap_drawCircle
 JNIEXPORT void JNICALL Java_com_badlogic_gdx_graphics_g2d_Gdx2DPixmap_fillRect(JNIEnv* env, jclass clazz, jlong pixmap, jint x, jint y, jint width, jint height, jint color) {
 
 
-//@line:305
+//@line:309
 \r
                gdx2d_fill_rect((gdx2d_pixmap*)pixmap, x, y, width, height, color);\r
        
@@ -130,7 +130,7 @@ JNIEXPORT void JNICALL Java_com_badlogic_gdx_graphics_g2d_Gdx2DPixmap_fillRect(J
 JNIEXPORT void JNICALL Java_com_badlogic_gdx_graphics_g2d_Gdx2DPixmap_fillCircle(JNIEnv* env, jclass clazz, jlong pixmap, jint x, jint y, jint radius, jint color) {
 
 
-//@line:309
+//@line:313
 \r
                gdx2d_fill_circle((gdx2d_pixmap*)pixmap, x, y, radius, color);\r
        
@@ -140,6 +140,8 @@ JNIEXPORT void JNICALL Java_com_badlogic_gdx_graphics_g2d_Gdx2DPixmap_fillCircle
 JNIEXPORT void JNICALL Java_com_badlogic_gdx_graphics_g2d_Gdx2DPixmap_fillTriangle(JNIEnv* env, jclass clazz, jlong pixmap, jint x1, jint y1, jint x2, jint y2, jint x3, jint y3, jint color) {
 
 
+//@line:317
+\r
                gdx2d_fill_triangle((gdx2d_pixmap*)pixmap, x1, y1, x2, y2, x3, y3, color);\r
        
 
@@ -148,7 +150,7 @@ JNIEXPORT void JNICALL Java_com_badlogic_gdx_graphics_g2d_Gdx2DPixmap_fillTriang
 JNIEXPORT void JNICALL Java_com_badlogic_gdx_graphics_g2d_Gdx2DPixmap_drawPixmap(JNIEnv* env, jclass clazz, jlong src, jlong dst, jint srcX, jint srcY, jint srcWidth, jint srcHeight, jint dstX, jint dstY, jint dstWidth, jint dstHeight) {
 
 
-//@line:314
+//@line:322
 \r
                gdx2d_draw_pixmap((gdx2d_pixmap*)src, (gdx2d_pixmap*)dst, srcX, srcY, srcWidth, srcHeight, dstX, dstY, dstWidth, dstHeight);\r
        
@@ -158,7 +160,7 @@ JNIEXPORT void JNICALL Java_com_badlogic_gdx_graphics_g2d_Gdx2DPixmap_drawPixmap
 JNIEXPORT void JNICALL Java_com_badlogic_gdx_graphics_g2d_Gdx2DPixmap_setBlend(JNIEnv* env, jclass clazz, jint blend) {
 
 
-//@line:318
+//@line:326
 \r
                gdx2d_set_blend(blend);\r
        
@@ -168,7 +170,7 @@ JNIEXPORT void JNICALL Java_com_badlogic_gdx_graphics_g2d_Gdx2DPixmap_setBlend(J
 JNIEXPORT void JNICALL Java_com_badlogic_gdx_graphics_g2d_Gdx2DPixmap_setScale(JNIEnv* env, jclass clazz, jint scale) {
 
 
-//@line:322
+//@line:330
 \r
                gdx2d_set_scale(scale);\r
        
@@ -178,7 +180,7 @@ JNIEXPORT void JNICALL Java_com_badlogic_gdx_graphics_g2d_Gdx2DPixmap_setScale(J
 JNIEXPORT jstring JNICALL Java_com_badlogic_gdx_graphics_g2d_Gdx2DPixmap_getFailureReason(JNIEnv* env, jclass clazz) {
 
 
-//@line:326
+//@line:334
 \r
      return env->NewStringUTF(gdx2d_get_failure_reason());\r
    
index 0dbeaf8..c066f77 100644 (file)
-/* DO NOT EDIT THIS FILE - it is machine generated */\r
-#include <jni.h>\r
-/* Header for class com_badlogic_gdx_physics_box2d_Contact */\r
-\r
-#ifndef _Included_com_badlogic_gdx_physics_box2d_Contact\r
-#define _Included_com_badlogic_gdx_physics_box2d_Contact\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-/*\r
- * Class:     com_badlogic_gdx_physics_box2d_Contact\r
- * Method:    jniGetWorldManifold\r
- * Signature: (J[F)I\r
- */\r
-JNIEXPORT jint JNICALL Java_com_badlogic_gdx_physics_box2d_Contact_jniGetWorldManifold\r
-  (JNIEnv *, jobject, jlong, jfloatArray);\r
-\r
-/*\r
- * Class:     com_badlogic_gdx_physics_box2d_Contact\r
- * Method:    jniIsTouching\r
- * Signature: (J)Z\r
- */\r
-JNIEXPORT jboolean JNICALL Java_com_badlogic_gdx_physics_box2d_Contact_jniIsTouching\r
-  (JNIEnv *, jobject, jlong);\r
-\r
-/*\r
- * Class:     com_badlogic_gdx_physics_box2d_Contact\r
- * Method:    jniSetEnabled\r
- * Signature: (JZ)V\r
- */\r
-JNIEXPORT void JNICALL Java_com_badlogic_gdx_physics_box2d_Contact_jniSetEnabled\r
-  (JNIEnv *, jobject, jlong, jboolean);\r
-\r
-/*\r
- * Class:     com_badlogic_gdx_physics_box2d_Contact\r
- * Method:    jniIsEnabled\r
- * Signature: (J)Z\r
- */\r
-JNIEXPORT jboolean JNICALL Java_com_badlogic_gdx_physics_box2d_Contact_jniIsEnabled\r
-  (JNIEnv *, jobject, jlong);\r
-\r
-/*\r
- * Class:     com_badlogic_gdx_physics_box2d_Contact\r
- * Method:    jniGetFixtureA\r
- * Signature: (J)J\r
- */\r
-JNIEXPORT jlong JNICALL Java_com_badlogic_gdx_physics_box2d_Contact_jniGetFixtureA\r
-  (JNIEnv *, jobject, jlong);\r
-\r
-/*\r
- * Class:     com_badlogic_gdx_physics_box2d_Contact\r
- * Method:    jniGetFixtureB\r
- * Signature: (J)J\r
- */\r
-JNIEXPORT jlong JNICALL Java_com_badlogic_gdx_physics_box2d_Contact_jniGetFixtureB\r
-  (JNIEnv *, jobject, jlong);\r
-\r
-/*\r
- * Class:     com_badlogic_gdx_physics_box2d_Contact\r
- * Method:    jniGetChildIndexA\r
- * Signature: (J)I\r
- */\r
-JNIEXPORT jint JNICALL Java_com_badlogic_gdx_physics_box2d_Contact_jniGetChildIndexA\r
-  (JNIEnv *, jobject, jlong);\r
-\r
-/*\r
- * Class:     com_badlogic_gdx_physics_box2d_Contact\r
- * Method:    jniGetChildIndexB\r
- * Signature: (J)I\r
- */\r
-JNIEXPORT jint JNICALL Java_com_badlogic_gdx_physics_box2d_Contact_jniGetChildIndexB\r
-  (JNIEnv *, jobject, jlong);\r
-\r
-/*\r
- * Class:     com_badlogic_gdx_physics_box2d_Contact\r
- * Method:    jniSetFriction\r
- * Signature: (JF)V\r
- */\r
-JNIEXPORT void JNICALL Java_com_badlogic_gdx_physics_box2d_Contact_jniSetFriction\r
-  (JNIEnv *, jobject, jlong, jfloat);\r
-\r
-/*\r
- * Class:     com_badlogic_gdx_physics_box2d_Contact\r
- * Method:    jniGetFriction\r
- * Signature: (J)F\r
- */\r
-JNIEXPORT jfloat JNICALL Java_com_badlogic_gdx_physics_box2d_Contact_jniGetFriction\r
-  (JNIEnv *, jobject, jlong);\r
-\r
-/*\r
- * Class:     com_badlogic_gdx_physics_box2d_Contact\r
- * Method:    jniResetFriction\r
- * Signature: (J)V\r
- */\r
-JNIEXPORT void JNICALL Java_com_badlogic_gdx_physics_box2d_Contact_jniResetFriction\r
-  (JNIEnv *, jobject, jlong);\r
-\r
-/*\r
- * Class:     com_badlogic_gdx_physics_box2d_Contact\r
- * Method:    jniSetRestitution\r
- * Signature: (JF)V\r
- */\r
-JNIEXPORT void JNICALL Java_com_badlogic_gdx_physics_box2d_Contact_jniSetRestitution\r
-  (JNIEnv *, jobject, jlong, jfloat);\r
-\r
-/*\r
- * Class:     com_badlogic_gdx_physics_box2d_Contact\r
- * Method:    jniGetRestitution\r
- * Signature: (J)F\r
- */\r
-JNIEXPORT jfloat JNICALL Java_com_badlogic_gdx_physics_box2d_Contact_jniGetRestitution\r
-  (JNIEnv *, jobject, jlong);\r
-\r
-/*\r
- * Class:     com_badlogic_gdx_physics_box2d_Contact\r
- * Method:    jniResetRestitution\r
- * Signature: (J)V\r
- */\r
-JNIEXPORT void JNICALL Java_com_badlogic_gdx_physics_box2d_Contact_jniResetRestitution\r
-  (JNIEnv *, jobject, jlong);\r
-\r
-/*\r
- * Class:     com_badlogic_gdx_physics_box2d_Contact\r
- * Method:    jniGetTangentSpeed\r
- * Signature: (J)F\r
- */\r
-JNIEXPORT jfloat JNICALL Java_com_badlogic_gdx_physics_box2d_Contact_jniGetTangentSpeed\r
-  (JNIEnv *, jobject, jlong);\r
-\r
-/*\r
- * Class:     com_badlogic_gdx_physics_box2d_Contact\r
- * Method:    jniSetTangentSpeed\r
- * Signature: (JF)V\r
- */\r
-JNIEXPORT void JNICALL Java_com_badlogic_gdx_physics_box2d_Contact_jniSetTangentSpeed\r
-  (JNIEnv *, jobject, jlong, jfloat);\r
-\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-#endif\r
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class com_badlogic_gdx_physics_box2d_Contact */
+
+#ifndef _Included_com_badlogic_gdx_physics_box2d_Contact
+#define _Included_com_badlogic_gdx_physics_box2d_Contact
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     com_badlogic_gdx_physics_box2d_Contact
+ * Method:    jniGetWorldManifold
+ * Signature: (J[F)I
+ */
+JNIEXPORT jint JNICALL Java_com_badlogic_gdx_physics_box2d_Contact_jniGetWorldManifold
+  (JNIEnv *, jobject, jlong, jfloatArray);
+
+/*
+ * Class:     com_badlogic_gdx_physics_box2d_Contact
+ * Method:    jniIsTouching
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_com_badlogic_gdx_physics_box2d_Contact_jniIsTouching
+  (JNIEnv *, jobject, jlong);
+
+/*
+ * Class:     com_badlogic_gdx_physics_box2d_Contact
+ * Method:    jniSetEnabled
+ * Signature: (JZ)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_physics_box2d_Contact_jniSetEnabled
+  (JNIEnv *, jobject, jlong, jboolean);
+
+/*
+ * Class:     com_badlogic_gdx_physics_box2d_Contact
+ * Method:    jniIsEnabled
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_com_badlogic_gdx_physics_box2d_Contact_jniIsEnabled
+  (JNIEnv *, jobject, jlong);
+
+/*
+ * Class:     com_badlogic_gdx_physics_box2d_Contact
+ * Method:    jniGetFixtureA
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_badlogic_gdx_physics_box2d_Contact_jniGetFixtureA
+  (JNIEnv *, jobject, jlong);
+
+/*
+ * Class:     com_badlogic_gdx_physics_box2d_Contact
+ * Method:    jniGetFixtureB
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_badlogic_gdx_physics_box2d_Contact_jniGetFixtureB
+  (JNIEnv *, jobject, jlong);
+
+/*
+ * Class:     com_badlogic_gdx_physics_box2d_Contact
+ * Method:    jniGetChildIndexA
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_com_badlogic_gdx_physics_box2d_Contact_jniGetChildIndexA
+  (JNIEnv *, jobject, jlong);
+
+/*
+ * Class:     com_badlogic_gdx_physics_box2d_Contact
+ * Method:    jniGetChildIndexB
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_com_badlogic_gdx_physics_box2d_Contact_jniGetChildIndexB
+  (JNIEnv *, jobject, jlong);
+
+/*
+ * Class:     com_badlogic_gdx_physics_box2d_Contact
+ * Method:    jniSetFriction
+ * Signature: (JF)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_physics_box2d_Contact_jniSetFriction
+  (JNIEnv *, jobject, jlong, jfloat);
+
+/*
+ * Class:     com_badlogic_gdx_physics_box2d_Contact
+ * Method:    jniGetFriction
+ * Signature: (J)F
+ */
+JNIEXPORT jfloat JNICALL Java_com_badlogic_gdx_physics_box2d_Contact_jniGetFriction
+  (JNIEnv *, jobject, jlong);
+
+/*
+ * Class:     com_badlogic_gdx_physics_box2d_Contact
+ * Method:    jniResetFriction
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_physics_box2d_Contact_jniResetFriction
+  (JNIEnv *, jobject, jlong);
+
+/*
+ * Class:     com_badlogic_gdx_physics_box2d_Contact
+ * Method:    jniSetRestitution
+ * Signature: (JF)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_physics_box2d_Contact_jniSetRestitution
+  (JNIEnv *, jobject, jlong, jfloat);
+
+/*
+ * Class:     com_badlogic_gdx_physics_box2d_Contact
+ * Method:    jniGetRestitution
+ * Signature: (J)F
+ */
+JNIEXPORT jfloat JNICALL Java_com_badlogic_gdx_physics_box2d_Contact_jniGetRestitution
+  (JNIEnv *, jobject, jlong);
+
+/*
+ * Class:     com_badlogic_gdx_physics_box2d_Contact
+ * Method:    jniResetRestitution
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_physics_box2d_Contact_jniResetRestitution
+  (JNIEnv *, jobject, jlong);
+
+/*
+ * Class:     com_badlogic_gdx_physics_box2d_Contact
+ * Method:    jniGetTangentSpeed
+ * Signature: (J)F
+ */
+JNIEXPORT jfloat JNICALL Java_com_badlogic_gdx_physics_box2d_Contact_jniGetTangentSpeed
+  (JNIEnv *, jobject, jlong);
+
+/*
+ * Class:     com_badlogic_gdx_physics_box2d_Contact
+ * Method:    jniSetTangentSpeed
+ * Signature: (JF)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_physics_box2d_Contact_jniSetTangentSpeed
+  (JNIEnv *, jobject, jlong, jfloat);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/gdx/jni/iosgl/iosgl20.cpp b/gdx/jni/iosgl/iosgl20.cpp
new file mode 100644 (file)
index 0000000..9582a38
--- /dev/null
@@ -0,0 +1,1767 @@
+#ifdef TARGET_OS_IPHONE
+#include <iosgles20.h>
+#include <OpenGLES/ES2/gl.h>
+#include <OpenGLES/ES2/glext.h>
+#include <stdio.h>
+
+static jclass bufferClass;
+static jclass byteBufferClass;
+static jclass charBufferClass;
+static jclass shortBufferClass;
+static jclass intBufferClass;
+static jclass longBufferClass;
+static jclass floatBufferClass;
+static jclass doubleBufferClass;
+static jclass OOMEClass;
+static jclass UOEClass;
+static jclass IAEClass;
+
+static jmethodID positionID;
+
+
+static void
+nativeClassInitBuffer(JNIEnv *_env)
+{
+    jclass bufferClassLocal = _env->FindClass("java/nio/Buffer");
+    bufferClass = (jclass) _env->NewGlobalRef(bufferClassLocal);
+
+    byteBufferClass = (jclass) _env->NewGlobalRef(_env->FindClass("java/nio/ByteBuffer"));
+    charBufferClass = (jclass) _env->NewGlobalRef(_env->FindClass("java/nio/CharBuffer"));
+    shortBufferClass = (jclass) _env->NewGlobalRef(_env->FindClass("java/nio/ShortBuffer"));
+    intBufferClass = (jclass) _env->NewGlobalRef(_env->FindClass("java/nio/IntBuffer"));
+    longBufferClass = (jclass) _env->NewGlobalRef(_env->FindClass("java/nio/LongBuffer"));
+    floatBufferClass = (jclass) _env->NewGlobalRef(_env->FindClass("java/nio/FloatBuffer"));
+    doubleBufferClass = (jclass) _env->NewGlobalRef(_env->FindClass("java/nio/DoubleBuffer"));
+
+    positionID = _env->GetMethodID(bufferClass, "position","()I");
+    if(positionID == 0) _env->ThrowNew(IAEClass, "Couldn't fetch position() method");
+}
+
+static void
+nativeClassInit(JNIEnv *_env)
+{
+    nativeClassInitBuffer(_env);
+
+    jclass IAEClassLocal =
+        _env->FindClass("java/lang/IllegalArgumentException");
+    jclass OOMEClassLocal =
+         _env->FindClass("java/lang/OutOfMemoryError");
+    jclass UOEClassLocal =
+         _env->FindClass("java/lang/UnsupportedOperationException");
+
+    IAEClass = (jclass) _env->NewGlobalRef(IAEClassLocal);
+    OOMEClass = (jclass) _env->NewGlobalRef(OOMEClassLocal);
+    UOEClass = (jclass) _env->NewGlobalRef(UOEClassLocal);
+}
+
+static jint getElementSizeShift(JNIEnv *_env, jobject buffer) {
+       if(_env->IsInstanceOf(buffer, byteBufferClass)) return 0;
+       if(_env->IsInstanceOf(buffer, floatBufferClass)) return 2;
+       if(_env->IsInstanceOf(buffer, shortBufferClass)) return 1;
+
+       if(_env->IsInstanceOf(buffer, charBufferClass)) return 1;
+       if(_env->IsInstanceOf(buffer, intBufferClass)) return 2;
+       if(_env->IsInstanceOf(buffer, longBufferClass)) return 3;
+       if(_env->IsInstanceOf(buffer, doubleBufferClass)) return 3;
+
+       _env->ThrowNew(IAEClass, "buffer type unkown! (Not a ByteBuffer, ShortBuffer, etc.)");
+       return 0;
+}
+
+inline jint getBufferPosition(JNIEnv *env, jobject buffer)
+{
+       jint ret = env->CallIntMethodA(buffer, positionID, 0);
+       return  ret;
+}
+
+static void *
+getDirectBufferPointer(JNIEnv *_env, jobject buffer) {
+    if (!buffer) {
+        return NULL;
+    }
+    void* buf = _env->GetDirectBufferAddress(buffer);
+    if (buf) {
+        jint position = getBufferPosition(_env, buffer);
+        jint elementSizeShift = getElementSizeShift(_env, buffer);
+        buf = ((char*) buf) + (position << elementSizeShift);
+    } else {
+        _env->ThrowNew(IAEClass, "Must use a native order direct Buffer");
+    }
+    return buf;
+}
+
+static const char* getString( JNIEnv *env, jstring string )
+{
+       return (const char*)env->GetStringUTFChars(string, NULL);
+}
+
+static void releaseString( JNIEnv *env, jstring string, const char* cString )
+{
+       env->ReleaseStringUTFChars(string, cString);
+}
+
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_init
+  (JNIEnv *env, jclass)
+{
+       nativeClassInit( env );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glActiveTexture
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glActiveTexture
+  (JNIEnv *, jobject, jint texture)
+{
+       glActiveTexture( texture );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glAttachShader
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glAttachShader
+  (JNIEnv *, jobject, jint program, jint shader)
+{
+       glAttachShader( program, shader );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glBindAttribLocation
+ * Signature: (IILjava/lang/String;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glBindAttribLocation
+  (JNIEnv *env, jobject, jint program, jint index, jstring name)
+{
+       const char* namePtr = getString( env, name );
+       glBindAttribLocation( program, index, namePtr );
+       releaseString( env, name, namePtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glBindBuffer
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glBindBuffer
+  (JNIEnv *env, jobject, jint target, jint buffer)
+{
+       glBindBuffer( target, buffer );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glBindFramebuffer
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glBindFramebuffer
+  (JNIEnv *env, jobject, jint target, jint framebuffer)
+{
+       glBindFramebuffer( target, framebuffer );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glBindRenderbuffer
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glBindRenderbuffer
+  (JNIEnv *env, jobject, jint target, jint renderbuffer)
+{
+       glBindRenderbuffer( target, renderbuffer );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glBindTexture
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glBindTexture
+  (JNIEnv *env, jobject, jint target, jint texture)
+{
+       glBindTexture( target, texture );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glBlendColor
+ * Signature: (FFFF)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glBlendColor
+  (JNIEnv *env, jobject, jfloat red, jfloat green, jfloat blue, jfloat alpha)
+{
+       glBlendColor( red, green, blue, alpha );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glBlendEquation
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glBlendEquation
+  (JNIEnv *env, jobject, jint mode)
+{
+       glBlendEquation( mode );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glBlendEquationSeparate
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glBlendEquationSeparate
+  (JNIEnv *env, jobject, jint modeRGB, jint modeAlpha)
+{
+       glBlendEquationSeparate( modeRGB, modeAlpha );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glBlendFunc
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glBlendFunc
+  (JNIEnv *env, jobject, jint sfactor, jint dfactor)
+{
+       glBlendFunc( sfactor, dfactor );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glBlendFuncSeparate
+ * Signature: (IIII)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glBlendFuncSeparate
+  (JNIEnv *env, jobject, jint srcRGB, jint dstRGB, jint srcAlpha, jint dstAlpha)
+{
+       glBlendFuncSeparate( srcRGB, dstRGB, srcAlpha, dstAlpha);
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glBufferData
+ * Signature: (IILjava/nio/Buffer;I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glBufferData
+  (JNIEnv * env, jobject, jint target, jint size, jobject data, jint usage)
+{
+       void* dataPtr = getDirectBufferPointer( env, data );
+       glBufferData( target, size, dataPtr, usage );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glBufferSubData
+ * Signature: (IIILjava/nio/Buffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glBufferSubData
+  (JNIEnv *env, jobject, jint target, jint offset, jint size, jobject data)
+{
+       void* dataPtr = getDirectBufferPointer( env, data );
+       glBufferSubData( target, offset, size, dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glCheckFramebufferStatus
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glCheckFramebufferStatus
+  (JNIEnv *env, jobject, jint target)
+{
+       return glCheckFramebufferStatus( target );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glClear
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glClear
+  (JNIEnv *env, jobject, jint mask)
+{
+       glClear( mask );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glClearColor
+ * Signature: (FFFF)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glClearColor
+  (JNIEnv *env, jobject, jfloat red, jfloat green, jfloat blue, jfloat alpha)
+{
+       glClearColor( red, green, blue, alpha );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glClearDepthf
+ * Signature: (F)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glClearDepthf
+  (JNIEnv *env, jobject, jfloat depth)
+{
+       glClearDepthf( depth );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glClearStencil
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glClearStencil
+  (JNIEnv *env, jobject, jint s)
+{
+       glClearStencil( s );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glColorMask
+ * Signature: (ZZZZ)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glColorMask
+  (JNIEnv *env, jobject, jboolean red, jboolean green, jboolean blue, jboolean alpha)
+{
+       glColorMask( red, green, blue, alpha );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glCompileShader
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glCompileShader
+  (JNIEnv *env, jobject, jint shader)
+{
+       glCompileShader( shader );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glCompressedTexImage2D
+ * Signature: (IIIIIIILjava/nio/Buffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glCompressedTexImage2D
+  (JNIEnv *env, jobject, jint target, jint level, jint internalFormat, jint width, jint height, jint border, jint imageSize, jobject data)
+{
+       void* dataPtr = getDirectBufferPointer( env, data );
+       glCompressedTexImage2D( target, level, internalFormat, width, height, border, imageSize, dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glCompressedTexSubImage2D
+ * Signature: (IIIIIIIILjava/nio/Buffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glCompressedTexSubImage2D
+  (JNIEnv *env, jobject, jint target, jint level, jint xoffset, jint yoffset, jint width, jint height, jint format, jint imageSize, jobject data)
+{
+       void* dataPtr = getDirectBufferPointer( env, data );
+       glCompressedTexSubImage2D( target, level, xoffset, yoffset, width, height, format, imageSize, dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glCopyTexImage2D
+ * Signature: (IIIIIIII)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glCopyTexImage2D
+  (JNIEnv *env, jobject, jint target, jint level, jint  internalFormat, jint x, jint y, jint width, jint height, jint border)
+{
+       glCopyTexImage2D( target, level, internalFormat, x, y, width, height, border );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glCopyTexSubImage2D
+ * Signature: (IIIIIIII)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glCopyTexSubImage2D
+  (JNIEnv *env, jobject, jint target, jint level, jint xoffset, jint yoffset, jint x, jint y, jint width, jint height)
+{
+       glCopyTexSubImage2D( target, level, xoffset, yoffset, x, y, width, height );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glCreateProgram
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glCreateProgram
+  (JNIEnv *env, jobject)
+{
+       return glCreateProgram( );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glCreateShader
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glCreateShader
+  (JNIEnv *env, jobject, jint type)
+{
+       return glCreateShader( type );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glCullFace
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glCullFace
+  (JNIEnv *env, jobject, jint mode)
+{
+       glCullFace( mode );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glDeleteBuffers
+ * Signature: (ILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glDeleteBuffers
+  (JNIEnv *env, jobject, jint n, jobject buffers)
+{
+       void* dataPtr = getDirectBufferPointer( env, buffers );
+       glDeleteBuffers( n, (GLuint*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glDeleteFramebuffers
+ * Signature: (ILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glDeleteFramebuffers
+  (JNIEnv *env, jobject, jint n, jobject framebuffers)
+{
+       void* dataPtr = getDirectBufferPointer( env, framebuffers );
+       glDeleteFramebuffers( n, (GLuint*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glDeleteProgram
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glDeleteProgram
+  (JNIEnv *env, jobject, jint program)
+{
+       glDeleteProgram( program );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glDeleteRenderbuffers
+ * Signature: (ILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glDeleteRenderbuffers
+  (JNIEnv *env, jobject, jint n, jobject renderbuffers)
+{
+       void* dataPtr = getDirectBufferPointer( env, renderbuffers );
+       glDeleteRenderbuffers( n, (GLuint*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glDeleteShader
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glDeleteShader
+  (JNIEnv *env, jobject, jint shader)
+{
+       glDeleteShader( shader );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glDeleteTextures
+ * Signature: (ILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glDeleteTextures
+  (JNIEnv *env, jobject, jint n, jobject textures)
+{
+       void* dataPtr = getDirectBufferPointer( env, textures );
+       glDeleteTextures( n, (GLuint*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glDepthFunc
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glDepthFunc
+  (JNIEnv *env, jobject, jint func)
+{
+       glDepthFunc( func );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glDepthMask
+ * Signature: (Z)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glDepthMask
+  (JNIEnv *env, jobject, jboolean flag)
+{
+       glDepthMask( flag );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glDepthRangef
+ * Signature: (FF)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glDepthRangef
+  (JNIEnv *env, jobject, jfloat zNear, jfloat zFar)
+{
+       glDepthRangef( zNear, zFar );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glDetachShader
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glDetachShader
+  (JNIEnv *env, jobject, jint program, jint shader)
+{
+       glDetachShader( program, shader );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glDisable
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glDisable
+  (JNIEnv *env, jobject, jint cap)
+{
+       glDisable( cap );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glDisableVertexAttribArray
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glDisableVertexAttribArray
+  (JNIEnv *env, jobject, jint index)
+{
+       glDisableVertexAttribArray( index );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glDrawArrays
+ * Signature: (III)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glDrawArrays
+  (JNIEnv *env, jobject, jint mode, jint first, jint count)
+{
+       glDrawArrays( mode, first, count );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glDrawElements
+ * Signature: (IIILjava/nio/Buffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glDrawElements__IIILjava_nio_Buffer_2
+(JNIEnv *env, jobject, jint mode, jint count, jint type, jobject indices)
+{
+       void* dataPtr = getDirectBufferPointer( env, indices );
+       //__android_log_print(ANDROID_LOG_INFO, "GL2", "drawelements");
+       glDrawElements( mode, count, type, dataPtr );
+}
+
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glDrawElements__IIII
+  (JNIEnv *, jobject, jint mode, jint count, jint type, jint indices)
+{
+       glDrawElements( mode, count, type, (const void*)indices );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glEnable
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glEnable
+  (JNIEnv *env, jobject, jint cap)
+{
+       glEnable( cap );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glEnableVertexAttribArray
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glEnableVertexAttribArray
+  (JNIEnv *env, jobject, jint index)
+{
+       glEnableVertexAttribArray( index );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glFinish
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glFinish
+  (JNIEnv *env, jobject)
+{
+       glFinish();
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glFlush
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glFlush
+  (JNIEnv *env, jobject)
+{
+       glFlush();
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glFramebufferRenderbuffer
+ * Signature: (IIII)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glFramebufferRenderbuffer
+  (JNIEnv *env, jobject, jint target, jint attachment, jint renderbuffertarget, jint renderbuffer)
+{
+       glFramebufferRenderbuffer( target, attachment, renderbuffertarget, renderbuffer );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glFramebufferTexture2D
+ * Signature: (IIIII)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glFramebufferTexture2D
+  (JNIEnv *env, jobject, jint target, jint attachment, jint textarget, jint texture, jint level)
+{
+       glFramebufferTexture2D( target, attachment, textarget, texture, level );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glFrontFace
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glFrontFace
+  (JNIEnv *env, jobject, jint mode)
+{ //XXXX
+       glFrontFace( mode );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGenBuffers
+ * Signature: (ILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGenBuffers
+  (JNIEnv *env, jobject, jint n, jobject buffers)
+{
+       void* dataPtr = getDirectBufferPointer( env, buffers );
+       glGenBuffers( n, (GLuint*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGenerateMipmap
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGenerateMipmap
+  (JNIEnv *env, jobject, jint target)
+{
+       glGenerateMipmap( target );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGenFramebuffers
+ * Signature: (ILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGenFramebuffers
+  (JNIEnv *env, jobject, jint n, jobject framebuffers)
+{
+       void* dataPtr = getDirectBufferPointer( env, framebuffers );
+       glGenFramebuffers( n, (GLuint*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGenRenderbuffers
+ * Signature: (ILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGenRenderbuffers
+  (JNIEnv *env, jobject, jint n, jobject renderbuffers)
+{
+       void* dataPtr = getDirectBufferPointer( env, renderbuffers );
+       glGenRenderbuffers( n, (GLuint*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGenTextures
+ * Signature: (ILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGenTextures
+  (JNIEnv *env, jobject, jint n, jobject textures)
+{
+       void* dataPtr = getDirectBufferPointer( env, textures );
+       glGenTextures( n, (GLuint*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetActiveAttrib
+ * Signature: (IIILjava/nio/Buffer;Ljava/nio/IntBuffer;Ljava/nio/Buffer;Ljava/lang/String;)V
+ */
+JNIEXPORT jstring JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetActiveAttrib
+  (JNIEnv *env, jobject, jint program, jint index, jobject size, jobject type )
+{
+       // FIXME is this wrong?
+       char cname[2048];
+       void* sizePtr = getDirectBufferPointer( env, size );
+       void* typePtr = getDirectBufferPointer( env, type );
+       glGetActiveAttrib( program, index, 2048, NULL, (GLint*)sizePtr, (GLenum*)typePtr, cname );
+
+       return env->NewStringUTF( cname );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetActiveUniform
+ * Signature: (IIILjava/nio/Buffer;Ljava/nio/IntBuffer;Ljava/nio/Buffer;Ljava/lang/String;)V
+ */
+JNIEXPORT jstring JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetActiveUniform
+  (JNIEnv *env, jobject, jint program, jint index, jobject size, jobject type)
+{
+       // FIXME is this wrong?
+       char cname[2048];
+       void* sizePtr = getDirectBufferPointer( env, size );
+       void* typePtr = getDirectBufferPointer( env, type );
+       glGetActiveUniform( program, index, 2048, NULL, (GLint*)sizePtr, (GLenum*)typePtr, cname );
+
+       return env->NewStringUTF( cname );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetAttachedShaders
+ * Signature: (IILjava/nio/Buffer;Ljava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetAttachedShaders
+  (JNIEnv *env, jobject, jint program, jint maxcount, jobject count, jobject shaders)
+{
+       void* countPtr = getDirectBufferPointer( env, count );
+       void* shaderPtr = getDirectBufferPointer( env, shaders );
+       glGetAttachedShaders( program, maxcount, (GLsizei*)countPtr, (GLuint*)shaderPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetAttribLocation
+ * Signature: (ILjava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetAttribLocation
+  (JNIEnv *env, jobject, jint program, jstring name)
+{
+       const char* cname = getString( env, name );
+       int loc = glGetAttribLocation( program, cname );
+       releaseString( env, name, cname );
+       return loc;
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetBooleanv
+ * Signature: (ILjava/nio/Buffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetBooleanv
+  (JNIEnv *env, jobject, jint program, jobject params)
+{
+       void* dataPtr = getDirectBufferPointer( env, params );
+       glGetBooleanv( program, (GLboolean*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetBufferParameteriv
+ * Signature: (IILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetBufferParameteriv
+  (JNIEnv *env, jobject, jint target, jint pname, jobject params)
+{
+       void* dataPtr = getDirectBufferPointer( env, params );
+       glGetBufferParameteriv( target, pname, (GLint*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetError
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetError
+  (JNIEnv *env, jobject)
+{
+       return glGetError();
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetFloatv
+ * Signature: (ILjava/nio/FloatBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetFloatv
+  (JNIEnv *env, jobject, jint pname, jobject params)
+{
+       void* dataPtr = getDirectBufferPointer( env, params );
+       glGetFloatv( pname, (GLfloat*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetFramebufferAttachmentParameteriv
+ * Signature: (IIILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetFramebufferAttachmentParameteriv
+  (JNIEnv *env, jobject, jint target, jint attachment, jint pname, jobject params)
+{
+       void* dataPtr = getDirectBufferPointer( env, params );
+       glGetFramebufferAttachmentParameteriv( target, attachment, pname, (GLint*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetIntegerv
+ * Signature: (ILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetIntegerv
+  (JNIEnv *env, jobject, jint pname, jobject params)
+{
+       void* dataPtr = getDirectBufferPointer( env, params );
+       glGetIntegerv( pname, (GLint*)dataPtr);
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetProgramiv
+ * Signature: (IILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetProgramiv
+  (JNIEnv *env, jobject, jint program, jint pname, jobject params)
+{
+       void *dataPtr = getDirectBufferPointer( env, params );
+       glGetProgramiv( program, pname, (GLint*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetProgramInfoLog
+ * Signature: (IILjava/nio/Buffer;Ljava/lang/String;)V
+ */
+JNIEXPORT jstring JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetProgramInfoLog
+  (JNIEnv *env, jobject, jint program )
+{
+       char info[1024*10]; // FIXME 10k limit should suffice
+       int length = 0;
+       glGetProgramInfoLog( program, 1024*10, &length, info );
+       return env->NewStringUTF( info );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetRenderbufferParameteriv
+ * Signature: (IILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetRenderbufferParameteriv
+  (JNIEnv *env, jobject, jint target, jint pname, jobject params)
+{
+       void* dataPtr = getDirectBufferPointer( env, params );
+       glGetRenderbufferParameteriv( target, pname, (GLint*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetShaderiv
+ * Signature: (IILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetShaderiv
+  (JNIEnv *env, jobject, jint shader, jint pname, jobject params)
+{
+       void* dataPtr = getDirectBufferPointer( env, params );
+       glGetShaderiv( shader, pname, (GLint*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetShaderInfoLog
+ * Signature: (IILjava/nio/Buffer;Ljava/lang/String;)V
+ */
+JNIEXPORT jstring JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetShaderInfoLog
+  (JNIEnv *env, jobject, jint shader )
+{
+       char info[1024*10]; // FIXME 10k limit should suffice
+       int length = 0;
+       glGetShaderInfoLog( shader, 1024*10, &length, info );
+       return env->NewStringUTF( info );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetShaderPrecisionFormat
+ * Signature: (IILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetShaderPrecisionFormat
+  (JNIEnv *env, jobject, jint shadertype, jint precisiontype, jobject range, jobject precision)
+{
+       void* rangePtr = getDirectBufferPointer( env, range );
+       void* precisionPtr = getDirectBufferPointer( env, precision );
+       glGetShaderPrecisionFormat( shadertype, precisiontype, (GLint*)rangePtr, (GLint*)precisionPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetShaderSource
+ * Signature: (IILjava/nio/Buffer;Ljava/lang/String;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetShaderSource
+  (JNIEnv *env, jobject, jint shader, jint bufsize, jobject length, jstring source)
+{
+       env->ThrowNew(UOEClass, "This method is not supported"); // FIXME won't implement this shit.
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetString
+ * Signature: (I)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetString
+  (JNIEnv *env, jobject, jint name)
+{
+       const char * chars = (const char *)glGetString((GLenum)name);
+       jstring output = env->NewStringUTF(chars);
+       return output;
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetTexParameterfv
+ * Signature: (IILjava/nio/FloatBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetTexParameterfv
+  (JNIEnv *env, jobject, jint target, jint pname, jobject params)
+{
+       void* dataPtr = getDirectBufferPointer( env, params );
+       glGetTexParameterfv( target, pname, (GLfloat*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetTexParameteriv
+ * Signature: (IILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetTexParameteriv
+  (JNIEnv *env, jobject, jint target, jint pname, jobject params)
+{
+       void* dataPtr = getDirectBufferPointer( env, params );
+       glGetTexParameteriv( target, pname, (GLint*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetUniformfv
+ * Signature: (IILjava/nio/FloatBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetUniformfv
+  (JNIEnv *env, jobject, jint program, jint location, jobject params)
+{
+       void* dataPtr = getDirectBufferPointer( env, params );
+       glGetUniformfv( program, location, (GLfloat*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetUniformiv
+ * Signature: (IILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetUniformiv
+  (JNIEnv *env, jobject, jint program, jint location, jobject params)
+{
+       void* dataPtr = getDirectBufferPointer( env, params );
+       glGetUniformiv( program, location, (GLint*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetUniformLocation
+ * Signature: (ILjava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetUniformLocation
+  (JNIEnv *env, jobject, jint program, jstring name)
+{
+       const char* cname = getString( env, name );
+       int location = glGetUniformLocation( program, cname );
+       releaseString( env, name, cname );
+       return location;
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetVertexAttribfv
+ * Signature: (IILjava/nio/FloatBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetVertexAttribfv
+  (JNIEnv *env, jobject, jint index, jint pname, jobject params)
+{
+       void* dataPtr = getDirectBufferPointer( env, params );
+       glGetVertexAttribfv( index, pname, (GLfloat*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetVertexAttribiv
+ * Signature: (IILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetVertexAttribiv
+  (JNIEnv *env, jobject, jint index, jint pname, jobject params)
+{
+       void* dataPtr = getDirectBufferPointer( env, params );
+       glGetVertexAttribiv( index, pname, (GLint*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetVertexAttribPointerv
+ * Signature: (IILjava/nio/Buffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetVertexAttribPointerv
+  (JNIEnv *env, jobject, jint index, jint pname, jobject pointer)
+{
+       env->ThrowNew(UOEClass, "This method is not supported"); // FIXME won't implement this shit
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glHint
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glHint
+  (JNIEnv *env, jobject, jint target, jint mode)
+{
+       glHint( target, mode );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glIsBuffer
+ * Signature: (I)C
+ */
+JNIEXPORT jboolean JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glIsBuffer
+  (JNIEnv *env, jobject, jint buffer)
+{
+       return glIsBuffer( buffer );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glIsEnabled
+ * Signature: (I)C
+ */
+JNIEXPORT jboolean JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glIsEnabled
+  (JNIEnv *env, jobject, jint cap)
+{
+       return glIsEnabled( cap );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glIsFramebuffer
+ * Signature: (I)C
+ */
+JNIEXPORT jboolean JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glIsFramebuffer
+  (JNIEnv *env, jobject, jint framebuffer)
+{
+       return glIsFramebuffer( framebuffer );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glIsProgram
+ * Signature: (I)C
+ */
+JNIEXPORT jboolean JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glIsProgram
+  (JNIEnv *env, jobject, jint program)
+{
+       return glIsProgram( program );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glIsRenderbuffer
+ * Signature: (I)C
+ */
+JNIEXPORT jboolean JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glIsRenderbuffer
+  (JNIEnv *env, jobject, jint renderbuffer)
+{
+       return glIsRenderbuffer( renderbuffer );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glIsShader
+ * Signature: (I)C
+ */
+JNIEXPORT jboolean JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glIsShader
+  (JNIEnv *env, jobject, jint shader)
+{
+       return glIsShader( shader );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glIsTexture
+ * Signature: (I)C
+ */
+JNIEXPORT jboolean JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glIsTexture
+  (JNIEnv *env, jobject, jint texture)
+{
+       return glIsTexture( texture );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glLineWidth
+ * Signature: (F)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glLineWidth
+  (JNIEnv *env, jobject, jfloat width)
+{
+       glLineWidth( width );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glLinkProgram
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glLinkProgram
+  (JNIEnv *env, jobject, jint program)
+{
+       glLinkProgram( program );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glPixelStorei
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glPixelStorei
+  (JNIEnv *env, jobject, jint pname, jint param)
+{
+       glPixelStorei( pname, param );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glPolygonOffset
+ * Signature: (FF)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glPolygonOffset
+  (JNIEnv *env, jobject, jfloat factor, jfloat units)
+{
+       glPolygonOffset( factor, units );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glReadPixels
+ * Signature: (IIIIIILjava/nio/Buffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glReadPixels
+  (JNIEnv *env, jobject, jint x, jint y, jint width, jint height, jint format, jint type, jobject pixels)
+{
+       void* dataPtr = getDirectBufferPointer( env, pixels );
+       glReadPixels( x, y, width, height, format, type, dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glReleaseShaderCompiler
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glReleaseShaderCompiler
+  (JNIEnv *env, jobject)
+{
+       glReleaseShaderCompiler();
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glRenderbufferStorage
+ * Signature: (IIII)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glRenderbufferStorage
+  (JNIEnv *env, jobject, jint target, jint internalFormat, jint width, jint height)
+{
+       glRenderbufferStorage( target, internalFormat, width, height );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glSampleCoverage
+ * Signature: (FZ)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glSampleCoverage
+  (JNIEnv *env, jobject, jfloat value, jboolean inver)
+{
+       glSampleCoverage( value, inver );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glScissor
+ * Signature: (IIII)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glScissor
+  (JNIEnv *env, jobject, jint x, jint y, jint width, jint height)
+{
+       glScissor( x, y, width, height );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glShaderBinary
+ * Signature: (ILjava/nio/IntBuffer;ILjava/nio/Buffer;I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glShaderBinary
+  (JNIEnv *env, jobject, jint n, jobject shaders, jint binaryformat, jobject binary, jint length)
+{
+       void* shaderPtr = getDirectBufferPointer( env, shaders );
+       void* binaryPtr = getDirectBufferPointer( env, binary );
+       glShaderBinary( n, (GLuint*)shaderPtr, binaryformat, binaryPtr, length );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glShaderSource
+ * Signature: (IILjava/lang/String;Ljava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glShaderSource
+  (JNIEnv *env, jobject, jint shader, jstring string )
+{
+       const char* cstring = getString( env, string );
+       glShaderSource( shader, 1, &cstring, NULL );
+       releaseString( env, string, cstring );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glStencilFunc
+ * Signature: (III)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glStencilFunc
+  (JNIEnv *env, jobject, jint func, jint ref, jint mask)
+{
+       glStencilFunc( func, ref, mask );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glStencilFuncSeparate
+ * Signature: (IIII)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glStencilFuncSeparate
+  (JNIEnv *env, jobject, jint face, jint func, jint ref, jint mask)
+{
+       glStencilFuncSeparate( face, func, ref, mask );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glStencilMask
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glStencilMask
+  (JNIEnv *env, jobject, jint mask)
+{
+       glStencilMask( mask );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glStencilMaskSeparate
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glStencilMaskSeparate
+  (JNIEnv *env, jobject, jint face, jint mask)
+{
+       glStencilMaskSeparate( face, mask );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glStencilOp
+ * Signature: (III)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glStencilOp
+  (JNIEnv *env, jobject, jint fail, jint zFail, jint zpass)
+{
+       glStencilOp( fail, zFail, zpass );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glStencilOpSeparate
+ * Signature: (IIII)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glStencilOpSeparate
+  (JNIEnv *env, jobject, jint face, jint fail, jint zFail, jint zPass)
+{
+       glStencilOpSeparate( face, fail, zFail, zPass );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glTexImage2D
+ * Signature: (IIIIIIIILjava/nio/Buffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glTexImage2D
+  (JNIEnv *env, jobject, jint target, jint level, jint internalformat, jint width, jint height, jint border, jint format, jint type, jobject pixels)
+{
+       void* dataPtr = getDirectBufferPointer( env, pixels );
+       glTexImage2D( target, level, internalformat, width, height, border, format, type, dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glTexParameterf
+ * Signature: (IIF)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glTexParameterf
+  (JNIEnv *env, jobject, jint target, jint pname, jfloat param)
+{
+       glTexParameterf( target, pname, param );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glTexParameterfv
+ * Signature: (IILjava/nio/FloatBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glTexParameterfv
+  (JNIEnv *env, jobject, jint target, jint pname, jobject params)
+{
+       void* dataPtr = getDirectBufferPointer( env, params );
+       glTexParameterfv( target, pname, (GLfloat*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glTexParameteri
+ * Signature: (III)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glTexParameteri
+  (JNIEnv *env, jobject, jint target, jint pname, jint param)
+{
+       glTexParameteri( target, pname, param );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glTexParameteriv
+ * Signature: (IILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glTexParameteriv
+  (JNIEnv *env, jobject, jint target, jint pname, jobject params)
+{
+       void* dataPtr = getDirectBufferPointer( env, params );
+       glTexParameteriv( target, pname, (GLint*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glTexSubImage2D
+ * Signature: (IIIIIIIILjava/nio/Buffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glTexSubImage2D
+  (JNIEnv *env, jobject, jint target, jint level, jint xoffset, jint yoffset, jint width, jint height, jint format, jint type, jobject pixels)
+{
+       void* dataPtr = getDirectBufferPointer( env, pixels );
+       glTexSubImage2D( target, level, xoffset, yoffset, width, height, format, type, dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniform1f
+ * Signature: (IF)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniform1f
+  (JNIEnv *env, jobject, jint location, jfloat x)
+{
+       glUniform1f( location, x );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniform1fv
+ * Signature: (IILjava/nio/FloatBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniform1fv
+  (JNIEnv *env, jobject, jint location, jint count, jobject v)
+{
+       void* dataPtr = getDirectBufferPointer( env, v );
+       glUniform1fv( location, count, (GLfloat*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniform1i
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniform1i
+  (JNIEnv *env, jobject, jint location, jint x)
+{
+       glUniform1i( location, x );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniform1iv
+ * Signature: (IILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniform1iv
+  (JNIEnv *env, jobject, jint location, jint count, jobject v)
+{
+       void* dataPtr = getDirectBufferPointer( env, v );
+       glUniform1iv( location, count, (GLint*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniform2f
+ * Signature: (IFF)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniform2f
+  (JNIEnv *env, jobject, jint location, jfloat x, jfloat y)
+{
+       glUniform2f( location, x, y );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniform2fv
+ * Signature: (IILjava/nio/FloatBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniform2fv
+  (JNIEnv *env, jobject, jint location, jint count, jobject v)
+{
+       void* dataPtr = getDirectBufferPointer( env, v );
+       glUniform2fv( location, count, (GLfloat*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniform2i
+ * Signature: (III)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniform2i
+  (JNIEnv *env, jobject, jint location, jint x, jint y)
+{
+       glUniform2i( location, x, y );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniform2iv
+ * Signature: (IILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniform2iv
+  (JNIEnv *env, jobject, jint location, jint count, jobject v)
+{
+       void* dataPtr = getDirectBufferPointer( env, v );
+       glUniform2iv( location, count, (GLint*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniform3f
+ * Signature: (IFFF)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniform3f
+  (JNIEnv *env, jobject, jint location, jfloat x, jfloat y, jfloat z)
+{
+       glUniform3f( location, x, y, z );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniform3fv
+ * Signature: (IILjava/nio/FloatBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniform3fv
+  (JNIEnv *env, jobject, jint location, jint count, jobject v)
+{
+       void* dataPtr = getDirectBufferPointer( env, v );
+       glUniform3fv( location, count, (GLfloat*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniform3i
+ * Signature: (IIII)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniform3i
+  (JNIEnv *env, jobject, jint location, jint x, jint y, jint z)
+{
+       glUniform3i( location, x, y, z );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniform3iv
+ * Signature: (IILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniform3iv
+  (JNIEnv *env, jobject, jint location, jint count, jobject v)
+{
+       void* dataPtr = getDirectBufferPointer( env, v );
+       glUniform3iv( location, count, (GLint*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniform4f
+ * Signature: (IFFFF)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniform4f
+  (JNIEnv *env, jobject, jint location, jfloat x, jfloat y, jfloat z, jfloat w)
+{
+       glUniform4f( location, x, y, z, w );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniform4fv
+ * Signature: (IILjava/nio/FloatBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniform4fv
+  (JNIEnv *env, jobject, jint location, jint count, jobject v)
+{
+       void* dataPtr = getDirectBufferPointer( env, v );
+       glUniform4fv( location, count, (GLfloat*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniform4i
+ * Signature: (IIIII)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniform4i
+  (JNIEnv *env, jobject, jint location, jint x, jint y, jint z, jint w)
+{
+       glUniform4i( location, x, y, z, w );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniform4iv
+ * Signature: (IILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniform4iv
+  (JNIEnv *env, jobject, jint location, jint count, jobject v)
+{
+       void* dataPtr = getDirectBufferPointer( env, v );
+       glUniform4iv( location, count, (GLint*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniformMatrix2fv
+ * Signature: (IIZLjava/nio/FloatBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniformMatrix2fv
+  (JNIEnv *env, jobject, jint location, jint count, jboolean transpose, jobject value)
+{
+       void* dataPtr = getDirectBufferPointer( env, value );
+       glUniformMatrix2fv( location, count, transpose, (GLfloat*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniformMatrix3fv
+ * Signature: (IIZLjava/nio/FloatBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniformMatrix3fv
+  (JNIEnv *env, jobject, jint location, jint count, jboolean transpose, jobject value)
+{
+       void* dataPtr = getDirectBufferPointer( env, value );
+       glUniformMatrix3fv( location, count, transpose, (GLfloat*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniformMatrix4fv
+ * Signature: (IIZLjava/nio/FloatBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniformMatrix4fv
+  (JNIEnv *env, jobject, jint location, jint count, jboolean transpose, jobject value)
+{
+       void* dataPtr = getDirectBufferPointer( env, value );
+       glUniformMatrix4fv( location, count, transpose, (GLfloat*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUseProgram
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUseProgram
+  (JNIEnv *env, jobject, jint program)
+{
+       glUseProgram( program );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glValidateProgram
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glValidateProgram
+  (JNIEnv *env, jobject, jint program)
+{
+       glValidateProgram( program );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glVertexAttrib1f
+ * Signature: (IF)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glVertexAttrib1f
+  (JNIEnv *env, jobject, jint indx, jfloat x)
+{
+       glVertexAttrib1f( indx, x );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glVertexAttrib1fv
+ * Signature: (ILjava/nio/FloatBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glVertexAttrib1fv
+  (JNIEnv *env, jobject, jint indx, jobject values)
+{
+       void* dataPtr = getDirectBufferPointer( env, values );
+       glVertexAttrib1fv( indx, (GLfloat*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glVertexAttrib2f
+ * Signature: (IFF)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glVertexAttrib2f
+  (JNIEnv *env, jobject, jint indx, jfloat x, jfloat y)
+{
+       glVertexAttrib2f( indx, x, y );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glVertexAttrib2fv
+ * Signature: (ILjava/nio/FloatBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glVertexAttrib2fv
+  (JNIEnv *env, jobject, jint indx, jobject values)
+{
+       void* dataPtr = getDirectBufferPointer( env, values );
+       glVertexAttrib2fv( indx, (GLfloat*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glVertexAttrib3f
+ * Signature: (IFFF)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glVertexAttrib3f
+  (JNIEnv *env, jobject, jint indx, jfloat x, jfloat y, jfloat z)
+{
+       glVertexAttrib3f( indx, x, y, z );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glVertexAttrib3fv
+ * Signature: (ILjava/nio/FloatBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glVertexAttrib3fv
+  (JNIEnv *env, jobject, jint indx, jobject values)
+{
+       void* dataPtr = getDirectBufferPointer( env, values );
+       glVertexAttrib3fv( indx, (GLfloat*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glVertexAttrib4f
+ * Signature: (IFFFF)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glVertexAttrib4f
+  (JNIEnv *env, jobject, jint indx, jfloat x, jfloat y, jfloat z, jfloat w)
+{
+       glVertexAttrib4f( indx, x, y, z, w );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glVertexAttrib4fv
+ * Signature: (ILjava/nio/FloatBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glVertexAttrib4fv
+  (JNIEnv *env, jobject, jint indx, jobject values)
+{
+       void* dataPtr = getDirectBufferPointer( env, values );
+       glVertexAttrib4fv( indx, (GLfloat*)dataPtr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glVertexAttribPointer
+ * Signature: (IIIZILjava/nio/Buffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glVertexAttribPointer__IIIZILjava_nio_Buffer_2
+  (JNIEnv *env, jobject, jint indx, jint size, jint type, jboolean normalized, jint stride, jobject ptr)
+{
+       void* dataPtr = getDirectBufferPointer( env, ptr );
+       glVertexAttribPointer( indx, size, type, normalized, stride, dataPtr );
+}
+
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glVertexAttribPointer__IIIZII
+  (JNIEnv *, jobject, jint indx, jint size, jint type, jboolean normalized, jint stride, jint ptr)
+{
+       glVertexAttribPointer( indx, size, type, normalized, stride, (const void*)ptr );
+}
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glViewport
+ * Signature: (IIII)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glViewport
+  (JNIEnv *env, jobject, jint x, jint y, jint width, jint height)
+{
+       glViewport( x, y, width, height );
+}
+#endif
diff --git a/gdx/jni/iosgl/iosgl20.h b/gdx/jni/iosgl/iosgl20.h
new file mode 100644 (file)
index 0000000..634889f
--- /dev/null
@@ -0,0 +1,1173 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class com_badlogic_gdx_backends_iosrobovm_IOSGLES20 */
+
+#ifndef _Included_com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+#define _Included_com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    init
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_init
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glActiveTexture
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glActiveTexture
+  (JNIEnv *, jobject, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glAttachShader
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glAttachShader
+  (JNIEnv *, jobject, jint, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glBindAttribLocation
+ * Signature: (IILjava/lang/String;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glBindAttribLocation
+  (JNIEnv *, jobject, jint, jint, jstring);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glBindBuffer
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glBindBuffer
+  (JNIEnv *, jobject, jint, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glBindFramebuffer
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glBindFramebuffer
+  (JNIEnv *, jobject, jint, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glBindRenderbuffer
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glBindRenderbuffer
+  (JNIEnv *, jobject, jint, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glBindTexture
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glBindTexture
+  (JNIEnv *, jobject, jint, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glBlendColor
+ * Signature: (FFFF)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glBlendColor
+  (JNIEnv *, jobject, jfloat, jfloat, jfloat, jfloat);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glBlendEquation
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glBlendEquation
+  (JNIEnv *, jobject, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glBlendEquationSeparate
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glBlendEquationSeparate
+  (JNIEnv *, jobject, jint, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glBlendFunc
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glBlendFunc
+  (JNIEnv *, jobject, jint, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glBlendFuncSeparate
+ * Signature: (IIII)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glBlendFuncSeparate
+  (JNIEnv *, jobject, jint, jint, jint, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glBufferData
+ * Signature: (IILjava/nio/Buffer;I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glBufferData
+  (JNIEnv *, jobject, jint, jint, jobject, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glBufferSubData
+ * Signature: (IIILjava/nio/Buffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glBufferSubData
+  (JNIEnv *, jobject, jint, jint, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glCheckFramebufferStatus
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glCheckFramebufferStatus
+  (JNIEnv *, jobject, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glClear
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glClear
+  (JNIEnv *, jobject, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glClearColor
+ * Signature: (FFFF)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glClearColor
+  (JNIEnv *, jobject, jfloat, jfloat, jfloat, jfloat);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glClearDepthf
+ * Signature: (F)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glClearDepthf
+  (JNIEnv *, jobject, jfloat);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glClearStencil
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glClearStencil
+  (JNIEnv *, jobject, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glColorMask
+ * Signature: (ZZZZ)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glColorMask
+  (JNIEnv *, jobject, jboolean, jboolean, jboolean, jboolean);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glCompileShader
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glCompileShader
+  (JNIEnv *, jobject, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glCompressedTexImage2D
+ * Signature: (IIIIIIILjava/nio/Buffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glCompressedTexImage2D
+  (JNIEnv *, jobject, jint, jint, jint, jint, jint, jint, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glCompressedTexSubImage2D
+ * Signature: (IIIIIIIILjava/nio/Buffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glCompressedTexSubImage2D
+  (JNIEnv *, jobject, jint, jint, jint, jint, jint, jint, jint, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glCopyTexImage2D
+ * Signature: (IIIIIIII)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glCopyTexImage2D
+  (JNIEnv *, jobject, jint, jint, jint, jint, jint, jint, jint, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glCopyTexSubImage2D
+ * Signature: (IIIIIIII)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glCopyTexSubImage2D
+  (JNIEnv *, jobject, jint, jint, jint, jint, jint, jint, jint, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glCreateProgram
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glCreateProgram
+  (JNIEnv *, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glCreateShader
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glCreateShader
+  (JNIEnv *, jobject, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glCullFace
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glCullFace
+  (JNIEnv *, jobject, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glDeleteBuffers
+ * Signature: (ILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glDeleteBuffers
+  (JNIEnv *, jobject, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glDeleteFramebuffers
+ * Signature: (ILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glDeleteFramebuffers
+  (JNIEnv *, jobject, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glDeleteProgram
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glDeleteProgram
+  (JNIEnv *, jobject, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glDeleteRenderbuffers
+ * Signature: (ILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glDeleteRenderbuffers
+  (JNIEnv *, jobject, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glDeleteShader
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glDeleteShader
+  (JNIEnv *, jobject, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glDeleteTextures
+ * Signature: (ILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glDeleteTextures
+  (JNIEnv *, jobject, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glDepthFunc
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glDepthFunc
+  (JNIEnv *, jobject, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glDepthMask
+ * Signature: (Z)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glDepthMask
+  (JNIEnv *, jobject, jboolean);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glDepthRangef
+ * Signature: (FF)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glDepthRangef
+  (JNIEnv *, jobject, jfloat, jfloat);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glDetachShader
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glDetachShader
+  (JNIEnv *, jobject, jint, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glDisable
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glDisable
+  (JNIEnv *, jobject, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glDisableVertexAttribArray
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glDisableVertexAttribArray
+  (JNIEnv *, jobject, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glDrawArrays
+ * Signature: (III)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glDrawArrays
+  (JNIEnv *, jobject, jint, jint, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glDrawElements
+ * Signature: (IIILjava/nio/Buffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glDrawElements__IIILjava_nio_Buffer_2
+  (JNIEnv *, jobject, jint, jint, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glDrawElements
+ * Signature: (IIII)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glDrawElements__IIII
+  (JNIEnv *, jobject, jint, jint, jint, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glEnable
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glEnable
+  (JNIEnv *, jobject, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glEnableVertexAttribArray
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glEnableVertexAttribArray
+  (JNIEnv *, jobject, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glFinish
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glFinish
+  (JNIEnv *, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glFlush
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glFlush
+  (JNIEnv *, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glFramebufferRenderbuffer
+ * Signature: (IIII)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glFramebufferRenderbuffer
+  (JNIEnv *, jobject, jint, jint, jint, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glFramebufferTexture2D
+ * Signature: (IIIII)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glFramebufferTexture2D
+  (JNIEnv *, jobject, jint, jint, jint, jint, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glFrontFace
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glFrontFace
+  (JNIEnv *, jobject, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGenBuffers
+ * Signature: (ILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGenBuffers
+  (JNIEnv *, jobject, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGenerateMipmap
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGenerateMipmap
+  (JNIEnv *, jobject, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGenFramebuffers
+ * Signature: (ILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGenFramebuffers
+  (JNIEnv *, jobject, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGenRenderbuffers
+ * Signature: (ILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGenRenderbuffers
+  (JNIEnv *, jobject, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGenTextures
+ * Signature: (ILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGenTextures
+  (JNIEnv *, jobject, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetActiveAttrib
+ * Signature: (IILjava/nio/IntBuffer;Ljava/nio/Buffer;)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetActiveAttrib
+  (JNIEnv *, jobject, jint, jint, jobject, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetActiveUniform
+ * Signature: (IILjava/nio/IntBuffer;Ljava/nio/Buffer;)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetActiveUniform
+  (JNIEnv *, jobject, jint, jint, jobject, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetAttachedShaders
+ * Signature: (IILjava/nio/Buffer;Ljava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetAttachedShaders
+  (JNIEnv *, jobject, jint, jint, jobject, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetAttribLocation
+ * Signature: (ILjava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetAttribLocation
+  (JNIEnv *, jobject, jint, jstring);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetBooleanv
+ * Signature: (ILjava/nio/Buffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetBooleanv
+  (JNIEnv *, jobject, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetBufferParameteriv
+ * Signature: (IILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetBufferParameteriv
+  (JNIEnv *, jobject, jint, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetError
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetError
+  (JNIEnv *, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetFloatv
+ * Signature: (ILjava/nio/FloatBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetFloatv
+  (JNIEnv *, jobject, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetFramebufferAttachmentParameteriv
+ * Signature: (IIILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetFramebufferAttachmentParameteriv
+  (JNIEnv *, jobject, jint, jint, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetIntegerv
+ * Signature: (ILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetIntegerv
+  (JNIEnv *, jobject, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetProgramiv
+ * Signature: (IILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetProgramiv
+  (JNIEnv *, jobject, jint, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetProgramInfoLog
+ * Signature: (I)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetProgramInfoLog
+  (JNIEnv *, jobject, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetRenderbufferParameteriv
+ * Signature: (IILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetRenderbufferParameteriv
+  (JNIEnv *, jobject, jint, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetShaderiv
+ * Signature: (IILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetShaderiv
+  (JNIEnv *, jobject, jint, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetShaderInfoLog
+ * Signature: (I)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetShaderInfoLog
+  (JNIEnv *, jobject, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetShaderPrecisionFormat
+ * Signature: (IILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetShaderPrecisionFormat
+  (JNIEnv *, jobject, jint, jint, jobject, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetShaderSource
+ * Signature: (IILjava/nio/Buffer;Ljava/lang/String;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetShaderSource
+  (JNIEnv *, jobject, jint, jint, jobject, jstring);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetString
+ * Signature: (I)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetString
+  (JNIEnv *, jobject, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetTexParameterfv
+ * Signature: (IILjava/nio/FloatBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetTexParameterfv
+  (JNIEnv *, jobject, jint, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetTexParameteriv
+ * Signature: (IILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetTexParameteriv
+  (JNIEnv *, jobject, jint, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetUniformfv
+ * Signature: (IILjava/nio/FloatBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetUniformfv
+  (JNIEnv *, jobject, jint, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetUniformiv
+ * Signature: (IILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetUniformiv
+  (JNIEnv *, jobject, jint, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetUniformLocation
+ * Signature: (ILjava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetUniformLocation
+  (JNIEnv *, jobject, jint, jstring);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetVertexAttribfv
+ * Signature: (IILjava/nio/FloatBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetVertexAttribfv
+  (JNIEnv *, jobject, jint, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetVertexAttribiv
+ * Signature: (IILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetVertexAttribiv
+  (JNIEnv *, jobject, jint, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glGetVertexAttribPointerv
+ * Signature: (IILjava/nio/Buffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glGetVertexAttribPointerv
+  (JNIEnv *, jobject, jint, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glHint
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glHint
+  (JNIEnv *, jobject, jint, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glIsBuffer
+ * Signature: (I)Z
+ */
+JNIEXPORT jboolean JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glIsBuffer
+  (JNIEnv *, jobject, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glIsEnabled
+ * Signature: (I)Z
+ */
+JNIEXPORT jboolean JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glIsEnabled
+  (JNIEnv *, jobject, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glIsFramebuffer
+ * Signature: (I)Z
+ */
+JNIEXPORT jboolean JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glIsFramebuffer
+  (JNIEnv *, jobject, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glIsProgram
+ * Signature: (I)Z
+ */
+JNIEXPORT jboolean JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glIsProgram
+  (JNIEnv *, jobject, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glIsRenderbuffer
+ * Signature: (I)Z
+ */
+JNIEXPORT jboolean JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glIsRenderbuffer
+  (JNIEnv *, jobject, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glIsShader
+ * Signature: (I)Z
+ */
+JNIEXPORT jboolean JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glIsShader
+  (JNIEnv *, jobject, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glIsTexture
+ * Signature: (I)Z
+ */
+JNIEXPORT jboolean JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glIsTexture
+  (JNIEnv *, jobject, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glLineWidth
+ * Signature: (F)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glLineWidth
+  (JNIEnv *, jobject, jfloat);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glLinkProgram
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glLinkProgram
+  (JNIEnv *, jobject, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glPixelStorei
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glPixelStorei
+  (JNIEnv *, jobject, jint, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glPolygonOffset
+ * Signature: (FF)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glPolygonOffset
+  (JNIEnv *, jobject, jfloat, jfloat);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glReadPixels
+ * Signature: (IIIIIILjava/nio/Buffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glReadPixels
+  (JNIEnv *, jobject, jint, jint, jint, jint, jint, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glReleaseShaderCompiler
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glReleaseShaderCompiler
+  (JNIEnv *, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glRenderbufferStorage
+ * Signature: (IIII)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glRenderbufferStorage
+  (JNIEnv *, jobject, jint, jint, jint, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glSampleCoverage
+ * Signature: (FZ)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glSampleCoverage
+  (JNIEnv *, jobject, jfloat, jboolean);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glScissor
+ * Signature: (IIII)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glScissor
+  (JNIEnv *, jobject, jint, jint, jint, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glShaderBinary
+ * Signature: (ILjava/nio/IntBuffer;ILjava/nio/Buffer;I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glShaderBinary
+  (JNIEnv *, jobject, jint, jobject, jint, jobject, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glShaderSource
+ * Signature: (ILjava/lang/String;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glShaderSource
+  (JNIEnv *, jobject, jint, jstring);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glStencilFunc
+ * Signature: (III)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glStencilFunc
+  (JNIEnv *, jobject, jint, jint, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glStencilFuncSeparate
+ * Signature: (IIII)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glStencilFuncSeparate
+  (JNIEnv *, jobject, jint, jint, jint, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glStencilMask
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glStencilMask
+  (JNIEnv *, jobject, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glStencilMaskSeparate
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glStencilMaskSeparate
+  (JNIEnv *, jobject, jint, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glStencilOp
+ * Signature: (III)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glStencilOp
+  (JNIEnv *, jobject, jint, jint, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glStencilOpSeparate
+ * Signature: (IIII)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glStencilOpSeparate
+  (JNIEnv *, jobject, jint, jint, jint, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glTexImage2D
+ * Signature: (IIIIIIIILjava/nio/Buffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glTexImage2D
+  (JNIEnv *, jobject, jint, jint, jint, jint, jint, jint, jint, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glTexParameterf
+ * Signature: (IIF)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glTexParameterf
+  (JNIEnv *, jobject, jint, jint, jfloat);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glTexParameterfv
+ * Signature: (IILjava/nio/FloatBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glTexParameterfv
+  (JNIEnv *, jobject, jint, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glTexParameteri
+ * Signature: (III)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glTexParameteri
+  (JNIEnv *, jobject, jint, jint, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glTexParameteriv
+ * Signature: (IILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glTexParameteriv
+  (JNIEnv *, jobject, jint, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glTexSubImage2D
+ * Signature: (IIIIIIIILjava/nio/Buffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glTexSubImage2D
+  (JNIEnv *, jobject, jint, jint, jint, jint, jint, jint, jint, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniform1f
+ * Signature: (IF)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniform1f
+  (JNIEnv *, jobject, jint, jfloat);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniform1fv
+ * Signature: (IILjava/nio/FloatBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniform1fv
+  (JNIEnv *, jobject, jint, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniform1i
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniform1i
+  (JNIEnv *, jobject, jint, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniform1iv
+ * Signature: (IILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniform1iv
+  (JNIEnv *, jobject, jint, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniform2f
+ * Signature: (IFF)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniform2f
+  (JNIEnv *, jobject, jint, jfloat, jfloat);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniform2fv
+ * Signature: (IILjava/nio/FloatBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniform2fv
+  (JNIEnv *, jobject, jint, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniform2i
+ * Signature: (III)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniform2i
+  (JNIEnv *, jobject, jint, jint, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniform2iv
+ * Signature: (IILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniform2iv
+  (JNIEnv *, jobject, jint, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniform3f
+ * Signature: (IFFF)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniform3f
+  (JNIEnv *, jobject, jint, jfloat, jfloat, jfloat);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniform3fv
+ * Signature: (IILjava/nio/FloatBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniform3fv
+  (JNIEnv *, jobject, jint, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniform3i
+ * Signature: (IIII)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniform3i
+  (JNIEnv *, jobject, jint, jint, jint, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniform3iv
+ * Signature: (IILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniform3iv
+  (JNIEnv *, jobject, jint, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniform4f
+ * Signature: (IFFFF)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniform4f
+  (JNIEnv *, jobject, jint, jfloat, jfloat, jfloat, jfloat);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniform4fv
+ * Signature: (IILjava/nio/FloatBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniform4fv
+  (JNIEnv *, jobject, jint, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniform4i
+ * Signature: (IIIII)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniform4i
+  (JNIEnv *, jobject, jint, jint, jint, jint, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniform4iv
+ * Signature: (IILjava/nio/IntBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniform4iv
+  (JNIEnv *, jobject, jint, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniformMatrix2fv
+ * Signature: (IIZLjava/nio/FloatBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniformMatrix2fv
+  (JNIEnv *, jobject, jint, jint, jboolean, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniformMatrix3fv
+ * Signature: (IIZLjava/nio/FloatBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniformMatrix3fv
+  (JNIEnv *, jobject, jint, jint, jboolean, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUniformMatrix4fv
+ * Signature: (IIZLjava/nio/FloatBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUniformMatrix4fv
+  (JNIEnv *, jobject, jint, jint, jboolean, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glUseProgram
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glUseProgram
+  (JNIEnv *, jobject, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glValidateProgram
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glValidateProgram
+  (JNIEnv *, jobject, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glVertexAttrib1f
+ * Signature: (IF)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glVertexAttrib1f
+  (JNIEnv *, jobject, jint, jfloat);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glVertexAttrib1fv
+ * Signature: (ILjava/nio/FloatBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glVertexAttrib1fv
+  (JNIEnv *, jobject, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glVertexAttrib2f
+ * Signature: (IFF)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glVertexAttrib2f
+  (JNIEnv *, jobject, jint, jfloat, jfloat);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glVertexAttrib2fv
+ * Signature: (ILjava/nio/FloatBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glVertexAttrib2fv
+  (JNIEnv *, jobject, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glVertexAttrib3f
+ * Signature: (IFFF)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glVertexAttrib3f
+  (JNIEnv *, jobject, jint, jfloat, jfloat, jfloat);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glVertexAttrib3fv
+ * Signature: (ILjava/nio/FloatBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glVertexAttrib3fv
+  (JNIEnv *, jobject, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glVertexAttrib4f
+ * Signature: (IFFFF)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glVertexAttrib4f
+  (JNIEnv *, jobject, jint, jfloat, jfloat, jfloat, jfloat);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glVertexAttrib4fv
+ * Signature: (ILjava/nio/FloatBuffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glVertexAttrib4fv
+  (JNIEnv *, jobject, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glVertexAttribPointer
+ * Signature: (IIIZILjava/nio/Buffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glVertexAttribPointer__IIIZILjava_nio_Buffer_2
+  (JNIEnv *, jobject, jint, jint, jint, jboolean, jint, jobject);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glVertexAttribPointer
+ * Signature: (IIIZII)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glVertexAttribPointer__IIIZII
+  (JNIEnv *, jobject, jint, jint, jint, jboolean, jint, jint);
+
+/*
+ * Class:     com_badlogic_gdx_backends_iosrobovm_IOSGLES20
+ * Method:    glViewport
+ * Signature: (IIII)V
+ */
+JNIEXPORT void JNICALL Java_com_badlogic_gdx_backends_iosrobovm_IOSGLES20_glViewport
+  (JNIEnv *, jobject, jint, jint, jint, jint);
+
+#ifdef __cplusplus
+}
+#endif
+#endif