Merge branch 'readonly-p4-donut' into donut
diff --git a/Android.mk b/Android.mk
index 949181f..de5f5f8 100644
--- a/Android.mk
+++ b/Android.mk
@@ -111,6 +111,7 @@
core/java/com/android/internal/view/IInputMethodManager.aidl \
core/java/com/android/internal/view/IInputMethodSession.aidl \
im/java/android/im/IImPlugin.aidl \
+ location/java/android/location/IGeocodeProvider.aidl \
location/java/android/location/IGpsStatusListener.aidl \
location/java/android/location/ILocationCollector.aidl \
location/java/android/location/ILocationListener.aidl \
diff --git a/api/current.xml b/api/current.xml
index 26a416d..9708388 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -28346,6 +28346,28 @@
visibility="public"
>
</field>
+<field name="ACTION_POWER_CONNECTED"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""android.intent.action.ACTION_POWER_CONNECTED""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="ACTION_POWER_DISCONNECTED"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value=""android.intent.action.ACTION_POWER_DISCONNECTED""
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
<field name="ACTION_PROVIDER_CHANGED"
type="java.lang.String"
transient="false"
@@ -58003,7 +58025,7 @@
type="float"
transient="false"
volatile="false"
- value="0.001f"
+ value="0.0010f"
static="true"
final="true"
deprecated="not deprecated"
@@ -73215,6 +73237,10425 @@
>
</field>
</class>
+<class name="GLES10"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<constructor name="GLES10"
+ type="android.opengl.GLES10"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</constructor>
+<method name="_glGetString"
+ return="java.lang.String"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="name" type="int">
+</parameter>
+</method>
+<method name="glActiveTexture"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="texture" type="int">
+</parameter>
+</method>
+<method name="glAlphaFunc"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="func" type="int">
+</parameter>
+<parameter name="ref" type="float">
+</parameter>
+</method>
+<method name="glAlphaFuncx"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="func" type="int">
+</parameter>
+<parameter name="ref" type="int">
+</parameter>
+</method>
+<method name="glBindTexture"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="texture" type="int">
+</parameter>
+</method>
+<method name="glBlendFunc"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="sfactor" type="int">
+</parameter>
+<parameter name="dfactor" type="int">
+</parameter>
+</method>
+<method name="glClear"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="mask" type="int">
+</parameter>
+</method>
+<method name="glClearColor"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="red" type="float">
+</parameter>
+<parameter name="green" type="float">
+</parameter>
+<parameter name="blue" type="float">
+</parameter>
+<parameter name="alpha" type="float">
+</parameter>
+</method>
+<method name="glClearColorx"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="red" type="int">
+</parameter>
+<parameter name="green" type="int">
+</parameter>
+<parameter name="blue" type="int">
+</parameter>
+<parameter name="alpha" type="int">
+</parameter>
+</method>
+<method name="glClearDepthf"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="depth" type="float">
+</parameter>
+</method>
+<method name="glClearDepthx"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="depth" type="int">
+</parameter>
+</method>
+<method name="glClearStencil"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="s" type="int">
+</parameter>
+</method>
+<method name="glClientActiveTexture"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="texture" type="int">
+</parameter>
+</method>
+<method name="glColor4f"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="red" type="float">
+</parameter>
+<parameter name="green" type="float">
+</parameter>
+<parameter name="blue" type="float">
+</parameter>
+<parameter name="alpha" type="float">
+</parameter>
+</method>
+<method name="glColor4x"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="red" type="int">
+</parameter>
+<parameter name="green" type="int">
+</parameter>
+<parameter name="blue" type="int">
+</parameter>
+<parameter name="alpha" type="int">
+</parameter>
+</method>
+<method name="glColorMask"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="red" type="boolean">
+</parameter>
+<parameter name="green" type="boolean">
+</parameter>
+<parameter name="blue" type="boolean">
+</parameter>
+<parameter name="alpha" type="boolean">
+</parameter>
+</method>
+<method name="glColorPointer"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="size" type="int">
+</parameter>
+<parameter name="type" type="int">
+</parameter>
+<parameter name="stride" type="int">
+</parameter>
+<parameter name="pointer" type="java.nio.Buffer">
+</parameter>
+</method>
+<method name="glCompressedTexImage2D"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="level" type="int">
+</parameter>
+<parameter name="internalformat" type="int">
+</parameter>
+<parameter name="width" type="int">
+</parameter>
+<parameter name="height" type="int">
+</parameter>
+<parameter name="border" type="int">
+</parameter>
+<parameter name="imageSize" type="int">
+</parameter>
+<parameter name="data" type="java.nio.Buffer">
+</parameter>
+</method>
+<method name="glCompressedTexSubImage2D"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="level" type="int">
+</parameter>
+<parameter name="xoffset" type="int">
+</parameter>
+<parameter name="yoffset" type="int">
+</parameter>
+<parameter name="width" type="int">
+</parameter>
+<parameter name="height" type="int">
+</parameter>
+<parameter name="format" type="int">
+</parameter>
+<parameter name="imageSize" type="int">
+</parameter>
+<parameter name="data" type="java.nio.Buffer">
+</parameter>
+</method>
+<method name="glCopyTexImage2D"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="level" type="int">
+</parameter>
+<parameter name="internalformat" type="int">
+</parameter>
+<parameter name="x" type="int">
+</parameter>
+<parameter name="y" type="int">
+</parameter>
+<parameter name="width" type="int">
+</parameter>
+<parameter name="height" type="int">
+</parameter>
+<parameter name="border" type="int">
+</parameter>
+</method>
+<method name="glCopyTexSubImage2D"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="level" type="int">
+</parameter>
+<parameter name="xoffset" type="int">
+</parameter>
+<parameter name="yoffset" type="int">
+</parameter>
+<parameter name="x" type="int">
+</parameter>
+<parameter name="y" type="int">
+</parameter>
+<parameter name="width" type="int">
+</parameter>
+<parameter name="height" type="int">
+</parameter>
+</method>
+<method name="glCullFace"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="mode" type="int">
+</parameter>
+</method>
+<method name="glDeleteTextures"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="n" type="int">
+</parameter>
+<parameter name="textures" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glDeleteTextures"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="n" type="int">
+</parameter>
+<parameter name="textures" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glDepthFunc"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="func" type="int">
+</parameter>
+</method>
+<method name="glDepthMask"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="flag" type="boolean">
+</parameter>
+</method>
+<method name="glDepthRangef"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="zNear" type="float">
+</parameter>
+<parameter name="zFar" type="float">
+</parameter>
+</method>
+<method name="glDepthRangex"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="zNear" type="int">
+</parameter>
+<parameter name="zFar" type="int">
+</parameter>
+</method>
+<method name="glDisable"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="cap" type="int">
+</parameter>
+</method>
+<method name="glDisableClientState"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="array" type="int">
+</parameter>
+</method>
+<method name="glDrawArrays"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="mode" type="int">
+</parameter>
+<parameter name="first" type="int">
+</parameter>
+<parameter name="count" type="int">
+</parameter>
+</method>
+<method name="glDrawElements"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="mode" type="int">
+</parameter>
+<parameter name="count" type="int">
+</parameter>
+<parameter name="type" type="int">
+</parameter>
+<parameter name="indices" type="java.nio.Buffer">
+</parameter>
+</method>
+<method name="glEnable"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="cap" type="int">
+</parameter>
+</method>
+<method name="glEnableClientState"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="array" type="int">
+</parameter>
+</method>
+<method name="glFinish"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="glFlush"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="glFogf"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="param" type="float">
+</parameter>
+</method>
+<method name="glFogfv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="float[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glFogfv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.FloatBuffer">
+</parameter>
+</method>
+<method name="glFogx"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="param" type="int">
+</parameter>
+</method>
+<method name="glFogxv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glFogxv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glFrontFace"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="mode" type="int">
+</parameter>
+</method>
+<method name="glFrustumf"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="left" type="float">
+</parameter>
+<parameter name="right" type="float">
+</parameter>
+<parameter name="bottom" type="float">
+</parameter>
+<parameter name="top" type="float">
+</parameter>
+<parameter name="zNear" type="float">
+</parameter>
+<parameter name="zFar" type="float">
+</parameter>
+</method>
+<method name="glFrustumx"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="left" type="int">
+</parameter>
+<parameter name="right" type="int">
+</parameter>
+<parameter name="bottom" type="int">
+</parameter>
+<parameter name="top" type="int">
+</parameter>
+<parameter name="zNear" type="int">
+</parameter>
+<parameter name="zFar" type="int">
+</parameter>
+</method>
+<method name="glGenTextures"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="n" type="int">
+</parameter>
+<parameter name="textures" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGenTextures"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="n" type="int">
+</parameter>
+<parameter name="textures" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glGetError"
+ return="int"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="glGetIntegerv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGetIntegerv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glGetString"
+ return="java.lang.String"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="name" type="int">
+</parameter>
+</method>
+<method name="glHint"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="mode" type="int">
+</parameter>
+</method>
+<method name="glLightModelf"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="param" type="float">
+</parameter>
+</method>
+<method name="glLightModelfv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="float[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glLightModelfv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.FloatBuffer">
+</parameter>
+</method>
+<method name="glLightModelx"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="param" type="int">
+</parameter>
+</method>
+<method name="glLightModelxv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glLightModelxv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glLightf"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="light" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="param" type="float">
+</parameter>
+</method>
+<method name="glLightfv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="light" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="float[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glLightfv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="light" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.FloatBuffer">
+</parameter>
+</method>
+<method name="glLightx"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="light" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="param" type="int">
+</parameter>
+</method>
+<method name="glLightxv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="light" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glLightxv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="light" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glLineWidth"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="width" type="float">
+</parameter>
+</method>
+<method name="glLineWidthx"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="width" type="int">
+</parameter>
+</method>
+<method name="glLoadIdentity"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="glLoadMatrixf"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="m" type="float[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glLoadMatrixf"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="m" type="java.nio.FloatBuffer">
+</parameter>
+</method>
+<method name="glLoadMatrixx"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="m" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glLoadMatrixx"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="m" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glLogicOp"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="opcode" type="int">
+</parameter>
+</method>
+<method name="glMaterialf"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="face" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="param" type="float">
+</parameter>
+</method>
+<method name="glMaterialfv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="face" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="float[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glMaterialfv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="face" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.FloatBuffer">
+</parameter>
+</method>
+<method name="glMaterialx"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="face" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="param" type="int">
+</parameter>
+</method>
+<method name="glMaterialxv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="face" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glMaterialxv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="face" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glMatrixMode"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="mode" type="int">
+</parameter>
+</method>
+<method name="glMultMatrixf"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="m" type="float[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glMultMatrixf"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="m" type="java.nio.FloatBuffer">
+</parameter>
+</method>
+<method name="glMultMatrixx"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="m" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glMultMatrixx"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="m" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glMultiTexCoord4f"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="s" type="float">
+</parameter>
+<parameter name="t" type="float">
+</parameter>
+<parameter name="r" type="float">
+</parameter>
+<parameter name="q" type="float">
+</parameter>
+</method>
+<method name="glMultiTexCoord4x"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="s" type="int">
+</parameter>
+<parameter name="t" type="int">
+</parameter>
+<parameter name="r" type="int">
+</parameter>
+<parameter name="q" type="int">
+</parameter>
+</method>
+<method name="glNormal3f"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="nx" type="float">
+</parameter>
+<parameter name="ny" type="float">
+</parameter>
+<parameter name="nz" type="float">
+</parameter>
+</method>
+<method name="glNormal3x"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="nx" type="int">
+</parameter>
+<parameter name="ny" type="int">
+</parameter>
+<parameter name="nz" type="int">
+</parameter>
+</method>
+<method name="glNormalPointer"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="type" type="int">
+</parameter>
+<parameter name="stride" type="int">
+</parameter>
+<parameter name="pointer" type="java.nio.Buffer">
+</parameter>
+</method>
+<method name="glOrthof"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="left" type="float">
+</parameter>
+<parameter name="right" type="float">
+</parameter>
+<parameter name="bottom" type="float">
+</parameter>
+<parameter name="top" type="float">
+</parameter>
+<parameter name="zNear" type="float">
+</parameter>
+<parameter name="zFar" type="float">
+</parameter>
+</method>
+<method name="glOrthox"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="left" type="int">
+</parameter>
+<parameter name="right" type="int">
+</parameter>
+<parameter name="bottom" type="int">
+</parameter>
+<parameter name="top" type="int">
+</parameter>
+<parameter name="zNear" type="int">
+</parameter>
+<parameter name="zFar" type="int">
+</parameter>
+</method>
+<method name="glPixelStorei"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="param" type="int">
+</parameter>
+</method>
+<method name="glPointSize"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="size" type="float">
+</parameter>
+</method>
+<method name="glPointSizex"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="size" type="int">
+</parameter>
+</method>
+<method name="glPolygonOffset"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="factor" type="float">
+</parameter>
+<parameter name="units" type="float">
+</parameter>
+</method>
+<method name="glPolygonOffsetx"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="factor" type="int">
+</parameter>
+<parameter name="units" type="int">
+</parameter>
+</method>
+<method name="glPopMatrix"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="glPushMatrix"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="glReadPixels"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="x" type="int">
+</parameter>
+<parameter name="y" type="int">
+</parameter>
+<parameter name="width" type="int">
+</parameter>
+<parameter name="height" type="int">
+</parameter>
+<parameter name="format" type="int">
+</parameter>
+<parameter name="type" type="int">
+</parameter>
+<parameter name="pixels" type="java.nio.Buffer">
+</parameter>
+</method>
+<method name="glRotatef"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="angle" type="float">
+</parameter>
+<parameter name="x" type="float">
+</parameter>
+<parameter name="y" type="float">
+</parameter>
+<parameter name="z" type="float">
+</parameter>
+</method>
+<method name="glRotatex"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="angle" type="int">
+</parameter>
+<parameter name="x" type="int">
+</parameter>
+<parameter name="y" type="int">
+</parameter>
+<parameter name="z" type="int">
+</parameter>
+</method>
+<method name="glSampleCoverage"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="value" type="float">
+</parameter>
+<parameter name="invert" type="boolean">
+</parameter>
+</method>
+<method name="glSampleCoveragex"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="value" type="int">
+</parameter>
+<parameter name="invert" type="boolean">
+</parameter>
+</method>
+<method name="glScalef"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="x" type="float">
+</parameter>
+<parameter name="y" type="float">
+</parameter>
+<parameter name="z" type="float">
+</parameter>
+</method>
+<method name="glScalex"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="x" type="int">
+</parameter>
+<parameter name="y" type="int">
+</parameter>
+<parameter name="z" type="int">
+</parameter>
+</method>
+<method name="glScissor"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="x" type="int">
+</parameter>
+<parameter name="y" type="int">
+</parameter>
+<parameter name="width" type="int">
+</parameter>
+<parameter name="height" type="int">
+</parameter>
+</method>
+<method name="glShadeModel"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="mode" type="int">
+</parameter>
+</method>
+<method name="glStencilFunc"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="func" type="int">
+</parameter>
+<parameter name="ref" type="int">
+</parameter>
+<parameter name="mask" type="int">
+</parameter>
+</method>
+<method name="glStencilMask"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="mask" type="int">
+</parameter>
+</method>
+<method name="glStencilOp"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="fail" type="int">
+</parameter>
+<parameter name="zfail" type="int">
+</parameter>
+<parameter name="zpass" type="int">
+</parameter>
+</method>
+<method name="glTexCoordPointer"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="size" type="int">
+</parameter>
+<parameter name="type" type="int">
+</parameter>
+<parameter name="stride" type="int">
+</parameter>
+<parameter name="pointer" type="java.nio.Buffer">
+</parameter>
+</method>
+<method name="glTexEnvf"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="param" type="float">
+</parameter>
+</method>
+<method name="glTexEnvfv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="float[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glTexEnvfv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.FloatBuffer">
+</parameter>
+</method>
+<method name="glTexEnvx"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="param" type="int">
+</parameter>
+</method>
+<method name="glTexEnvxv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glTexEnvxv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glTexImage2D"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="level" type="int">
+</parameter>
+<parameter name="internalformat" type="int">
+</parameter>
+<parameter name="width" type="int">
+</parameter>
+<parameter name="height" type="int">
+</parameter>
+<parameter name="border" type="int">
+</parameter>
+<parameter name="format" type="int">
+</parameter>
+<parameter name="type" type="int">
+</parameter>
+<parameter name="pixels" type="java.nio.Buffer">
+</parameter>
+</method>
+<method name="glTexParameterf"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="param" type="float">
+</parameter>
+</method>
+<method name="glTexParameterx"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="param" type="int">
+</parameter>
+</method>
+<method name="glTexSubImage2D"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="level" type="int">
+</parameter>
+<parameter name="xoffset" type="int">
+</parameter>
+<parameter name="yoffset" type="int">
+</parameter>
+<parameter name="width" type="int">
+</parameter>
+<parameter name="height" type="int">
+</parameter>
+<parameter name="format" type="int">
+</parameter>
+<parameter name="type" type="int">
+</parameter>
+<parameter name="pixels" type="java.nio.Buffer">
+</parameter>
+</method>
+<method name="glTranslatef"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="x" type="float">
+</parameter>
+<parameter name="y" type="float">
+</parameter>
+<parameter name="z" type="float">
+</parameter>
+</method>
+<method name="glTranslatex"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="x" type="int">
+</parameter>
+<parameter name="y" type="int">
+</parameter>
+<parameter name="z" type="int">
+</parameter>
+</method>
+<method name="glVertexPointer"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="size" type="int">
+</parameter>
+<parameter name="type" type="int">
+</parameter>
+<parameter name="stride" type="int">
+</parameter>
+<parameter name="pointer" type="java.nio.Buffer">
+</parameter>
+</method>
+<method name="glViewport"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="x" type="int">
+</parameter>
+<parameter name="y" type="int">
+</parameter>
+<parameter name="width" type="int">
+</parameter>
+<parameter name="height" type="int">
+</parameter>
+</method>
+<field name="GL_ADD"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="260"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_ALIASED_LINE_WIDTH_RANGE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33902"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_ALIASED_POINT_SIZE_RANGE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33901"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_ALPHA"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="6406"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_ALPHA_BITS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3413"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_ALPHA_TEST"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3008"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_ALWAYS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="519"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_AMBIENT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4608"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_AMBIENT_AND_DIFFUSE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5634"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_AND"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5377"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_AND_INVERTED"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5380"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_AND_REVERSE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5378"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_BACK"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1029"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_BLEND"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3042"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_BLUE_BITS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3412"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_BYTE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5120"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_CCW"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2305"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_CLAMP_TO_EDGE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33071"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_CLEAR"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5376"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_COLOR_ARRAY"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32886"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_COLOR_BUFFER_BIT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16384"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_COLOR_LOGIC_OP"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3058"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_COLOR_MATERIAL"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2903"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_COMPRESSED_TEXTURE_FORMATS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34467"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_CONSTANT_ATTENUATION"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4615"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_COPY"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5379"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_COPY_INVERTED"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5388"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_CULL_FACE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2884"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_CW"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2304"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_DECAL"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="8449"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_DECR"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="7683"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_DEPTH_BITS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3414"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_DEPTH_BUFFER_BIT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="256"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_DEPTH_TEST"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2929"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_DIFFUSE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4609"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_DITHER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3024"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_DONT_CARE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4352"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_DST_ALPHA"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="772"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_DST_COLOR"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="774"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_EMISSION"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5632"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_EQUAL"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="514"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_EQUIV"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5385"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_EXP"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2048"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_EXP2"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2049"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_EXTENSIONS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="7939"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_FALSE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="0"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_FASTEST"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4353"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_FIXED"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5132"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_FLAT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="7424"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_FLOAT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5126"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_FOG"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2912"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_FOG_COLOR"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2918"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_FOG_DENSITY"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2914"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_FOG_END"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2916"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_FOG_HINT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3156"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_FOG_MODE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2917"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_FOG_START"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2915"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_FRONT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1028"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_FRONT_AND_BACK"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1032"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_GEQUAL"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="518"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_GREATER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="516"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_GREEN_BITS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3411"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35739"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_IMPLEMENTATION_COLOR_READ_TYPE_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35738"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_INCR"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="7682"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_INVALID_ENUM"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1280"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_INVALID_OPERATION"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1282"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_INVALID_VALUE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1281"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_INVERT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5386"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_KEEP"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="7680"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_LEQUAL"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="515"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_LESS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="513"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_LIGHT0"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16384"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_LIGHT1"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16385"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_LIGHT2"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16386"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_LIGHT3"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16387"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_LIGHT4"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16388"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_LIGHT5"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16389"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_LIGHT6"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16390"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_LIGHT7"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16391"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_LIGHTING"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2896"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_LIGHT_MODEL_AMBIENT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2899"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_LIGHT_MODEL_TWO_SIDE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2898"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_LINEAR"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="9729"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_LINEAR_ATTENUATION"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4616"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_LINEAR_MIPMAP_LINEAR"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="9987"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_LINEAR_MIPMAP_NEAREST"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="9985"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_LINES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_LINE_LOOP"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_LINE_SMOOTH"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2848"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_LINE_SMOOTH_HINT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3154"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_LINE_STRIP"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_LUMINANCE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="6409"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_LUMINANCE_ALPHA"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="6410"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_MAX_ELEMENTS_INDICES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33001"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_MAX_ELEMENTS_VERTICES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33000"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_MAX_LIGHTS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3377"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_MAX_MODELVIEW_STACK_DEPTH"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3382"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_MAX_PROJECTION_STACK_DEPTH"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3384"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_MAX_TEXTURE_SIZE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3379"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_MAX_TEXTURE_STACK_DEPTH"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3385"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_MAX_TEXTURE_UNITS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34018"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_MAX_VIEWPORT_DIMS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3386"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_MODELVIEW"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5888"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_MODULATE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="8448"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_MULTISAMPLE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32925"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_NAND"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5390"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_NEAREST"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="9728"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_NEAREST_MIPMAP_LINEAR"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="9986"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_NEAREST_MIPMAP_NEAREST"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="9984"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_NEVER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="512"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_NICEST"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4354"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_NOOP"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5381"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_NOR"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5384"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_NORMALIZE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2977"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_NORMAL_ARRAY"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32885"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_NOTEQUAL"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="517"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_NO_ERROR"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="0"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_NUM_COMPRESSED_TEXTURE_FORMATS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34466"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_ONE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_ONE_MINUS_DST_ALPHA"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="773"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_ONE_MINUS_DST_COLOR"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="775"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_ONE_MINUS_SRC_ALPHA"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="771"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_ONE_MINUS_SRC_COLOR"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="769"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_OR"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5383"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_OR_INVERTED"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5389"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_OR_REVERSE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5387"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_OUT_OF_MEMORY"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1285"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_PACK_ALIGNMENT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3333"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_PALETTE4_R5_G6_B5_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35730"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_PALETTE4_RGB5_A1_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35732"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_PALETTE4_RGB8_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35728"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_PALETTE4_RGBA4_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35731"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_PALETTE4_RGBA8_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35729"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_PALETTE8_R5_G6_B5_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35735"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_PALETTE8_RGB5_A1_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35737"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_PALETTE8_RGB8_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35733"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_PALETTE8_RGBA4_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35736"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_PALETTE8_RGBA8_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35734"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_PERSPECTIVE_CORRECTION_HINT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3152"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_POINTS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="0"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_POINT_FADE_THRESHOLD_SIZE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33064"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_POINT_SIZE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2833"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_POINT_SMOOTH"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2832"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_POINT_SMOOTH_HINT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3153"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_POLYGON_OFFSET_FILL"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32823"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_POLYGON_SMOOTH_HINT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3155"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_POSITION"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4611"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_PROJECTION"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5889"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_QUADRATIC_ATTENUATION"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4617"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_RED_BITS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3410"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_RENDERER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="7937"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_REPEAT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="10497"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_REPLACE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="7681"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_RESCALE_NORMAL"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32826"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_RGB"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="6407"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_RGBA"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="6408"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_SAMPLE_ALPHA_TO_COVERAGE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32926"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_SAMPLE_ALPHA_TO_ONE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32927"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_SAMPLE_COVERAGE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32928"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_SCISSOR_TEST"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3089"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_SET"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5391"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_SHININESS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5633"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_SHORT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5122"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_SMOOTH"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="7425"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_SMOOTH_LINE_WIDTH_RANGE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2850"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_SMOOTH_POINT_SIZE_RANGE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2834"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_SPECULAR"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4610"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_SPOT_CUTOFF"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4614"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_SPOT_DIRECTION"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4612"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_SPOT_EXPONENT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4613"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_SRC_ALPHA"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="770"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_SRC_ALPHA_SATURATE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="776"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_SRC_COLOR"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="768"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_STACK_OVERFLOW"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1283"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_STACK_UNDERFLOW"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1284"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_STENCIL_BITS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3415"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_STENCIL_BUFFER_BIT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1024"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_STENCIL_TEST"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2960"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_SUBPIXEL_BITS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3408"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5890"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE0"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33984"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE1"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33985"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE10"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33994"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE11"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33995"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE12"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33996"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE13"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33997"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE14"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33998"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE15"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33999"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE16"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34000"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE17"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34001"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE18"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34002"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE19"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34003"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE2"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33986"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE20"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34004"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE21"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34005"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE22"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34006"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE23"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34007"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE24"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34008"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE25"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34009"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE26"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34010"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE27"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34011"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE28"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34012"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE29"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34013"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE3"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33987"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE30"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34014"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE31"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34015"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE4"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33988"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE5"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33989"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE6"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33990"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE7"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33991"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE8"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33992"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE9"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33993"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE_2D"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3553"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE_COORD_ARRAY"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32888"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE_ENV"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="8960"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE_ENV_COLOR"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="8705"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE_ENV_MODE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="8704"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE_MAG_FILTER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="10240"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE_MIN_FILTER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="10241"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE_WRAP_S"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="10242"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE_WRAP_T"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="10243"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TRIANGLES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="4"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TRIANGLE_FAN"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="6"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TRIANGLE_STRIP"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TRUE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_UNPACK_ALIGNMENT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3317"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_UNSIGNED_BYTE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5121"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_UNSIGNED_SHORT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5123"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_UNSIGNED_SHORT_4_4_4_4"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32819"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_UNSIGNED_SHORT_5_5_5_1"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32820"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_UNSIGNED_SHORT_5_6_5"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33635"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_VENDOR"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="7936"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_VERSION"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="7938"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_VERTEX_ARRAY"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32884"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_XOR"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5382"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_ZERO"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="0"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="GLES10Ext"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<constructor name="GLES10Ext"
+ type="android.opengl.GLES10Ext"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</constructor>
+<method name="glQueryMatrixxOES"
+ return="int"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="mantissa" type="int[]">
+</parameter>
+<parameter name="mantissaOffset" type="int">
+</parameter>
+<parameter name="exponent" type="int[]">
+</parameter>
+<parameter name="exponentOffset" type="int">
+</parameter>
+</method>
+<method name="glQueryMatrixxOES"
+ return="int"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="mantissa" type="java.nio.IntBuffer">
+</parameter>
+<parameter name="exponent" type="java.nio.IntBuffer">
+</parameter>
+</method>
+</class>
+<class name="GLES11"
+ extends="android.opengl.GLES10"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<constructor name="GLES11"
+ type="android.opengl.GLES11"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</constructor>
+<method name="glBindBuffer"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="buffer" type="int">
+</parameter>
+</method>
+<method name="glBufferData"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="size" type="int">
+</parameter>
+<parameter name="data" type="java.nio.Buffer">
+</parameter>
+<parameter name="usage" type="int">
+</parameter>
+</method>
+<method name="glBufferSubData"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+<parameter name="size" type="int">
+</parameter>
+<parameter name="data" type="java.nio.Buffer">
+</parameter>
+</method>
+<method name="glClipPlanef"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="plane" type="int">
+</parameter>
+<parameter name="equation" type="float[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glClipPlanef"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="plane" type="int">
+</parameter>
+<parameter name="equation" type="java.nio.FloatBuffer">
+</parameter>
+</method>
+<method name="glClipPlanex"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="plane" type="int">
+</parameter>
+<parameter name="equation" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glClipPlanex"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="plane" type="int">
+</parameter>
+<parameter name="equation" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glColor4ub"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="red" type="byte">
+</parameter>
+<parameter name="green" type="byte">
+</parameter>
+<parameter name="blue" type="byte">
+</parameter>
+<parameter name="alpha" type="byte">
+</parameter>
+</method>
+<method name="glColorPointer"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="size" type="int">
+</parameter>
+<parameter name="type" type="int">
+</parameter>
+<parameter name="stride" type="int">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glDeleteBuffers"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="n" type="int">
+</parameter>
+<parameter name="buffers" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glDeleteBuffers"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="n" type="int">
+</parameter>
+<parameter name="buffers" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glDrawElements"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="mode" type="int">
+</parameter>
+<parameter name="count" type="int">
+</parameter>
+<parameter name="type" type="int">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGenBuffers"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="n" type="int">
+</parameter>
+<parameter name="buffers" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGenBuffers"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="n" type="int">
+</parameter>
+<parameter name="buffers" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glGetBooleanv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="boolean[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGetBooleanv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glGetBufferParameteriv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGetBufferParameteriv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glGetClipPlanef"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="eqn" type="float[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGetClipPlanef"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="eqn" type="java.nio.FloatBuffer">
+</parameter>
+</method>
+<method name="glGetClipPlanex"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="eqn" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGetClipPlanex"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="eqn" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glGetFixedv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGetFixedv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glGetFloatv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="float[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGetFloatv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.FloatBuffer">
+</parameter>
+</method>
+<method name="glGetLightfv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="light" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="float[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGetLightfv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="light" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.FloatBuffer">
+</parameter>
+</method>
+<method name="glGetLightxv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="light" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGetLightxv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="light" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glGetMaterialfv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="face" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="float[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGetMaterialfv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="face" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.FloatBuffer">
+</parameter>
+</method>
+<method name="glGetMaterialxv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="face" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGetMaterialxv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="face" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glGetTexEnvfv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="env" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="float[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGetTexEnvfv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="env" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.FloatBuffer">
+</parameter>
+</method>
+<method name="glGetTexEnviv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="env" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGetTexEnviv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="env" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glGetTexEnvxv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="env" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGetTexEnvxv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="env" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glGetTexParameterfv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="float[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGetTexParameterfv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.FloatBuffer">
+</parameter>
+</method>
+<method name="glGetTexParameteriv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGetTexParameteriv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glGetTexParameterxv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGetTexParameterxv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glIsBuffer"
+ return="boolean"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="buffer" type="int">
+</parameter>
+</method>
+<method name="glIsEnabled"
+ return="boolean"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="cap" type="int">
+</parameter>
+</method>
+<method name="glIsTexture"
+ return="boolean"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="texture" type="int">
+</parameter>
+</method>
+<method name="glNormalPointer"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="type" type="int">
+</parameter>
+<parameter name="stride" type="int">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glPointParameterf"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="param" type="float">
+</parameter>
+</method>
+<method name="glPointParameterfv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="float[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glPointParameterfv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.FloatBuffer">
+</parameter>
+</method>
+<method name="glPointParameterx"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="param" type="int">
+</parameter>
+</method>
+<method name="glPointParameterxv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glPointParameterxv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glPointSizePointerOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="type" type="int">
+</parameter>
+<parameter name="stride" type="int">
+</parameter>
+<parameter name="pointer" type="java.nio.Buffer">
+</parameter>
+</method>
+<method name="glTexCoordPointer"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="size" type="int">
+</parameter>
+<parameter name="type" type="int">
+</parameter>
+<parameter name="stride" type="int">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glTexEnvi"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="param" type="int">
+</parameter>
+</method>
+<method name="glTexEnviv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glTexEnviv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glTexParameterfv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="float[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glTexParameterfv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.FloatBuffer">
+</parameter>
+</method>
+<method name="glTexParameteri"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="param" type="int">
+</parameter>
+</method>
+<method name="glTexParameteriv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glTexParameteriv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glTexParameterxv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glTexParameterxv"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glVertexPointer"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="size" type="int">
+</parameter>
+<parameter name="type" type="int">
+</parameter>
+<parameter name="stride" type="int">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<field name="GL_ACTIVE_TEXTURE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34016"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_ADD_SIGNED"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34164"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_ALPHA_SCALE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3356"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_ALPHA_TEST_FUNC"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3009"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_ALPHA_TEST_REF"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3010"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_ARRAY_BUFFER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34962"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_ARRAY_BUFFER_BINDING"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34964"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_BLEND_DST"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3040"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_BLEND_SRC"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3041"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_BUFFER_ACCESS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35003"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_BUFFER_SIZE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34660"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_BUFFER_USAGE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34661"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_CLIENT_ACTIVE_TEXTURE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34017"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_CLIP_PLANE0"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="12288"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_CLIP_PLANE1"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="12289"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_CLIP_PLANE2"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="12290"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_CLIP_PLANE3"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="12291"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_CLIP_PLANE4"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="12292"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_CLIP_PLANE5"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="12293"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_COLOR_ARRAY_BUFFER_BINDING"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34968"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_COLOR_ARRAY_POINTER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32912"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_COLOR_ARRAY_SIZE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32897"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_COLOR_ARRAY_STRIDE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32899"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_COLOR_ARRAY_TYPE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32898"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_COLOR_CLEAR_VALUE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3106"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_COLOR_WRITEMASK"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3107"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_COMBINE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34160"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_COMBINE_ALPHA"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34162"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_COMBINE_RGB"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34161"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_CONSTANT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34166"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_COORD_REPLACE_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34914"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_CULL_FACE_MODE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2885"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_CURRENT_COLOR"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2816"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_CURRENT_NORMAL"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2818"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_CURRENT_TEXTURE_COORDS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2819"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_DEPTH_CLEAR_VALUE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2931"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_DEPTH_FUNC"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2932"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_DEPTH_RANGE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2928"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_DEPTH_WRITEMASK"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2930"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_DOT3_RGB"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34478"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_DOT3_RGBA"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34479"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_DYNAMIC_DRAW"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35048"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_ELEMENT_ARRAY_BUFFER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34963"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_ELEMENT_ARRAY_BUFFER_BINDING"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34965"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_FRONT_FACE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2886"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_GENERATE_MIPMAP"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33169"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_GENERATE_MIPMAP_HINT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33170"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_INTERPOLATE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34165"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_LINE_WIDTH"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2849"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_LOGIC_OP_MODE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3056"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_MATRIX_MODE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2976"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_MAX_CLIP_PLANES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3378"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_MODELVIEW_MATRIX"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2982"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35213"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_MODELVIEW_STACK_DEPTH"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2979"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_NORMAL_ARRAY_BUFFER_BINDING"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34967"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_NORMAL_ARRAY_POINTER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32911"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_NORMAL_ARRAY_STRIDE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32895"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_NORMAL_ARRAY_TYPE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32894"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_OPERAND0_ALPHA"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34200"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_OPERAND0_RGB"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34192"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_OPERAND1_ALPHA"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34201"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_OPERAND1_RGB"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34193"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_OPERAND2_ALPHA"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34202"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_OPERAND2_RGB"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34194"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_POINT_DISTANCE_ATTENUATION"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33065"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_POINT_FADE_THRESHOLD_SIZE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33064"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_POINT_SIZE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2833"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35743"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_POINT_SIZE_ARRAY_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35740"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_POINT_SIZE_ARRAY_POINTER_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35212"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_POINT_SIZE_ARRAY_STRIDE_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35211"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_POINT_SIZE_ARRAY_TYPE_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35210"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_POINT_SIZE_MAX"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33063"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_POINT_SIZE_MIN"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33062"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_POINT_SPRITE_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34913"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_POLYGON_OFFSET_FACTOR"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32824"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_POLYGON_OFFSET_UNITS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="10752"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_PREVIOUS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34168"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_PRIMARY_COLOR"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34167"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_PROJECTION_MATRIX"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2983"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35214"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_PROJECTION_STACK_DEPTH"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2980"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_RGB_SCALE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34163"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_SAMPLES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32937"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_SAMPLE_BUFFERS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32936"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_SAMPLE_COVERAGE_INVERT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32939"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_SAMPLE_COVERAGE_VALUE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32938"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_SCISSOR_BOX"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="3088"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_SHADE_MODEL"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2900"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_SRC0_ALPHA"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34184"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_SRC0_RGB"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34176"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_SRC1_ALPHA"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34185"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_SRC1_RGB"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34177"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_SRC2_ALPHA"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34186"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_SRC2_RGB"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34178"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_STATIC_DRAW"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35044"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_STENCIL_CLEAR_VALUE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2961"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_STENCIL_FAIL"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2964"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_STENCIL_FUNC"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2962"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_STENCIL_PASS_DEPTH_FAIL"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2965"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_STENCIL_PASS_DEPTH_PASS"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2966"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_STENCIL_REF"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2967"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_STENCIL_VALUE_MASK"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2963"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_STENCIL_WRITEMASK"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2968"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_SUBTRACT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34023"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE_BINDING_2D"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32873"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34970"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE_COORD_ARRAY_POINTER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32914"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE_COORD_ARRAY_SIZE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32904"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE_COORD_ARRAY_STRIDE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32906"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE_COORD_ARRAY_TYPE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32905"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE_MATRIX"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2984"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35215"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE_STACK_DEPTH"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2981"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_VERTEX_ARRAY_BUFFER_BINDING"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34966"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_VERTEX_ARRAY_POINTER"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32910"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_VERTEX_ARRAY_SIZE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32890"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_VERTEX_ARRAY_STRIDE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32892"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_VERTEX_ARRAY_TYPE"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32891"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_VIEWPORT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2978"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_WRITE_ONLY"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35001"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
+<class name="GLES11Ext"
+ extends="java.lang.Object"
+ abstract="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<constructor name="GLES11Ext"
+ type="android.opengl.GLES11Ext"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</constructor>
+<method name="glAlphaFuncxOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="func" type="int">
+</parameter>
+<parameter name="ref" type="int">
+</parameter>
+</method>
+<method name="glBindFramebufferOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="framebuffer" type="int">
+</parameter>
+</method>
+<method name="glBindRenderbufferOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="renderbuffer" type="int">
+</parameter>
+</method>
+<method name="glBlendEquationOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="mode" type="int">
+</parameter>
+</method>
+<method name="glBlendEquationSeparateOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="modeRGB" type="int">
+</parameter>
+<parameter name="modeAlpha" type="int">
+</parameter>
+</method>
+<method name="glBlendFuncSeparateOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="srcRGB" type="int">
+</parameter>
+<parameter name="dstRGB" type="int">
+</parameter>
+<parameter name="srcAlpha" type="int">
+</parameter>
+<parameter name="dstAlpha" type="int">
+</parameter>
+</method>
+<method name="glCheckFramebufferStatusOES"
+ return="int"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+</method>
+<method name="glClearColorxOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="red" type="int">
+</parameter>
+<parameter name="green" type="int">
+</parameter>
+<parameter name="blue" type="int">
+</parameter>
+<parameter name="alpha" type="int">
+</parameter>
+</method>
+<method name="glClearDepthfOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="depth" type="float">
+</parameter>
+</method>
+<method name="glClearDepthxOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="depth" type="int">
+</parameter>
+</method>
+<method name="glClipPlanefOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="plane" type="int">
+</parameter>
+<parameter name="equation" type="float[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glClipPlanefOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="plane" type="int">
+</parameter>
+<parameter name="equation" type="java.nio.FloatBuffer">
+</parameter>
+</method>
+<method name="glClipPlanexOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="plane" type="int">
+</parameter>
+<parameter name="equation" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glClipPlanexOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="plane" type="int">
+</parameter>
+<parameter name="equation" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glColor4xOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="red" type="int">
+</parameter>
+<parameter name="green" type="int">
+</parameter>
+<parameter name="blue" type="int">
+</parameter>
+<parameter name="alpha" type="int">
+</parameter>
+</method>
+<method name="glCurrentPaletteMatrixOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="matrixpaletteindex" type="int">
+</parameter>
+</method>
+<method name="glDeleteFramebuffersOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="n" type="int">
+</parameter>
+<parameter name="framebuffers" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glDeleteFramebuffersOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="n" type="int">
+</parameter>
+<parameter name="framebuffers" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glDeleteRenderbuffersOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="n" type="int">
+</parameter>
+<parameter name="renderbuffers" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glDeleteRenderbuffersOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="n" type="int">
+</parameter>
+<parameter name="renderbuffers" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glDepthRangefOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="zNear" type="float">
+</parameter>
+<parameter name="zFar" type="float">
+</parameter>
+</method>
+<method name="glDepthRangexOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="zNear" type="int">
+</parameter>
+<parameter name="zFar" type="int">
+</parameter>
+</method>
+<method name="glDrawTexfOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="x" type="float">
+</parameter>
+<parameter name="y" type="float">
+</parameter>
+<parameter name="z" type="float">
+</parameter>
+<parameter name="width" type="float">
+</parameter>
+<parameter name="height" type="float">
+</parameter>
+</method>
+<method name="glDrawTexfvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="coords" type="float[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glDrawTexfvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="coords" type="java.nio.FloatBuffer">
+</parameter>
+</method>
+<method name="glDrawTexiOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="x" type="int">
+</parameter>
+<parameter name="y" type="int">
+</parameter>
+<parameter name="z" type="int">
+</parameter>
+<parameter name="width" type="int">
+</parameter>
+<parameter name="height" type="int">
+</parameter>
+</method>
+<method name="glDrawTexivOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="coords" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glDrawTexivOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="coords" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glDrawTexsOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="x" type="short">
+</parameter>
+<parameter name="y" type="short">
+</parameter>
+<parameter name="z" type="short">
+</parameter>
+<parameter name="width" type="short">
+</parameter>
+<parameter name="height" type="short">
+</parameter>
+</method>
+<method name="glDrawTexsvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="coords" type="short[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glDrawTexsvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="coords" type="java.nio.ShortBuffer">
+</parameter>
+</method>
+<method name="glDrawTexxOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="x" type="int">
+</parameter>
+<parameter name="y" type="int">
+</parameter>
+<parameter name="z" type="int">
+</parameter>
+<parameter name="width" type="int">
+</parameter>
+<parameter name="height" type="int">
+</parameter>
+</method>
+<method name="glDrawTexxvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="coords" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glDrawTexxvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="coords" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glEGLImageTargetRenderbufferStorageOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="image" type="java.nio.Buffer">
+</parameter>
+</method>
+<method name="glEGLImageTargetTexture2DOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="image" type="java.nio.Buffer">
+</parameter>
+</method>
+<method name="glFogxOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="param" type="int">
+</parameter>
+</method>
+<method name="glFogxvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glFogxvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glFramebufferRenderbufferOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="attachment" type="int">
+</parameter>
+<parameter name="renderbuffertarget" type="int">
+</parameter>
+<parameter name="renderbuffer" type="int">
+</parameter>
+</method>
+<method name="glFramebufferTexture2DOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="attachment" type="int">
+</parameter>
+<parameter name="textarget" type="int">
+</parameter>
+<parameter name="texture" type="int">
+</parameter>
+<parameter name="level" type="int">
+</parameter>
+</method>
+<method name="glFrustumfOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="left" type="float">
+</parameter>
+<parameter name="right" type="float">
+</parameter>
+<parameter name="bottom" type="float">
+</parameter>
+<parameter name="top" type="float">
+</parameter>
+<parameter name="zNear" type="float">
+</parameter>
+<parameter name="zFar" type="float">
+</parameter>
+</method>
+<method name="glFrustumxOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="left" type="int">
+</parameter>
+<parameter name="right" type="int">
+</parameter>
+<parameter name="bottom" type="int">
+</parameter>
+<parameter name="top" type="int">
+</parameter>
+<parameter name="zNear" type="int">
+</parameter>
+<parameter name="zFar" type="int">
+</parameter>
+</method>
+<method name="glGenFramebuffersOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="n" type="int">
+</parameter>
+<parameter name="framebuffers" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGenFramebuffersOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="n" type="int">
+</parameter>
+<parameter name="framebuffers" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glGenRenderbuffersOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="n" type="int">
+</parameter>
+<parameter name="renderbuffers" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGenRenderbuffersOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="n" type="int">
+</parameter>
+<parameter name="renderbuffers" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glGenerateMipmapOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+</method>
+<method name="glGetClipPlanefOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="eqn" type="float[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGetClipPlanefOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="eqn" type="java.nio.FloatBuffer">
+</parameter>
+</method>
+<method name="glGetClipPlanexOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="eqn" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGetClipPlanexOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="eqn" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glGetFixedvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGetFixedvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glGetFramebufferAttachmentParameterivOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="attachment" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGetFramebufferAttachmentParameterivOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="attachment" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glGetLightxvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="light" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGetLightxvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="light" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glGetMaterialxvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="face" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGetMaterialxvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="face" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glGetRenderbufferParameterivOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGetRenderbufferParameterivOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glGetTexEnvxvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="env" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGetTexEnvxvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="env" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glGetTexGenfvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="coord" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="float[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGetTexGenfvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="coord" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.FloatBuffer">
+</parameter>
+</method>
+<method name="glGetTexGenivOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="coord" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGetTexGenivOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="coord" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glGetTexGenxvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="coord" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGetTexGenxvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="coord" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glGetTexParameterxvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glGetTexParameterxvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glIsFramebufferOES"
+ return="boolean"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="framebuffer" type="int">
+</parameter>
+</method>
+<method name="glIsRenderbufferOES"
+ return="boolean"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="renderbuffer" type="int">
+</parameter>
+</method>
+<method name="glLightModelxOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="param" type="int">
+</parameter>
+</method>
+<method name="glLightModelxvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glLightModelxvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glLightxOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="light" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="param" type="int">
+</parameter>
+</method>
+<method name="glLightxvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="light" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glLightxvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="light" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glLineWidthxOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="width" type="int">
+</parameter>
+</method>
+<method name="glLoadMatrixxOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="m" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glLoadMatrixxOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="m" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glLoadPaletteFromModelViewMatrixOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
+<method name="glMaterialxOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="face" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="param" type="int">
+</parameter>
+</method>
+<method name="glMaterialxvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="face" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glMaterialxvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="face" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glMatrixIndexPointerOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="size" type="int">
+</parameter>
+<parameter name="type" type="int">
+</parameter>
+<parameter name="stride" type="int">
+</parameter>
+<parameter name="pointer" type="java.nio.Buffer">
+</parameter>
+</method>
+<method name="glMultMatrixxOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="m" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glMultMatrixxOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="m" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glMultiTexCoord4xOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="s" type="int">
+</parameter>
+<parameter name="t" type="int">
+</parameter>
+<parameter name="r" type="int">
+</parameter>
+<parameter name="q" type="int">
+</parameter>
+</method>
+<method name="glNormal3xOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="nx" type="int">
+</parameter>
+<parameter name="ny" type="int">
+</parameter>
+<parameter name="nz" type="int">
+</parameter>
+</method>
+<method name="glOrthofOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="left" type="float">
+</parameter>
+<parameter name="right" type="float">
+</parameter>
+<parameter name="bottom" type="float">
+</parameter>
+<parameter name="top" type="float">
+</parameter>
+<parameter name="zNear" type="float">
+</parameter>
+<parameter name="zFar" type="float">
+</parameter>
+</method>
+<method name="glOrthoxOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="left" type="int">
+</parameter>
+<parameter name="right" type="int">
+</parameter>
+<parameter name="bottom" type="int">
+</parameter>
+<parameter name="top" type="int">
+</parameter>
+<parameter name="zNear" type="int">
+</parameter>
+<parameter name="zFar" type="int">
+</parameter>
+</method>
+<method name="glPointParameterxOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="param" type="int">
+</parameter>
+</method>
+<method name="glPointParameterxvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glPointParameterxvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glPointSizexOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="size" type="int">
+</parameter>
+</method>
+<method name="glPolygonOffsetxOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="factor" type="int">
+</parameter>
+<parameter name="units" type="int">
+</parameter>
+</method>
+<method name="glRenderbufferStorageOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="internalformat" type="int">
+</parameter>
+<parameter name="width" type="int">
+</parameter>
+<parameter name="height" type="int">
+</parameter>
+</method>
+<method name="glRotatexOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="angle" type="int">
+</parameter>
+<parameter name="x" type="int">
+</parameter>
+<parameter name="y" type="int">
+</parameter>
+<parameter name="z" type="int">
+</parameter>
+</method>
+<method name="glSampleCoveragexOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="value" type="int">
+</parameter>
+<parameter name="invert" type="boolean">
+</parameter>
+</method>
+<method name="glScalexOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="x" type="int">
+</parameter>
+<parameter name="y" type="int">
+</parameter>
+<parameter name="z" type="int">
+</parameter>
+</method>
+<method name="glTexEnvxOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="param" type="int">
+</parameter>
+</method>
+<method name="glTexEnvxvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glTexEnvxvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glTexGenfOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="coord" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="param" type="float">
+</parameter>
+</method>
+<method name="glTexGenfvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="coord" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="float[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glTexGenfvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="coord" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.FloatBuffer">
+</parameter>
+</method>
+<method name="glTexGeniOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="coord" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="param" type="int">
+</parameter>
+</method>
+<method name="glTexGenivOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="coord" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glTexGenivOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="coord" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glTexGenxOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="coord" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="param" type="int">
+</parameter>
+</method>
+<method name="glTexGenxvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="coord" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glTexGenxvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="coord" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glTexParameterxOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="param" type="int">
+</parameter>
+</method>
+<method name="glTexParameterxvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="int[]">
+</parameter>
+<parameter name="offset" type="int">
+</parameter>
+</method>
+<method name="glTexParameterxvOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="target" type="int">
+</parameter>
+<parameter name="pname" type="int">
+</parameter>
+<parameter name="params" type="java.nio.IntBuffer">
+</parameter>
+</method>
+<method name="glTranslatexOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="x" type="int">
+</parameter>
+<parameter name="y" type="int">
+</parameter>
+<parameter name="z" type="int">
+</parameter>
+</method>
+<method name="glWeightPointerOES"
+ return="void"
+ abstract="false"
+ native="true"
+ synchronized="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="size" type="int">
+</parameter>
+<parameter name="type" type="int">
+</parameter>
+<parameter name="stride" type="int">
+</parameter>
+<parameter name="pointer" type="java.nio.Buffer">
+</parameter>
+</method>
+<field name="GL_3DC_XY_AMD"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34810"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_3DC_X_AMD"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34809"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_ATC_RGBA_EXPLICIT_ALPHA_AMD"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35987"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34798"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_ATC_RGB_AMD"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35986"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_BGRA"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32993"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_BLEND_DST_ALPHA_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32970"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_BLEND_DST_RGB_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32968"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_BLEND_EQUATION_ALPHA_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34877"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_BLEND_EQUATION_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32777"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_BLEND_EQUATION_RGB_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32777"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_BLEND_SRC_ALPHA_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32971"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_BLEND_SRC_RGB_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32969"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_BUFFER_ACCESS_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35003"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_BUFFER_MAPPED_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35004"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_BUFFER_MAP_POINTER_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35005"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_COLOR_ATTACHMENT0_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="36064"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_CURRENT_PALETTE_MATRIX_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34883"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_DECR_WRAP_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34056"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_DEPTH24_STENCIL8_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35056"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_DEPTH_ATTACHMENT_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="36096"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_DEPTH_COMPONENT16_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33189"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_DEPTH_COMPONENT24_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33190"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_DEPTH_COMPONENT32_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33191"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_DEPTH_STENCIL_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34041"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_ETC1_RGB8_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="36196"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_FIXED_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="5132"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="36049"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="36048"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="36051"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="36050"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_FRAMEBUFFER_BINDING_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="36006"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_FRAMEBUFFER_COMPLETE_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="36053"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="36054"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="36057"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="36058"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="36055"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_FRAMEBUFFER_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="36160"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_FRAMEBUFFER_UNSUPPORTED_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="36061"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_FUNC_ADD_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32774"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_FUNC_REVERSE_SUBTRACT_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32779"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_FUNC_SUBTRACT_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32778"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_INCR_WRAP_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34055"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_INVALID_FRAMEBUFFER_OPERATION_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="1286"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35742"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_MATRIX_INDEX_ARRAY_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34884"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_MATRIX_INDEX_ARRAY_POINTER_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34889"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_MATRIX_INDEX_ARRAY_SIZE_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34886"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_MATRIX_INDEX_ARRAY_STRIDE_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34888"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_MATRIX_INDEX_ARRAY_TYPE_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34887"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_MATRIX_PALETTE_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34880"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_MAX_CUBE_MAP_TEXTURE_SIZE_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34076"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_MAX_PALETTE_MATRICES_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34882"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_MAX_RENDERBUFFER_SIZE_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34024"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34047"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_MAX_VERTEX_UNITS_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34468"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_MIRRORED_REPEAT_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="33648"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35213"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_NONE_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="0"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_NORMAL_MAP_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34065"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35214"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_REFLECTION_MAP_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34066"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_RENDERBUFFER_ALPHA_SIZE_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="36179"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_RENDERBUFFER_BINDING_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="36007"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_RENDERBUFFER_BLUE_SIZE_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="36178"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_RENDERBUFFER_DEPTH_SIZE_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="36180"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_RENDERBUFFER_GREEN_SIZE_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="36177"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_RENDERBUFFER_HEIGHT_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="36163"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_RENDERBUFFER_INTERNAL_FORMAT_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="36164"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_RENDERBUFFER_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="36161"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_RENDERBUFFER_RED_SIZE_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="36176"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_RENDERBUFFER_STENCIL_SIZE_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="36181"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_RENDERBUFFER_WIDTH_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="36162"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_RGB565_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="36194"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_RGB5_A1_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32855"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_RGB8_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32849"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_RGBA4_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32854"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_RGBA8_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="32856"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_STENCIL_ATTACHMENT_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="36128"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_STENCIL_INDEX1_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="36166"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_STENCIL_INDEX4_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="36167"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_STENCIL_INDEX8_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="36168"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE_BINDING_CUBE_MAP_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34068"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE_CROP_RECT_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35741"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34070"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34072"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34074"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE_CUBE_MAP_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34067"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34069"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34071"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34073"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE_GEN_MODE_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="9472"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE_GEN_STR_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="36192"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35215"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_TEXTURE_MAX_ANISOTROPY_EXT"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34046"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_UNSIGNED_INT_24_8_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34042"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_WEIGHT_ARRAY_BUFFER_BINDING_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34974"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_WEIGHT_ARRAY_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34477"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_WEIGHT_ARRAY_POINTER_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34476"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_WEIGHT_ARRAY_SIZE_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34475"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_WEIGHT_ARRAY_STRIDE_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34474"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_WEIGHT_ARRAY_TYPE_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="34473"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="GL_WRITE_ONLY_OES"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="35001"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
<class name="GLException"
extends="java.lang.RuntimeException"
abstract="false"
diff --git a/camera/libcameraservice/CameraService.cpp b/camera/libcameraservice/CameraService.cpp
index cb8ab588..96ee502 100644
--- a/camera/libcameraservice/CameraService.cpp
+++ b/camera/libcameraservice/CameraService.cpp
@@ -217,7 +217,13 @@
// allow anyone to use camera
LOGV("unlock (%p)", getCameraClient()->asBinder().get());
status_t result = checkPid();
- if (result == NO_ERROR) mClientPid = 0;
+ if (result == NO_ERROR) {
+ mClientPid = 0;
+
+ // we need to remove the reference so that when app goes
+ // away, the reference count goes to 0.
+ mCameraClient.clear();
+ }
return result;
}
@@ -894,8 +900,6 @@
// get preview/capture parameters - key/value pairs
String8 CameraService::Client::getParameters() const
{
- LOGD("getParameters");
-
Mutex::Autolock lock(mLock);
if (mHardware == 0) {
@@ -903,7 +907,9 @@
return String8();
}
- return mHardware->getParameters().flatten();
+ String8 params(mHardware->getParameters().flatten());
+ LOGD("getParameters(%s)", params.string());
+ return params;
}
void CameraService::Client::postAutoFocus(bool focused)
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 849a37d..9b1f0f9 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -611,7 +611,7 @@
private IBinder mToken;
/*package*/ String mEmbeddedID;
private Application mApplication;
- private Intent mIntent;
+ /*package*/ Intent mIntent;
private ComponentName mComponent;
/*package*/ ActivityInfo mActivityInfo;
/*package*/ ActivityThread mMainThread;
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index d816193..09862d2 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -1689,7 +1689,7 @@
r.packageInfo = getPackageInfoNoCheck(
r.activityInfo.applicationInfo);
- handleLaunchActivity(r);
+ handleLaunchActivity(r, null);
} break;
case RELAUNCH_ACTIVITY: {
ActivityRecord r = (ActivityRecord)msg.obj;
@@ -2109,7 +2109,7 @@
+ ", comp=" + name
+ ", token=" + token);
}
- return performLaunchActivity(r);
+ return performLaunchActivity(r, null);
}
public final Activity getActivity(IBinder token) {
@@ -2159,7 +2159,7 @@
queueOrSendMessage(H.CLEAN_UP_CONTEXT, cci);
}
- private final Activity performLaunchActivity(ActivityRecord r) {
+ private final Activity performLaunchActivity(ActivityRecord r, Intent customIntent) {
// System.out.println("##### [" + System.currentTimeMillis() + "] ActivityThread.performLaunchActivity(" + r + ")");
ActivityInfo aInfo = r.activityInfo;
@@ -2219,6 +2219,9 @@
r.lastNonConfigurationInstance, r.lastNonConfigurationChildInstances,
config);
+ if (customIntent != null) {
+ activity.mIntent = customIntent;
+ }
r.lastNonConfigurationInstance = null;
r.lastNonConfigurationChildInstances = null;
activity.mStartedActivity = false;
@@ -2274,14 +2277,14 @@
return activity;
}
- private final void handleLaunchActivity(ActivityRecord r) {
+ private final void handleLaunchActivity(ActivityRecord r, Intent customIntent) {
// If we are getting ready to gc after going to the background, well
// we are back active so skip it.
unscheduleGcIdler();
if (localLOGV) Log.v(
TAG, "Handling launch of " + r);
- Activity a = performLaunchActivity(r);
+ Activity a = performLaunchActivity(r, customIntent);
if (a != null) {
handleResumeActivity(r.token, false, r.isForward);
@@ -3243,6 +3246,7 @@
}
r.activity.mConfigChangeFlags |= configChanges;
+ Intent currentIntent = r.activity.mIntent;
Bundle savedState = null;
if (!r.paused) {
@@ -3275,7 +3279,7 @@
r.state = savedState;
}
- handleLaunchActivity(r);
+ handleLaunchActivity(r, currentIntent);
}
private final void handleRequestThumbnail(IBinder token) {
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index 99cf34c..e82a86c 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -508,6 +508,8 @@
* <li> {@link #ACTION_PACKAGE_DATA_CLEARED}
* <li> {@link #ACTION_UID_REMOVED}
* <li> {@link #ACTION_BATTERY_CHANGED}
+ * <li> {@link #ACTION_POWER_CONNECTED}
+ * <li> {@link #ACTION_POWER_DISCONNECTED}
* </ul>
*
* <h3>Standard Categories</h3>
@@ -1250,6 +1252,24 @@
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_BATTERY_LOW = "android.intent.action.BATTERY_LOW";
/**
+ * Broadcast Action: External power has been connected to the device.
+ * This is intended for applications that wish to register specifically to this notification.
+ * Unlike ACTION_BATTERY_CHANGED, applications will be woken for this and so do not have to
+ * stay active to receive this notification. This action can be used to implement actions
+ * that wait until power is available to trigger.
+ */
+ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
+ public static final String ACTION_POWER_CONNECTED = "android.intent.action.ACTION_POWER_CONNECTED";
+ /**
+ * Broadcast Action: External power has been removed from the device.
+ * This is intended for applications that wish to register specifically to this notification.
+ * Unlike ACTION_BATTERY_CHANGED, applications will be woken for this and so do not have to
+ * stay active to receive this notification. This action can be used to implement actions
+ * that wait until power is available to trigger.
+ */
+ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
+ public static final String ACTION_POWER_DISCONNECTED = "android.intent.action.ACTION_POWER_DISCONNECTED";
+ /**
* Broadcast Action: Indicates low memory condition on the device
*/
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java
index 106c920..ca579b6 100644
--- a/core/java/android/hardware/Camera.java
+++ b/core/java/android/hardware/Camera.java
@@ -405,8 +405,6 @@
* @param params the Parameters to use for this Camera service
*/
public void setParameters(Parameters params) {
- Log.e(TAG, "setParameters()");
- //params.dump();
native_setParameters(params.flatten());
}
@@ -416,7 +414,6 @@
public Parameters getParameters() {
Parameters p = new Parameters();
String s = native_getParameters();
- Log.e(TAG, "_getParameters: " + s);
p.unflatten(s);
return p;
}
diff --git a/core/java/android/net/MobileDataStateTracker.java b/core/java/android/net/MobileDataStateTracker.java
index ed7c056..1064fb6 100644
--- a/core/java/android/net/MobileDataStateTracker.java
+++ b/core/java/android/net/MobileDataStateTracker.java
@@ -354,9 +354,10 @@
/**
* Tells the phone sub-system that the caller wants to
- * begin using the named feature. The only supported feature at
- * this time is {@code Phone.FEATURE_ENABLE_MMS}, which allows an application
- * to specify that it wants to send and/or receive MMS data.
+ * begin using the named feature. The only supported features at
+ * this time are {@code Phone.FEATURE_ENABLE_MMS}, which allows an application
+ * to specify that it wants to send and/or receive MMS data, and
+ * {@code Phone.FEATURE_ENABLE_SUPL}, which is used for Assisted GPS.
* @param feature the name of the feature to be used
* @param callingPid the process ID of the process that is issuing this request
* @param callingUid the user ID of the process that is issuing this request
@@ -376,6 +377,8 @@
if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_MMS)) {
mLastCallingPid = callingPid;
return setEnableApn(Phone.APN_TYPE_MMS, true);
+ } else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_SUPL)) {
+ return setEnableApn(Phone.APN_TYPE_SUPL, true);
} else {
return -1;
}
@@ -396,6 +399,8 @@
public int stopUsingNetworkFeature(String feature, int callingPid, int callingUid) {
if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_MMS)) {
return setEnableApn(Phone.APN_TYPE_MMS, false);
+ } else if (TextUtils.equals(feature, Phone.FEATURE_ENABLE_SUPL)) {
+ return setEnableApn(Phone.APN_TYPE_SUPL, false);
} else {
return -1;
}
diff --git a/core/java/android/net/Proxy.java b/core/java/android/net/Proxy.java
index 9f07c0a..66eefb2 100644
--- a/core/java/android/net/Proxy.java
+++ b/core/java/android/net/Proxy.java
@@ -30,6 +30,9 @@
*/
final public class Proxy {
+ // Set to true to enable extra debugging.
+ static final private boolean DEBUG = false;
+
static final public String PROXY_CHANGE_ACTION =
"android.intent.action.PROXY_CHANGE";
@@ -49,7 +52,7 @@
if (host != null) {
int i = host.indexOf(':');
if (i == -1) {
- if (android.util.Config.DEBUG) {
+ if (DEBUG) {
Assert.assertTrue(host.length() == 0);
}
return null;
@@ -73,12 +76,12 @@
if (host != null) {
int i = host.indexOf(':');
if (i == -1) {
- if (android.util.Config.DEBUG) {
+ if (DEBUG) {
Assert.assertTrue(host.length() == 0);
}
return -1;
}
- if (android.util.Config.DEBUG) {
+ if (DEBUG) {
Assert.assertTrue(i < host.length());
}
return Integer.parseInt(host.substring(i+1));
diff --git a/core/java/android/provider/Gmail.java b/core/java/android/provider/Gmail.java
index cc03968..c4b29ae 100644
--- a/core/java/android/provider/Gmail.java
+++ b/core/java/android/provider/Gmail.java
@@ -38,7 +38,6 @@
import android.text.TextUtils.SimpleStringSplitter;
import android.text.style.CharacterStyle;
import android.text.util.Regex;
-import android.util.Config;
import android.util.Log;
import java.io.UnsupportedEncodingException;
@@ -61,6 +60,9 @@
* @hide
*/
public final class Gmail {
+ // Set to true to enable extra debugging.
+ private static final boolean DEBUG = false;
+
public static final String GMAIL_AUTH_SERVICE = "mail";
// These constants come from google3/java/com/google/caribou/backend/MailLabel.java.
public static final String LABEL_SENT = "^f";
@@ -1195,7 +1197,7 @@
@Override
public void onChange(boolean selfChange) {
- if (Config.DEBUG) {
+ if (DEBUG) {
Log.d(TAG, "MailCursor is notifying " + mObservers.size() + " observers");
}
for (MailCursorObserver o: mObservers) {
diff --git a/core/java/android/text/Layout.java b/core/java/android/text/Layout.java
index a6ed922..29dc2ea52 100644
--- a/core/java/android/text/Layout.java
+++ b/core/java/android/text/Layout.java
@@ -24,7 +24,6 @@
import android.graphics.RectF;
import android.graphics.Path;
import com.android.internal.util.ArrayUtils;
-import android.util.Config;
import junit.framework.Assert;
import android.text.style.*;
@@ -39,6 +38,8 @@
* For text that will not change, use a {@link StaticLayout}.
*/
public abstract class Layout {
+ private static final boolean DEBUG = false;
+
/* package */ static final EmojiFactory EMOJI_FACTORY =
EmojiFactory.newAvailableInstance();
/* package */ static final int MIN_EMOJI, MAX_EMOJI;
@@ -330,7 +331,7 @@
boolean hasTab = getLineContainsTab(i);
if (directions == DIRS_ALL_LEFT_TO_RIGHT &&
!spannedText && !hasTab) {
- if (Config.DEBUG) {
+ if (DEBUG) {
Assert.assertTrue(dir == DIR_LEFT_TO_RIGHT);
Assert.assertNotNull(c);
}
@@ -797,7 +798,7 @@
}
private int getLineVisibleEnd(int line, int start, int end) {
- if (Config.DEBUG) {
+ if (DEBUG) {
Assert.assertTrue(getLineStart(line) == start && getLineStart(line+1) == end);
}
@@ -1340,7 +1341,7 @@
char[] buf;
if (!hasTabs) {
if (directions == DIRS_ALL_LEFT_TO_RIGHT) {
- if (Config.DEBUG) {
+ if (DEBUG) {
Assert.assertTrue(DIR_LEFT_TO_RIGHT == dir);
}
Styled.drawText(canvas, text, start, end, dir, false, x, top, y, bottom, paint, workPaint, false);
diff --git a/core/java/android/util/DebugUtils.java b/core/java/android/util/DebugUtils.java
index 1c5d669..56f389c 100644
--- a/core/java/android/util/DebugUtils.java
+++ b/core/java/android/util/DebugUtils.java
@@ -43,8 +43,8 @@
*
* <p>This class is useful for debugging and logging purpose:</p>
* <pre>
- * if (Config.DEBUG) {
- * if (DebugUtils.isObjectSelected(childView) && Config.LOGV) {
+ * if (DEBUG) {
+ * if (DebugUtils.isObjectSelected(childView) && LOGV_ENABLED) {
* Log.v(TAG, "Object " + childView + " logged!");
* }
* }
diff --git a/core/java/android/webkit/BrowserFrame.java b/core/java/android/webkit/BrowserFrame.java
index 5401a6e..ba3f78c 100644
--- a/core/java/android/webkit/BrowserFrame.java
+++ b/core/java/android/webkit/BrowserFrame.java
@@ -24,7 +24,6 @@
import android.net.http.SslCertificate;
import android.os.Handler;
import android.os.Message;
-import android.util.Config;
import android.util.Log;
import android.util.TypedValue;
@@ -120,7 +119,7 @@
mDatabase = WebViewDatabase.getInstance(context);
mWebViewCore = w;
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "BrowserFrame constructor: this=" + this);
}
}
@@ -331,7 +330,7 @@
switch (msg.what) {
case FRAME_COMPLETED: {
if (mSettings.getSavePassword() && hasPasswordField()) {
- if (Config.DEBUG) {
+ if (WebView.DEBUG) {
Assert.assertNotNull(mCallbackProxy.getBackForwardList()
.getCurrentItem());
}
@@ -480,7 +479,7 @@
}
if (mSettings.getSavePassword() && hasPasswordField()) {
try {
- if (Config.DEBUG) {
+ if (WebView.DEBUG) {
Assert.assertNotNull(mCallbackProxy.getBackForwardList()
.getCurrentItem());
}
@@ -528,7 +527,7 @@
// is this resource the main-frame top-level page?
boolean isMainFramePage = mIsMainFrame;
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "startLoadingResource: url=" + url + ", method="
+ method + ", postData=" + postData + ", isHighPriority="
+ isHighPriority + ", isMainFramePage=" + isMainFramePage);
diff --git a/core/java/android/webkit/CacheManager.java b/core/java/android/webkit/CacheManager.java
index 4528b73..7897435 100644
--- a/core/java/android/webkit/CacheManager.java
+++ b/core/java/android/webkit/CacheManager.java
@@ -19,7 +19,6 @@
import android.content.Context;
import android.net.http.Headers;
import android.os.FileUtils;
-import android.util.Config;
import android.util.Log;
import java.io.File;
import java.io.FileInputStream;
@@ -322,7 +321,7 @@
}
}
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "getCacheFile for url " + url);
}
@@ -416,7 +415,7 @@
mDataBase.addCache(url, cacheRet);
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "saveCacheFile for url " + url);
}
}
diff --git a/core/java/android/webkit/CallbackProxy.java b/core/java/android/webkit/CallbackProxy.java
index 0f9f29c..5f8acc8 100644
--- a/core/java/android/webkit/CallbackProxy.java
+++ b/core/java/android/webkit/CallbackProxy.java
@@ -30,7 +30,6 @@
import android.os.Message;
import android.os.SystemClock;
import android.provider.Browser;
-import android.util.Config;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
@@ -822,7 +821,7 @@
String password, Message resumeMsg) {
// resumeMsg should be null at this point because we want to create it
// within the CallbackProxy.
- if (Config.DEBUG) {
+ if (WebView.DEBUG) {
junit.framework.Assert.assertNull(resumeMsg);
}
resumeMsg = obtainMessage(NOTIFY);
diff --git a/core/java/android/webkit/CookieManager.java b/core/java/android/webkit/CookieManager.java
index d90a2fd..c0c6775 100644
--- a/core/java/android/webkit/CookieManager.java
+++ b/core/java/android/webkit/CookieManager.java
@@ -18,7 +18,6 @@
import android.net.ParseException;
import android.net.WebAddress;
-import android.util.Config;
import android.util.Log;
import java.util.ArrayList;
@@ -263,7 +262,7 @@
if (!mAcceptCookie || uri == null) {
return;
}
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "setCookie: uri: " + uri + " value: " + value);
}
@@ -428,12 +427,12 @@
}
}
if (ret.length() > 0) {
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "getCookie: uri: " + uri + " value: " + ret);
}
return ret.toString();
} else {
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "getCookie: uri: " + uri
+ " But can't find cookie.");
}
@@ -589,7 +588,7 @@
Iterator<ArrayList<Cookie>> listIter = cookieLists.iterator();
while (listIter.hasNext() && count < MAX_RAM_COOKIES_COUNT) {
ArrayList<Cookie> list = listIter.next();
- if (Config.DEBUG) {
+ if (WebView.DEBUG) {
Iterator<Cookie> iter = list.iterator();
while (iter.hasNext() && count < MAX_RAM_COOKIES_COUNT) {
Cookie cookie = iter.next();
@@ -609,7 +608,7 @@
ArrayList<Cookie> retlist = new ArrayList<Cookie>();
if (mapSize >= MAX_RAM_DOMAIN_COUNT || count >= MAX_RAM_COOKIES_COUNT) {
- if (Config.DEBUG) {
+ if (WebView.DEBUG) {
Log.v(LOGTAG, count + " cookies used " + byteCount
+ " bytes with " + mapSize + " domains");
}
@@ -617,7 +616,7 @@
int toGo = mapSize / 10 + 1;
while (toGo-- > 0){
String domain = domains[toGo].toString();
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "delete domain: " + domain
+ " from RAM cache");
}
diff --git a/core/java/android/webkit/CookieSyncManager.java b/core/java/android/webkit/CookieSyncManager.java
index f2511d8..8d66529 100644
--- a/core/java/android/webkit/CookieSyncManager.java
+++ b/core/java/android/webkit/CookieSyncManager.java
@@ -17,7 +17,6 @@
package android.webkit;
import android.content.Context;
-import android.util.Config;
import android.util.Log;
import android.webkit.CookieManager.Cookie;
@@ -162,7 +161,7 @@
}
protected void syncFromRamToFlash() {
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "CookieSyncManager::syncFromRamToFlash STARTS");
}
@@ -179,7 +178,7 @@
CookieManager.getInstance().deleteLRUDomain();
syncFromRamToFlash(lruList);
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "CookieSyncManager::syncFromRamToFlash DONE");
}
}
diff --git a/core/java/android/webkit/FrameLoader.java b/core/java/android/webkit/FrameLoader.java
index 42d03f0..6f1b160 100644
--- a/core/java/android/webkit/FrameLoader.java
+++ b/core/java/android/webkit/FrameLoader.java
@@ -18,7 +18,6 @@
import android.net.http.EventHandler;
import android.net.http.RequestHandle;
-import android.util.Config;
import android.util.Log;
import android.webkit.CacheManager.CacheResult;
@@ -121,7 +120,7 @@
} else if (handleLocalFile(url, mListener, mSettings)) {
return true;
}
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "FrameLoader.executeLoad: url protocol not supported:"
+ mListener.url());
}
@@ -181,7 +180,7 @@
return true;
}
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "FrameLoader: http " + mMethod + " load for: "
+ mListener.url());
}
@@ -212,7 +211,7 @@
* setup a load from the byte stream in a CacheResult.
*/
private void startCacheLoad(CacheResult result) {
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "FrameLoader: loading from cache: "
+ mListener.url());
}
@@ -286,7 +285,7 @@
// of it's state. If it is not in the cache, then go to the
// network.
case WebSettings.LOAD_CACHE_ELSE_NETWORK: {
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "FrameLoader: checking cache: "
+ mListener.url());
}
diff --git a/core/java/android/webkit/JWebCoreJavaBridge.java b/core/java/android/webkit/JWebCoreJavaBridge.java
index a0049ac..2a84683 100644
--- a/core/java/android/webkit/JWebCoreJavaBridge.java
+++ b/core/java/android/webkit/JWebCoreJavaBridge.java
@@ -18,7 +18,6 @@
import android.os.Handler;
import android.os.Message;
-import android.util.Config;
import android.util.Log;
final class JWebCoreJavaBridge extends Handler {
@@ -156,7 +155,7 @@
* @param timemillis The relative time when the timer should fire
*/
private void setSharedTimer(long timemillis) {
- if (Config.LOGV) Log.v(LOGTAG, "setSharedTimer " + timemillis);
+ if (WebView.LOGV_ENABLED) Log.v(LOGTAG, "setSharedTimer " + timemillis);
if (timemillis <= 0) {
// we don't accumulate the sharedTimer unless it is a delayed
@@ -180,7 +179,7 @@
* Stop the shared timer.
*/
private void stopSharedTimer() {
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "stopSharedTimer removing all timers");
}
removeMessages(TIMER_MESSAGE);
diff --git a/core/java/android/webkit/LoadListener.java b/core/java/android/webkit/LoadListener.java
index c64200cd..d583eb1 100644
--- a/core/java/android/webkit/LoadListener.java
+++ b/core/java/android/webkit/LoadListener.java
@@ -29,7 +29,6 @@
import android.os.Handler;
import android.os.Message;
-import android.util.Config;
import android.util.Log;
import android.webkit.CacheManager.CacheResult;
@@ -134,7 +133,7 @@
LoadListener(Context context, BrowserFrame frame, String url,
int nativeLoader, boolean synchronous, boolean isMainPageLoader) {
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "LoadListener constructor url=" + url);
}
mContext = context;
@@ -285,7 +284,7 @@
* directly
*/
public void headers(Headers headers) {
- if (Config.LOGV) Log.v(LOGTAG, "LoadListener.headers");
+ if (WebView.LOGV_ENABLED) Log.v(LOGTAG, "LoadListener.headers");
sendMessageInternal(obtainMessage(MSG_CONTENT_HEADERS, headers));
}
@@ -432,7 +431,7 @@
*/
public void status(int majorVersion, int minorVersion,
int code, /* Status-Code value */ String reasonPhrase) {
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "LoadListener: from: " + mUrl
+ " major: " + majorVersion
+ " minor: " + minorVersion
@@ -489,7 +488,7 @@
* directly
*/
public void error(int id, String description) {
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "LoadListener.error url:" +
url() + " id:" + id + " description:" + description);
}
@@ -517,7 +516,7 @@
* mDataBuilder is a thread-safe structure.
*/
public void data(byte[] data, int length) {
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "LoadListener.data(): url: " + url());
}
@@ -555,7 +554,7 @@
* directly
*/
public void endData() {
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "LoadListener.endData(): url: " + url());
}
sendMessageInternal(obtainMessage(MSG_CONTENT_FINISHED));
@@ -608,7 +607,7 @@
// before calling it.
if (mCacheLoader != null) {
mCacheLoader.load();
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "LoadListener cache load url=" + url());
}
return;
@@ -658,7 +657,7 @@
CacheManager.HEADER_KEY_IFNONEMATCH) &&
!headers.containsKey(
CacheManager.HEADER_KEY_IFMODIFIEDSINCE)) {
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "FrameLoader: HTTP URL in cache " +
"and usable: " + url());
}
@@ -677,7 +676,7 @@
* directly
*/
public void handleSslErrorRequest(SslError error) {
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG,
"LoadListener.handleSslErrorRequest(): url:" + url() +
" primary error: " + error.getPrimaryError() +
@@ -743,7 +742,7 @@
* are null, cancel the request.
*/
void handleAuthResponse(String username, String password) {
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "LoadListener.handleAuthResponse: url: " + mUrl
+ " username: " + username
+ " password: " + password);
@@ -840,7 +839,7 @@
}
void attachRequestHandle(RequestHandle requestHandle) {
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "LoadListener.attachRequestHandle(): " +
"requestHandle: " + requestHandle);
}
@@ -848,7 +847,7 @@
}
void detachRequestHandle() {
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "LoadListener.detachRequestHandle(): " +
"requestHandle: " + mRequestHandle);
}
@@ -887,7 +886,7 @@
*/
static boolean willLoadFromCache(String url) {
boolean inCache = CacheManager.getCacheFile(url, null) != null;
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "willLoadFromCache: " + url + " in cache: " +
inCache);
}
@@ -1057,7 +1056,7 @@
* EventHandler's method call.
*/
public void cancel() {
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
if (mRequestHandle == null) {
Log.v(LOGTAG, "LoadListener.cancel(): no requestHandle");
} else {
@@ -1189,7 +1188,7 @@
tearDown();
}
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "LoadListener.onRedirect(): redirect to: " +
redirectTo);
}
@@ -1203,7 +1202,7 @@
Pattern.compile("^((?:[xX]-)?[a-zA-Z\\*]+/[\\w\\+\\*-]+[\\.[\\w\\+-]+]*)$");
private void parseContentTypeHeader(String contentType) {
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "LoadListener.parseContentTypeHeader: " +
"contentType: " + contentType);
}
@@ -1390,7 +1389,7 @@
*/
private String guessMimeTypeFromExtension() {
// PENDING: need to normalize url
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "guessMimeTypeFromExtension: mURL = " + mUrl);
}
@@ -1425,7 +1424,7 @@
* Cycle through our messages for synchronous loads.
*/
/* package */ void loadSynchronousMessages() {
- if (Config.DEBUG && !mSynchronous) {
+ if (WebView.DEBUG && !mSynchronous) {
throw new AssertionError();
}
// Note: this can be called twice if it is a synchronous network load,
diff --git a/core/java/android/webkit/Network.java b/core/java/android/webkit/Network.java
index 6fa0775..c9b80ce 100644
--- a/core/java/android/webkit/Network.java
+++ b/core/java/android/webkit/Network.java
@@ -20,7 +20,6 @@
import android.net.http.*;
import android.os.*;
import android.util.Log;
-import android.util.Config;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
@@ -133,7 +132,7 @@
* XXX: Must be created in the same thread as WebCore!!!!!
*/
private Network(Context context) {
- if (Config.DEBUG) {
+ if (WebView.DEBUG) {
Assert.assertTrue(Thread.currentThread().
getName().equals(WebViewCore.THREAD_NAME));
}
@@ -233,7 +232,7 @@
* connecting through the proxy.
*/
public synchronized void setProxyUsername(String proxyUsername) {
- if (Config.DEBUG) {
+ if (WebView.DEBUG) {
Assert.assertTrue(isValidProxySet());
}
@@ -253,7 +252,7 @@
* connecting through the proxy.
*/
public synchronized void setProxyPassword(String proxyPassword) {
- if (Config.DEBUG) {
+ if (WebView.DEBUG) {
Assert.assertTrue(isValidProxySet());
}
@@ -267,7 +266,7 @@
* @return True iff succeeds.
*/
public boolean saveState(Bundle outState) {
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "Network.saveState()");
}
@@ -281,7 +280,7 @@
* @return True iff succeeds.
*/
public boolean restoreState(Bundle inState) {
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "Network.restoreState()");
}
@@ -301,7 +300,7 @@
* @param loader The loader that resulted in SSL errors.
*/
public void handleSslErrorRequest(LoadListener loader) {
- if (Config.DEBUG) Assert.assertNotNull(loader);
+ if (WebView.DEBUG) Assert.assertNotNull(loader);
if (loader != null) {
mSslErrorHandler.handleSslErrorRequest(loader);
}
@@ -314,7 +313,7 @@
* authentication request.
*/
public void handleAuthRequest(LoadListener loader) {
- if (Config.DEBUG) Assert.assertNotNull(loader);
+ if (WebView.DEBUG) Assert.assertNotNull(loader);
if (loader != null) {
mHttpAuthHandler.handleAuthRequest(loader);
}
diff --git a/core/java/android/webkit/SslErrorHandler.java b/core/java/android/webkit/SslErrorHandler.java
index 2e2fa12..5f84bbe 100644
--- a/core/java/android/webkit/SslErrorHandler.java
+++ b/core/java/android/webkit/SslErrorHandler.java
@@ -22,7 +22,6 @@
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
-import android.util.Config;
import android.util.Log;
import java.util.LinkedList;
@@ -121,7 +120,7 @@
* Handles SSL error(s) on the way up to the user.
*/
/* package */ synchronized void handleSslErrorRequest(LoadListener loader) {
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "SslErrorHandler.handleSslErrorRequest(): " +
"url=" + loader.url());
}
@@ -158,14 +157,14 @@
SslError error = loader.sslError();
- if (Config.DEBUG) {
+ if (WebView.DEBUG) {
Assert.assertNotNull(error);
}
int primary = error.getPrimaryError();
String host = loader.host();
- if (Config.DEBUG) {
+ if (WebView.DEBUG) {
Assert.assertTrue(host != null && primary != 0);
}
@@ -206,11 +205,11 @@
*/
/* package */ synchronized void handleSslErrorResponse(boolean proceed) {
LoadListener loader = mLoaderQueue.poll();
- if (Config.DEBUG) {
+ if (WebView.DEBUG) {
Assert.assertNotNull(loader);
}
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "SslErrorHandler.handleSslErrorResponse():"
+ " proceed: " + proceed
+ " url:" + loader.url());
@@ -222,7 +221,7 @@
int primary = loader.sslError().getPrimaryError();
String host = loader.host();
- if (Config.DEBUG) {
+ if (WebView.DEBUG) {
Assert.assertTrue(host != null && primary != 0);
}
boolean hasKey = mSslPrefTable.containsKey(host);
diff --git a/core/java/android/webkit/StreamLoader.java b/core/java/android/webkit/StreamLoader.java
index 9098307..705157c 100644
--- a/core/java/android/webkit/StreamLoader.java
+++ b/core/java/android/webkit/StreamLoader.java
@@ -20,7 +20,6 @@
import android.net.http.Headers;
import android.os.Handler;
import android.os.Message;
-import android.util.Config;
import java.io.IOException;
import java.io.InputStream;
@@ -114,7 +113,7 @@
* @see android.os.Handler#handleMessage(android.os.Message)
*/
public void handleMessage(Message msg) {
- if (Config.DEBUG && mHandler.isSynchronous()) {
+ if (WebView.DEBUG && mHandler.isSynchronous()) {
throw new AssertionError();
}
switch(msg.what) {
diff --git a/core/java/android/webkit/URLUtil.java b/core/java/android/webkit/URLUtil.java
index 0e8144e..d6ac3e9 100644
--- a/core/java/android/webkit/URLUtil.java
+++ b/core/java/android/webkit/URLUtil.java
@@ -23,7 +23,6 @@
import android.net.Uri;
import android.net.ParseException;
import android.net.WebAddress;
-import android.util.Config;
import android.util.Log;
public final class URLUtil {
@@ -62,7 +61,7 @@
webAddress = new WebAddress(inUrl);
} catch (ParseException ex) {
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "smartUrlFilter: failed to parse url = " + inUrl);
}
return retVal;
diff --git a/core/java/android/webkit/WebBackForwardList.java b/core/java/android/webkit/WebBackForwardList.java
index 9dea5ec..ffd6a11 100644
--- a/core/java/android/webkit/WebBackForwardList.java
+++ b/core/java/android/webkit/WebBackForwardList.java
@@ -16,7 +16,6 @@
package android.webkit;
-import android.util.Config;
import java.io.Serializable;
import java.util.ArrayList;
@@ -138,7 +137,7 @@
// when removing the first item, we can assert that the index is 0.
// This lets us change the current index without having to query the
// native BackForwardList.
- if (Config.DEBUG && (index != 0)) {
+ if (WebView.DEBUG && (index != 0)) {
throw new AssertionError();
}
final WebHistoryItem h = mArray.remove(index);
diff --git a/core/java/android/webkit/WebSettings.java b/core/java/android/webkit/WebSettings.java
index 025e6bb..105eacd 100644
--- a/core/java/android/webkit/WebSettings.java
+++ b/core/java/android/webkit/WebSettings.java
@@ -1097,7 +1097,7 @@
/*package*/
synchronized void syncSettingsAndCreateHandler(BrowserFrame frame) {
mBrowserFrame = frame;
- if (android.util.Config.DEBUG) {
+ if (WebView.DEBUG) {
junit.framework.Assert.assertTrue(frame.mNativeFrame != 0);
}
nativeSync(frame.mNativeFrame);
diff --git a/core/java/android/webkit/WebSyncManager.java b/core/java/android/webkit/WebSyncManager.java
index e6e9994..ded17ed 100644
--- a/core/java/android/webkit/WebSyncManager.java
+++ b/core/java/android/webkit/WebSyncManager.java
@@ -21,7 +21,6 @@
import android.os.Looper;
import android.os.Message;
import android.os.Process;
-import android.util.Config;
import android.util.Log;
abstract class WebSyncManager implements Runnable {
@@ -48,7 +47,7 @@
@Override
public void handleMessage(Message msg) {
if (msg.what == SYNC_MESSAGE) {
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "*** WebSyncManager sync ***");
}
syncFromRamToFlash();
@@ -95,7 +94,7 @@
* sync() forces sync manager to sync now
*/
public void sync() {
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "*** WebSyncManager sync ***");
}
if (mHandler == null) {
@@ -110,7 +109,7 @@
* resetSync() resets sync manager's timer
*/
public void resetSync() {
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "*** WebSyncManager resetSync ***");
}
if (mHandler == null) {
@@ -125,7 +124,7 @@
* startSync() requests sync manager to start sync
*/
public void startSync() {
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "*** WebSyncManager startSync ***, Ref count:" +
mStartSyncRefCount);
}
@@ -143,7 +142,7 @@
* the queue to break the sync loop
*/
public void stopSync() {
- if (Config.LOGV) {
+ if (WebView.LOGV_ENABLED) {
Log.v(LOGTAG, "*** WebSyncManager stopSync ***, Ref count:" +
mStartSyncRefCount);
}
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index a5846ed..a926355 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -42,7 +42,6 @@
import android.text.Selection;
import android.text.Spannable;
import android.util.AttributeSet;
-import android.util.Config;
import android.util.EventLog;
import android.util.Log;
import android.view.Gravity;
@@ -110,7 +109,7 @@
// keep debugging parameters near the top of the file
static final String LOGTAG = "webview";
static final boolean DEBUG = false;
- static final boolean LOGV_ENABLED = DEBUG ? Config.LOGD : Config.LOGV;
+ static final boolean LOGV_ENABLED = DEBUG;
private class ExtendedZoomControls extends FrameLayout {
public ExtendedZoomControls(Context context, AttributeSet attrs) {
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index 72b30f6..58d8ae7 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -29,7 +29,6 @@
import android.os.Looper;
import android.os.Message;
import android.os.Process;
-import android.util.Config;
import android.util.Log;
import android.util.SparseBooleanArray;
import android.view.KeyEvent;
@@ -43,7 +42,7 @@
private static final String LOGTAG = "webcore";
static final boolean DEBUG = false;
- static final boolean LOGV_ENABLED = DEBUG ? Config.LOGD : Config.LOGV;
+ static final boolean LOGV_ENABLED = DEBUG;
static {
// Load libwebcore during static initialization. This happens in the
diff --git a/core/java/android/webkit/gears/AndroidWifiDataProvider.java b/core/java/android/webkit/gears/AndroidWifiDataProvider.java
index 7379f59..d2850b06 100644
--- a/core/java/android/webkit/gears/AndroidWifiDataProvider.java
+++ b/core/java/android/webkit/gears/AndroidWifiDataProvider.java
@@ -33,7 +33,6 @@
import android.net.wifi.WifiManager;
import android.os.Handler;
import android.os.Looper;
-import android.util.Config;
import android.util.Log;
import android.webkit.WebView;
import java.util.List;
@@ -48,6 +47,11 @@
*/
private static final String TAG = "Gears-J-WifiProvider";
/**
+ * Flag for guarding Log.v() calls.
+ * Set to true to enable extra debug logging.
+ */
+ private static final boolean LOGV_ENABLED = false;
+ /**
* Our Wifi manager instance.
*/
private WifiManager mWifiManager;
@@ -104,7 +108,7 @@
*/
public void shutdown() {
mContext.unregisterReceiver(this);
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.v(TAG, "Wifi provider closed.");
}
}
@@ -118,7 +122,7 @@
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(
mWifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.v(TAG, "Wifi scan resulst available");
}
onUpdateAvailable(mWifiManager.getScanResults(), mNativeObject);
diff --git a/core/java/android/webkit/gears/ApacheHttpRequestAndroid.java b/core/java/android/webkit/gears/ApacheHttpRequestAndroid.java
index 529e666..74d27ed 100644
--- a/core/java/android/webkit/gears/ApacheHttpRequestAndroid.java
+++ b/core/java/android/webkit/gears/ApacheHttpRequestAndroid.java
@@ -29,7 +29,6 @@
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
-import android.util.Config;
import android.util.Log;
import android.webkit.CacheManager;
import android.webkit.CacheManager.CacheResult;
@@ -88,6 +87,8 @@
public final class ApacheHttpRequestAndroid {
/** Debug logging tag. */
private static final String LOG_TAG = "Gears-J";
+ /** Flag for guarding Log.v() calls. */
+ private static final boolean LOGV_ENABLED = false;
/** HTTP response header line endings are CR-LF style. */
private static final String HTTP_LINE_ENDING = "\r\n";
/** Safe MIME type to use whenever it isn't specified. */
@@ -173,18 +174,18 @@
public void run() {
boolean problem = false;
try {
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "REQUEST : " + mMethod.getRequestLine());
}
mResponse = mClient.execute(mMethod);
if (mResponse != null) {
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "response (status line): "
+ mResponse.getStatusLine());
}
mResponseLine = "" + mResponse.getStatusLine();
} else {
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "problem, response == null");
}
problem = true;
@@ -198,7 +199,7 @@
}
if (!problem) {
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "Request complete ("
+ mMethod.getRequestLine() + ")");
}
@@ -206,7 +207,7 @@
mConnectionFailedLock.lock();
mConnectionFailed = true;
mConnectionFailedLock.unlock();
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "Request FAILED ("
+ mMethod.getRequestLine() + ")");
}
@@ -233,7 +234,7 @@
try {
wait();
} catch (InterruptedException e) {
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "InterruptedException while putting " +
"a DataPacket in the Buffer: " + e);
}
@@ -248,7 +249,7 @@
try {
wait();
} catch (InterruptedException e) {
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "InterruptedException while getting " +
"a DataPacket in the Buffer: " + e);
}
@@ -271,7 +272,7 @@
try {
wait();
} catch (InterruptedException e) {
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "InterruptedException while waiting " +
"until a DataPacket is consumed: " + e);
}
@@ -285,7 +286,7 @@
try {
wait();
} catch (InterruptedException e) {
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "InterruptedException while indicating "
+ "that the DataPacket has been consumed: " + e);
}
@@ -373,14 +374,14 @@
mSignal.packetConsumed();
mConnectionFailedLock.lock();
if (mConnectionFailed) {
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "stopping loop on error");
}
finished = true;
}
mConnectionFailedLock.unlock();
}
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "flushing the outputstream...");
}
mOutputStream.flush();
@@ -399,7 +400,7 @@
private void write(DataPacket packet) {
try {
if (mOutputStream == null) {
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "NO OUTPUT STREAM !!!");
}
return;
@@ -407,7 +408,7 @@
mOutputStream.write(packet.getBytes(), 0, packet.getLength());
mOutputStream.flush();
} catch (IOException e) {
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "exc: " + e);
}
mConnectionFailedLock.lock();
@@ -423,7 +424,7 @@
mStreamingReady.await();
}
} catch (InterruptedException e) {
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "InterruptedException in "
+ "StreamEntity::isReady() : ", e);
}
@@ -468,7 +469,7 @@
* False on failure.
*/
public synchronized boolean open(String method, String url) {
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "open " + method + " " + url);
}
// Create the client
@@ -502,7 +503,7 @@
} else if ("DELETE".equalsIgnoreCase(method)) {
mMethod = new HttpDelete(url);
} else {
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "Method " + method + " not supported");
}
return false;
@@ -549,7 +550,7 @@
* (unless already finished)
*/
private void waitUntilConnectionFinished() {
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "waitUntilConnectionFinished("
+ mConnectionFinished + ")");
}
@@ -558,11 +559,11 @@
try {
mHttpThread.join();
mConnectionFinished = true;
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "http thread joined");
}
} catch (InterruptedException e) {
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "interrupted: " + e);
}
}
@@ -596,7 +597,7 @@
Header[] headers = mResponse.getAllHeaders();
for (int i = 0; i < headers.length; i++) {
Header header = headers[i];
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "header " + header.getName()
+ " -> " + header.getValue());
}
@@ -615,7 +616,7 @@
*/
public synchronized void setRequestHeader(String name, String value) {
String[] mapValue = { name, value };
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "setRequestHeader: " + name + " => " + value);
}
if (name.equalsIgnoreCase(KEY_CONTENT_LENGTH)) {
@@ -647,7 +648,7 @@
while (it.hasNext()) {
// Set the key case-sensitive.
String[] entry = it.next();
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "apply header " + entry[HEADERS_MAP_INDEX_KEY] +
" => " + entry[HEADERS_MAP_INDEX_VALUE]);
}
@@ -671,7 +672,7 @@
return null;
}
} else {
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "getResponseHeader() called but "
+ "response not received");
}
@@ -687,7 +688,7 @@
*/
public synchronized String getAllResponseHeaders() {
if (mResponseHeaders == null) {
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "getAllResponseHeaders() called but "
+ "response not received");
}
@@ -715,7 +716,7 @@
* @param value The associated value.
*/
private void setResponseHeader(String name, String value) {
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "Set response header " + name + ": " + value);
}
String mapValue[] = { name, value };
@@ -766,7 +767,7 @@
UrlInterceptHandlerGears.ServiceResponse serviceResponse =
handler.getServiceResponse(url, mRequestHeaders);
if (serviceResponse == null) {
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "No response in LocalServer");
}
return false;
@@ -776,7 +777,7 @@
mBodyInputStream = serviceResponse.getInputStream();
mResponseLine = serviceResponse.getStatusLine();
mResponseHeaders = serviceResponse.getResponseHeaders();
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "Got response from LocalServer: " + mResponseLine);
}
return true;
@@ -803,19 +804,19 @@
CacheResult mCacheResult =
CacheManager.getCacheFile(url, cacheRequestHeaders);
if (mCacheResult == null) {
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "No CacheResult for " + url);
}
return false;
}
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "Got CacheResult from browser cache");
}
// Check for expiry. -1 is "never", otherwise milliseconds since 1970.
// Can be compared to System.currentTimeMillis().
long expires = mCacheResult.getExpires();
if (expires >= 0 && System.currentTimeMillis() >= expires) {
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "CacheResult expired "
+ (System.currentTimeMillis() - expires)
+ " milliseconds ago");
@@ -827,7 +828,7 @@
mBodyInputStream = mCacheResult.getInputStream();
if (mBodyInputStream == null) {
// Cache result may have gone away.
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "No mBodyInputStream for CacheResult " + url);
}
return false;
@@ -855,7 +856,7 @@
}
// Synthesize the response line.
mResponseLine = "HTTP/1.1 " + statusCode + " " + statusMessage;
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "Synthesized " + mResponseLine);
}
// Synthesize the returned headers from cache.
@@ -914,7 +915,7 @@
*/
public synchronized boolean createCacheResult(
String url, int responseCode, String mimeType, String encoding) {
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "Making cache entry for " + url);
}
// Take the headers and parse them into a format needed by
@@ -935,14 +936,14 @@
mCacheResult = CacheManager.createCacheFile(
url, responseCode, cacheHeaders, mimeType, true);
if (mCacheResult != null) {
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "Saving into cache");
}
mCacheResult.setEncoding(encoding);
mCacheResultUrl = url;
return true;
} else {
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "Couldn't create mCacheResult");
}
return false;
@@ -960,7 +961,7 @@
*/
public synchronized boolean appendCacheResult(byte[] data, int bytes) {
if (mCacheResult == null) {
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "appendCacheResult() called without a "
+ "CacheResult initialized");
}
@@ -969,7 +970,7 @@
try {
mCacheResult.getOutputStream().write(data, 0, bytes);
} catch (IOException ex) {
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "Got IOException writing cache data: " + ex);
}
return false;
@@ -984,14 +985,14 @@
*/
public synchronized boolean saveCacheResult() {
if (mCacheResult == null || mCacheResultUrl == null) {
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "Tried to save cache result but "
+ "createCacheResult not called");
}
return false;
}
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "Saving cache result");
}
CacheManager.saveCacheFile(mCacheResultUrl, mCacheResult);
@@ -1006,7 +1007,7 @@
* ability to receive a null packet for sendPostData().
*/
public synchronized void abort() {
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "ABORT CALLED");
}
if (mMethod != null) {
@@ -1019,7 +1020,7 @@
* thread to complete.
*/
public synchronized void interrupt() {
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "INTERRUPT CALLED");
}
mConnectionFailedLock.lock();
@@ -1053,7 +1054,7 @@
mBodyInputStream = entity.getContent();
}
} catch (IOException inputException) {
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "Failed to connect InputStream: "
+ inputException);
}
@@ -1062,7 +1063,7 @@
}
if (mBodyInputStream == null) {
// No error stream either. Treat as a 0 byte response.
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "No InputStream");
}
return 0; // EOF.
@@ -1081,7 +1082,7 @@
}
} catch (IOException e) {
// An abort() interrupts us by calling close() on our stream.
- if (Config.LOGV) {
+ if (LOGV_ENABLED) {
Log.i(LOG_TAG, "Got IOException in mBodyInputStream.read(): ", e);
}
ret = -1;
diff --git a/core/java/android/widget/MediaController.java b/core/java/android/widget/MediaController.java
index b162a0e..0c9d980 100644
--- a/core/java/android/widget/MediaController.java
+++ b/core/java/android/widget/MediaController.java
@@ -444,27 +444,55 @@
updatePausePlay();
}
+ // There are two scenarios that can trigger the seekbar listener to trigger:
+ //
+ // The first is the user using the touchpad to adjust the posititon of the
+ // seekbar's thumb. In this case onStartTrackingTouch is called followed by
+ // a number of onProgressChanged notifications, concluded by onStopTrackingTouch.
+ // We're setting the field "mDragging" to true for the duration of the dragging
+ // session to avoid jumps in the position in case of ongoing playback.
+ //
+ // The second scenario involves the user operating the scroll ball, in this
+ // case there WON'T BE onStartTrackingTouch/onStopTrackingTouch notifications,
+ // we will simply apply the updated position without suspending regular updates.
private OnSeekBarChangeListener mSeekListener = new OnSeekBarChangeListener() {
- long duration;
public void onStartTrackingTouch(SeekBar bar) {
show(3600000);
- duration = mPlayer.getDuration();
+
+ mDragging = true;
+
+ // By removing these pending progress messages we make sure
+ // that a) we won't update the progress while the user adjusts
+ // the seekbar and b) once the user is done dragging the thumb
+ // we will post one of these messages to the queue again and
+ // this ensures that there will be exactly one message queued up.
+ mHandler.removeMessages(SHOW_PROGRESS);
}
- public void onProgressChanged(SeekBar bar, int progress, boolean fromtouch) {
- if (fromtouch) {
- mDragging = true;
- duration = mPlayer.getDuration();
- long newposition = (duration * progress) / 1000L;
- mPlayer.seekTo( (int) newposition);
- if (mCurrentTime != null)
- mCurrentTime.setText(stringForTime( (int) newposition));
+
+ public void onProgressChanged(SeekBar bar, int progress, boolean fromuser) {
+ if (!fromuser) {
+ // We're not interested in programmatically generated changes to
+ // the progress bar's position.
+ return;
}
+
+ long duration = mPlayer.getDuration();
+ long newposition = (duration * progress) / 1000L;
+ mPlayer.seekTo( (int) newposition);
+ if (mCurrentTime != null)
+ mCurrentTime.setText(stringForTime( (int) newposition));
}
+
public void onStopTrackingTouch(SeekBar bar) {
mDragging = false;
setProgress();
updatePausePlay();
show(sDefaultTimeout);
+
+ // Ensure that progress is properly updated in the future,
+ // the call to show() does not guarantee this because it is a
+ // no-op if we are already showing.
+ mHandler.sendEmptyMessage(SHOW_PROGRESS);
}
};
diff --git a/core/java/com/android/internal/app/IUsageStats.aidl b/core/java/com/android/internal/app/IUsageStats.aidl
index 6b053d5..1ea7409 100755
--- a/core/java/com/android/internal/app/IUsageStats.aidl
+++ b/core/java/com/android/internal/app/IUsageStats.aidl
@@ -22,6 +22,7 @@
interface IUsageStats {
void noteResumeComponent(in ComponentName componentName);
void notePauseComponent(in ComponentName componentName);
+ void noteLaunchTime(in ComponentName componentName, int millis);
PkgUsageStats getPkgUsageStats(in ComponentName componentName);
PkgUsageStats[] getAllPkgUsageStats();
}
diff --git a/core/java/com/android/internal/util/BitwiseInputStream.java b/core/java/com/android/internal/util/BitwiseInputStream.java
new file mode 100644
index 0000000..4757919
--- /dev/null
+++ b/core/java/com/android/internal/util/BitwiseInputStream.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.util;
+
+/**
+ * An object that provides bitwise incremental read access to a byte array.
+ *
+ * This is useful, for example, when accessing a series of fields that
+ * may not be aligned on byte boundaries.
+ *
+ * NOTE -- This class is not threadsafe.
+ */
+public class BitwiseInputStream {
+
+ // The byte array being read from.
+ private byte[] mBuf;
+
+ // The current position offset, in bits, from the msb in byte 0.
+ private int mPos;
+
+ // The last valid bit offset.
+ private int mEnd;
+
+ /**
+ * An exception to report access problems.
+ */
+ public static class AccessException extends Exception {
+ public AccessException(String s) {
+ super("BitwiseInputStream access failed: " + s);
+ }
+ }
+
+ /**
+ * Create object from byte array.
+ *
+ * @param buf a byte array containing data
+ */
+ public BitwiseInputStream(byte buf[]) {
+ mBuf = buf;
+ mEnd = buf.length << 3;
+ mPos = 0;
+ }
+
+ /**
+ * Return the number of bit still available for reading.
+ */
+ public int available() {
+ return mEnd - mPos;
+ }
+
+ /**
+ * Read some data and increment the current position.
+ *
+ * @param bits the amount of data to read (gte 0, lte 8)
+ *
+ * @return byte of read data (possibly partially filled, from lsb)
+ */
+ public byte read(int bits) throws AccessException {
+ int index = mPos >>> 3;
+ int offset = 16 - (mPos & 0x07) - bits; // &7==%8
+ if ((bits < 0) || (bits > 8) || ((mPos + bits) > mEnd)) {
+ throw new AccessException("illegal read " +
+ "(pos " + mPos + ", end " + mEnd + ", bits " + bits + ")");
+ }
+ int data = (mBuf[index] & 0x00FF) << 8;
+ if (offset < 8) data |= (mBuf[index + 1] & 0xFF);
+ data >>>= offset;
+ data &= (-1 >>> (32 - bits));
+ mPos += bits;
+ return (byte)data;
+ }
+
+ /**
+ * Read data in bulk into a byte array and increment the current position.
+ *
+ * @param bits the amount of data to read
+ *
+ * @return newly allocated byte array of read data
+ */
+ public byte[] readByteArray(int bits) throws AccessException {
+ int bytes = (bits >>> 3) + ((bits & 0x07) > 0 ? 1 : 0); // &7==%8
+ byte[] arr = new byte[bytes];
+ for (int i = 0; i < bytes; i++) {
+ int increment = Math.min(8, bits - (i << 3));
+ arr[i] = (byte)(read(increment) << (8 - increment));
+ }
+ return arr;
+ }
+
+ /**
+ * Increment the current position and ignore contained data.
+ *
+ * @param bits the amount by which to increment the position
+ */
+ public void skip(int bits) throws AccessException {
+ if ((mPos + bits) > mEnd) {
+ throw new AccessException("illegal skip " +
+ "(pos " + mPos + ", end " + mEnd + ", bits " + bits + ")");
+ }
+ mPos += bits;
+ }
+}
diff --git a/core/java/com/android/internal/util/BitwiseOutputStream.java b/core/java/com/android/internal/util/BitwiseOutputStream.java
new file mode 100644
index 0000000..17f5c7c
--- /dev/null
+++ b/core/java/com/android/internal/util/BitwiseOutputStream.java
@@ -0,0 +1,126 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.util;
+
+/**
+ * An object that rovides bitwise incremental write access to a byte array.
+ *
+ * This is useful, for example, when writing a series of fields that
+ * may not be aligned on byte boundaries.
+ *
+ * NOTE -- This class is not threadsafe.
+ */
+public class BitwiseOutputStream {
+
+ // The byte array being written to, which will be grown as needed.
+ private byte[] mBuf;
+
+ // The current position offset, in bits, from the msb in byte 0.
+ private int mPos;
+
+ // The last bit offset, given the current buf length.
+ private int mEnd;
+
+ /**
+ * An exception to report access problems.
+ */
+ public static class AccessException extends Exception {
+ public AccessException(String s) {
+ super("BitwiseOutputStream access failed: " + s);
+ }
+ }
+
+ /**
+ * Create object from hint at desired size.
+ *
+ * @param startingLength initial internal byte array length in bytes
+ */
+ public BitwiseOutputStream(int startingLength) {
+ mBuf = new byte[startingLength];
+ mEnd = startingLength << 3;
+ mPos = 0;
+ }
+
+ /**
+ * Return byte array containing accumulated data, sized to just fit.
+ *
+ * @return newly allocated byte array
+ */
+ public byte[] toByteArray() {
+ int len = (mPos >>> 3) + ((mPos & 0x07) > 0 ? 1 : 0); // &7==%8
+ byte[] newBuf = new byte[len];
+ System.arraycopy(mBuf, 0, newBuf, 0, len);
+ return newBuf;
+ }
+
+ /**
+ * Allocate a new internal buffer, if needed.
+ *
+ * @param bits additional bits to be accommodated
+ */
+ private void possExpand(int bits) {
+ if ((mPos + bits) < mEnd) return;
+ byte[] newBuf = new byte[(mPos + bits) >>> 2];
+ System.arraycopy(mBuf, 0, newBuf, 0, mEnd >>> 3);
+ mBuf = newBuf;
+ }
+
+ /**
+ * Write some data and increment the current position.
+ *
+ * @param bits the amount of data to write (gte 0, lte 8)
+ * @param data to write, will be masked to expose only bits param from lsb
+ */
+ public void write(int bits, int data) throws AccessException {
+ if ((bits < 0) || (bits > 8)) {
+ throw new AccessException("illegal write (" + bits + " bits)");
+ }
+ possExpand(bits);
+ data &= (-1 >>> (32 - bits));
+ int index = mPos >>> 3;
+ int offset = 16 - (mPos & 0x07) - bits; // &7==%8
+ data <<= offset;
+ mPos += bits;
+ mBuf[index] |= (data >>> 8);
+ if (offset < 8) mBuf[index + 1] |= (data & 0x00FF);
+ }
+
+ /**
+ * Write data in bulk from a byte array and increment the current position.
+ *
+ * @param bits the amount of data to write
+ * @param arr the byte array containing data to be written
+ */
+ public void writeByteArray(int bits, byte[] arr) throws AccessException {
+ for (int i = 0; i < arr.length; i++) {
+ int increment = Math.min(8, bits - (i << 3));
+ if (increment > 0) {
+ write(increment, (byte)(arr[i] >>> (8 - increment)));
+ }
+ }
+ }
+
+ /**
+ * Increment the current position, implicitly writing zeros.
+ *
+ * @param bits the amount by which to increment the position
+ */
+ public void skip(int bits) {
+ possExpand(bits);
+ mPos += bits;
+ }
+}
diff --git a/core/jni/Android.mk b/core/jni/Android.mk
index 18f2878..b37447c 100644
--- a/core/jni/Android.mk
+++ b/core/jni/Android.mk
@@ -21,6 +21,10 @@
CursorWindow.cpp \
com_google_android_gles_jni_EGLImpl.cpp \
com_google_android_gles_jni_GLImpl.cpp.arm \
+ android_opengl_GLES10.cpp \
+ android_opengl_GLES10Ext.cpp \
+ android_opengl_GLES11.cpp \
+ android_opengl_GLES11Ext.cpp \
android_database_CursorWindow.cpp \
android_database_SQLiteDebug.cpp \
android_database_SQLiteDatabase.cpp \
diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp
index f4643f4..6742062 100644
--- a/core/jni/AndroidRuntime.cpp
+++ b/core/jni/AndroidRuntime.cpp
@@ -66,6 +66,10 @@
extern int register_com_google_android_gles_jni_EGLImpl(JNIEnv* env);
extern int register_com_google_android_gles_jni_GLImpl(JNIEnv* env);
+extern int register_android_opengl_jni_GLES10(JNIEnv* env);
+extern int register_android_opengl_jni_GLES10Ext(JNIEnv* env);
+extern int register_android_opengl_jni_GLES11(JNIEnv* env);
+extern int register_android_opengl_jni_GLES11Ext(JNIEnv* env);
extern int register_android_hardware_Camera(JNIEnv *env);
@@ -1042,6 +1046,10 @@
REG_JNI(register_android_view_ViewRoot),
REG_JNI(register_com_google_android_gles_jni_EGLImpl),
REG_JNI(register_com_google_android_gles_jni_GLImpl),
+ REG_JNI(register_android_opengl_jni_GLES10),
+ REG_JNI(register_android_opengl_jni_GLES10Ext),
+ REG_JNI(register_android_opengl_jni_GLES11),
+ REG_JNI(register_android_opengl_jni_GLES11Ext),
REG_JNI(register_android_graphics_Bitmap),
REG_JNI(register_android_graphics_BitmapFactory),
diff --git a/core/jni/android_location_GpsLocationProvider.cpp b/core/jni/android_location_GpsLocationProvider.cpp
index f0b35e9..bbde8d5 100644
--- a/core/jni/android_location_GpsLocationProvider.cpp
+++ b/core/jni/android_location_GpsLocationProvider.cpp
@@ -31,6 +31,7 @@
static jmethodID method_reportLocation;
static jmethodID method_reportStatus;
static jmethodID method_reportSvStatus;
+static jmethodID method_reportSuplStatus;
static jmethodID method_xtraDownloadRequest;
static const GpsInterface* sGpsInterface = NULL;
@@ -41,19 +42,22 @@
static GpsLocation sGpsLocation;
static GpsStatus sGpsStatus;
static GpsSvStatus sGpsSvStatus;
+static GpsSuplStatus sGpsSuplStatus;
// a copy of the data shared by android_location_GpsLocationProvider_wait_for_event
// and android_location_GpsLocationProvider_read_status
static GpsLocation sGpsLocationCopy;
static GpsStatus sGpsStatusCopy;
static GpsSvStatus sGpsSvStatusCopy;
+static GpsSuplStatus sGpsSuplStatusCopy;
enum CallbackType {
kLocation = 1,
kStatus = 2,
kSvStatus = 4,
- kXtraDownloadRequest = 8,
- kDisableRequest = 16,
+ kSuplStatus = 8,
+ kXtraDownloadRequest = 16,
+ kDisableRequest = 32,
};
static int sPendingCallbacks;
@@ -92,6 +96,17 @@
pthread_mutex_unlock(&sEventMutex);
}
+static void supl_status_callback(GpsSuplStatus* supl_status)
+{
+ pthread_mutex_lock(&sEventMutex);
+
+ sPendingCallbacks |= kSuplStatus;
+ memcpy(&sGpsSuplStatus, supl_status, sizeof(GpsSuplStatus));
+
+ pthread_cond_signal(&sEventCond);
+ pthread_mutex_unlock(&sEventMutex);
+}
+
GpsCallbacks sGpsCallbacks = {
location_callback,
status_callback,
@@ -111,11 +126,15 @@
download_request_callback,
};
+GpsSuplCallbacks sGpsSuplCallbacks = {
+ supl_status_callback,
+};
static void android_location_GpsLocationProvider_class_init_native(JNIEnv* env, jclass clazz) {
method_reportLocation = env->GetMethodID(clazz, "reportLocation", "(IDDDFFFJ)V");
method_reportStatus = env->GetMethodID(clazz, "reportStatus", "(I)V");
method_reportSvStatus = env->GetMethodID(clazz, "reportSvStatus", "()V");
+ method_reportSuplStatus = env->GetMethodID(clazz, "reportSuplStatus", "(I)V");
method_xtraDownloadRequest = env->GetMethodID(clazz, "xtraDownloadRequest", "()V");
}
@@ -129,7 +148,13 @@
{
if (!sGpsInterface)
sGpsInterface = gps_get_interface();
- return (sGpsInterface && sGpsInterface->init(&sGpsCallbacks) == 0);
+ if (!sGpsInterface || sGpsInterface->init(&sGpsCallbacks) != 0)
+ return false;
+
+ if (!sGpsSuplInterface)
+ sGpsSuplInterface = (const GpsSuplInterface*)sGpsInterface->get_extension(GPS_SUPL_INTERFACE);
+ if (sGpsSuplInterface)
+ sGpsSuplInterface->init(&sGpsSuplCallbacks);
}
static void android_location_GpsLocationProvider_disable(JNIEnv* env, jobject obj)
@@ -186,6 +211,7 @@
memcpy(&sGpsLocationCopy, &sGpsLocation, sizeof(sGpsLocationCopy));
memcpy(&sGpsStatusCopy, &sGpsStatus, sizeof(sGpsStatusCopy));
memcpy(&sGpsSvStatusCopy, &sGpsSvStatus, sizeof(sGpsSvStatusCopy));
+ memcpy(&sGpsSuplStatusCopy, &sGpsSuplStatus, sizeof(sGpsSuplStatusCopy));
pthread_mutex_unlock(&sEventMutex);
if (pendingCallbacks & kLocation) {
@@ -201,6 +227,9 @@
if (pendingCallbacks & kSvStatus) {
env->CallVoidMethod(obj, method_reportSvStatus);
}
+ if (pendingCallbacks & kSuplStatus) {
+ env->CallVoidMethod(obj, method_reportSuplStatus, sGpsSuplStatusCopy.status);
+ }
if (pendingCallbacks & kXtraDownloadRequest) {
env->CallVoidMethod(obj, method_xtraDownloadRequest);
}
@@ -269,18 +298,7 @@
env->ReleaseByteArrayElements(data, bytes, 0);
}
-static void android_location_GpsLocationProvider_set_supl_server(JNIEnv* env, jobject obj,
- jint addr, jint port)
-{
- if (!sGpsSuplInterface) {
- sGpsSuplInterface = (const GpsSuplInterface*)sGpsInterface->get_extension(GPS_SUPL_INTERFACE);
- }
- if (sGpsSuplInterface) {
- sGpsSuplInterface->set_server(addr, port);
- }
-}
-
-static void android_location_GpsLocationProvider_set_supl_apn(JNIEnv* env, jobject obj, jstring apn)
+static void android_location_GpsLocationProvider_supl_data_conn_open(JNIEnv* env, jobject obj, jstring apn)
{
if (!sGpsSuplInterface) {
sGpsSuplInterface = (const GpsSuplInterface*)sGpsInterface->get_extension(GPS_SUPL_INTERFACE);
@@ -291,11 +309,42 @@
return;
}
const char *apnStr = env->GetStringUTFChars(apn, NULL);
- sGpsSuplInterface->set_apn(apnStr);
+ sGpsSuplInterface->data_conn_open(apnStr);
env->ReleaseStringUTFChars(apn, apnStr);
}
}
+static void android_location_GpsLocationProvider_supl_data_conn_closed(JNIEnv* env, jobject obj)
+{
+ if (!sGpsSuplInterface) {
+ sGpsSuplInterface = (const GpsSuplInterface*)sGpsInterface->get_extension(GPS_SUPL_INTERFACE);
+ }
+ if (sGpsSuplInterface) {
+ sGpsSuplInterface->data_conn_closed();
+ }
+}
+
+static void android_location_GpsLocationProvider_supl_data_conn_failed(JNIEnv* env, jobject obj)
+{
+ if (!sGpsSuplInterface) {
+ sGpsSuplInterface = (const GpsSuplInterface*)sGpsInterface->get_extension(GPS_SUPL_INTERFACE);
+ }
+ if (sGpsSuplInterface) {
+ sGpsSuplInterface->data_conn_failed();
+ }
+}
+
+static void android_location_GpsLocationProvider_set_supl_server(JNIEnv* env, jobject obj,
+ jint addr, jint port)
+{
+ if (!sGpsSuplInterface) {
+ sGpsSuplInterface = (const GpsSuplInterface*)sGpsInterface->get_extension(GPS_SUPL_INTERFACE);
+ }
+ if (sGpsSuplInterface) {
+ sGpsSuplInterface->set_server(addr, port);
+ }
+}
+
static JNINativeMethod sMethods[] = {
/* name, signature, funcPtr */
{"class_init_native", "()V", (void *)android_location_GpsLocationProvider_class_init_native},
@@ -312,8 +361,10 @@
{"native_inject_time", "(JJI)V", (void*)android_location_GpsLocationProvider_inject_time},
{"native_supports_xtra", "()Z", (void*)android_location_GpsLocationProvider_supports_xtra},
{"native_inject_xtra_data", "([BI)V", (void*)android_location_GpsLocationProvider_inject_xtra_data},
+ {"native_supl_data_conn_open", "(Ljava/lang/String;)V", (void*)android_location_GpsLocationProvider_supl_data_conn_open},
+ {"native_supl_data_conn_closed", "()V", (void*)android_location_GpsLocationProvider_supl_data_conn_closed},
+ {"native_supl_data_conn_failed", "()V", (void*)android_location_GpsLocationProvider_supl_data_conn_failed},
{"native_set_supl_server", "(II)V", (void*)android_location_GpsLocationProvider_set_supl_server},
- {"native_set_supl_apn", "(Ljava/lang/String;)V", (void*)android_location_GpsLocationProvider_set_supl_apn},
};
int register_android_location_GpsLocationProvider(JNIEnv* env)
diff --git a/core/jni/android_opengl_GLES10.cpp b/core/jni/android_opengl_GLES10.cpp
new file mode 100644
index 0000000..117ff35
--- /dev/null
+++ b/core/jni/android_opengl_GLES10.cpp
@@ -0,0 +1,3518 @@
+/*
+**
+** Copyright 2009, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+
+// This source file is automatically generated
+
+#include <android_runtime/AndroidRuntime.h>
+#include <utils/misc.h>
+
+#include <assert.h>
+#include <GLES/gl.h>
+
+#include <private/opengles/gl_context.h>
+
+#define _NUM_COMPRESSED_TEXTURE_FORMATS \
+ (::android::OGLES_NUM_COMPRESSED_TEXTURE_FORMATS)
+
+static int initialized = 0;
+
+static jclass nioAccessClass;
+static jclass bufferClass;
+static jclass OOMEClass;
+static jclass UOEClass;
+static jclass IAEClass;
+static jclass AIOOBEClass;
+static jmethodID getBasePointerID;
+static jmethodID getBaseArrayID;
+static jmethodID getBaseArrayOffsetID;
+static jfieldID positionID;
+static jfieldID limitID;
+static jfieldID elementSizeShiftID;
+
+/* Cache method IDs each time the class is loaded. */
+
+static void
+nativeClassInitBuffer(JNIEnv *_env)
+{
+ jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess");
+ nioAccessClass = (jclass) _env->NewGlobalRef(nioAccessClassLocal);
+
+ jclass bufferClassLocal = _env->FindClass("java/nio/Buffer");
+ bufferClass = (jclass) _env->NewGlobalRef(bufferClassLocal);
+
+ getBasePointerID = _env->GetStaticMethodID(nioAccessClass,
+ "getBasePointer", "(Ljava/nio/Buffer;)J");
+ getBaseArrayID = _env->GetStaticMethodID(nioAccessClass,
+ "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;");
+ getBaseArrayOffsetID = _env->GetStaticMethodID(nioAccessClass,
+ "getBaseArrayOffset", "(Ljava/nio/Buffer;)I");
+
+ positionID = _env->GetFieldID(bufferClass, "position", "I");
+ limitID = _env->GetFieldID(bufferClass, "limit", "I");
+ elementSizeShiftID =
+ _env->GetFieldID(bufferClass, "_elementSizeShift", "I");
+}
+
+
+static void
+nativeClassInit(JNIEnv *_env, jclass glImplClass)
+{
+ nativeClassInitBuffer(_env);
+
+ jclass IAEClassLocal =
+ _env->FindClass("java/lang/IllegalArgumentException");
+ jclass OOMEClassLocal =
+ _env->FindClass("java/lang/OutOfMemoryError");
+ jclass UOEClassLocal =
+ _env->FindClass("java/lang/UnsupportedOperationException");
+ jclass AIOOBEClassLocal =
+ _env->FindClass("java/lang/ArrayIndexOutOfBoundsException");
+
+ IAEClass = (jclass) _env->NewGlobalRef(IAEClassLocal);
+ OOMEClass = (jclass) _env->NewGlobalRef(OOMEClassLocal);
+ UOEClass = (jclass) _env->NewGlobalRef(UOEClassLocal);
+ AIOOBEClass = (jclass) _env->NewGlobalRef(AIOOBEClassLocal);
+}
+
+static void *
+getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining)
+{
+ jint position;
+ jint limit;
+ jint elementSizeShift;
+ jlong pointer;
+ jint offset;
+ void *data;
+
+ position = _env->GetIntField(buffer, positionID);
+ limit = _env->GetIntField(buffer, limitID);
+ elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID);
+ *remaining = (limit - position) << elementSizeShift;
+ pointer = _env->CallStaticLongMethod(nioAccessClass,
+ getBasePointerID, buffer);
+ if (pointer != 0L) {
+ *array = NULL;
+ return (void *) (jint) pointer;
+ }
+
+ *array = (jarray) _env->CallStaticObjectMethod(nioAccessClass,
+ getBaseArrayID, buffer);
+ offset = _env->CallStaticIntMethod(nioAccessClass,
+ getBaseArrayOffsetID, buffer);
+ data = _env->GetPrimitiveArrayCritical(*array, (jboolean *) 0);
+
+ return (void *) ((char *) data + offset);
+}
+
+
+static void
+releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit)
+{
+ _env->ReleasePrimitiveArrayCritical(array, data,
+ commit ? 0 : JNI_ABORT);
+}
+
+// --------------------------------------------------------------------------
+
+/* void glActiveTexture ( GLenum texture ) */
+static void
+android_glActiveTexture__I
+ (JNIEnv *_env, jobject _this, jint texture) {
+ glActiveTexture(
+ (GLenum)texture
+ );
+}
+
+/* void glAlphaFunc ( GLenum func, GLclampf ref ) */
+static void
+android_glAlphaFunc__IF
+ (JNIEnv *_env, jobject _this, jint func, jfloat ref) {
+ glAlphaFunc(
+ (GLenum)func,
+ (GLclampf)ref
+ );
+}
+
+/* void glAlphaFuncx ( GLenum func, GLclampx ref ) */
+static void
+android_glAlphaFuncx__II
+ (JNIEnv *_env, jobject _this, jint func, jint ref) {
+ glAlphaFuncx(
+ (GLenum)func,
+ (GLclampx)ref
+ );
+}
+
+/* void glBindTexture ( GLenum target, GLuint texture ) */
+static void
+android_glBindTexture__II
+ (JNIEnv *_env, jobject _this, jint target, jint texture) {
+ glBindTexture(
+ (GLenum)target,
+ (GLuint)texture
+ );
+}
+
+/* void glBlendFunc ( GLenum sfactor, GLenum dfactor ) */
+static void
+android_glBlendFunc__II
+ (JNIEnv *_env, jobject _this, jint sfactor, jint dfactor) {
+ glBlendFunc(
+ (GLenum)sfactor,
+ (GLenum)dfactor
+ );
+}
+
+/* void glClear ( GLbitfield mask ) */
+static void
+android_glClear__I
+ (JNIEnv *_env, jobject _this, jint mask) {
+ glClear(
+ (GLbitfield)mask
+ );
+}
+
+/* void glClearColor ( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha ) */
+static void
+android_glClearColor__FFFF
+ (JNIEnv *_env, jobject _this, jfloat red, jfloat green, jfloat blue, jfloat alpha) {
+ glClearColor(
+ (GLclampf)red,
+ (GLclampf)green,
+ (GLclampf)blue,
+ (GLclampf)alpha
+ );
+}
+
+/* void glClearColorx ( GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha ) */
+static void
+android_glClearColorx__IIII
+ (JNIEnv *_env, jobject _this, jint red, jint green, jint blue, jint alpha) {
+ glClearColorx(
+ (GLclampx)red,
+ (GLclampx)green,
+ (GLclampx)blue,
+ (GLclampx)alpha
+ );
+}
+
+/* void glClearDepthf ( GLclampf depth ) */
+static void
+android_glClearDepthf__F
+ (JNIEnv *_env, jobject _this, jfloat depth) {
+ glClearDepthf(
+ (GLclampf)depth
+ );
+}
+
+/* void glClearDepthx ( GLclampx depth ) */
+static void
+android_glClearDepthx__I
+ (JNIEnv *_env, jobject _this, jint depth) {
+ glClearDepthx(
+ (GLclampx)depth
+ );
+}
+
+/* void glClearStencil ( GLint s ) */
+static void
+android_glClearStencil__I
+ (JNIEnv *_env, jobject _this, jint s) {
+ glClearStencil(
+ (GLint)s
+ );
+}
+
+/* void glClientActiveTexture ( GLenum texture ) */
+static void
+android_glClientActiveTexture__I
+ (JNIEnv *_env, jobject _this, jint texture) {
+ glClientActiveTexture(
+ (GLenum)texture
+ );
+}
+
+/* void glColor4f ( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ) */
+static void
+android_glColor4f__FFFF
+ (JNIEnv *_env, jobject _this, jfloat red, jfloat green, jfloat blue, jfloat alpha) {
+ glColor4f(
+ (GLfloat)red,
+ (GLfloat)green,
+ (GLfloat)blue,
+ (GLfloat)alpha
+ );
+}
+
+/* void glColor4x ( GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha ) */
+static void
+android_glColor4x__IIII
+ (JNIEnv *_env, jobject _this, jint red, jint green, jint blue, jint alpha) {
+ glColor4x(
+ (GLfixed)red,
+ (GLfixed)green,
+ (GLfixed)blue,
+ (GLfixed)alpha
+ );
+}
+
+/* void glColorMask ( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha ) */
+static void
+android_glColorMask__ZZZZ
+ (JNIEnv *_env, jobject _this, jboolean red, jboolean green, jboolean blue, jboolean alpha) {
+ glColorMask(
+ (GLboolean)red,
+ (GLboolean)green,
+ (GLboolean)blue,
+ (GLboolean)alpha
+ );
+}
+
+/* void glColorPointer ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ) */
+static void
+android_glColorPointerBounds__IIILjava_nio_Buffer_2I
+ (JNIEnv *_env, jobject _this, jint size, jint type, jint stride, jobject pointer_buf, jint remaining) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLvoid *pointer = (GLvoid *) 0;
+
+ pointer = (GLvoid *)getPointer(_env, pointer_buf, &_array, &_remaining);
+ glColorPointerBounds(
+ (GLint)size,
+ (GLenum)type,
+ (GLsizei)stride,
+ (GLvoid *)pointer,
+ (GLsizei)remaining
+ );
+ if (_array) {
+ releasePointer(_env, _array, pointer, JNI_FALSE);
+ }
+}
+
+/* void glCompressedTexImage2D ( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data ) */
+static void
+android_glCompressedTexImage2D__IIIIIIILjava_nio_Buffer_2
+ (JNIEnv *_env, jobject _this, jint target, jint level, jint internalformat, jint width, jint height, jint border, jint imageSize, jobject data_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLvoid *data = (GLvoid *) 0;
+
+ data = (GLvoid *)getPointer(_env, data_buf, &_array, &_remaining);
+ glCompressedTexImage2D(
+ (GLenum)target,
+ (GLint)level,
+ (GLenum)internalformat,
+ (GLsizei)width,
+ (GLsizei)height,
+ (GLint)border,
+ (GLsizei)imageSize,
+ (GLvoid *)data
+ );
+ if (_array) {
+ releasePointer(_env, _array, data, JNI_FALSE);
+ }
+}
+
+/* void glCompressedTexSubImage2D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data ) */
+static void
+android_glCompressedTexSubImage2D__IIIIIIIILjava_nio_Buffer_2
+ (JNIEnv *_env, jobject _this, jint target, jint level, jint xoffset, jint yoffset, jint width, jint height, jint format, jint imageSize, jobject data_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLvoid *data = (GLvoid *) 0;
+
+ data = (GLvoid *)getPointer(_env, data_buf, &_array, &_remaining);
+ glCompressedTexSubImage2D(
+ (GLenum)target,
+ (GLint)level,
+ (GLint)xoffset,
+ (GLint)yoffset,
+ (GLsizei)width,
+ (GLsizei)height,
+ (GLenum)format,
+ (GLsizei)imageSize,
+ (GLvoid *)data
+ );
+ if (_array) {
+ releasePointer(_env, _array, data, JNI_FALSE);
+ }
+}
+
+/* void glCopyTexImage2D ( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border ) */
+static void
+android_glCopyTexImage2D__IIIIIIII
+ (JNIEnv *_env, jobject _this, jint target, jint level, jint internalformat, jint x, jint y, jint width, jint height, jint border) {
+ glCopyTexImage2D(
+ (GLenum)target,
+ (GLint)level,
+ (GLenum)internalformat,
+ (GLint)x,
+ (GLint)y,
+ (GLsizei)width,
+ (GLsizei)height,
+ (GLint)border
+ );
+}
+
+/* void glCopyTexSubImage2D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height ) */
+static void
+android_glCopyTexSubImage2D__IIIIIIII
+ (JNIEnv *_env, jobject _this, jint target, jint level, jint xoffset, jint yoffset, jint x, jint y, jint width, jint height) {
+ glCopyTexSubImage2D(
+ (GLenum)target,
+ (GLint)level,
+ (GLint)xoffset,
+ (GLint)yoffset,
+ (GLint)x,
+ (GLint)y,
+ (GLsizei)width,
+ (GLsizei)height
+ );
+}
+
+/* void glCullFace ( GLenum mode ) */
+static void
+android_glCullFace__I
+ (JNIEnv *_env, jobject _this, jint mode) {
+ glCullFace(
+ (GLenum)mode
+ );
+}
+
+/* void glDeleteTextures ( GLsizei n, const GLuint *textures ) */
+static void
+android_glDeleteTextures__I_3II
+ (JNIEnv *_env, jobject _this, jint n, jintArray textures_ref, jint offset) {
+ GLuint *textures_base = (GLuint *) 0;
+ jint _remaining;
+ GLuint *textures = (GLuint *) 0;
+
+ if (!textures_ref) {
+ _env->ThrowNew(IAEClass, "textures == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(textures_ref) - offset;
+ if (_remaining < n) {
+ _env->ThrowNew(IAEClass, "length - offset < n");
+ goto exit;
+ }
+ textures_base = (GLuint *)
+ _env->GetPrimitiveArrayCritical(textures_ref, (jboolean *)0);
+ textures = textures_base + offset;
+
+ glDeleteTextures(
+ (GLsizei)n,
+ (GLuint *)textures
+ );
+
+exit:
+ if (textures_base) {
+ _env->ReleasePrimitiveArrayCritical(textures_ref, textures_base,
+ JNI_ABORT);
+ }
+}
+
+/* void glDeleteTextures ( GLsizei n, const GLuint *textures ) */
+static void
+android_glDeleteTextures__ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint n, jobject textures_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLuint *textures = (GLuint *) 0;
+
+ textures = (GLuint *)getPointer(_env, textures_buf, &_array, &_remaining);
+ if (_remaining < n) {
+ _env->ThrowNew(IAEClass, "remaining() < n");
+ goto exit;
+ }
+ glDeleteTextures(
+ (GLsizei)n,
+ (GLuint *)textures
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, textures, JNI_FALSE);
+ }
+}
+
+/* void glDepthFunc ( GLenum func ) */
+static void
+android_glDepthFunc__I
+ (JNIEnv *_env, jobject _this, jint func) {
+ glDepthFunc(
+ (GLenum)func
+ );
+}
+
+/* void glDepthMask ( GLboolean flag ) */
+static void
+android_glDepthMask__Z
+ (JNIEnv *_env, jobject _this, jboolean flag) {
+ glDepthMask(
+ (GLboolean)flag
+ );
+}
+
+/* void glDepthRangef ( GLclampf zNear, GLclampf zFar ) */
+static void
+android_glDepthRangef__FF
+ (JNIEnv *_env, jobject _this, jfloat zNear, jfloat zFar) {
+ glDepthRangef(
+ (GLclampf)zNear,
+ (GLclampf)zFar
+ );
+}
+
+/* void glDepthRangex ( GLclampx zNear, GLclampx zFar ) */
+static void
+android_glDepthRangex__II
+ (JNIEnv *_env, jobject _this, jint zNear, jint zFar) {
+ glDepthRangex(
+ (GLclampx)zNear,
+ (GLclampx)zFar
+ );
+}
+
+/* void glDisable ( GLenum cap ) */
+static void
+android_glDisable__I
+ (JNIEnv *_env, jobject _this, jint cap) {
+ glDisable(
+ (GLenum)cap
+ );
+}
+
+/* void glDisableClientState ( GLenum array ) */
+static void
+android_glDisableClientState__I
+ (JNIEnv *_env, jobject _this, jint array) {
+ glDisableClientState(
+ (GLenum)array
+ );
+}
+
+/* void glDrawArrays ( GLenum mode, GLint first, GLsizei count ) */
+static void
+android_glDrawArrays__III
+ (JNIEnv *_env, jobject _this, jint mode, jint first, jint count) {
+ glDrawArrays(
+ (GLenum)mode,
+ (GLint)first,
+ (GLsizei)count
+ );
+}
+
+/* void glDrawElements ( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices ) */
+static void
+android_glDrawElements__IIILjava_nio_Buffer_2
+ (JNIEnv *_env, jobject _this, jint mode, jint count, jint type, jobject indices_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLvoid *indices = (GLvoid *) 0;
+
+ indices = (GLvoid *)getPointer(_env, indices_buf, &_array, &_remaining);
+ if (_remaining < count) {
+ _env->ThrowNew(AIOOBEClass, "remaining() < count");
+ goto exit;
+ }
+ glDrawElements(
+ (GLenum)mode,
+ (GLsizei)count,
+ (GLenum)type,
+ (GLvoid *)indices
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, indices, JNI_FALSE);
+ }
+}
+
+/* void glEnable ( GLenum cap ) */
+static void
+android_glEnable__I
+ (JNIEnv *_env, jobject _this, jint cap) {
+ glEnable(
+ (GLenum)cap
+ );
+}
+
+/* void glEnableClientState ( GLenum array ) */
+static void
+android_glEnableClientState__I
+ (JNIEnv *_env, jobject _this, jint array) {
+ glEnableClientState(
+ (GLenum)array
+ );
+}
+
+/* void glFinish ( void ) */
+static void
+android_glFinish__
+ (JNIEnv *_env, jobject _this) {
+ glFinish();
+}
+
+/* void glFlush ( void ) */
+static void
+android_glFlush__
+ (JNIEnv *_env, jobject _this) {
+ glFlush();
+}
+
+/* void glFogf ( GLenum pname, GLfloat param ) */
+static void
+android_glFogf__IF
+ (JNIEnv *_env, jobject _this, jint pname, jfloat param) {
+ glFogf(
+ (GLenum)pname,
+ (GLfloat)param
+ );
+}
+
+/* void glFogfv ( GLenum pname, const GLfloat *params ) */
+static void
+android_glFogfv__I_3FI
+ (JNIEnv *_env, jobject _this, jint pname, jfloatArray params_ref, jint offset) {
+ GLfloat *params_base = (GLfloat *) 0;
+ jint _remaining;
+ GLfloat *params = (GLfloat *) 0;
+
+ if (!params_ref) {
+ _env->ThrowNew(IAEClass, "params == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ int _needed;
+ switch (pname) {
+#if defined(GL_FOG_MODE)
+ case GL_FOG_MODE:
+#endif // defined(GL_FOG_MODE)
+#if defined(GL_FOG_DENSITY)
+ case GL_FOG_DENSITY:
+#endif // defined(GL_FOG_DENSITY)
+#if defined(GL_FOG_START)
+ case GL_FOG_START:
+#endif // defined(GL_FOG_START)
+#if defined(GL_FOG_END)
+ case GL_FOG_END:
+#endif // defined(GL_FOG_END)
+ _needed = 1;
+ break;
+#if defined(GL_FOG_COLOR)
+ case GL_FOG_COLOR:
+#endif // defined(GL_FOG_COLOR)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _env->ThrowNew(IAEClass, "length - offset < needed");
+ goto exit;
+ }
+ params_base = (GLfloat *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glFogfv(
+ (GLenum)pname,
+ (GLfloat *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ JNI_ABORT);
+ }
+}
+
+/* void glFogfv ( GLenum pname, const GLfloat *params ) */
+static void
+android_glFogfv__ILjava_nio_FloatBuffer_2
+ (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfloat *params = (GLfloat *) 0;
+
+ params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining);
+ int _needed;
+ switch (pname) {
+#if defined(GL_FOG_MODE)
+ case GL_FOG_MODE:
+#endif // defined(GL_FOG_MODE)
+#if defined(GL_FOG_DENSITY)
+ case GL_FOG_DENSITY:
+#endif // defined(GL_FOG_DENSITY)
+#if defined(GL_FOG_START)
+ case GL_FOG_START:
+#endif // defined(GL_FOG_START)
+#if defined(GL_FOG_END)
+ case GL_FOG_END:
+#endif // defined(GL_FOG_END)
+ _needed = 1;
+ break;
+#if defined(GL_FOG_COLOR)
+ case GL_FOG_COLOR:
+#endif // defined(GL_FOG_COLOR)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _env->ThrowNew(IAEClass, "remaining() < needed");
+ goto exit;
+ }
+ glFogfv(
+ (GLenum)pname,
+ (GLfloat *)params
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, params, JNI_FALSE);
+ }
+}
+
+/* void glFogx ( GLenum pname, GLfixed param ) */
+static void
+android_glFogx__II
+ (JNIEnv *_env, jobject _this, jint pname, jint param) {
+ glFogx(
+ (GLenum)pname,
+ (GLfixed)param
+ );
+}
+
+/* void glFogxv ( GLenum pname, const GLfixed *params ) */
+static void
+android_glFogxv__I_3II
+ (JNIEnv *_env, jobject _this, jint pname, jintArray params_ref, jint offset) {
+ GLfixed *params_base = (GLfixed *) 0;
+ jint _remaining;
+ GLfixed *params = (GLfixed *) 0;
+
+ if (!params_ref) {
+ _env->ThrowNew(IAEClass, "params == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ int _needed;
+ switch (pname) {
+#if defined(GL_FOG_MODE)
+ case GL_FOG_MODE:
+#endif // defined(GL_FOG_MODE)
+#if defined(GL_FOG_DENSITY)
+ case GL_FOG_DENSITY:
+#endif // defined(GL_FOG_DENSITY)
+#if defined(GL_FOG_START)
+ case GL_FOG_START:
+#endif // defined(GL_FOG_START)
+#if defined(GL_FOG_END)
+ case GL_FOG_END:
+#endif // defined(GL_FOG_END)
+ _needed = 1;
+ break;
+#if defined(GL_FOG_COLOR)
+ case GL_FOG_COLOR:
+#endif // defined(GL_FOG_COLOR)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _env->ThrowNew(IAEClass, "length - offset < needed");
+ goto exit;
+ }
+ params_base = (GLfixed *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glFogxv(
+ (GLenum)pname,
+ (GLfixed *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ JNI_ABORT);
+ }
+}
+
+/* void glFogxv ( GLenum pname, const GLfixed *params ) */
+static void
+android_glFogxv__ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfixed *params = (GLfixed *) 0;
+
+ params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining);
+ int _needed;
+ switch (pname) {
+#if defined(GL_FOG_MODE)
+ case GL_FOG_MODE:
+#endif // defined(GL_FOG_MODE)
+#if defined(GL_FOG_DENSITY)
+ case GL_FOG_DENSITY:
+#endif // defined(GL_FOG_DENSITY)
+#if defined(GL_FOG_START)
+ case GL_FOG_START:
+#endif // defined(GL_FOG_START)
+#if defined(GL_FOG_END)
+ case GL_FOG_END:
+#endif // defined(GL_FOG_END)
+ _needed = 1;
+ break;
+#if defined(GL_FOG_COLOR)
+ case GL_FOG_COLOR:
+#endif // defined(GL_FOG_COLOR)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _env->ThrowNew(IAEClass, "remaining() < needed");
+ goto exit;
+ }
+ glFogxv(
+ (GLenum)pname,
+ (GLfixed *)params
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, params, JNI_FALSE);
+ }
+}
+
+/* void glFrontFace ( GLenum mode ) */
+static void
+android_glFrontFace__I
+ (JNIEnv *_env, jobject _this, jint mode) {
+ glFrontFace(
+ (GLenum)mode
+ );
+}
+
+/* void glFrustumf ( GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar ) */
+static void
+android_glFrustumf__FFFFFF
+ (JNIEnv *_env, jobject _this, jfloat left, jfloat right, jfloat bottom, jfloat top, jfloat zNear, jfloat zFar) {
+ glFrustumf(
+ (GLfloat)left,
+ (GLfloat)right,
+ (GLfloat)bottom,
+ (GLfloat)top,
+ (GLfloat)zNear,
+ (GLfloat)zFar
+ );
+}
+
+/* void glFrustumx ( GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar ) */
+static void
+android_glFrustumx__IIIIII
+ (JNIEnv *_env, jobject _this, jint left, jint right, jint bottom, jint top, jint zNear, jint zFar) {
+ glFrustumx(
+ (GLfixed)left,
+ (GLfixed)right,
+ (GLfixed)bottom,
+ (GLfixed)top,
+ (GLfixed)zNear,
+ (GLfixed)zFar
+ );
+}
+
+/* void glGenTextures ( GLsizei n, GLuint *textures ) */
+static void
+android_glGenTextures__I_3II
+ (JNIEnv *_env, jobject _this, jint n, jintArray textures_ref, jint offset) {
+ jint _exception = 0;
+ GLuint *textures_base = (GLuint *) 0;
+ jint _remaining;
+ GLuint *textures = (GLuint *) 0;
+
+ if (!textures_ref) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "textures == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(textures_ref) - offset;
+ if (_remaining < n) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "length - offset < n");
+ goto exit;
+ }
+ textures_base = (GLuint *)
+ _env->GetPrimitiveArrayCritical(textures_ref, (jboolean *)0);
+ textures = textures_base + offset;
+
+ glGenTextures(
+ (GLsizei)n,
+ (GLuint *)textures
+ );
+
+exit:
+ if (textures_base) {
+ _env->ReleasePrimitiveArrayCritical(textures_ref, textures_base,
+ _exception ? JNI_ABORT: 0);
+ }
+}
+
+/* void glGenTextures ( GLsizei n, GLuint *textures ) */
+static void
+android_glGenTextures__ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint n, jobject textures_buf) {
+ jint _exception = 0;
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLuint *textures = (GLuint *) 0;
+
+ textures = (GLuint *)getPointer(_env, textures_buf, &_array, &_remaining);
+ if (_remaining < n) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "remaining() < n");
+ goto exit;
+ }
+ glGenTextures(
+ (GLsizei)n,
+ (GLuint *)textures
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, textures, _exception ? JNI_FALSE : JNI_TRUE);
+ }
+}
+
+/* GLenum glGetError ( void ) */
+static jint
+android_glGetError__
+ (JNIEnv *_env, jobject _this) {
+ GLenum _returnValue;
+ _returnValue = glGetError();
+ return _returnValue;
+}
+
+/* void glGetIntegerv ( GLenum pname, GLint *params ) */
+static void
+android_glGetIntegerv__I_3II
+ (JNIEnv *_env, jobject _this, jint pname, jintArray params_ref, jint offset) {
+ jint _exception = 0;
+ GLint *params_base = (GLint *) 0;
+ jint _remaining;
+ GLint *params = (GLint *) 0;
+
+ if (!params_ref) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "params == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ int _needed;
+ switch (pname) {
+#if defined(GL_ALPHA_BITS)
+ case GL_ALPHA_BITS:
+#endif // defined(GL_ALPHA_BITS)
+#if defined(GL_ALPHA_TEST_FUNC)
+ case GL_ALPHA_TEST_FUNC:
+#endif // defined(GL_ALPHA_TEST_FUNC)
+#if defined(GL_ALPHA_TEST_REF)
+ case GL_ALPHA_TEST_REF:
+#endif // defined(GL_ALPHA_TEST_REF)
+#if defined(GL_BLEND_DST)
+ case GL_BLEND_DST:
+#endif // defined(GL_BLEND_DST)
+#if defined(GL_BLUE_BITS)
+ case GL_BLUE_BITS:
+#endif // defined(GL_BLUE_BITS)
+#if defined(GL_COLOR_ARRAY_BUFFER_BINDING)
+ case GL_COLOR_ARRAY_BUFFER_BINDING:
+#endif // defined(GL_COLOR_ARRAY_BUFFER_BINDING)
+#if defined(GL_COLOR_ARRAY_SIZE)
+ case GL_COLOR_ARRAY_SIZE:
+#endif // defined(GL_COLOR_ARRAY_SIZE)
+#if defined(GL_COLOR_ARRAY_STRIDE)
+ case GL_COLOR_ARRAY_STRIDE:
+#endif // defined(GL_COLOR_ARRAY_STRIDE)
+#if defined(GL_COLOR_ARRAY_TYPE)
+ case GL_COLOR_ARRAY_TYPE:
+#endif // defined(GL_COLOR_ARRAY_TYPE)
+#if defined(GL_CULL_FACE)
+ case GL_CULL_FACE:
+#endif // defined(GL_CULL_FACE)
+#if defined(GL_DEPTH_BITS)
+ case GL_DEPTH_BITS:
+#endif // defined(GL_DEPTH_BITS)
+#if defined(GL_DEPTH_CLEAR_VALUE)
+ case GL_DEPTH_CLEAR_VALUE:
+#endif // defined(GL_DEPTH_CLEAR_VALUE)
+#if defined(GL_DEPTH_FUNC)
+ case GL_DEPTH_FUNC:
+#endif // defined(GL_DEPTH_FUNC)
+#if defined(GL_DEPTH_WRITEMASK)
+ case GL_DEPTH_WRITEMASK:
+#endif // defined(GL_DEPTH_WRITEMASK)
+#if defined(GL_FOG_DENSITY)
+ case GL_FOG_DENSITY:
+#endif // defined(GL_FOG_DENSITY)
+#if defined(GL_FOG_END)
+ case GL_FOG_END:
+#endif // defined(GL_FOG_END)
+#if defined(GL_FOG_MODE)
+ case GL_FOG_MODE:
+#endif // defined(GL_FOG_MODE)
+#if defined(GL_FOG_START)
+ case GL_FOG_START:
+#endif // defined(GL_FOG_START)
+#if defined(GL_FRONT_FACE)
+ case GL_FRONT_FACE:
+#endif // defined(GL_FRONT_FACE)
+#if defined(GL_GREEN_BITS)
+ case GL_GREEN_BITS:
+#endif // defined(GL_GREEN_BITS)
+#if defined(GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES)
+ case GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES:
+#endif // defined(GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES)
+#if defined(GL_IMPLEMENTATION_COLOR_READ_TYPE_OES)
+ case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES:
+#endif // defined(GL_IMPLEMENTATION_COLOR_READ_TYPE_OES)
+#if defined(GL_LIGHT_MODEL_TWO_SIDE)
+ case GL_LIGHT_MODEL_TWO_SIDE:
+#endif // defined(GL_LIGHT_MODEL_TWO_SIDE)
+#if defined(GL_LINE_SMOOTH_HINT)
+ case GL_LINE_SMOOTH_HINT:
+#endif // defined(GL_LINE_SMOOTH_HINT)
+#if defined(GL_LINE_WIDTH)
+ case GL_LINE_WIDTH:
+#endif // defined(GL_LINE_WIDTH)
+#if defined(GL_LOGIC_OP_MODE)
+ case GL_LOGIC_OP_MODE:
+#endif // defined(GL_LOGIC_OP_MODE)
+#if defined(GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES)
+ case GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES:
+#endif // defined(GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES)
+#if defined(GL_MATRIX_INDEX_ARRAY_SIZE_OES)
+ case GL_MATRIX_INDEX_ARRAY_SIZE_OES:
+#endif // defined(GL_MATRIX_INDEX_ARRAY_SIZE_OES)
+#if defined(GL_MATRIX_INDEX_ARRAY_STRIDE_OES)
+ case GL_MATRIX_INDEX_ARRAY_STRIDE_OES:
+#endif // defined(GL_MATRIX_INDEX_ARRAY_STRIDE_OES)
+#if defined(GL_MATRIX_INDEX_ARRAY_TYPE_OES)
+ case GL_MATRIX_INDEX_ARRAY_TYPE_OES:
+#endif // defined(GL_MATRIX_INDEX_ARRAY_TYPE_OES)
+#if defined(GL_MATRIX_MODE)
+ case GL_MATRIX_MODE:
+#endif // defined(GL_MATRIX_MODE)
+#if defined(GL_MAX_CLIP_PLANES)
+ case GL_MAX_CLIP_PLANES:
+#endif // defined(GL_MAX_CLIP_PLANES)
+#if defined(GL_MAX_ELEMENTS_INDICES)
+ case GL_MAX_ELEMENTS_INDICES:
+#endif // defined(GL_MAX_ELEMENTS_INDICES)
+#if defined(GL_MAX_ELEMENTS_VERTICES)
+ case GL_MAX_ELEMENTS_VERTICES:
+#endif // defined(GL_MAX_ELEMENTS_VERTICES)
+#if defined(GL_MAX_LIGHTS)
+ case GL_MAX_LIGHTS:
+#endif // defined(GL_MAX_LIGHTS)
+#if defined(GL_MAX_MODELVIEW_STACK_DEPTH)
+ case GL_MAX_MODELVIEW_STACK_DEPTH:
+#endif // defined(GL_MAX_MODELVIEW_STACK_DEPTH)
+#if defined(GL_MAX_PALETTE_MATRICES_OES)
+ case GL_MAX_PALETTE_MATRICES_OES:
+#endif // defined(GL_MAX_PALETTE_MATRICES_OES)
+#if defined(GL_MAX_PROJECTION_STACK_DEPTH)
+ case GL_MAX_PROJECTION_STACK_DEPTH:
+#endif // defined(GL_MAX_PROJECTION_STACK_DEPTH)
+#if defined(GL_MAX_TEXTURE_SIZE)
+ case GL_MAX_TEXTURE_SIZE:
+#endif // defined(GL_MAX_TEXTURE_SIZE)
+#if defined(GL_MAX_TEXTURE_STACK_DEPTH)
+ case GL_MAX_TEXTURE_STACK_DEPTH:
+#endif // defined(GL_MAX_TEXTURE_STACK_DEPTH)
+#if defined(GL_MAX_TEXTURE_UNITS)
+ case GL_MAX_TEXTURE_UNITS:
+#endif // defined(GL_MAX_TEXTURE_UNITS)
+#if defined(GL_MAX_VERTEX_UNITS_OES)
+ case GL_MAX_VERTEX_UNITS_OES:
+#endif // defined(GL_MAX_VERTEX_UNITS_OES)
+#if defined(GL_MODELVIEW_STACK_DEPTH)
+ case GL_MODELVIEW_STACK_DEPTH:
+#endif // defined(GL_MODELVIEW_STACK_DEPTH)
+#if defined(GL_NORMAL_ARRAY_BUFFER_BINDING)
+ case GL_NORMAL_ARRAY_BUFFER_BINDING:
+#endif // defined(GL_NORMAL_ARRAY_BUFFER_BINDING)
+#if defined(GL_NORMAL_ARRAY_STRIDE)
+ case GL_NORMAL_ARRAY_STRIDE:
+#endif // defined(GL_NORMAL_ARRAY_STRIDE)
+#if defined(GL_NORMAL_ARRAY_TYPE)
+ case GL_NORMAL_ARRAY_TYPE:
+#endif // defined(GL_NORMAL_ARRAY_TYPE)
+#if defined(GL_NUM_COMPRESSED_TEXTURE_FORMATS)
+ case GL_NUM_COMPRESSED_TEXTURE_FORMATS:
+#endif // defined(GL_NUM_COMPRESSED_TEXTURE_FORMATS)
+#if defined(GL_PACK_ALIGNMENT)
+ case GL_PACK_ALIGNMENT:
+#endif // defined(GL_PACK_ALIGNMENT)
+#if defined(GL_PERSPECTIVE_CORRECTION_HINT)
+ case GL_PERSPECTIVE_CORRECTION_HINT:
+#endif // defined(GL_PERSPECTIVE_CORRECTION_HINT)
+#if defined(GL_POINT_SIZE)
+ case GL_POINT_SIZE:
+#endif // defined(GL_POINT_SIZE)
+#if defined(GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES)
+ case GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES:
+#endif // defined(GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES)
+#if defined(GL_POINT_SIZE_ARRAY_STRIDE_OES)
+ case GL_POINT_SIZE_ARRAY_STRIDE_OES:
+#endif // defined(GL_POINT_SIZE_ARRAY_STRIDE_OES)
+#if defined(GL_POINT_SIZE_ARRAY_TYPE_OES)
+ case GL_POINT_SIZE_ARRAY_TYPE_OES:
+#endif // defined(GL_POINT_SIZE_ARRAY_TYPE_OES)
+#if defined(GL_POINT_SMOOTH_HINT)
+ case GL_POINT_SMOOTH_HINT:
+#endif // defined(GL_POINT_SMOOTH_HINT)
+#if defined(GL_POLYGON_OFFSET_FACTOR)
+ case GL_POLYGON_OFFSET_FACTOR:
+#endif // defined(GL_POLYGON_OFFSET_FACTOR)
+#if defined(GL_POLYGON_OFFSET_UNITS)
+ case GL_POLYGON_OFFSET_UNITS:
+#endif // defined(GL_POLYGON_OFFSET_UNITS)
+#if defined(GL_PROJECTION_STACK_DEPTH)
+ case GL_PROJECTION_STACK_DEPTH:
+#endif // defined(GL_PROJECTION_STACK_DEPTH)
+#if defined(GL_RED_BITS)
+ case GL_RED_BITS:
+#endif // defined(GL_RED_BITS)
+#if defined(GL_SHADE_MODEL)
+ case GL_SHADE_MODEL:
+#endif // defined(GL_SHADE_MODEL)
+#if defined(GL_STENCIL_BITS)
+ case GL_STENCIL_BITS:
+#endif // defined(GL_STENCIL_BITS)
+#if defined(GL_STENCIL_CLEAR_VALUE)
+ case GL_STENCIL_CLEAR_VALUE:
+#endif // defined(GL_STENCIL_CLEAR_VALUE)
+#if defined(GL_STENCIL_FAIL)
+ case GL_STENCIL_FAIL:
+#endif // defined(GL_STENCIL_FAIL)
+#if defined(GL_STENCIL_FUNC)
+ case GL_STENCIL_FUNC:
+#endif // defined(GL_STENCIL_FUNC)
+#if defined(GL_STENCIL_PASS_DEPTH_FAIL)
+ case GL_STENCIL_PASS_DEPTH_FAIL:
+#endif // defined(GL_STENCIL_PASS_DEPTH_FAIL)
+#if defined(GL_STENCIL_PASS_DEPTH_PASS)
+ case GL_STENCIL_PASS_DEPTH_PASS:
+#endif // defined(GL_STENCIL_PASS_DEPTH_PASS)
+#if defined(GL_STENCIL_REF)
+ case GL_STENCIL_REF:
+#endif // defined(GL_STENCIL_REF)
+#if defined(GL_STENCIL_VALUE_MASK)
+ case GL_STENCIL_VALUE_MASK:
+#endif // defined(GL_STENCIL_VALUE_MASK)
+#if defined(GL_STENCIL_WRITEMASK)
+ case GL_STENCIL_WRITEMASK:
+#endif // defined(GL_STENCIL_WRITEMASK)
+#if defined(GL_SUBPIXEL_BITS)
+ case GL_SUBPIXEL_BITS:
+#endif // defined(GL_SUBPIXEL_BITS)
+#if defined(GL_TEXTURE_BINDING_2D)
+ case GL_TEXTURE_BINDING_2D:
+#endif // defined(GL_TEXTURE_BINDING_2D)
+#if defined(GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING)
+ case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING:
+#endif // defined(GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING)
+#if defined(GL_TEXTURE_COORD_ARRAY_SIZE)
+ case GL_TEXTURE_COORD_ARRAY_SIZE:
+#endif // defined(GL_TEXTURE_COORD_ARRAY_SIZE)
+#if defined(GL_TEXTURE_COORD_ARRAY_STRIDE)
+ case GL_TEXTURE_COORD_ARRAY_STRIDE:
+#endif // defined(GL_TEXTURE_COORD_ARRAY_STRIDE)
+#if defined(GL_TEXTURE_COORD_ARRAY_TYPE)
+ case GL_TEXTURE_COORD_ARRAY_TYPE:
+#endif // defined(GL_TEXTURE_COORD_ARRAY_TYPE)
+#if defined(GL_TEXTURE_STACK_DEPTH)
+ case GL_TEXTURE_STACK_DEPTH:
+#endif // defined(GL_TEXTURE_STACK_DEPTH)
+#if defined(GL_UNPACK_ALIGNMENT)
+ case GL_UNPACK_ALIGNMENT:
+#endif // defined(GL_UNPACK_ALIGNMENT)
+#if defined(GL_VERTEX_ARRAY_BUFFER_BINDING)
+ case GL_VERTEX_ARRAY_BUFFER_BINDING:
+#endif // defined(GL_VERTEX_ARRAY_BUFFER_BINDING)
+#if defined(GL_VERTEX_ARRAY_SIZE)
+ case GL_VERTEX_ARRAY_SIZE:
+#endif // defined(GL_VERTEX_ARRAY_SIZE)
+#if defined(GL_VERTEX_ARRAY_STRIDE)
+ case GL_VERTEX_ARRAY_STRIDE:
+#endif // defined(GL_VERTEX_ARRAY_STRIDE)
+#if defined(GL_VERTEX_ARRAY_TYPE)
+ case GL_VERTEX_ARRAY_TYPE:
+#endif // defined(GL_VERTEX_ARRAY_TYPE)
+#if defined(GL_WEIGHT_ARRAY_BUFFER_BINDING_OES)
+ case GL_WEIGHT_ARRAY_BUFFER_BINDING_OES:
+#endif // defined(GL_WEIGHT_ARRAY_BUFFER_BINDING_OES)
+#if defined(GL_WEIGHT_ARRAY_SIZE_OES)
+ case GL_WEIGHT_ARRAY_SIZE_OES:
+#endif // defined(GL_WEIGHT_ARRAY_SIZE_OES)
+#if defined(GL_WEIGHT_ARRAY_STRIDE_OES)
+ case GL_WEIGHT_ARRAY_STRIDE_OES:
+#endif // defined(GL_WEIGHT_ARRAY_STRIDE_OES)
+#if defined(GL_WEIGHT_ARRAY_TYPE_OES)
+ case GL_WEIGHT_ARRAY_TYPE_OES:
+#endif // defined(GL_WEIGHT_ARRAY_TYPE_OES)
+ _needed = 1;
+ break;
+#if defined(GL_ALIASED_POINT_SIZE_RANGE)
+ case GL_ALIASED_POINT_SIZE_RANGE:
+#endif // defined(GL_ALIASED_POINT_SIZE_RANGE)
+#if defined(GL_ALIASED_LINE_WIDTH_RANGE)
+ case GL_ALIASED_LINE_WIDTH_RANGE:
+#endif // defined(GL_ALIASED_LINE_WIDTH_RANGE)
+#if defined(GL_DEPTH_RANGE)
+ case GL_DEPTH_RANGE:
+#endif // defined(GL_DEPTH_RANGE)
+#if defined(GL_MAX_VIEWPORT_DIMS)
+ case GL_MAX_VIEWPORT_DIMS:
+#endif // defined(GL_MAX_VIEWPORT_DIMS)
+#if defined(GL_SMOOTH_LINE_WIDTH_RANGE)
+ case GL_SMOOTH_LINE_WIDTH_RANGE:
+#endif // defined(GL_SMOOTH_LINE_WIDTH_RANGE)
+#if defined(GL_SMOOTH_POINT_SIZE_RANGE)
+ case GL_SMOOTH_POINT_SIZE_RANGE:
+#endif // defined(GL_SMOOTH_POINT_SIZE_RANGE)
+ _needed = 2;
+ break;
+#if defined(GL_COLOR_CLEAR_VALUE)
+ case GL_COLOR_CLEAR_VALUE:
+#endif // defined(GL_COLOR_CLEAR_VALUE)
+#if defined(GL_COLOR_WRITEMASK)
+ case GL_COLOR_WRITEMASK:
+#endif // defined(GL_COLOR_WRITEMASK)
+#if defined(GL_SCISSOR_BOX)
+ case GL_SCISSOR_BOX:
+#endif // defined(GL_SCISSOR_BOX)
+#if defined(GL_VIEWPORT)
+ case GL_VIEWPORT:
+#endif // defined(GL_VIEWPORT)
+ _needed = 4;
+ break;
+#if defined(GL_MODELVIEW_MATRIX)
+ case GL_MODELVIEW_MATRIX:
+#endif // defined(GL_MODELVIEW_MATRIX)
+#if defined(GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES)
+ case GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES:
+#endif // defined(GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES)
+#if defined(GL_PROJECTION_MATRIX)
+ case GL_PROJECTION_MATRIX:
+#endif // defined(GL_PROJECTION_MATRIX)
+#if defined(GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES)
+ case GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES:
+#endif // defined(GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES)
+#if defined(GL_TEXTURE_MATRIX)
+ case GL_TEXTURE_MATRIX:
+#endif // defined(GL_TEXTURE_MATRIX)
+#if defined(GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES)
+ case GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES:
+#endif // defined(GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES)
+ _needed = 16;
+ break;
+#if defined(GL_COMPRESSED_TEXTURE_FORMATS)
+ case GL_COMPRESSED_TEXTURE_FORMATS:
+#endif // defined(GL_COMPRESSED_TEXTURE_FORMATS)
+#if defined(GL_FOG_COLOR)
+ case GL_FOG_COLOR:
+#endif // defined(GL_FOG_COLOR)
+#if defined(GL_LIGHT_MODEL_AMBIENT)
+ case GL_LIGHT_MODEL_AMBIENT:
+#endif // defined(GL_LIGHT_MODEL_AMBIENT)
+ _needed = _NUM_COMPRESSED_TEXTURE_FORMATS;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "length - offset < needed");
+ goto exit;
+ }
+ params_base = (GLint *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glGetIntegerv(
+ (GLenum)pname,
+ (GLint *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _exception ? JNI_ABORT: 0);
+ }
+}
+
+/* void glGetIntegerv ( GLenum pname, GLint *params ) */
+static void
+android_glGetIntegerv__ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
+ jint _exception = 0;
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLint *params = (GLint *) 0;
+
+ params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining);
+ int _needed;
+ switch (pname) {
+#if defined(GL_ALPHA_BITS)
+ case GL_ALPHA_BITS:
+#endif // defined(GL_ALPHA_BITS)
+#if defined(GL_ALPHA_TEST_FUNC)
+ case GL_ALPHA_TEST_FUNC:
+#endif // defined(GL_ALPHA_TEST_FUNC)
+#if defined(GL_ALPHA_TEST_REF)
+ case GL_ALPHA_TEST_REF:
+#endif // defined(GL_ALPHA_TEST_REF)
+#if defined(GL_BLEND_DST)
+ case GL_BLEND_DST:
+#endif // defined(GL_BLEND_DST)
+#if defined(GL_BLUE_BITS)
+ case GL_BLUE_BITS:
+#endif // defined(GL_BLUE_BITS)
+#if defined(GL_COLOR_ARRAY_BUFFER_BINDING)
+ case GL_COLOR_ARRAY_BUFFER_BINDING:
+#endif // defined(GL_COLOR_ARRAY_BUFFER_BINDING)
+#if defined(GL_COLOR_ARRAY_SIZE)
+ case GL_COLOR_ARRAY_SIZE:
+#endif // defined(GL_COLOR_ARRAY_SIZE)
+#if defined(GL_COLOR_ARRAY_STRIDE)
+ case GL_COLOR_ARRAY_STRIDE:
+#endif // defined(GL_COLOR_ARRAY_STRIDE)
+#if defined(GL_COLOR_ARRAY_TYPE)
+ case GL_COLOR_ARRAY_TYPE:
+#endif // defined(GL_COLOR_ARRAY_TYPE)
+#if defined(GL_CULL_FACE)
+ case GL_CULL_FACE:
+#endif // defined(GL_CULL_FACE)
+#if defined(GL_DEPTH_BITS)
+ case GL_DEPTH_BITS:
+#endif // defined(GL_DEPTH_BITS)
+#if defined(GL_DEPTH_CLEAR_VALUE)
+ case GL_DEPTH_CLEAR_VALUE:
+#endif // defined(GL_DEPTH_CLEAR_VALUE)
+#if defined(GL_DEPTH_FUNC)
+ case GL_DEPTH_FUNC:
+#endif // defined(GL_DEPTH_FUNC)
+#if defined(GL_DEPTH_WRITEMASK)
+ case GL_DEPTH_WRITEMASK:
+#endif // defined(GL_DEPTH_WRITEMASK)
+#if defined(GL_FOG_DENSITY)
+ case GL_FOG_DENSITY:
+#endif // defined(GL_FOG_DENSITY)
+#if defined(GL_FOG_END)
+ case GL_FOG_END:
+#endif // defined(GL_FOG_END)
+#if defined(GL_FOG_MODE)
+ case GL_FOG_MODE:
+#endif // defined(GL_FOG_MODE)
+#if defined(GL_FOG_START)
+ case GL_FOG_START:
+#endif // defined(GL_FOG_START)
+#if defined(GL_FRONT_FACE)
+ case GL_FRONT_FACE:
+#endif // defined(GL_FRONT_FACE)
+#if defined(GL_GREEN_BITS)
+ case GL_GREEN_BITS:
+#endif // defined(GL_GREEN_BITS)
+#if defined(GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES)
+ case GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES:
+#endif // defined(GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES)
+#if defined(GL_IMPLEMENTATION_COLOR_READ_TYPE_OES)
+ case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES:
+#endif // defined(GL_IMPLEMENTATION_COLOR_READ_TYPE_OES)
+#if defined(GL_LIGHT_MODEL_TWO_SIDE)
+ case GL_LIGHT_MODEL_TWO_SIDE:
+#endif // defined(GL_LIGHT_MODEL_TWO_SIDE)
+#if defined(GL_LINE_SMOOTH_HINT)
+ case GL_LINE_SMOOTH_HINT:
+#endif // defined(GL_LINE_SMOOTH_HINT)
+#if defined(GL_LINE_WIDTH)
+ case GL_LINE_WIDTH:
+#endif // defined(GL_LINE_WIDTH)
+#if defined(GL_LOGIC_OP_MODE)
+ case GL_LOGIC_OP_MODE:
+#endif // defined(GL_LOGIC_OP_MODE)
+#if defined(GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES)
+ case GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES:
+#endif // defined(GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES)
+#if defined(GL_MATRIX_INDEX_ARRAY_SIZE_OES)
+ case GL_MATRIX_INDEX_ARRAY_SIZE_OES:
+#endif // defined(GL_MATRIX_INDEX_ARRAY_SIZE_OES)
+#if defined(GL_MATRIX_INDEX_ARRAY_STRIDE_OES)
+ case GL_MATRIX_INDEX_ARRAY_STRIDE_OES:
+#endif // defined(GL_MATRIX_INDEX_ARRAY_STRIDE_OES)
+#if defined(GL_MATRIX_INDEX_ARRAY_TYPE_OES)
+ case GL_MATRIX_INDEX_ARRAY_TYPE_OES:
+#endif // defined(GL_MATRIX_INDEX_ARRAY_TYPE_OES)
+#if defined(GL_MATRIX_MODE)
+ case GL_MATRIX_MODE:
+#endif // defined(GL_MATRIX_MODE)
+#if defined(GL_MAX_CLIP_PLANES)
+ case GL_MAX_CLIP_PLANES:
+#endif // defined(GL_MAX_CLIP_PLANES)
+#if defined(GL_MAX_ELEMENTS_INDICES)
+ case GL_MAX_ELEMENTS_INDICES:
+#endif // defined(GL_MAX_ELEMENTS_INDICES)
+#if defined(GL_MAX_ELEMENTS_VERTICES)
+ case GL_MAX_ELEMENTS_VERTICES:
+#endif // defined(GL_MAX_ELEMENTS_VERTICES)
+#if defined(GL_MAX_LIGHTS)
+ case GL_MAX_LIGHTS:
+#endif // defined(GL_MAX_LIGHTS)
+#if defined(GL_MAX_MODELVIEW_STACK_DEPTH)
+ case GL_MAX_MODELVIEW_STACK_DEPTH:
+#endif // defined(GL_MAX_MODELVIEW_STACK_DEPTH)
+#if defined(GL_MAX_PALETTE_MATRICES_OES)
+ case GL_MAX_PALETTE_MATRICES_OES:
+#endif // defined(GL_MAX_PALETTE_MATRICES_OES)
+#if defined(GL_MAX_PROJECTION_STACK_DEPTH)
+ case GL_MAX_PROJECTION_STACK_DEPTH:
+#endif // defined(GL_MAX_PROJECTION_STACK_DEPTH)
+#if defined(GL_MAX_TEXTURE_SIZE)
+ case GL_MAX_TEXTURE_SIZE:
+#endif // defined(GL_MAX_TEXTURE_SIZE)
+#if defined(GL_MAX_TEXTURE_STACK_DEPTH)
+ case GL_MAX_TEXTURE_STACK_DEPTH:
+#endif // defined(GL_MAX_TEXTURE_STACK_DEPTH)
+#if defined(GL_MAX_TEXTURE_UNITS)
+ case GL_MAX_TEXTURE_UNITS:
+#endif // defined(GL_MAX_TEXTURE_UNITS)
+#if defined(GL_MAX_VERTEX_UNITS_OES)
+ case GL_MAX_VERTEX_UNITS_OES:
+#endif // defined(GL_MAX_VERTEX_UNITS_OES)
+#if defined(GL_MODELVIEW_STACK_DEPTH)
+ case GL_MODELVIEW_STACK_DEPTH:
+#endif // defined(GL_MODELVIEW_STACK_DEPTH)
+#if defined(GL_NORMAL_ARRAY_BUFFER_BINDING)
+ case GL_NORMAL_ARRAY_BUFFER_BINDING:
+#endif // defined(GL_NORMAL_ARRAY_BUFFER_BINDING)
+#if defined(GL_NORMAL_ARRAY_STRIDE)
+ case GL_NORMAL_ARRAY_STRIDE:
+#endif // defined(GL_NORMAL_ARRAY_STRIDE)
+#if defined(GL_NORMAL_ARRAY_TYPE)
+ case GL_NORMAL_ARRAY_TYPE:
+#endif // defined(GL_NORMAL_ARRAY_TYPE)
+#if defined(GL_NUM_COMPRESSED_TEXTURE_FORMATS)
+ case GL_NUM_COMPRESSED_TEXTURE_FORMATS:
+#endif // defined(GL_NUM_COMPRESSED_TEXTURE_FORMATS)
+#if defined(GL_PACK_ALIGNMENT)
+ case GL_PACK_ALIGNMENT:
+#endif // defined(GL_PACK_ALIGNMENT)
+#if defined(GL_PERSPECTIVE_CORRECTION_HINT)
+ case GL_PERSPECTIVE_CORRECTION_HINT:
+#endif // defined(GL_PERSPECTIVE_CORRECTION_HINT)
+#if defined(GL_POINT_SIZE)
+ case GL_POINT_SIZE:
+#endif // defined(GL_POINT_SIZE)
+#if defined(GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES)
+ case GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES:
+#endif // defined(GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES)
+#if defined(GL_POINT_SIZE_ARRAY_STRIDE_OES)
+ case GL_POINT_SIZE_ARRAY_STRIDE_OES:
+#endif // defined(GL_POINT_SIZE_ARRAY_STRIDE_OES)
+#if defined(GL_POINT_SIZE_ARRAY_TYPE_OES)
+ case GL_POINT_SIZE_ARRAY_TYPE_OES:
+#endif // defined(GL_POINT_SIZE_ARRAY_TYPE_OES)
+#if defined(GL_POINT_SMOOTH_HINT)
+ case GL_POINT_SMOOTH_HINT:
+#endif // defined(GL_POINT_SMOOTH_HINT)
+#if defined(GL_POLYGON_OFFSET_FACTOR)
+ case GL_POLYGON_OFFSET_FACTOR:
+#endif // defined(GL_POLYGON_OFFSET_FACTOR)
+#if defined(GL_POLYGON_OFFSET_UNITS)
+ case GL_POLYGON_OFFSET_UNITS:
+#endif // defined(GL_POLYGON_OFFSET_UNITS)
+#if defined(GL_PROJECTION_STACK_DEPTH)
+ case GL_PROJECTION_STACK_DEPTH:
+#endif // defined(GL_PROJECTION_STACK_DEPTH)
+#if defined(GL_RED_BITS)
+ case GL_RED_BITS:
+#endif // defined(GL_RED_BITS)
+#if defined(GL_SHADE_MODEL)
+ case GL_SHADE_MODEL:
+#endif // defined(GL_SHADE_MODEL)
+#if defined(GL_STENCIL_BITS)
+ case GL_STENCIL_BITS:
+#endif // defined(GL_STENCIL_BITS)
+#if defined(GL_STENCIL_CLEAR_VALUE)
+ case GL_STENCIL_CLEAR_VALUE:
+#endif // defined(GL_STENCIL_CLEAR_VALUE)
+#if defined(GL_STENCIL_FAIL)
+ case GL_STENCIL_FAIL:
+#endif // defined(GL_STENCIL_FAIL)
+#if defined(GL_STENCIL_FUNC)
+ case GL_STENCIL_FUNC:
+#endif // defined(GL_STENCIL_FUNC)
+#if defined(GL_STENCIL_PASS_DEPTH_FAIL)
+ case GL_STENCIL_PASS_DEPTH_FAIL:
+#endif // defined(GL_STENCIL_PASS_DEPTH_FAIL)
+#if defined(GL_STENCIL_PASS_DEPTH_PASS)
+ case GL_STENCIL_PASS_DEPTH_PASS:
+#endif // defined(GL_STENCIL_PASS_DEPTH_PASS)
+#if defined(GL_STENCIL_REF)
+ case GL_STENCIL_REF:
+#endif // defined(GL_STENCIL_REF)
+#if defined(GL_STENCIL_VALUE_MASK)
+ case GL_STENCIL_VALUE_MASK:
+#endif // defined(GL_STENCIL_VALUE_MASK)
+#if defined(GL_STENCIL_WRITEMASK)
+ case GL_STENCIL_WRITEMASK:
+#endif // defined(GL_STENCIL_WRITEMASK)
+#if defined(GL_SUBPIXEL_BITS)
+ case GL_SUBPIXEL_BITS:
+#endif // defined(GL_SUBPIXEL_BITS)
+#if defined(GL_TEXTURE_BINDING_2D)
+ case GL_TEXTURE_BINDING_2D:
+#endif // defined(GL_TEXTURE_BINDING_2D)
+#if defined(GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING)
+ case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING:
+#endif // defined(GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING)
+#if defined(GL_TEXTURE_COORD_ARRAY_SIZE)
+ case GL_TEXTURE_COORD_ARRAY_SIZE:
+#endif // defined(GL_TEXTURE_COORD_ARRAY_SIZE)
+#if defined(GL_TEXTURE_COORD_ARRAY_STRIDE)
+ case GL_TEXTURE_COORD_ARRAY_STRIDE:
+#endif // defined(GL_TEXTURE_COORD_ARRAY_STRIDE)
+#if defined(GL_TEXTURE_COORD_ARRAY_TYPE)
+ case GL_TEXTURE_COORD_ARRAY_TYPE:
+#endif // defined(GL_TEXTURE_COORD_ARRAY_TYPE)
+#if defined(GL_TEXTURE_STACK_DEPTH)
+ case GL_TEXTURE_STACK_DEPTH:
+#endif // defined(GL_TEXTURE_STACK_DEPTH)
+#if defined(GL_UNPACK_ALIGNMENT)
+ case GL_UNPACK_ALIGNMENT:
+#endif // defined(GL_UNPACK_ALIGNMENT)
+#if defined(GL_VERTEX_ARRAY_BUFFER_BINDING)
+ case GL_VERTEX_ARRAY_BUFFER_BINDING:
+#endif // defined(GL_VERTEX_ARRAY_BUFFER_BINDING)
+#if defined(GL_VERTEX_ARRAY_SIZE)
+ case GL_VERTEX_ARRAY_SIZE:
+#endif // defined(GL_VERTEX_ARRAY_SIZE)
+#if defined(GL_VERTEX_ARRAY_STRIDE)
+ case GL_VERTEX_ARRAY_STRIDE:
+#endif // defined(GL_VERTEX_ARRAY_STRIDE)
+#if defined(GL_VERTEX_ARRAY_TYPE)
+ case GL_VERTEX_ARRAY_TYPE:
+#endif // defined(GL_VERTEX_ARRAY_TYPE)
+#if defined(GL_WEIGHT_ARRAY_BUFFER_BINDING_OES)
+ case GL_WEIGHT_ARRAY_BUFFER_BINDING_OES:
+#endif // defined(GL_WEIGHT_ARRAY_BUFFER_BINDING_OES)
+#if defined(GL_WEIGHT_ARRAY_SIZE_OES)
+ case GL_WEIGHT_ARRAY_SIZE_OES:
+#endif // defined(GL_WEIGHT_ARRAY_SIZE_OES)
+#if defined(GL_WEIGHT_ARRAY_STRIDE_OES)
+ case GL_WEIGHT_ARRAY_STRIDE_OES:
+#endif // defined(GL_WEIGHT_ARRAY_STRIDE_OES)
+#if defined(GL_WEIGHT_ARRAY_TYPE_OES)
+ case GL_WEIGHT_ARRAY_TYPE_OES:
+#endif // defined(GL_WEIGHT_ARRAY_TYPE_OES)
+ _needed = 1;
+ break;
+#if defined(GL_ALIASED_POINT_SIZE_RANGE)
+ case GL_ALIASED_POINT_SIZE_RANGE:
+#endif // defined(GL_ALIASED_POINT_SIZE_RANGE)
+#if defined(GL_ALIASED_LINE_WIDTH_RANGE)
+ case GL_ALIASED_LINE_WIDTH_RANGE:
+#endif // defined(GL_ALIASED_LINE_WIDTH_RANGE)
+#if defined(GL_DEPTH_RANGE)
+ case GL_DEPTH_RANGE:
+#endif // defined(GL_DEPTH_RANGE)
+#if defined(GL_MAX_VIEWPORT_DIMS)
+ case GL_MAX_VIEWPORT_DIMS:
+#endif // defined(GL_MAX_VIEWPORT_DIMS)
+#if defined(GL_SMOOTH_LINE_WIDTH_RANGE)
+ case GL_SMOOTH_LINE_WIDTH_RANGE:
+#endif // defined(GL_SMOOTH_LINE_WIDTH_RANGE)
+#if defined(GL_SMOOTH_POINT_SIZE_RANGE)
+ case GL_SMOOTH_POINT_SIZE_RANGE:
+#endif // defined(GL_SMOOTH_POINT_SIZE_RANGE)
+ _needed = 2;
+ break;
+#if defined(GL_COLOR_CLEAR_VALUE)
+ case GL_COLOR_CLEAR_VALUE:
+#endif // defined(GL_COLOR_CLEAR_VALUE)
+#if defined(GL_COLOR_WRITEMASK)
+ case GL_COLOR_WRITEMASK:
+#endif // defined(GL_COLOR_WRITEMASK)
+#if defined(GL_SCISSOR_BOX)
+ case GL_SCISSOR_BOX:
+#endif // defined(GL_SCISSOR_BOX)
+#if defined(GL_VIEWPORT)
+ case GL_VIEWPORT:
+#endif // defined(GL_VIEWPORT)
+ _needed = 4;
+ break;
+#if defined(GL_MODELVIEW_MATRIX)
+ case GL_MODELVIEW_MATRIX:
+#endif // defined(GL_MODELVIEW_MATRIX)
+#if defined(GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES)
+ case GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES:
+#endif // defined(GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES)
+#if defined(GL_PROJECTION_MATRIX)
+ case GL_PROJECTION_MATRIX:
+#endif // defined(GL_PROJECTION_MATRIX)
+#if defined(GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES)
+ case GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES:
+#endif // defined(GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES)
+#if defined(GL_TEXTURE_MATRIX)
+ case GL_TEXTURE_MATRIX:
+#endif // defined(GL_TEXTURE_MATRIX)
+#if defined(GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES)
+ case GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES:
+#endif // defined(GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES)
+ _needed = 16;
+ break;
+#if defined(GL_COMPRESSED_TEXTURE_FORMATS)
+ case GL_COMPRESSED_TEXTURE_FORMATS:
+#endif // defined(GL_COMPRESSED_TEXTURE_FORMATS)
+#if defined(GL_FOG_COLOR)
+ case GL_FOG_COLOR:
+#endif // defined(GL_FOG_COLOR)
+#if defined(GL_LIGHT_MODEL_AMBIENT)
+ case GL_LIGHT_MODEL_AMBIENT:
+#endif // defined(GL_LIGHT_MODEL_AMBIENT)
+ _needed = _NUM_COMPRESSED_TEXTURE_FORMATS;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "remaining() < needed");
+ goto exit;
+ }
+ glGetIntegerv(
+ (GLenum)pname,
+ (GLint *)params
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ }
+}
+
+#include <string.h>
+
+/* const GLubyte * glGetString ( GLenum name ) */
+static
+jstring
+android_glGetString
+ (JNIEnv *_env, jobject _this, jint name) {
+ const char * chars = (const char *)glGetString((GLenum)name);
+ jstring output = _env->NewStringUTF(chars);
+ return output;
+}
+/* void glHint ( GLenum target, GLenum mode ) */
+static void
+android_glHint__II
+ (JNIEnv *_env, jobject _this, jint target, jint mode) {
+ glHint(
+ (GLenum)target,
+ (GLenum)mode
+ );
+}
+
+/* void glLightModelf ( GLenum pname, GLfloat param ) */
+static void
+android_glLightModelf__IF
+ (JNIEnv *_env, jobject _this, jint pname, jfloat param) {
+ glLightModelf(
+ (GLenum)pname,
+ (GLfloat)param
+ );
+}
+
+/* void glLightModelfv ( GLenum pname, const GLfloat *params ) */
+static void
+android_glLightModelfv__I_3FI
+ (JNIEnv *_env, jobject _this, jint pname, jfloatArray params_ref, jint offset) {
+ GLfloat *params_base = (GLfloat *) 0;
+ jint _remaining;
+ GLfloat *params = (GLfloat *) 0;
+
+ if (!params_ref) {
+ _env->ThrowNew(IAEClass, "params == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ int _needed;
+ switch (pname) {
+#if defined(GL_LIGHT_MODEL_TWO_SIDE)
+ case GL_LIGHT_MODEL_TWO_SIDE:
+#endif // defined(GL_LIGHT_MODEL_TWO_SIDE)
+ _needed = 1;
+ break;
+#if defined(GL_LIGHT_MODEL_AMBIENT)
+ case GL_LIGHT_MODEL_AMBIENT:
+#endif // defined(GL_LIGHT_MODEL_AMBIENT)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _env->ThrowNew(IAEClass, "length - offset < needed");
+ goto exit;
+ }
+ params_base = (GLfloat *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glLightModelfv(
+ (GLenum)pname,
+ (GLfloat *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ JNI_ABORT);
+ }
+}
+
+/* void glLightModelfv ( GLenum pname, const GLfloat *params ) */
+static void
+android_glLightModelfv__ILjava_nio_FloatBuffer_2
+ (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfloat *params = (GLfloat *) 0;
+
+ params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining);
+ int _needed;
+ switch (pname) {
+#if defined(GL_LIGHT_MODEL_TWO_SIDE)
+ case GL_LIGHT_MODEL_TWO_SIDE:
+#endif // defined(GL_LIGHT_MODEL_TWO_SIDE)
+ _needed = 1;
+ break;
+#if defined(GL_LIGHT_MODEL_AMBIENT)
+ case GL_LIGHT_MODEL_AMBIENT:
+#endif // defined(GL_LIGHT_MODEL_AMBIENT)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _env->ThrowNew(IAEClass, "remaining() < needed");
+ goto exit;
+ }
+ glLightModelfv(
+ (GLenum)pname,
+ (GLfloat *)params
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, params, JNI_FALSE);
+ }
+}
+
+/* void glLightModelx ( GLenum pname, GLfixed param ) */
+static void
+android_glLightModelx__II
+ (JNIEnv *_env, jobject _this, jint pname, jint param) {
+ glLightModelx(
+ (GLenum)pname,
+ (GLfixed)param
+ );
+}
+
+/* void glLightModelxv ( GLenum pname, const GLfixed *params ) */
+static void
+android_glLightModelxv__I_3II
+ (JNIEnv *_env, jobject _this, jint pname, jintArray params_ref, jint offset) {
+ GLfixed *params_base = (GLfixed *) 0;
+ jint _remaining;
+ GLfixed *params = (GLfixed *) 0;
+
+ if (!params_ref) {
+ _env->ThrowNew(IAEClass, "params == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ int _needed;
+ switch (pname) {
+#if defined(GL_LIGHT_MODEL_TWO_SIDE)
+ case GL_LIGHT_MODEL_TWO_SIDE:
+#endif // defined(GL_LIGHT_MODEL_TWO_SIDE)
+ _needed = 1;
+ break;
+#if defined(GL_LIGHT_MODEL_AMBIENT)
+ case GL_LIGHT_MODEL_AMBIENT:
+#endif // defined(GL_LIGHT_MODEL_AMBIENT)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _env->ThrowNew(IAEClass, "length - offset < needed");
+ goto exit;
+ }
+ params_base = (GLfixed *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glLightModelxv(
+ (GLenum)pname,
+ (GLfixed *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ JNI_ABORT);
+ }
+}
+
+/* void glLightModelxv ( GLenum pname, const GLfixed *params ) */
+static void
+android_glLightModelxv__ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfixed *params = (GLfixed *) 0;
+
+ params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining);
+ int _needed;
+ switch (pname) {
+#if defined(GL_LIGHT_MODEL_TWO_SIDE)
+ case GL_LIGHT_MODEL_TWO_SIDE:
+#endif // defined(GL_LIGHT_MODEL_TWO_SIDE)
+ _needed = 1;
+ break;
+#if defined(GL_LIGHT_MODEL_AMBIENT)
+ case GL_LIGHT_MODEL_AMBIENT:
+#endif // defined(GL_LIGHT_MODEL_AMBIENT)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _env->ThrowNew(IAEClass, "remaining() < needed");
+ goto exit;
+ }
+ glLightModelxv(
+ (GLenum)pname,
+ (GLfixed *)params
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, params, JNI_FALSE);
+ }
+}
+
+/* void glLightf ( GLenum light, GLenum pname, GLfloat param ) */
+static void
+android_glLightf__IIF
+ (JNIEnv *_env, jobject _this, jint light, jint pname, jfloat param) {
+ glLightf(
+ (GLenum)light,
+ (GLenum)pname,
+ (GLfloat)param
+ );
+}
+
+/* void glLightfv ( GLenum light, GLenum pname, const GLfloat *params ) */
+static void
+android_glLightfv__II_3FI
+ (JNIEnv *_env, jobject _this, jint light, jint pname, jfloatArray params_ref, jint offset) {
+ GLfloat *params_base = (GLfloat *) 0;
+ jint _remaining;
+ GLfloat *params = (GLfloat *) 0;
+
+ if (!params_ref) {
+ _env->ThrowNew(IAEClass, "params == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ int _needed;
+ switch (pname) {
+#if defined(GL_SPOT_EXPONENT)
+ case GL_SPOT_EXPONENT:
+#endif // defined(GL_SPOT_EXPONENT)
+#if defined(GL_SPOT_CUTOFF)
+ case GL_SPOT_CUTOFF:
+#endif // defined(GL_SPOT_CUTOFF)
+#if defined(GL_CONSTANT_ATTENUATION)
+ case GL_CONSTANT_ATTENUATION:
+#endif // defined(GL_CONSTANT_ATTENUATION)
+#if defined(GL_LINEAR_ATTENUATION)
+ case GL_LINEAR_ATTENUATION:
+#endif // defined(GL_LINEAR_ATTENUATION)
+#if defined(GL_QUADRATIC_ATTENUATION)
+ case GL_QUADRATIC_ATTENUATION:
+#endif // defined(GL_QUADRATIC_ATTENUATION)
+ _needed = 1;
+ break;
+#if defined(GL_SPOT_DIRECTION)
+ case GL_SPOT_DIRECTION:
+#endif // defined(GL_SPOT_DIRECTION)
+ _needed = 3;
+ break;
+#if defined(GL_AMBIENT)
+ case GL_AMBIENT:
+#endif // defined(GL_AMBIENT)
+#if defined(GL_DIFFUSE)
+ case GL_DIFFUSE:
+#endif // defined(GL_DIFFUSE)
+#if defined(GL_SPECULAR)
+ case GL_SPECULAR:
+#endif // defined(GL_SPECULAR)
+#if defined(GL_EMISSION)
+ case GL_EMISSION:
+#endif // defined(GL_EMISSION)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _env->ThrowNew(IAEClass, "length - offset < needed");
+ goto exit;
+ }
+ params_base = (GLfloat *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glLightfv(
+ (GLenum)light,
+ (GLenum)pname,
+ (GLfloat *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ JNI_ABORT);
+ }
+}
+
+/* void glLightfv ( GLenum light, GLenum pname, const GLfloat *params ) */
+static void
+android_glLightfv__IILjava_nio_FloatBuffer_2
+ (JNIEnv *_env, jobject _this, jint light, jint pname, jobject params_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfloat *params = (GLfloat *) 0;
+
+ params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining);
+ int _needed;
+ switch (pname) {
+#if defined(GL_SPOT_EXPONENT)
+ case GL_SPOT_EXPONENT:
+#endif // defined(GL_SPOT_EXPONENT)
+#if defined(GL_SPOT_CUTOFF)
+ case GL_SPOT_CUTOFF:
+#endif // defined(GL_SPOT_CUTOFF)
+#if defined(GL_CONSTANT_ATTENUATION)
+ case GL_CONSTANT_ATTENUATION:
+#endif // defined(GL_CONSTANT_ATTENUATION)
+#if defined(GL_LINEAR_ATTENUATION)
+ case GL_LINEAR_ATTENUATION:
+#endif // defined(GL_LINEAR_ATTENUATION)
+#if defined(GL_QUADRATIC_ATTENUATION)
+ case GL_QUADRATIC_ATTENUATION:
+#endif // defined(GL_QUADRATIC_ATTENUATION)
+ _needed = 1;
+ break;
+#if defined(GL_SPOT_DIRECTION)
+ case GL_SPOT_DIRECTION:
+#endif // defined(GL_SPOT_DIRECTION)
+ _needed = 3;
+ break;
+#if defined(GL_AMBIENT)
+ case GL_AMBIENT:
+#endif // defined(GL_AMBIENT)
+#if defined(GL_DIFFUSE)
+ case GL_DIFFUSE:
+#endif // defined(GL_DIFFUSE)
+#if defined(GL_SPECULAR)
+ case GL_SPECULAR:
+#endif // defined(GL_SPECULAR)
+#if defined(GL_EMISSION)
+ case GL_EMISSION:
+#endif // defined(GL_EMISSION)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _env->ThrowNew(IAEClass, "remaining() < needed");
+ goto exit;
+ }
+ glLightfv(
+ (GLenum)light,
+ (GLenum)pname,
+ (GLfloat *)params
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, params, JNI_FALSE);
+ }
+}
+
+/* void glLightx ( GLenum light, GLenum pname, GLfixed param ) */
+static void
+android_glLightx__III
+ (JNIEnv *_env, jobject _this, jint light, jint pname, jint param) {
+ glLightx(
+ (GLenum)light,
+ (GLenum)pname,
+ (GLfixed)param
+ );
+}
+
+/* void glLightxv ( GLenum light, GLenum pname, const GLfixed *params ) */
+static void
+android_glLightxv__II_3II
+ (JNIEnv *_env, jobject _this, jint light, jint pname, jintArray params_ref, jint offset) {
+ GLfixed *params_base = (GLfixed *) 0;
+ jint _remaining;
+ GLfixed *params = (GLfixed *) 0;
+
+ if (!params_ref) {
+ _env->ThrowNew(IAEClass, "params == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ int _needed;
+ switch (pname) {
+#if defined(GL_SPOT_EXPONENT)
+ case GL_SPOT_EXPONENT:
+#endif // defined(GL_SPOT_EXPONENT)
+#if defined(GL_SPOT_CUTOFF)
+ case GL_SPOT_CUTOFF:
+#endif // defined(GL_SPOT_CUTOFF)
+#if defined(GL_CONSTANT_ATTENUATION)
+ case GL_CONSTANT_ATTENUATION:
+#endif // defined(GL_CONSTANT_ATTENUATION)
+#if defined(GL_LINEAR_ATTENUATION)
+ case GL_LINEAR_ATTENUATION:
+#endif // defined(GL_LINEAR_ATTENUATION)
+#if defined(GL_QUADRATIC_ATTENUATION)
+ case GL_QUADRATIC_ATTENUATION:
+#endif // defined(GL_QUADRATIC_ATTENUATION)
+ _needed = 1;
+ break;
+#if defined(GL_SPOT_DIRECTION)
+ case GL_SPOT_DIRECTION:
+#endif // defined(GL_SPOT_DIRECTION)
+ _needed = 3;
+ break;
+#if defined(GL_AMBIENT)
+ case GL_AMBIENT:
+#endif // defined(GL_AMBIENT)
+#if defined(GL_DIFFUSE)
+ case GL_DIFFUSE:
+#endif // defined(GL_DIFFUSE)
+#if defined(GL_SPECULAR)
+ case GL_SPECULAR:
+#endif // defined(GL_SPECULAR)
+#if defined(GL_EMISSION)
+ case GL_EMISSION:
+#endif // defined(GL_EMISSION)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _env->ThrowNew(IAEClass, "length - offset < needed");
+ goto exit;
+ }
+ params_base = (GLfixed *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glLightxv(
+ (GLenum)light,
+ (GLenum)pname,
+ (GLfixed *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ JNI_ABORT);
+ }
+}
+
+/* void glLightxv ( GLenum light, GLenum pname, const GLfixed *params ) */
+static void
+android_glLightxv__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint light, jint pname, jobject params_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfixed *params = (GLfixed *) 0;
+
+ params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining);
+ int _needed;
+ switch (pname) {
+#if defined(GL_SPOT_EXPONENT)
+ case GL_SPOT_EXPONENT:
+#endif // defined(GL_SPOT_EXPONENT)
+#if defined(GL_SPOT_CUTOFF)
+ case GL_SPOT_CUTOFF:
+#endif // defined(GL_SPOT_CUTOFF)
+#if defined(GL_CONSTANT_ATTENUATION)
+ case GL_CONSTANT_ATTENUATION:
+#endif // defined(GL_CONSTANT_ATTENUATION)
+#if defined(GL_LINEAR_ATTENUATION)
+ case GL_LINEAR_ATTENUATION:
+#endif // defined(GL_LINEAR_ATTENUATION)
+#if defined(GL_QUADRATIC_ATTENUATION)
+ case GL_QUADRATIC_ATTENUATION:
+#endif // defined(GL_QUADRATIC_ATTENUATION)
+ _needed = 1;
+ break;
+#if defined(GL_SPOT_DIRECTION)
+ case GL_SPOT_DIRECTION:
+#endif // defined(GL_SPOT_DIRECTION)
+ _needed = 3;
+ break;
+#if defined(GL_AMBIENT)
+ case GL_AMBIENT:
+#endif // defined(GL_AMBIENT)
+#if defined(GL_DIFFUSE)
+ case GL_DIFFUSE:
+#endif // defined(GL_DIFFUSE)
+#if defined(GL_SPECULAR)
+ case GL_SPECULAR:
+#endif // defined(GL_SPECULAR)
+#if defined(GL_EMISSION)
+ case GL_EMISSION:
+#endif // defined(GL_EMISSION)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _env->ThrowNew(IAEClass, "remaining() < needed");
+ goto exit;
+ }
+ glLightxv(
+ (GLenum)light,
+ (GLenum)pname,
+ (GLfixed *)params
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, params, JNI_FALSE);
+ }
+}
+
+/* void glLineWidth ( GLfloat width ) */
+static void
+android_glLineWidth__F
+ (JNIEnv *_env, jobject _this, jfloat width) {
+ glLineWidth(
+ (GLfloat)width
+ );
+}
+
+/* void glLineWidthx ( GLfixed width ) */
+static void
+android_glLineWidthx__I
+ (JNIEnv *_env, jobject _this, jint width) {
+ glLineWidthx(
+ (GLfixed)width
+ );
+}
+
+/* void glLoadIdentity ( void ) */
+static void
+android_glLoadIdentity__
+ (JNIEnv *_env, jobject _this) {
+ glLoadIdentity();
+}
+
+/* void glLoadMatrixf ( const GLfloat *m ) */
+static void
+android_glLoadMatrixf___3FI
+ (JNIEnv *_env, jobject _this, jfloatArray m_ref, jint offset) {
+ GLfloat *m_base = (GLfloat *) 0;
+ jint _remaining;
+ GLfloat *m = (GLfloat *) 0;
+
+ if (!m_ref) {
+ _env->ThrowNew(IAEClass, "m == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(m_ref) - offset;
+ m_base = (GLfloat *)
+ _env->GetPrimitiveArrayCritical(m_ref, (jboolean *)0);
+ m = m_base + offset;
+
+ glLoadMatrixf(
+ (GLfloat *)m
+ );
+
+exit:
+ if (m_base) {
+ _env->ReleasePrimitiveArrayCritical(m_ref, m_base,
+ JNI_ABORT);
+ }
+}
+
+/* void glLoadMatrixf ( const GLfloat *m ) */
+static void
+android_glLoadMatrixf__Ljava_nio_FloatBuffer_2
+ (JNIEnv *_env, jobject _this, jobject m_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfloat *m = (GLfloat *) 0;
+
+ m = (GLfloat *)getPointer(_env, m_buf, &_array, &_remaining);
+ glLoadMatrixf(
+ (GLfloat *)m
+ );
+ if (_array) {
+ releasePointer(_env, _array, m, JNI_FALSE);
+ }
+}
+
+/* void glLoadMatrixx ( const GLfixed *m ) */
+static void
+android_glLoadMatrixx___3II
+ (JNIEnv *_env, jobject _this, jintArray m_ref, jint offset) {
+ GLfixed *m_base = (GLfixed *) 0;
+ jint _remaining;
+ GLfixed *m = (GLfixed *) 0;
+
+ if (!m_ref) {
+ _env->ThrowNew(IAEClass, "m == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(m_ref) - offset;
+ m_base = (GLfixed *)
+ _env->GetPrimitiveArrayCritical(m_ref, (jboolean *)0);
+ m = m_base + offset;
+
+ glLoadMatrixx(
+ (GLfixed *)m
+ );
+
+exit:
+ if (m_base) {
+ _env->ReleasePrimitiveArrayCritical(m_ref, m_base,
+ JNI_ABORT);
+ }
+}
+
+/* void glLoadMatrixx ( const GLfixed *m ) */
+static void
+android_glLoadMatrixx__Ljava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jobject m_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfixed *m = (GLfixed *) 0;
+
+ m = (GLfixed *)getPointer(_env, m_buf, &_array, &_remaining);
+ glLoadMatrixx(
+ (GLfixed *)m
+ );
+ if (_array) {
+ releasePointer(_env, _array, m, JNI_FALSE);
+ }
+}
+
+/* void glLogicOp ( GLenum opcode ) */
+static void
+android_glLogicOp__I
+ (JNIEnv *_env, jobject _this, jint opcode) {
+ glLogicOp(
+ (GLenum)opcode
+ );
+}
+
+/* void glMaterialf ( GLenum face, GLenum pname, GLfloat param ) */
+static void
+android_glMaterialf__IIF
+ (JNIEnv *_env, jobject _this, jint face, jint pname, jfloat param) {
+ glMaterialf(
+ (GLenum)face,
+ (GLenum)pname,
+ (GLfloat)param
+ );
+}
+
+/* void glMaterialfv ( GLenum face, GLenum pname, const GLfloat *params ) */
+static void
+android_glMaterialfv__II_3FI
+ (JNIEnv *_env, jobject _this, jint face, jint pname, jfloatArray params_ref, jint offset) {
+ GLfloat *params_base = (GLfloat *) 0;
+ jint _remaining;
+ GLfloat *params = (GLfloat *) 0;
+
+ if (!params_ref) {
+ _env->ThrowNew(IAEClass, "params == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ int _needed;
+ switch (pname) {
+#if defined(GL_SHININESS)
+ case GL_SHININESS:
+#endif // defined(GL_SHININESS)
+ _needed = 1;
+ break;
+#if defined(GL_AMBIENT)
+ case GL_AMBIENT:
+#endif // defined(GL_AMBIENT)
+#if defined(GL_DIFFUSE)
+ case GL_DIFFUSE:
+#endif // defined(GL_DIFFUSE)
+#if defined(GL_SPECULAR)
+ case GL_SPECULAR:
+#endif // defined(GL_SPECULAR)
+#if defined(GL_EMISSION)
+ case GL_EMISSION:
+#endif // defined(GL_EMISSION)
+#if defined(GL_AMBIENT_AND_DIFFUSE)
+ case GL_AMBIENT_AND_DIFFUSE:
+#endif // defined(GL_AMBIENT_AND_DIFFUSE)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _env->ThrowNew(IAEClass, "length - offset < needed");
+ goto exit;
+ }
+ params_base = (GLfloat *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glMaterialfv(
+ (GLenum)face,
+ (GLenum)pname,
+ (GLfloat *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ JNI_ABORT);
+ }
+}
+
+/* void glMaterialfv ( GLenum face, GLenum pname, const GLfloat *params ) */
+static void
+android_glMaterialfv__IILjava_nio_FloatBuffer_2
+ (JNIEnv *_env, jobject _this, jint face, jint pname, jobject params_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfloat *params = (GLfloat *) 0;
+
+ params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining);
+ int _needed;
+ switch (pname) {
+#if defined(GL_SHININESS)
+ case GL_SHININESS:
+#endif // defined(GL_SHININESS)
+ _needed = 1;
+ break;
+#if defined(GL_AMBIENT)
+ case GL_AMBIENT:
+#endif // defined(GL_AMBIENT)
+#if defined(GL_DIFFUSE)
+ case GL_DIFFUSE:
+#endif // defined(GL_DIFFUSE)
+#if defined(GL_SPECULAR)
+ case GL_SPECULAR:
+#endif // defined(GL_SPECULAR)
+#if defined(GL_EMISSION)
+ case GL_EMISSION:
+#endif // defined(GL_EMISSION)
+#if defined(GL_AMBIENT_AND_DIFFUSE)
+ case GL_AMBIENT_AND_DIFFUSE:
+#endif // defined(GL_AMBIENT_AND_DIFFUSE)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _env->ThrowNew(IAEClass, "remaining() < needed");
+ goto exit;
+ }
+ glMaterialfv(
+ (GLenum)face,
+ (GLenum)pname,
+ (GLfloat *)params
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, params, JNI_FALSE);
+ }
+}
+
+/* void glMaterialx ( GLenum face, GLenum pname, GLfixed param ) */
+static void
+android_glMaterialx__III
+ (JNIEnv *_env, jobject _this, jint face, jint pname, jint param) {
+ glMaterialx(
+ (GLenum)face,
+ (GLenum)pname,
+ (GLfixed)param
+ );
+}
+
+/* void glMaterialxv ( GLenum face, GLenum pname, const GLfixed *params ) */
+static void
+android_glMaterialxv__II_3II
+ (JNIEnv *_env, jobject _this, jint face, jint pname, jintArray params_ref, jint offset) {
+ GLfixed *params_base = (GLfixed *) 0;
+ jint _remaining;
+ GLfixed *params = (GLfixed *) 0;
+
+ if (!params_ref) {
+ _env->ThrowNew(IAEClass, "params == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ int _needed;
+ switch (pname) {
+#if defined(GL_SHININESS)
+ case GL_SHININESS:
+#endif // defined(GL_SHININESS)
+ _needed = 1;
+ break;
+#if defined(GL_AMBIENT)
+ case GL_AMBIENT:
+#endif // defined(GL_AMBIENT)
+#if defined(GL_DIFFUSE)
+ case GL_DIFFUSE:
+#endif // defined(GL_DIFFUSE)
+#if defined(GL_SPECULAR)
+ case GL_SPECULAR:
+#endif // defined(GL_SPECULAR)
+#if defined(GL_EMISSION)
+ case GL_EMISSION:
+#endif // defined(GL_EMISSION)
+#if defined(GL_AMBIENT_AND_DIFFUSE)
+ case GL_AMBIENT_AND_DIFFUSE:
+#endif // defined(GL_AMBIENT_AND_DIFFUSE)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _env->ThrowNew(IAEClass, "length - offset < needed");
+ goto exit;
+ }
+ params_base = (GLfixed *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glMaterialxv(
+ (GLenum)face,
+ (GLenum)pname,
+ (GLfixed *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ JNI_ABORT);
+ }
+}
+
+/* void glMaterialxv ( GLenum face, GLenum pname, const GLfixed *params ) */
+static void
+android_glMaterialxv__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint face, jint pname, jobject params_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfixed *params = (GLfixed *) 0;
+
+ params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining);
+ int _needed;
+ switch (pname) {
+#if defined(GL_SHININESS)
+ case GL_SHININESS:
+#endif // defined(GL_SHININESS)
+ _needed = 1;
+ break;
+#if defined(GL_AMBIENT)
+ case GL_AMBIENT:
+#endif // defined(GL_AMBIENT)
+#if defined(GL_DIFFUSE)
+ case GL_DIFFUSE:
+#endif // defined(GL_DIFFUSE)
+#if defined(GL_SPECULAR)
+ case GL_SPECULAR:
+#endif // defined(GL_SPECULAR)
+#if defined(GL_EMISSION)
+ case GL_EMISSION:
+#endif // defined(GL_EMISSION)
+#if defined(GL_AMBIENT_AND_DIFFUSE)
+ case GL_AMBIENT_AND_DIFFUSE:
+#endif // defined(GL_AMBIENT_AND_DIFFUSE)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _env->ThrowNew(IAEClass, "remaining() < needed");
+ goto exit;
+ }
+ glMaterialxv(
+ (GLenum)face,
+ (GLenum)pname,
+ (GLfixed *)params
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, params, JNI_FALSE);
+ }
+}
+
+/* void glMatrixMode ( GLenum mode ) */
+static void
+android_glMatrixMode__I
+ (JNIEnv *_env, jobject _this, jint mode) {
+ glMatrixMode(
+ (GLenum)mode
+ );
+}
+
+/* void glMultMatrixf ( const GLfloat *m ) */
+static void
+android_glMultMatrixf___3FI
+ (JNIEnv *_env, jobject _this, jfloatArray m_ref, jint offset) {
+ GLfloat *m_base = (GLfloat *) 0;
+ jint _remaining;
+ GLfloat *m = (GLfloat *) 0;
+
+ if (!m_ref) {
+ _env->ThrowNew(IAEClass, "m == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(m_ref) - offset;
+ m_base = (GLfloat *)
+ _env->GetPrimitiveArrayCritical(m_ref, (jboolean *)0);
+ m = m_base + offset;
+
+ glMultMatrixf(
+ (GLfloat *)m
+ );
+
+exit:
+ if (m_base) {
+ _env->ReleasePrimitiveArrayCritical(m_ref, m_base,
+ JNI_ABORT);
+ }
+}
+
+/* void glMultMatrixf ( const GLfloat *m ) */
+static void
+android_glMultMatrixf__Ljava_nio_FloatBuffer_2
+ (JNIEnv *_env, jobject _this, jobject m_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfloat *m = (GLfloat *) 0;
+
+ m = (GLfloat *)getPointer(_env, m_buf, &_array, &_remaining);
+ glMultMatrixf(
+ (GLfloat *)m
+ );
+ if (_array) {
+ releasePointer(_env, _array, m, JNI_FALSE);
+ }
+}
+
+/* void glMultMatrixx ( const GLfixed *m ) */
+static void
+android_glMultMatrixx___3II
+ (JNIEnv *_env, jobject _this, jintArray m_ref, jint offset) {
+ GLfixed *m_base = (GLfixed *) 0;
+ jint _remaining;
+ GLfixed *m = (GLfixed *) 0;
+
+ if (!m_ref) {
+ _env->ThrowNew(IAEClass, "m == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(m_ref) - offset;
+ m_base = (GLfixed *)
+ _env->GetPrimitiveArrayCritical(m_ref, (jboolean *)0);
+ m = m_base + offset;
+
+ glMultMatrixx(
+ (GLfixed *)m
+ );
+
+exit:
+ if (m_base) {
+ _env->ReleasePrimitiveArrayCritical(m_ref, m_base,
+ JNI_ABORT);
+ }
+}
+
+/* void glMultMatrixx ( const GLfixed *m ) */
+static void
+android_glMultMatrixx__Ljava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jobject m_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfixed *m = (GLfixed *) 0;
+
+ m = (GLfixed *)getPointer(_env, m_buf, &_array, &_remaining);
+ glMultMatrixx(
+ (GLfixed *)m
+ );
+ if (_array) {
+ releasePointer(_env, _array, m, JNI_FALSE);
+ }
+}
+
+/* void glMultiTexCoord4f ( GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q ) */
+static void
+android_glMultiTexCoord4f__IFFFF
+ (JNIEnv *_env, jobject _this, jint target, jfloat s, jfloat t, jfloat r, jfloat q) {
+ glMultiTexCoord4f(
+ (GLenum)target,
+ (GLfloat)s,
+ (GLfloat)t,
+ (GLfloat)r,
+ (GLfloat)q
+ );
+}
+
+/* void glMultiTexCoord4x ( GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q ) */
+static void
+android_glMultiTexCoord4x__IIIII
+ (JNIEnv *_env, jobject _this, jint target, jint s, jint t, jint r, jint q) {
+ glMultiTexCoord4x(
+ (GLenum)target,
+ (GLfixed)s,
+ (GLfixed)t,
+ (GLfixed)r,
+ (GLfixed)q
+ );
+}
+
+/* void glNormal3f ( GLfloat nx, GLfloat ny, GLfloat nz ) */
+static void
+android_glNormal3f__FFF
+ (JNIEnv *_env, jobject _this, jfloat nx, jfloat ny, jfloat nz) {
+ glNormal3f(
+ (GLfloat)nx,
+ (GLfloat)ny,
+ (GLfloat)nz
+ );
+}
+
+/* void glNormal3x ( GLfixed nx, GLfixed ny, GLfixed nz ) */
+static void
+android_glNormal3x__III
+ (JNIEnv *_env, jobject _this, jint nx, jint ny, jint nz) {
+ glNormal3x(
+ (GLfixed)nx,
+ (GLfixed)ny,
+ (GLfixed)nz
+ );
+}
+
+/* void glNormalPointer ( GLenum type, GLsizei stride, const GLvoid *pointer ) */
+static void
+android_glNormalPointerBounds__IILjava_nio_Buffer_2I
+ (JNIEnv *_env, jobject _this, jint type, jint stride, jobject pointer_buf, jint remaining) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLvoid *pointer = (GLvoid *) 0;
+
+ pointer = (GLvoid *)getPointer(_env, pointer_buf, &_array, &_remaining);
+ glNormalPointerBounds(
+ (GLenum)type,
+ (GLsizei)stride,
+ (GLvoid *)pointer,
+ (GLsizei)remaining
+ );
+ if (_array) {
+ releasePointer(_env, _array, pointer, JNI_FALSE);
+ }
+}
+
+/* void glOrthof ( GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar ) */
+static void
+android_glOrthof__FFFFFF
+ (JNIEnv *_env, jobject _this, jfloat left, jfloat right, jfloat bottom, jfloat top, jfloat zNear, jfloat zFar) {
+ glOrthof(
+ (GLfloat)left,
+ (GLfloat)right,
+ (GLfloat)bottom,
+ (GLfloat)top,
+ (GLfloat)zNear,
+ (GLfloat)zFar
+ );
+}
+
+/* void glOrthox ( GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar ) */
+static void
+android_glOrthox__IIIIII
+ (JNIEnv *_env, jobject _this, jint left, jint right, jint bottom, jint top, jint zNear, jint zFar) {
+ glOrthox(
+ (GLfixed)left,
+ (GLfixed)right,
+ (GLfixed)bottom,
+ (GLfixed)top,
+ (GLfixed)zNear,
+ (GLfixed)zFar
+ );
+}
+
+/* void glPixelStorei ( GLenum pname, GLint param ) */
+static void
+android_glPixelStorei__II
+ (JNIEnv *_env, jobject _this, jint pname, jint param) {
+ glPixelStorei(
+ (GLenum)pname,
+ (GLint)param
+ );
+}
+
+/* void glPointSize ( GLfloat size ) */
+static void
+android_glPointSize__F
+ (JNIEnv *_env, jobject _this, jfloat size) {
+ glPointSize(
+ (GLfloat)size
+ );
+}
+
+/* void glPointSizex ( GLfixed size ) */
+static void
+android_glPointSizex__I
+ (JNIEnv *_env, jobject _this, jint size) {
+ glPointSizex(
+ (GLfixed)size
+ );
+}
+
+/* void glPolygonOffset ( GLfloat factor, GLfloat units ) */
+static void
+android_glPolygonOffset__FF
+ (JNIEnv *_env, jobject _this, jfloat factor, jfloat units) {
+ glPolygonOffset(
+ (GLfloat)factor,
+ (GLfloat)units
+ );
+}
+
+/* void glPolygonOffsetx ( GLfixed factor, GLfixed units ) */
+static void
+android_glPolygonOffsetx__II
+ (JNIEnv *_env, jobject _this, jint factor, jint units) {
+ glPolygonOffsetx(
+ (GLfixed)factor,
+ (GLfixed)units
+ );
+}
+
+/* void glPopMatrix ( void ) */
+static void
+android_glPopMatrix__
+ (JNIEnv *_env, jobject _this) {
+ glPopMatrix();
+}
+
+/* void glPushMatrix ( void ) */
+static void
+android_glPushMatrix__
+ (JNIEnv *_env, jobject _this) {
+ glPushMatrix();
+}
+
+/* void glReadPixels ( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels ) */
+static void
+android_glReadPixels__IIIIIILjava_nio_Buffer_2
+ (JNIEnv *_env, jobject _this, jint x, jint y, jint width, jint height, jint format, jint type, jobject pixels_buf) {
+ jint _exception = 0;
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLvoid *pixels = (GLvoid *) 0;
+
+ pixels = (GLvoid *)getPointer(_env, pixels_buf, &_array, &_remaining);
+ glReadPixels(
+ (GLint)x,
+ (GLint)y,
+ (GLsizei)width,
+ (GLsizei)height,
+ (GLenum)format,
+ (GLenum)type,
+ (GLvoid *)pixels
+ );
+ if (_array) {
+ releasePointer(_env, _array, pixels, _exception ? JNI_FALSE : JNI_TRUE);
+ }
+}
+
+/* void glRotatef ( GLfloat angle, GLfloat x, GLfloat y, GLfloat z ) */
+static void
+android_glRotatef__FFFF
+ (JNIEnv *_env, jobject _this, jfloat angle, jfloat x, jfloat y, jfloat z) {
+ glRotatef(
+ (GLfloat)angle,
+ (GLfloat)x,
+ (GLfloat)y,
+ (GLfloat)z
+ );
+}
+
+/* void glRotatex ( GLfixed angle, GLfixed x, GLfixed y, GLfixed z ) */
+static void
+android_glRotatex__IIII
+ (JNIEnv *_env, jobject _this, jint angle, jint x, jint y, jint z) {
+ glRotatex(
+ (GLfixed)angle,
+ (GLfixed)x,
+ (GLfixed)y,
+ (GLfixed)z
+ );
+}
+
+/* void glSampleCoverage ( GLclampf value, GLboolean invert ) */
+static void
+android_glSampleCoverage__FZ
+ (JNIEnv *_env, jobject _this, jfloat value, jboolean invert) {
+ glSampleCoverage(
+ (GLclampf)value,
+ (GLboolean)invert
+ );
+}
+
+/* void glSampleCoveragex ( GLclampx value, GLboolean invert ) */
+static void
+android_glSampleCoveragex__IZ
+ (JNIEnv *_env, jobject _this, jint value, jboolean invert) {
+ glSampleCoveragex(
+ (GLclampx)value,
+ (GLboolean)invert
+ );
+}
+
+/* void glScalef ( GLfloat x, GLfloat y, GLfloat z ) */
+static void
+android_glScalef__FFF
+ (JNIEnv *_env, jobject _this, jfloat x, jfloat y, jfloat z) {
+ glScalef(
+ (GLfloat)x,
+ (GLfloat)y,
+ (GLfloat)z
+ );
+}
+
+/* void glScalex ( GLfixed x, GLfixed y, GLfixed z ) */
+static void
+android_glScalex__III
+ (JNIEnv *_env, jobject _this, jint x, jint y, jint z) {
+ glScalex(
+ (GLfixed)x,
+ (GLfixed)y,
+ (GLfixed)z
+ );
+}
+
+/* void glScissor ( GLint x, GLint y, GLsizei width, GLsizei height ) */
+static void
+android_glScissor__IIII
+ (JNIEnv *_env, jobject _this, jint x, jint y, jint width, jint height) {
+ glScissor(
+ (GLint)x,
+ (GLint)y,
+ (GLsizei)width,
+ (GLsizei)height
+ );
+}
+
+/* void glShadeModel ( GLenum mode ) */
+static void
+android_glShadeModel__I
+ (JNIEnv *_env, jobject _this, jint mode) {
+ glShadeModel(
+ (GLenum)mode
+ );
+}
+
+/* void glStencilFunc ( GLenum func, GLint ref, GLuint mask ) */
+static void
+android_glStencilFunc__III
+ (JNIEnv *_env, jobject _this, jint func, jint ref, jint mask) {
+ glStencilFunc(
+ (GLenum)func,
+ (GLint)ref,
+ (GLuint)mask
+ );
+}
+
+/* void glStencilMask ( GLuint mask ) */
+static void
+android_glStencilMask__I
+ (JNIEnv *_env, jobject _this, jint mask) {
+ glStencilMask(
+ (GLuint)mask
+ );
+}
+
+/* void glStencilOp ( GLenum fail, GLenum zfail, GLenum zpass ) */
+static void
+android_glStencilOp__III
+ (JNIEnv *_env, jobject _this, jint fail, jint zfail, jint zpass) {
+ glStencilOp(
+ (GLenum)fail,
+ (GLenum)zfail,
+ (GLenum)zpass
+ );
+}
+
+/* void glTexCoordPointer ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ) */
+static void
+android_glTexCoordPointerBounds__IIILjava_nio_Buffer_2I
+ (JNIEnv *_env, jobject _this, jint size, jint type, jint stride, jobject pointer_buf, jint remaining) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLvoid *pointer = (GLvoid *) 0;
+
+ pointer = (GLvoid *)getPointer(_env, pointer_buf, &_array, &_remaining);
+ glTexCoordPointerBounds(
+ (GLint)size,
+ (GLenum)type,
+ (GLsizei)stride,
+ (GLvoid *)pointer,
+ (GLsizei)remaining
+ );
+ if (_array) {
+ releasePointer(_env, _array, pointer, JNI_FALSE);
+ }
+}
+
+/* void glTexEnvf ( GLenum target, GLenum pname, GLfloat param ) */
+static void
+android_glTexEnvf__IIF
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jfloat param) {
+ glTexEnvf(
+ (GLenum)target,
+ (GLenum)pname,
+ (GLfloat)param
+ );
+}
+
+/* void glTexEnvfv ( GLenum target, GLenum pname, const GLfloat *params ) */
+static void
+android_glTexEnvfv__II_3FI
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jfloatArray params_ref, jint offset) {
+ GLfloat *params_base = (GLfloat *) 0;
+ jint _remaining;
+ GLfloat *params = (GLfloat *) 0;
+
+ if (!params_ref) {
+ _env->ThrowNew(IAEClass, "params == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ int _needed;
+ switch (pname) {
+#if defined(GL_TEXTURE_ENV_MODE)
+ case GL_TEXTURE_ENV_MODE:
+#endif // defined(GL_TEXTURE_ENV_MODE)
+#if defined(GL_COMBINE_RGB)
+ case GL_COMBINE_RGB:
+#endif // defined(GL_COMBINE_RGB)
+#if defined(GL_COMBINE_ALPHA)
+ case GL_COMBINE_ALPHA:
+#endif // defined(GL_COMBINE_ALPHA)
+ _needed = 1;
+ break;
+#if defined(GL_TEXTURE_ENV_COLOR)
+ case GL_TEXTURE_ENV_COLOR:
+#endif // defined(GL_TEXTURE_ENV_COLOR)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _env->ThrowNew(IAEClass, "length - offset < needed");
+ goto exit;
+ }
+ params_base = (GLfloat *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glTexEnvfv(
+ (GLenum)target,
+ (GLenum)pname,
+ (GLfloat *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ JNI_ABORT);
+ }
+}
+
+/* void glTexEnvfv ( GLenum target, GLenum pname, const GLfloat *params ) */
+static void
+android_glTexEnvfv__IILjava_nio_FloatBuffer_2
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfloat *params = (GLfloat *) 0;
+
+ params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining);
+ int _needed;
+ switch (pname) {
+#if defined(GL_TEXTURE_ENV_MODE)
+ case GL_TEXTURE_ENV_MODE:
+#endif // defined(GL_TEXTURE_ENV_MODE)
+#if defined(GL_COMBINE_RGB)
+ case GL_COMBINE_RGB:
+#endif // defined(GL_COMBINE_RGB)
+#if defined(GL_COMBINE_ALPHA)
+ case GL_COMBINE_ALPHA:
+#endif // defined(GL_COMBINE_ALPHA)
+ _needed = 1;
+ break;
+#if defined(GL_TEXTURE_ENV_COLOR)
+ case GL_TEXTURE_ENV_COLOR:
+#endif // defined(GL_TEXTURE_ENV_COLOR)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _env->ThrowNew(IAEClass, "remaining() < needed");
+ goto exit;
+ }
+ glTexEnvfv(
+ (GLenum)target,
+ (GLenum)pname,
+ (GLfloat *)params
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, params, JNI_FALSE);
+ }
+}
+
+/* void glTexEnvx ( GLenum target, GLenum pname, GLfixed param ) */
+static void
+android_glTexEnvx__III
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jint param) {
+ glTexEnvx(
+ (GLenum)target,
+ (GLenum)pname,
+ (GLfixed)param
+ );
+}
+
+/* void glTexEnvxv ( GLenum target, GLenum pname, const GLfixed *params ) */
+static void
+android_glTexEnvxv__II_3II
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
+ GLfixed *params_base = (GLfixed *) 0;
+ jint _remaining;
+ GLfixed *params = (GLfixed *) 0;
+
+ if (!params_ref) {
+ _env->ThrowNew(IAEClass, "params == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ int _needed;
+ switch (pname) {
+#if defined(GL_TEXTURE_ENV_MODE)
+ case GL_TEXTURE_ENV_MODE:
+#endif // defined(GL_TEXTURE_ENV_MODE)
+#if defined(GL_COMBINE_RGB)
+ case GL_COMBINE_RGB:
+#endif // defined(GL_COMBINE_RGB)
+#if defined(GL_COMBINE_ALPHA)
+ case GL_COMBINE_ALPHA:
+#endif // defined(GL_COMBINE_ALPHA)
+ _needed = 1;
+ break;
+#if defined(GL_TEXTURE_ENV_COLOR)
+ case GL_TEXTURE_ENV_COLOR:
+#endif // defined(GL_TEXTURE_ENV_COLOR)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _env->ThrowNew(IAEClass, "length - offset < needed");
+ goto exit;
+ }
+ params_base = (GLfixed *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glTexEnvxv(
+ (GLenum)target,
+ (GLenum)pname,
+ (GLfixed *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ JNI_ABORT);
+ }
+}
+
+/* void glTexEnvxv ( GLenum target, GLenum pname, const GLfixed *params ) */
+static void
+android_glTexEnvxv__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfixed *params = (GLfixed *) 0;
+
+ params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining);
+ int _needed;
+ switch (pname) {
+#if defined(GL_TEXTURE_ENV_MODE)
+ case GL_TEXTURE_ENV_MODE:
+#endif // defined(GL_TEXTURE_ENV_MODE)
+#if defined(GL_COMBINE_RGB)
+ case GL_COMBINE_RGB:
+#endif // defined(GL_COMBINE_RGB)
+#if defined(GL_COMBINE_ALPHA)
+ case GL_COMBINE_ALPHA:
+#endif // defined(GL_COMBINE_ALPHA)
+ _needed = 1;
+ break;
+#if defined(GL_TEXTURE_ENV_COLOR)
+ case GL_TEXTURE_ENV_COLOR:
+#endif // defined(GL_TEXTURE_ENV_COLOR)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _env->ThrowNew(IAEClass, "remaining() < needed");
+ goto exit;
+ }
+ glTexEnvxv(
+ (GLenum)target,
+ (GLenum)pname,
+ (GLfixed *)params
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, params, JNI_FALSE);
+ }
+}
+
+/* void glTexImage2D ( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels ) */
+static void
+android_glTexImage2D__IIIIIIIILjava_nio_Buffer_2
+ (JNIEnv *_env, jobject _this, jint target, jint level, jint internalformat, jint width, jint height, jint border, jint format, jint type, jobject pixels_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLvoid *pixels = (GLvoid *) 0;
+
+ if (pixels_buf) {
+ pixels = (GLvoid *)getPointer(_env, pixels_buf, &_array, &_remaining);
+ }
+ glTexImage2D(
+ (GLenum)target,
+ (GLint)level,
+ (GLint)internalformat,
+ (GLsizei)width,
+ (GLsizei)height,
+ (GLint)border,
+ (GLenum)format,
+ (GLenum)type,
+ (GLvoid *)pixels
+ );
+ if (_array) {
+ releasePointer(_env, _array, pixels, JNI_FALSE);
+ }
+}
+
+/* void glTexParameterf ( GLenum target, GLenum pname, GLfloat param ) */
+static void
+android_glTexParameterf__IIF
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jfloat param) {
+ glTexParameterf(
+ (GLenum)target,
+ (GLenum)pname,
+ (GLfloat)param
+ );
+}
+
+/* void glTexParameterx ( GLenum target, GLenum pname, GLfixed param ) */
+static void
+android_glTexParameterx__III
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jint param) {
+ glTexParameterx(
+ (GLenum)target,
+ (GLenum)pname,
+ (GLfixed)param
+ );
+}
+
+/* void glTexSubImage2D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels ) */
+static void
+android_glTexSubImage2D__IIIIIIIILjava_nio_Buffer_2
+ (JNIEnv *_env, jobject _this, jint target, jint level, jint xoffset, jint yoffset, jint width, jint height, jint format, jint type, jobject pixels_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLvoid *pixels = (GLvoid *) 0;
+
+ if (pixels_buf) {
+ pixels = (GLvoid *)getPointer(_env, pixels_buf, &_array, &_remaining);
+ }
+ glTexSubImage2D(
+ (GLenum)target,
+ (GLint)level,
+ (GLint)xoffset,
+ (GLint)yoffset,
+ (GLsizei)width,
+ (GLsizei)height,
+ (GLenum)format,
+ (GLenum)type,
+ (GLvoid *)pixels
+ );
+ if (_array) {
+ releasePointer(_env, _array, pixels, JNI_FALSE);
+ }
+}
+
+/* void glTranslatef ( GLfloat x, GLfloat y, GLfloat z ) */
+static void
+android_glTranslatef__FFF
+ (JNIEnv *_env, jobject _this, jfloat x, jfloat y, jfloat z) {
+ glTranslatef(
+ (GLfloat)x,
+ (GLfloat)y,
+ (GLfloat)z
+ );
+}
+
+/* void glTranslatex ( GLfixed x, GLfixed y, GLfixed z ) */
+static void
+android_glTranslatex__III
+ (JNIEnv *_env, jobject _this, jint x, jint y, jint z) {
+ glTranslatex(
+ (GLfixed)x,
+ (GLfixed)y,
+ (GLfixed)z
+ );
+}
+
+/* void glVertexPointer ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ) */
+static void
+android_glVertexPointerBounds__IIILjava_nio_Buffer_2I
+ (JNIEnv *_env, jobject _this, jint size, jint type, jint stride, jobject pointer_buf, jint remaining) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLvoid *pointer = (GLvoid *) 0;
+
+ pointer = (GLvoid *)getPointer(_env, pointer_buf, &_array, &_remaining);
+ glVertexPointerBounds(
+ (GLint)size,
+ (GLenum)type,
+ (GLsizei)stride,
+ (GLvoid *)pointer,
+ (GLsizei)remaining
+ );
+ if (_array) {
+ releasePointer(_env, _array, pointer, JNI_FALSE);
+ }
+}
+
+/* void glViewport ( GLint x, GLint y, GLsizei width, GLsizei height ) */
+static void
+android_glViewport__IIII
+ (JNIEnv *_env, jobject _this, jint x, jint y, jint width, jint height) {
+ glViewport(
+ (GLint)x,
+ (GLint)y,
+ (GLsizei)width,
+ (GLsizei)height
+ );
+}
+
+static const char *classPathName = "android/opengl/GLES10";
+
+static JNINativeMethod methods[] = {
+{"_nativeClassInit", "()V", (void*)nativeClassInit },
+{"glActiveTexture", "(I)V", (void *) android_glActiveTexture__I },
+{"glAlphaFunc", "(IF)V", (void *) android_glAlphaFunc__IF },
+{"glAlphaFuncx", "(II)V", (void *) android_glAlphaFuncx__II },
+{"glBindTexture", "(II)V", (void *) android_glBindTexture__II },
+{"glBlendFunc", "(II)V", (void *) android_glBlendFunc__II },
+{"glClear", "(I)V", (void *) android_glClear__I },
+{"glClearColor", "(FFFF)V", (void *) android_glClearColor__FFFF },
+{"glClearColorx", "(IIII)V", (void *) android_glClearColorx__IIII },
+{"glClearDepthf", "(F)V", (void *) android_glClearDepthf__F },
+{"glClearDepthx", "(I)V", (void *) android_glClearDepthx__I },
+{"glClearStencil", "(I)V", (void *) android_glClearStencil__I },
+{"glClientActiveTexture", "(I)V", (void *) android_glClientActiveTexture__I },
+{"glColor4f", "(FFFF)V", (void *) android_glColor4f__FFFF },
+{"glColor4x", "(IIII)V", (void *) android_glColor4x__IIII },
+{"glColorMask", "(ZZZZ)V", (void *) android_glColorMask__ZZZZ },
+{"glColorPointerBounds", "(IIILjava/nio/Buffer;I)V", (void *) android_glColorPointerBounds__IIILjava_nio_Buffer_2I },
+{"glCompressedTexImage2D", "(IIIIIIILjava/nio/Buffer;)V", (void *) android_glCompressedTexImage2D__IIIIIIILjava_nio_Buffer_2 },
+{"glCompressedTexSubImage2D", "(IIIIIIIILjava/nio/Buffer;)V", (void *) android_glCompressedTexSubImage2D__IIIIIIIILjava_nio_Buffer_2 },
+{"glCopyTexImage2D", "(IIIIIIII)V", (void *) android_glCopyTexImage2D__IIIIIIII },
+{"glCopyTexSubImage2D", "(IIIIIIII)V", (void *) android_glCopyTexSubImage2D__IIIIIIII },
+{"glCullFace", "(I)V", (void *) android_glCullFace__I },
+{"glDeleteTextures", "(I[II)V", (void *) android_glDeleteTextures__I_3II },
+{"glDeleteTextures", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteTextures__ILjava_nio_IntBuffer_2 },
+{"glDepthFunc", "(I)V", (void *) android_glDepthFunc__I },
+{"glDepthMask", "(Z)V", (void *) android_glDepthMask__Z },
+{"glDepthRangef", "(FF)V", (void *) android_glDepthRangef__FF },
+{"glDepthRangex", "(II)V", (void *) android_glDepthRangex__II },
+{"glDisable", "(I)V", (void *) android_glDisable__I },
+{"glDisableClientState", "(I)V", (void *) android_glDisableClientState__I },
+{"glDrawArrays", "(III)V", (void *) android_glDrawArrays__III },
+{"glDrawElements", "(IIILjava/nio/Buffer;)V", (void *) android_glDrawElements__IIILjava_nio_Buffer_2 },
+{"glEnable", "(I)V", (void *) android_glEnable__I },
+{"glEnableClientState", "(I)V", (void *) android_glEnableClientState__I },
+{"glFinish", "()V", (void *) android_glFinish__ },
+{"glFlush", "()V", (void *) android_glFlush__ },
+{"glFogf", "(IF)V", (void *) android_glFogf__IF },
+{"glFogfv", "(I[FI)V", (void *) android_glFogfv__I_3FI },
+{"glFogfv", "(ILjava/nio/FloatBuffer;)V", (void *) android_glFogfv__ILjava_nio_FloatBuffer_2 },
+{"glFogx", "(II)V", (void *) android_glFogx__II },
+{"glFogxv", "(I[II)V", (void *) android_glFogxv__I_3II },
+{"glFogxv", "(ILjava/nio/IntBuffer;)V", (void *) android_glFogxv__ILjava_nio_IntBuffer_2 },
+{"glFrontFace", "(I)V", (void *) android_glFrontFace__I },
+{"glFrustumf", "(FFFFFF)V", (void *) android_glFrustumf__FFFFFF },
+{"glFrustumx", "(IIIIII)V", (void *) android_glFrustumx__IIIIII },
+{"glGenTextures", "(I[II)V", (void *) android_glGenTextures__I_3II },
+{"glGenTextures", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenTextures__ILjava_nio_IntBuffer_2 },
+{"glGetError", "()I", (void *) android_glGetError__ },
+{"glGetIntegerv", "(I[II)V", (void *) android_glGetIntegerv__I_3II },
+{"glGetIntegerv", "(ILjava/nio/IntBuffer;)V", (void *) android_glGetIntegerv__ILjava_nio_IntBuffer_2 },
+{"_glGetString", "(I)Ljava/lang/String;", (void *) android_glGetString },
+{"glHint", "(II)V", (void *) android_glHint__II },
+{"glLightModelf", "(IF)V", (void *) android_glLightModelf__IF },
+{"glLightModelfv", "(I[FI)V", (void *) android_glLightModelfv__I_3FI },
+{"glLightModelfv", "(ILjava/nio/FloatBuffer;)V", (void *) android_glLightModelfv__ILjava_nio_FloatBuffer_2 },
+{"glLightModelx", "(II)V", (void *) android_glLightModelx__II },
+{"glLightModelxv", "(I[II)V", (void *) android_glLightModelxv__I_3II },
+{"glLightModelxv", "(ILjava/nio/IntBuffer;)V", (void *) android_glLightModelxv__ILjava_nio_IntBuffer_2 },
+{"glLightf", "(IIF)V", (void *) android_glLightf__IIF },
+{"glLightfv", "(II[FI)V", (void *) android_glLightfv__II_3FI },
+{"glLightfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glLightfv__IILjava_nio_FloatBuffer_2 },
+{"glLightx", "(III)V", (void *) android_glLightx__III },
+{"glLightxv", "(II[II)V", (void *) android_glLightxv__II_3II },
+{"glLightxv", "(IILjava/nio/IntBuffer;)V", (void *) android_glLightxv__IILjava_nio_IntBuffer_2 },
+{"glLineWidth", "(F)V", (void *) android_glLineWidth__F },
+{"glLineWidthx", "(I)V", (void *) android_glLineWidthx__I },
+{"glLoadIdentity", "()V", (void *) android_glLoadIdentity__ },
+{"glLoadMatrixf", "([FI)V", (void *) android_glLoadMatrixf___3FI },
+{"glLoadMatrixf", "(Ljava/nio/FloatBuffer;)V", (void *) android_glLoadMatrixf__Ljava_nio_FloatBuffer_2 },
+{"glLoadMatrixx", "([II)V", (void *) android_glLoadMatrixx___3II },
+{"glLoadMatrixx", "(Ljava/nio/IntBuffer;)V", (void *) android_glLoadMatrixx__Ljava_nio_IntBuffer_2 },
+{"glLogicOp", "(I)V", (void *) android_glLogicOp__I },
+{"glMaterialf", "(IIF)V", (void *) android_glMaterialf__IIF },
+{"glMaterialfv", "(II[FI)V", (void *) android_glMaterialfv__II_3FI },
+{"glMaterialfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glMaterialfv__IILjava_nio_FloatBuffer_2 },
+{"glMaterialx", "(III)V", (void *) android_glMaterialx__III },
+{"glMaterialxv", "(II[II)V", (void *) android_glMaterialxv__II_3II },
+{"glMaterialxv", "(IILjava/nio/IntBuffer;)V", (void *) android_glMaterialxv__IILjava_nio_IntBuffer_2 },
+{"glMatrixMode", "(I)V", (void *) android_glMatrixMode__I },
+{"glMultMatrixf", "([FI)V", (void *) android_glMultMatrixf___3FI },
+{"glMultMatrixf", "(Ljava/nio/FloatBuffer;)V", (void *) android_glMultMatrixf__Ljava_nio_FloatBuffer_2 },
+{"glMultMatrixx", "([II)V", (void *) android_glMultMatrixx___3II },
+{"glMultMatrixx", "(Ljava/nio/IntBuffer;)V", (void *) android_glMultMatrixx__Ljava_nio_IntBuffer_2 },
+{"glMultiTexCoord4f", "(IFFFF)V", (void *) android_glMultiTexCoord4f__IFFFF },
+{"glMultiTexCoord4x", "(IIIII)V", (void *) android_glMultiTexCoord4x__IIIII },
+{"glNormal3f", "(FFF)V", (void *) android_glNormal3f__FFF },
+{"glNormal3x", "(III)V", (void *) android_glNormal3x__III },
+{"glNormalPointerBounds", "(IILjava/nio/Buffer;I)V", (void *) android_glNormalPointerBounds__IILjava_nio_Buffer_2I },
+{"glOrthof", "(FFFFFF)V", (void *) android_glOrthof__FFFFFF },
+{"glOrthox", "(IIIIII)V", (void *) android_glOrthox__IIIIII },
+{"glPixelStorei", "(II)V", (void *) android_glPixelStorei__II },
+{"glPointSize", "(F)V", (void *) android_glPointSize__F },
+{"glPointSizex", "(I)V", (void *) android_glPointSizex__I },
+{"glPolygonOffset", "(FF)V", (void *) android_glPolygonOffset__FF },
+{"glPolygonOffsetx", "(II)V", (void *) android_glPolygonOffsetx__II },
+{"glPopMatrix", "()V", (void *) android_glPopMatrix__ },
+{"glPushMatrix", "()V", (void *) android_glPushMatrix__ },
+{"glReadPixels", "(IIIIIILjava/nio/Buffer;)V", (void *) android_glReadPixels__IIIIIILjava_nio_Buffer_2 },
+{"glRotatef", "(FFFF)V", (void *) android_glRotatef__FFFF },
+{"glRotatex", "(IIII)V", (void *) android_glRotatex__IIII },
+{"glSampleCoverage", "(FZ)V", (void *) android_glSampleCoverage__FZ },
+{"glSampleCoveragex", "(IZ)V", (void *) android_glSampleCoveragex__IZ },
+{"glScalef", "(FFF)V", (void *) android_glScalef__FFF },
+{"glScalex", "(III)V", (void *) android_glScalex__III },
+{"glScissor", "(IIII)V", (void *) android_glScissor__IIII },
+{"glShadeModel", "(I)V", (void *) android_glShadeModel__I },
+{"glStencilFunc", "(III)V", (void *) android_glStencilFunc__III },
+{"glStencilMask", "(I)V", (void *) android_glStencilMask__I },
+{"glStencilOp", "(III)V", (void *) android_glStencilOp__III },
+{"glTexCoordPointerBounds", "(IIILjava/nio/Buffer;I)V", (void *) android_glTexCoordPointerBounds__IIILjava_nio_Buffer_2I },
+{"glTexEnvf", "(IIF)V", (void *) android_glTexEnvf__IIF },
+{"glTexEnvfv", "(II[FI)V", (void *) android_glTexEnvfv__II_3FI },
+{"glTexEnvfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glTexEnvfv__IILjava_nio_FloatBuffer_2 },
+{"glTexEnvx", "(III)V", (void *) android_glTexEnvx__III },
+{"glTexEnvxv", "(II[II)V", (void *) android_glTexEnvxv__II_3II },
+{"glTexEnvxv", "(IILjava/nio/IntBuffer;)V", (void *) android_glTexEnvxv__IILjava_nio_IntBuffer_2 },
+{"glTexImage2D", "(IIIIIIIILjava/nio/Buffer;)V", (void *) android_glTexImage2D__IIIIIIIILjava_nio_Buffer_2 },
+{"glTexParameterf", "(IIF)V", (void *) android_glTexParameterf__IIF },
+{"glTexParameterx", "(III)V", (void *) android_glTexParameterx__III },
+{"glTexSubImage2D", "(IIIIIIIILjava/nio/Buffer;)V", (void *) android_glTexSubImage2D__IIIIIIIILjava_nio_Buffer_2 },
+{"glTranslatef", "(FFF)V", (void *) android_glTranslatef__FFF },
+{"glTranslatex", "(III)V", (void *) android_glTranslatex__III },
+{"glVertexPointerBounds", "(IIILjava/nio/Buffer;I)V", (void *) android_glVertexPointerBounds__IIILjava_nio_Buffer_2I },
+{"glViewport", "(IIII)V", (void *) android_glViewport__IIII },
+};
+
+int register_android_opengl_jni_GLES10(JNIEnv *_env)
+{
+ int err;
+ err = android::AndroidRuntime::registerNativeMethods(_env, classPathName, methods, NELEM(methods));
+ return err;
+}
diff --git a/core/jni/android_opengl_GLES10Ext.cpp b/core/jni/android_opengl_GLES10Ext.cpp
new file mode 100644
index 0000000..6114d6a
--- /dev/null
+++ b/core/jni/android_opengl_GLES10Ext.cpp
@@ -0,0 +1,254 @@
+/*
+**
+** Copyright 2009, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+
+// This source file is automatically generated
+
+#include <android_runtime/AndroidRuntime.h>
+#include <utils/misc.h>
+
+#include <assert.h>
+#include <GLES/gl.h>
+
+#include <private/opengles/gl_context.h>
+
+#define _NUM_COMPRESSED_TEXTURE_FORMATS \
+ (::android::OGLES_NUM_COMPRESSED_TEXTURE_FORMATS)
+
+static int initialized = 0;
+
+static jclass nioAccessClass;
+static jclass bufferClass;
+static jclass OOMEClass;
+static jclass UOEClass;
+static jclass IAEClass;
+static jclass AIOOBEClass;
+static jmethodID getBasePointerID;
+static jmethodID getBaseArrayID;
+static jmethodID getBaseArrayOffsetID;
+static jfieldID positionID;
+static jfieldID limitID;
+static jfieldID elementSizeShiftID;
+
+/* Cache method IDs each time the class is loaded. */
+
+static void
+nativeClassInitBuffer(JNIEnv *_env)
+{
+ jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess");
+ nioAccessClass = (jclass) _env->NewGlobalRef(nioAccessClassLocal);
+
+ jclass bufferClassLocal = _env->FindClass("java/nio/Buffer");
+ bufferClass = (jclass) _env->NewGlobalRef(bufferClassLocal);
+
+ getBasePointerID = _env->GetStaticMethodID(nioAccessClass,
+ "getBasePointer", "(Ljava/nio/Buffer;)J");
+ getBaseArrayID = _env->GetStaticMethodID(nioAccessClass,
+ "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;");
+ getBaseArrayOffsetID = _env->GetStaticMethodID(nioAccessClass,
+ "getBaseArrayOffset", "(Ljava/nio/Buffer;)I");
+
+ positionID = _env->GetFieldID(bufferClass, "position", "I");
+ limitID = _env->GetFieldID(bufferClass, "limit", "I");
+ elementSizeShiftID =
+ _env->GetFieldID(bufferClass, "_elementSizeShift", "I");
+}
+
+
+static void
+nativeClassInit(JNIEnv *_env, jclass glImplClass)
+{
+ nativeClassInitBuffer(_env);
+
+ jclass IAEClassLocal =
+ _env->FindClass("java/lang/IllegalArgumentException");
+ jclass OOMEClassLocal =
+ _env->FindClass("java/lang/OutOfMemoryError");
+ jclass UOEClassLocal =
+ _env->FindClass("java/lang/UnsupportedOperationException");
+ jclass AIOOBEClassLocal =
+ _env->FindClass("java/lang/ArrayIndexOutOfBoundsException");
+
+ IAEClass = (jclass) _env->NewGlobalRef(IAEClassLocal);
+ OOMEClass = (jclass) _env->NewGlobalRef(OOMEClassLocal);
+ UOEClass = (jclass) _env->NewGlobalRef(UOEClassLocal);
+ AIOOBEClass = (jclass) _env->NewGlobalRef(AIOOBEClassLocal);
+}
+
+static void *
+getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining)
+{
+ jint position;
+ jint limit;
+ jint elementSizeShift;
+ jlong pointer;
+ jint offset;
+ void *data;
+
+ position = _env->GetIntField(buffer, positionID);
+ limit = _env->GetIntField(buffer, limitID);
+ elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID);
+ *remaining = (limit - position) << elementSizeShift;
+ pointer = _env->CallStaticLongMethod(nioAccessClass,
+ getBasePointerID, buffer);
+ if (pointer != 0L) {
+ *array = NULL;
+ return (void *) (jint) pointer;
+ }
+
+ *array = (jarray) _env->CallStaticObjectMethod(nioAccessClass,
+ getBaseArrayID, buffer);
+ offset = _env->CallStaticIntMethod(nioAccessClass,
+ getBaseArrayOffsetID, buffer);
+ data = _env->GetPrimitiveArrayCritical(*array, (jboolean *) 0);
+
+ return (void *) ((char *) data + offset);
+}
+
+
+static void
+releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit)
+{
+ _env->ReleasePrimitiveArrayCritical(array, data,
+ commit ? 0 : JNI_ABORT);
+}
+
+// --------------------------------------------------------------------------
+
+/* GLbitfield glQueryMatrixxOES ( GLfixed *mantissa, GLint *exponent ) */
+static jint
+android_glQueryMatrixxOES___3II_3II
+ (JNIEnv *_env, jobject _this, jintArray mantissa_ref, jint mantissaOffset, jintArray exponent_ref, jint exponentOffset) {
+ jint _exception = 0;
+ GLbitfield _returnValue = -1;
+ GLfixed *mantissa_base = (GLfixed *) 0;
+ jint _mantissaRemaining;
+ GLfixed *mantissa = (GLfixed *) 0;
+ GLint *exponent_base = (GLint *) 0;
+ jint _exponentRemaining;
+ GLint *exponent = (GLint *) 0;
+
+ if (!mantissa_ref) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "mantissa == null");
+ goto exit;
+ }
+ if (mantissaOffset < 0) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "mantissaOffset < 0");
+ goto exit;
+ }
+ _mantissaRemaining = _env->GetArrayLength(mantissa_ref) - mantissaOffset;
+ if (_mantissaRemaining < 16) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "length - mantissaOffset < 16");
+ goto exit;
+ }
+ mantissa_base = (GLfixed *)
+ _env->GetPrimitiveArrayCritical(mantissa_ref, (jboolean *)0);
+ mantissa = mantissa_base + mantissaOffset;
+
+ if (!exponent_ref) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "exponent == null");
+ goto exit;
+ }
+ if (exponentOffset < 0) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "exponentOffset < 0");
+ goto exit;
+ }
+ _exponentRemaining = _env->GetArrayLength(exponent_ref) - exponentOffset;
+ if (_exponentRemaining < 16) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "length - exponentOffset < 16");
+ goto exit;
+ }
+ exponent_base = (GLint *)
+ _env->GetPrimitiveArrayCritical(exponent_ref, (jboolean *)0);
+ exponent = exponent_base + exponentOffset;
+
+ _returnValue = glQueryMatrixxOES(
+ (GLfixed *)mantissa,
+ (GLint *)exponent
+ );
+
+exit:
+ if (exponent_base) {
+ _env->ReleasePrimitiveArrayCritical(exponent_ref, exponent_base,
+ _exception ? JNI_ABORT: 0);
+ }
+ if (mantissa_base) {
+ _env->ReleasePrimitiveArrayCritical(mantissa_ref, mantissa_base,
+ _exception ? JNI_ABORT: 0);
+ }
+ return _returnValue;
+}
+
+/* GLbitfield glQueryMatrixxOES ( GLfixed *mantissa, GLint *exponent ) */
+static jint
+android_glQueryMatrixxOES__Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jobject mantissa_buf, jobject exponent_buf) {
+ jint _exception = 0;
+ jarray _mantissaArray = (jarray) 0;
+ jarray _exponentArray = (jarray) 0;
+ GLbitfield _returnValue = -1;
+ jint _mantissaRemaining;
+ GLfixed *mantissa = (GLfixed *) 0;
+ jint _exponentRemaining;
+ GLint *exponent = (GLint *) 0;
+
+ mantissa = (GLfixed *)getPointer(_env, mantissa_buf, &_mantissaArray, &_mantissaRemaining);
+ if (_mantissaRemaining < 16) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "remaining() < 16");
+ goto exit;
+ }
+ exponent = (GLint *)getPointer(_env, exponent_buf, &_exponentArray, &_exponentRemaining);
+ if (_exponentRemaining < 16) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "remaining() < 16");
+ goto exit;
+ }
+ _returnValue = glQueryMatrixxOES(
+ (GLfixed *)mantissa,
+ (GLint *)exponent
+ );
+
+exit:
+ if (_mantissaArray) {
+ releasePointer(_env, _mantissaArray, exponent, _exception ? JNI_FALSE : JNI_TRUE);
+ }
+ if (_exponentArray) {
+ releasePointer(_env, _exponentArray, mantissa, _exception ? JNI_FALSE : JNI_TRUE);
+ }
+ return _returnValue;
+}
+
+static const char *classPathName = "android/opengl/GLES10Ext";
+
+static JNINativeMethod methods[] = {
+{"_nativeClassInit", "()V", (void*)nativeClassInit },
+{"glQueryMatrixxOES", "([II[II)I", (void *) android_glQueryMatrixxOES___3II_3II },
+{"glQueryMatrixxOES", "(Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;)I", (void *) android_glQueryMatrixxOES__Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2 },
+};
+
+int register_android_opengl_jni_GLES10Ext(JNIEnv *_env)
+{
+ int err;
+ err = android::AndroidRuntime::registerNativeMethods(_env, classPathName, methods, NELEM(methods));
+ return err;
+}
diff --git a/core/jni/android_opengl_GLES11.cpp b/core/jni/android_opengl_GLES11.cpp
new file mode 100644
index 0000000..a7e59a8
--- /dev/null
+++ b/core/jni/android_opengl_GLES11.cpp
@@ -0,0 +1,2469 @@
+/*
+**
+** Copyright 2009, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+
+// This source file is automatically generated
+
+#include <android_runtime/AndroidRuntime.h>
+#include <utils/misc.h>
+
+#include <assert.h>
+#include <GLES/gl.h>
+
+#include <private/opengles/gl_context.h>
+
+#define _NUM_COMPRESSED_TEXTURE_FORMATS \
+ (::android::OGLES_NUM_COMPRESSED_TEXTURE_FORMATS)
+
+static int initialized = 0;
+
+static jclass nioAccessClass;
+static jclass bufferClass;
+static jclass OOMEClass;
+static jclass UOEClass;
+static jclass IAEClass;
+static jclass AIOOBEClass;
+static jmethodID getBasePointerID;
+static jmethodID getBaseArrayID;
+static jmethodID getBaseArrayOffsetID;
+static jfieldID positionID;
+static jfieldID limitID;
+static jfieldID elementSizeShiftID;
+
+/* Cache method IDs each time the class is loaded. */
+
+static void
+nativeClassInitBuffer(JNIEnv *_env)
+{
+ jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess");
+ nioAccessClass = (jclass) _env->NewGlobalRef(nioAccessClassLocal);
+
+ jclass bufferClassLocal = _env->FindClass("java/nio/Buffer");
+ bufferClass = (jclass) _env->NewGlobalRef(bufferClassLocal);
+
+ getBasePointerID = _env->GetStaticMethodID(nioAccessClass,
+ "getBasePointer", "(Ljava/nio/Buffer;)J");
+ getBaseArrayID = _env->GetStaticMethodID(nioAccessClass,
+ "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;");
+ getBaseArrayOffsetID = _env->GetStaticMethodID(nioAccessClass,
+ "getBaseArrayOffset", "(Ljava/nio/Buffer;)I");
+
+ positionID = _env->GetFieldID(bufferClass, "position", "I");
+ limitID = _env->GetFieldID(bufferClass, "limit", "I");
+ elementSizeShiftID =
+ _env->GetFieldID(bufferClass, "_elementSizeShift", "I");
+}
+
+
+static void
+nativeClassInit(JNIEnv *_env, jclass glImplClass)
+{
+ nativeClassInitBuffer(_env);
+
+ jclass IAEClassLocal =
+ _env->FindClass("java/lang/IllegalArgumentException");
+ jclass OOMEClassLocal =
+ _env->FindClass("java/lang/OutOfMemoryError");
+ jclass UOEClassLocal =
+ _env->FindClass("java/lang/UnsupportedOperationException");
+ jclass AIOOBEClassLocal =
+ _env->FindClass("java/lang/ArrayIndexOutOfBoundsException");
+
+ IAEClass = (jclass) _env->NewGlobalRef(IAEClassLocal);
+ OOMEClass = (jclass) _env->NewGlobalRef(OOMEClassLocal);
+ UOEClass = (jclass) _env->NewGlobalRef(UOEClassLocal);
+ AIOOBEClass = (jclass) _env->NewGlobalRef(AIOOBEClassLocal);
+}
+
+static void *
+getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining)
+{
+ jint position;
+ jint limit;
+ jint elementSizeShift;
+ jlong pointer;
+ jint offset;
+ void *data;
+
+ position = _env->GetIntField(buffer, positionID);
+ limit = _env->GetIntField(buffer, limitID);
+ elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID);
+ *remaining = (limit - position) << elementSizeShift;
+ pointer = _env->CallStaticLongMethod(nioAccessClass,
+ getBasePointerID, buffer);
+ if (pointer != 0L) {
+ *array = NULL;
+ return (void *) (jint) pointer;
+ }
+
+ *array = (jarray) _env->CallStaticObjectMethod(nioAccessClass,
+ getBaseArrayID, buffer);
+ offset = _env->CallStaticIntMethod(nioAccessClass,
+ getBaseArrayOffsetID, buffer);
+ data = _env->GetPrimitiveArrayCritical(*array, (jboolean *) 0);
+
+ return (void *) ((char *) data + offset);
+}
+
+
+static void
+releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit)
+{
+ _env->ReleasePrimitiveArrayCritical(array, data,
+ commit ? 0 : JNI_ABORT);
+}
+
+// --------------------------------------------------------------------------
+
+/* void glBindBuffer ( GLenum target, GLuint buffer ) */
+static void
+android_glBindBuffer__II
+ (JNIEnv *_env, jobject _this, jint target, jint buffer) {
+ glBindBuffer(
+ (GLenum)target,
+ (GLuint)buffer
+ );
+}
+
+/* void glBufferData ( GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage ) */
+static void
+android_glBufferData__IILjava_nio_Buffer_2I
+ (JNIEnv *_env, jobject _this, jint target, jint size, jobject data_buf, jint usage) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLvoid *data = (GLvoid *) 0;
+
+ if (data_buf) {
+ data = (GLvoid *)getPointer(_env, data_buf, &_array, &_remaining);
+ }
+ glBufferData(
+ (GLenum)target,
+ (GLsizeiptr)size,
+ (GLvoid *)data,
+ (GLenum)usage
+ );
+ if (_array) {
+ releasePointer(_env, _array, data, JNI_FALSE);
+ }
+}
+
+/* void glBufferSubData ( GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data ) */
+static void
+android_glBufferSubData__IIILjava_nio_Buffer_2
+ (JNIEnv *_env, jobject _this, jint target, jint offset, jint size, jobject data_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLvoid *data = (GLvoid *) 0;
+
+ data = (GLvoid *)getPointer(_env, data_buf, &_array, &_remaining);
+ glBufferSubData(
+ (GLenum)target,
+ (GLintptr)offset,
+ (GLsizeiptr)size,
+ (GLvoid *)data
+ );
+ if (_array) {
+ releasePointer(_env, _array, data, JNI_FALSE);
+ }
+}
+
+/* void glClipPlanef ( GLenum plane, const GLfloat *equation ) */
+static void
+android_glClipPlanef__I_3FI
+ (JNIEnv *_env, jobject _this, jint plane, jfloatArray equation_ref, jint offset) {
+ GLfloat *equation_base = (GLfloat *) 0;
+ jint _remaining;
+ GLfloat *equation = (GLfloat *) 0;
+
+ if (!equation_ref) {
+ _env->ThrowNew(IAEClass, "equation == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(equation_ref) - offset;
+ equation_base = (GLfloat *)
+ _env->GetPrimitiveArrayCritical(equation_ref, (jboolean *)0);
+ equation = equation_base + offset;
+
+ glClipPlanef(
+ (GLenum)plane,
+ (GLfloat *)equation
+ );
+
+exit:
+ if (equation_base) {
+ _env->ReleasePrimitiveArrayCritical(equation_ref, equation_base,
+ JNI_ABORT);
+ }
+}
+
+/* void glClipPlanef ( GLenum plane, const GLfloat *equation ) */
+static void
+android_glClipPlanef__ILjava_nio_FloatBuffer_2
+ (JNIEnv *_env, jobject _this, jint plane, jobject equation_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfloat *equation = (GLfloat *) 0;
+
+ equation = (GLfloat *)getPointer(_env, equation_buf, &_array, &_remaining);
+ glClipPlanef(
+ (GLenum)plane,
+ (GLfloat *)equation
+ );
+ if (_array) {
+ releasePointer(_env, _array, equation, JNI_FALSE);
+ }
+}
+
+/* void glClipPlanex ( GLenum plane, const GLfixed *equation ) */
+static void
+android_glClipPlanex__I_3II
+ (JNIEnv *_env, jobject _this, jint plane, jintArray equation_ref, jint offset) {
+ GLfixed *equation_base = (GLfixed *) 0;
+ jint _remaining;
+ GLfixed *equation = (GLfixed *) 0;
+
+ if (!equation_ref) {
+ _env->ThrowNew(IAEClass, "equation == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(equation_ref) - offset;
+ equation_base = (GLfixed *)
+ _env->GetPrimitiveArrayCritical(equation_ref, (jboolean *)0);
+ equation = equation_base + offset;
+
+ glClipPlanex(
+ (GLenum)plane,
+ (GLfixed *)equation
+ );
+
+exit:
+ if (equation_base) {
+ _env->ReleasePrimitiveArrayCritical(equation_ref, equation_base,
+ JNI_ABORT);
+ }
+}
+
+/* void glClipPlanex ( GLenum plane, const GLfixed *equation ) */
+static void
+android_glClipPlanex__ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint plane, jobject equation_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfixed *equation = (GLfixed *) 0;
+
+ equation = (GLfixed *)getPointer(_env, equation_buf, &_array, &_remaining);
+ glClipPlanex(
+ (GLenum)plane,
+ (GLfixed *)equation
+ );
+ if (_array) {
+ releasePointer(_env, _array, equation, JNI_FALSE);
+ }
+}
+
+/* void glColor4ub ( GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha ) */
+static void
+android_glColor4ub__BBBB
+ (JNIEnv *_env, jobject _this, jbyte red, jbyte green, jbyte blue, jbyte alpha) {
+ glColor4ub(
+ (GLubyte)red,
+ (GLubyte)green,
+ (GLubyte)blue,
+ (GLubyte)alpha
+ );
+}
+
+/* void glColorPointer ( GLint size, GLenum type, GLsizei stride, GLint offset ) */
+static void
+android_glColorPointer__IIII
+ (JNIEnv *_env, jobject _this, jint size, jint type, jint stride, jint offset) {
+ glColorPointer(
+ (GLint)size,
+ (GLenum)type,
+ (GLsizei)stride,
+ (const GLvoid *)offset
+ );
+}
+
+/* void glDeleteBuffers ( GLsizei n, const GLuint *buffers ) */
+static void
+android_glDeleteBuffers__I_3II
+ (JNIEnv *_env, jobject _this, jint n, jintArray buffers_ref, jint offset) {
+ GLuint *buffers_base = (GLuint *) 0;
+ jint _remaining;
+ GLuint *buffers = (GLuint *) 0;
+
+ if (!buffers_ref) {
+ _env->ThrowNew(IAEClass, "buffers == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(buffers_ref) - offset;
+ if (_remaining < n) {
+ _env->ThrowNew(IAEClass, "length - offset < n");
+ goto exit;
+ }
+ buffers_base = (GLuint *)
+ _env->GetPrimitiveArrayCritical(buffers_ref, (jboolean *)0);
+ buffers = buffers_base + offset;
+
+ glDeleteBuffers(
+ (GLsizei)n,
+ (GLuint *)buffers
+ );
+
+exit:
+ if (buffers_base) {
+ _env->ReleasePrimitiveArrayCritical(buffers_ref, buffers_base,
+ JNI_ABORT);
+ }
+}
+
+/* void glDeleteBuffers ( GLsizei n, const GLuint *buffers ) */
+static void
+android_glDeleteBuffers__ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint n, jobject buffers_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLuint *buffers = (GLuint *) 0;
+
+ buffers = (GLuint *)getPointer(_env, buffers_buf, &_array, &_remaining);
+ if (_remaining < n) {
+ _env->ThrowNew(IAEClass, "remaining() < n");
+ goto exit;
+ }
+ glDeleteBuffers(
+ (GLsizei)n,
+ (GLuint *)buffers
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, buffers, JNI_FALSE);
+ }
+}
+
+/* void glDrawElements ( GLenum mode, GLsizei count, GLenum type, GLint offset ) */
+static void
+android_glDrawElements__IIII
+ (JNIEnv *_env, jobject _this, jint mode, jint count, jint type, jint offset) {
+ glDrawElements(
+ (GLenum)mode,
+ (GLsizei)count,
+ (GLenum)type,
+ (const GLvoid *)offset
+ );
+}
+
+/* void glGenBuffers ( GLsizei n, GLuint *buffers ) */
+static void
+android_glGenBuffers__I_3II
+ (JNIEnv *_env, jobject _this, jint n, jintArray buffers_ref, jint offset) {
+ jint _exception = 0;
+ GLuint *buffers_base = (GLuint *) 0;
+ jint _remaining;
+ GLuint *buffers = (GLuint *) 0;
+
+ if (!buffers_ref) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "buffers == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(buffers_ref) - offset;
+ if (_remaining < n) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "length - offset < n");
+ goto exit;
+ }
+ buffers_base = (GLuint *)
+ _env->GetPrimitiveArrayCritical(buffers_ref, (jboolean *)0);
+ buffers = buffers_base + offset;
+
+ glGenBuffers(
+ (GLsizei)n,
+ (GLuint *)buffers
+ );
+
+exit:
+ if (buffers_base) {
+ _env->ReleasePrimitiveArrayCritical(buffers_ref, buffers_base,
+ _exception ? JNI_ABORT: 0);
+ }
+}
+
+/* void glGenBuffers ( GLsizei n, GLuint *buffers ) */
+static void
+android_glGenBuffers__ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint n, jobject buffers_buf) {
+ jint _exception = 0;
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLuint *buffers = (GLuint *) 0;
+
+ buffers = (GLuint *)getPointer(_env, buffers_buf, &_array, &_remaining);
+ if (_remaining < n) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "remaining() < n");
+ goto exit;
+ }
+ glGenBuffers(
+ (GLsizei)n,
+ (GLuint *)buffers
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, buffers, _exception ? JNI_FALSE : JNI_TRUE);
+ }
+}
+
+/* void glGetBooleanv ( GLenum pname, GLboolean *params ) */
+static void
+android_glGetBooleanv__I_3ZI
+ (JNIEnv *_env, jobject _this, jint pname, jbooleanArray params_ref, jint offset) {
+ jint _exception = 0;
+ GLboolean *params_base = (GLboolean *) 0;
+ jint _remaining;
+ GLboolean *params = (GLboolean *) 0;
+
+ if (!params_ref) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "params == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ params_base = (GLboolean *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glGetBooleanv(
+ (GLenum)pname,
+ (GLboolean *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _exception ? JNI_ABORT: 0);
+ }
+}
+
+/* void glGetBooleanv ( GLenum pname, GLboolean *params ) */
+static void
+android_glGetBooleanv__ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
+ jint _exception = 0;
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLboolean *params = (GLboolean *) 0;
+
+ params = (GLboolean *)getPointer(_env, params_buf, &_array, &_remaining);
+ glGetBooleanv(
+ (GLenum)pname,
+ (GLboolean *)params
+ );
+ if (_array) {
+ releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ }
+}
+
+/* void glGetBufferParameteriv ( GLenum target, GLenum pname, GLint *params ) */
+static void
+android_glGetBufferParameteriv__II_3II
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
+ _env->ThrowNew(UOEClass,
+ "glGetBufferParameteriv");
+}
+
+/* void glGetBufferParameteriv ( GLenum target, GLenum pname, GLint *params ) */
+static void
+android_glGetBufferParameteriv__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
+ _env->ThrowNew(UOEClass,
+ "glGetBufferParameteriv");
+}
+
+/* void glGetClipPlanef ( GLenum pname, GLfloat *eqn ) */
+static void
+android_glGetClipPlanef__I_3FI
+ (JNIEnv *_env, jobject _this, jint pname, jfloatArray eqn_ref, jint offset) {
+ jint _exception = 0;
+ GLfloat *eqn_base = (GLfloat *) 0;
+ jint _remaining;
+ GLfloat *eqn = (GLfloat *) 0;
+
+ if (!eqn_ref) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "eqn == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(eqn_ref) - offset;
+ eqn_base = (GLfloat *)
+ _env->GetPrimitiveArrayCritical(eqn_ref, (jboolean *)0);
+ eqn = eqn_base + offset;
+
+ glGetClipPlanef(
+ (GLenum)pname,
+ (GLfloat *)eqn
+ );
+
+exit:
+ if (eqn_base) {
+ _env->ReleasePrimitiveArrayCritical(eqn_ref, eqn_base,
+ _exception ? JNI_ABORT: 0);
+ }
+}
+
+/* void glGetClipPlanef ( GLenum pname, GLfloat *eqn ) */
+static void
+android_glGetClipPlanef__ILjava_nio_FloatBuffer_2
+ (JNIEnv *_env, jobject _this, jint pname, jobject eqn_buf) {
+ jint _exception = 0;
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfloat *eqn = (GLfloat *) 0;
+
+ eqn = (GLfloat *)getPointer(_env, eqn_buf, &_array, &_remaining);
+ glGetClipPlanef(
+ (GLenum)pname,
+ (GLfloat *)eqn
+ );
+ if (_array) {
+ releasePointer(_env, _array, eqn, _exception ? JNI_FALSE : JNI_TRUE);
+ }
+}
+
+/* void glGetClipPlanex ( GLenum pname, GLfixed *eqn ) */
+static void
+android_glGetClipPlanex__I_3II
+ (JNIEnv *_env, jobject _this, jint pname, jintArray eqn_ref, jint offset) {
+ jint _exception = 0;
+ GLfixed *eqn_base = (GLfixed *) 0;
+ jint _remaining;
+ GLfixed *eqn = (GLfixed *) 0;
+
+ if (!eqn_ref) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "eqn == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(eqn_ref) - offset;
+ eqn_base = (GLfixed *)
+ _env->GetPrimitiveArrayCritical(eqn_ref, (jboolean *)0);
+ eqn = eqn_base + offset;
+
+ glGetClipPlanex(
+ (GLenum)pname,
+ (GLfixed *)eqn
+ );
+
+exit:
+ if (eqn_base) {
+ _env->ReleasePrimitiveArrayCritical(eqn_ref, eqn_base,
+ _exception ? JNI_ABORT: 0);
+ }
+}
+
+/* void glGetClipPlanex ( GLenum pname, GLfixed *eqn ) */
+static void
+android_glGetClipPlanex__ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint pname, jobject eqn_buf) {
+ jint _exception = 0;
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfixed *eqn = (GLfixed *) 0;
+
+ eqn = (GLfixed *)getPointer(_env, eqn_buf, &_array, &_remaining);
+ glGetClipPlanex(
+ (GLenum)pname,
+ (GLfixed *)eqn
+ );
+ if (_array) {
+ releasePointer(_env, _array, eqn, _exception ? JNI_FALSE : JNI_TRUE);
+ }
+}
+
+/* void glGetFixedv ( GLenum pname, GLfixed *params ) */
+static void
+android_glGetFixedv__I_3II
+ (JNIEnv *_env, jobject _this, jint pname, jintArray params_ref, jint offset) {
+ jint _exception = 0;
+ GLfixed *params_base = (GLfixed *) 0;
+ jint _remaining;
+ GLfixed *params = (GLfixed *) 0;
+
+ if (!params_ref) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "params == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ params_base = (GLfixed *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glGetFixedv(
+ (GLenum)pname,
+ (GLfixed *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _exception ? JNI_ABORT: 0);
+ }
+}
+
+/* void glGetFixedv ( GLenum pname, GLfixed *params ) */
+static void
+android_glGetFixedv__ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
+ jint _exception = 0;
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfixed *params = (GLfixed *) 0;
+
+ params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining);
+ glGetFixedv(
+ (GLenum)pname,
+ (GLfixed *)params
+ );
+ if (_array) {
+ releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ }
+}
+
+/* void glGetFloatv ( GLenum pname, GLfloat *params ) */
+static void
+android_glGetFloatv__I_3FI
+ (JNIEnv *_env, jobject _this, jint pname, jfloatArray params_ref, jint offset) {
+ jint _exception = 0;
+ GLfloat *params_base = (GLfloat *) 0;
+ jint _remaining;
+ GLfloat *params = (GLfloat *) 0;
+
+ if (!params_ref) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "params == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ params_base = (GLfloat *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glGetFloatv(
+ (GLenum)pname,
+ (GLfloat *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _exception ? JNI_ABORT: 0);
+ }
+}
+
+/* void glGetFloatv ( GLenum pname, GLfloat *params ) */
+static void
+android_glGetFloatv__ILjava_nio_FloatBuffer_2
+ (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
+ jint _exception = 0;
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfloat *params = (GLfloat *) 0;
+
+ params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining);
+ glGetFloatv(
+ (GLenum)pname,
+ (GLfloat *)params
+ );
+ if (_array) {
+ releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ }
+}
+
+/* void glGetLightfv ( GLenum light, GLenum pname, GLfloat *params ) */
+static void
+android_glGetLightfv__II_3FI
+ (JNIEnv *_env, jobject _this, jint light, jint pname, jfloatArray params_ref, jint offset) {
+ jint _exception = 0;
+ GLfloat *params_base = (GLfloat *) 0;
+ jint _remaining;
+ GLfloat *params = (GLfloat *) 0;
+
+ if (!params_ref) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "params == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ int _needed;
+ switch (pname) {
+#if defined(GL_SPOT_EXPONENT)
+ case GL_SPOT_EXPONENT:
+#endif // defined(GL_SPOT_EXPONENT)
+#if defined(GL_SPOT_CUTOFF)
+ case GL_SPOT_CUTOFF:
+#endif // defined(GL_SPOT_CUTOFF)
+#if defined(GL_CONSTANT_ATTENUATION)
+ case GL_CONSTANT_ATTENUATION:
+#endif // defined(GL_CONSTANT_ATTENUATION)
+#if defined(GL_LINEAR_ATTENUATION)
+ case GL_LINEAR_ATTENUATION:
+#endif // defined(GL_LINEAR_ATTENUATION)
+#if defined(GL_QUADRATIC_ATTENUATION)
+ case GL_QUADRATIC_ATTENUATION:
+#endif // defined(GL_QUADRATIC_ATTENUATION)
+ _needed = 1;
+ break;
+#if defined(GL_SPOT_DIRECTION)
+ case GL_SPOT_DIRECTION:
+#endif // defined(GL_SPOT_DIRECTION)
+ _needed = 3;
+ break;
+#if defined(GL_AMBIENT)
+ case GL_AMBIENT:
+#endif // defined(GL_AMBIENT)
+#if defined(GL_DIFFUSE)
+ case GL_DIFFUSE:
+#endif // defined(GL_DIFFUSE)
+#if defined(GL_SPECULAR)
+ case GL_SPECULAR:
+#endif // defined(GL_SPECULAR)
+#if defined(GL_EMISSION)
+ case GL_EMISSION:
+#endif // defined(GL_EMISSION)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "length - offset < needed");
+ goto exit;
+ }
+ params_base = (GLfloat *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glGetLightfv(
+ (GLenum)light,
+ (GLenum)pname,
+ (GLfloat *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _exception ? JNI_ABORT: 0);
+ }
+}
+
+/* void glGetLightfv ( GLenum light, GLenum pname, GLfloat *params ) */
+static void
+android_glGetLightfv__IILjava_nio_FloatBuffer_2
+ (JNIEnv *_env, jobject _this, jint light, jint pname, jobject params_buf) {
+ jint _exception = 0;
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfloat *params = (GLfloat *) 0;
+
+ params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining);
+ int _needed;
+ switch (pname) {
+#if defined(GL_SPOT_EXPONENT)
+ case GL_SPOT_EXPONENT:
+#endif // defined(GL_SPOT_EXPONENT)
+#if defined(GL_SPOT_CUTOFF)
+ case GL_SPOT_CUTOFF:
+#endif // defined(GL_SPOT_CUTOFF)
+#if defined(GL_CONSTANT_ATTENUATION)
+ case GL_CONSTANT_ATTENUATION:
+#endif // defined(GL_CONSTANT_ATTENUATION)
+#if defined(GL_LINEAR_ATTENUATION)
+ case GL_LINEAR_ATTENUATION:
+#endif // defined(GL_LINEAR_ATTENUATION)
+#if defined(GL_QUADRATIC_ATTENUATION)
+ case GL_QUADRATIC_ATTENUATION:
+#endif // defined(GL_QUADRATIC_ATTENUATION)
+ _needed = 1;
+ break;
+#if defined(GL_SPOT_DIRECTION)
+ case GL_SPOT_DIRECTION:
+#endif // defined(GL_SPOT_DIRECTION)
+ _needed = 3;
+ break;
+#if defined(GL_AMBIENT)
+ case GL_AMBIENT:
+#endif // defined(GL_AMBIENT)
+#if defined(GL_DIFFUSE)
+ case GL_DIFFUSE:
+#endif // defined(GL_DIFFUSE)
+#if defined(GL_SPECULAR)
+ case GL_SPECULAR:
+#endif // defined(GL_SPECULAR)
+#if defined(GL_EMISSION)
+ case GL_EMISSION:
+#endif // defined(GL_EMISSION)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "remaining() < needed");
+ goto exit;
+ }
+ glGetLightfv(
+ (GLenum)light,
+ (GLenum)pname,
+ (GLfloat *)params
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ }
+}
+
+/* void glGetLightxv ( GLenum light, GLenum pname, GLfixed *params ) */
+static void
+android_glGetLightxv__II_3II
+ (JNIEnv *_env, jobject _this, jint light, jint pname, jintArray params_ref, jint offset) {
+ jint _exception = 0;
+ GLfixed *params_base = (GLfixed *) 0;
+ jint _remaining;
+ GLfixed *params = (GLfixed *) 0;
+
+ if (!params_ref) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "params == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ int _needed;
+ switch (pname) {
+#if defined(GL_SPOT_EXPONENT)
+ case GL_SPOT_EXPONENT:
+#endif // defined(GL_SPOT_EXPONENT)
+#if defined(GL_SPOT_CUTOFF)
+ case GL_SPOT_CUTOFF:
+#endif // defined(GL_SPOT_CUTOFF)
+#if defined(GL_CONSTANT_ATTENUATION)
+ case GL_CONSTANT_ATTENUATION:
+#endif // defined(GL_CONSTANT_ATTENUATION)
+#if defined(GL_LINEAR_ATTENUATION)
+ case GL_LINEAR_ATTENUATION:
+#endif // defined(GL_LINEAR_ATTENUATION)
+#if defined(GL_QUADRATIC_ATTENUATION)
+ case GL_QUADRATIC_ATTENUATION:
+#endif // defined(GL_QUADRATIC_ATTENUATION)
+ _needed = 1;
+ break;
+#if defined(GL_SPOT_DIRECTION)
+ case GL_SPOT_DIRECTION:
+#endif // defined(GL_SPOT_DIRECTION)
+ _needed = 3;
+ break;
+#if defined(GL_AMBIENT)
+ case GL_AMBIENT:
+#endif // defined(GL_AMBIENT)
+#if defined(GL_DIFFUSE)
+ case GL_DIFFUSE:
+#endif // defined(GL_DIFFUSE)
+#if defined(GL_SPECULAR)
+ case GL_SPECULAR:
+#endif // defined(GL_SPECULAR)
+#if defined(GL_EMISSION)
+ case GL_EMISSION:
+#endif // defined(GL_EMISSION)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "length - offset < needed");
+ goto exit;
+ }
+ params_base = (GLfixed *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glGetLightxv(
+ (GLenum)light,
+ (GLenum)pname,
+ (GLfixed *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _exception ? JNI_ABORT: 0);
+ }
+}
+
+/* void glGetLightxv ( GLenum light, GLenum pname, GLfixed *params ) */
+static void
+android_glGetLightxv__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint light, jint pname, jobject params_buf) {
+ jint _exception = 0;
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfixed *params = (GLfixed *) 0;
+
+ params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining);
+ int _needed;
+ switch (pname) {
+#if defined(GL_SPOT_EXPONENT)
+ case GL_SPOT_EXPONENT:
+#endif // defined(GL_SPOT_EXPONENT)
+#if defined(GL_SPOT_CUTOFF)
+ case GL_SPOT_CUTOFF:
+#endif // defined(GL_SPOT_CUTOFF)
+#if defined(GL_CONSTANT_ATTENUATION)
+ case GL_CONSTANT_ATTENUATION:
+#endif // defined(GL_CONSTANT_ATTENUATION)
+#if defined(GL_LINEAR_ATTENUATION)
+ case GL_LINEAR_ATTENUATION:
+#endif // defined(GL_LINEAR_ATTENUATION)
+#if defined(GL_QUADRATIC_ATTENUATION)
+ case GL_QUADRATIC_ATTENUATION:
+#endif // defined(GL_QUADRATIC_ATTENUATION)
+ _needed = 1;
+ break;
+#if defined(GL_SPOT_DIRECTION)
+ case GL_SPOT_DIRECTION:
+#endif // defined(GL_SPOT_DIRECTION)
+ _needed = 3;
+ break;
+#if defined(GL_AMBIENT)
+ case GL_AMBIENT:
+#endif // defined(GL_AMBIENT)
+#if defined(GL_DIFFUSE)
+ case GL_DIFFUSE:
+#endif // defined(GL_DIFFUSE)
+#if defined(GL_SPECULAR)
+ case GL_SPECULAR:
+#endif // defined(GL_SPECULAR)
+#if defined(GL_EMISSION)
+ case GL_EMISSION:
+#endif // defined(GL_EMISSION)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "remaining() < needed");
+ goto exit;
+ }
+ glGetLightxv(
+ (GLenum)light,
+ (GLenum)pname,
+ (GLfixed *)params
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ }
+}
+
+/* void glGetMaterialfv ( GLenum face, GLenum pname, GLfloat *params ) */
+static void
+android_glGetMaterialfv__II_3FI
+ (JNIEnv *_env, jobject _this, jint face, jint pname, jfloatArray params_ref, jint offset) {
+ jint _exception = 0;
+ GLfloat *params_base = (GLfloat *) 0;
+ jint _remaining;
+ GLfloat *params = (GLfloat *) 0;
+
+ if (!params_ref) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "params == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ int _needed;
+ switch (pname) {
+#if defined(GL_SHININESS)
+ case GL_SHININESS:
+#endif // defined(GL_SHININESS)
+ _needed = 1;
+ break;
+#if defined(GL_AMBIENT)
+ case GL_AMBIENT:
+#endif // defined(GL_AMBIENT)
+#if defined(GL_DIFFUSE)
+ case GL_DIFFUSE:
+#endif // defined(GL_DIFFUSE)
+#if defined(GL_SPECULAR)
+ case GL_SPECULAR:
+#endif // defined(GL_SPECULAR)
+#if defined(GL_EMISSION)
+ case GL_EMISSION:
+#endif // defined(GL_EMISSION)
+#if defined(GL_AMBIENT_AND_DIFFUSE)
+ case GL_AMBIENT_AND_DIFFUSE:
+#endif // defined(GL_AMBIENT_AND_DIFFUSE)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "length - offset < needed");
+ goto exit;
+ }
+ params_base = (GLfloat *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glGetMaterialfv(
+ (GLenum)face,
+ (GLenum)pname,
+ (GLfloat *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _exception ? JNI_ABORT: 0);
+ }
+}
+
+/* void glGetMaterialfv ( GLenum face, GLenum pname, GLfloat *params ) */
+static void
+android_glGetMaterialfv__IILjava_nio_FloatBuffer_2
+ (JNIEnv *_env, jobject _this, jint face, jint pname, jobject params_buf) {
+ jint _exception = 0;
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfloat *params = (GLfloat *) 0;
+
+ params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining);
+ int _needed;
+ switch (pname) {
+#if defined(GL_SHININESS)
+ case GL_SHININESS:
+#endif // defined(GL_SHININESS)
+ _needed = 1;
+ break;
+#if defined(GL_AMBIENT)
+ case GL_AMBIENT:
+#endif // defined(GL_AMBIENT)
+#if defined(GL_DIFFUSE)
+ case GL_DIFFUSE:
+#endif // defined(GL_DIFFUSE)
+#if defined(GL_SPECULAR)
+ case GL_SPECULAR:
+#endif // defined(GL_SPECULAR)
+#if defined(GL_EMISSION)
+ case GL_EMISSION:
+#endif // defined(GL_EMISSION)
+#if defined(GL_AMBIENT_AND_DIFFUSE)
+ case GL_AMBIENT_AND_DIFFUSE:
+#endif // defined(GL_AMBIENT_AND_DIFFUSE)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "remaining() < needed");
+ goto exit;
+ }
+ glGetMaterialfv(
+ (GLenum)face,
+ (GLenum)pname,
+ (GLfloat *)params
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ }
+}
+
+/* void glGetMaterialxv ( GLenum face, GLenum pname, GLfixed *params ) */
+static void
+android_glGetMaterialxv__II_3II
+ (JNIEnv *_env, jobject _this, jint face, jint pname, jintArray params_ref, jint offset) {
+ jint _exception = 0;
+ GLfixed *params_base = (GLfixed *) 0;
+ jint _remaining;
+ GLfixed *params = (GLfixed *) 0;
+
+ if (!params_ref) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "params == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ int _needed;
+ switch (pname) {
+#if defined(GL_SHININESS)
+ case GL_SHININESS:
+#endif // defined(GL_SHININESS)
+ _needed = 1;
+ break;
+#if defined(GL_AMBIENT)
+ case GL_AMBIENT:
+#endif // defined(GL_AMBIENT)
+#if defined(GL_DIFFUSE)
+ case GL_DIFFUSE:
+#endif // defined(GL_DIFFUSE)
+#if defined(GL_SPECULAR)
+ case GL_SPECULAR:
+#endif // defined(GL_SPECULAR)
+#if defined(GL_EMISSION)
+ case GL_EMISSION:
+#endif // defined(GL_EMISSION)
+#if defined(GL_AMBIENT_AND_DIFFUSE)
+ case GL_AMBIENT_AND_DIFFUSE:
+#endif // defined(GL_AMBIENT_AND_DIFFUSE)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "length - offset < needed");
+ goto exit;
+ }
+ params_base = (GLfixed *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glGetMaterialxv(
+ (GLenum)face,
+ (GLenum)pname,
+ (GLfixed *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _exception ? JNI_ABORT: 0);
+ }
+}
+
+/* void glGetMaterialxv ( GLenum face, GLenum pname, GLfixed *params ) */
+static void
+android_glGetMaterialxv__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint face, jint pname, jobject params_buf) {
+ jint _exception = 0;
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfixed *params = (GLfixed *) 0;
+
+ params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining);
+ int _needed;
+ switch (pname) {
+#if defined(GL_SHININESS)
+ case GL_SHININESS:
+#endif // defined(GL_SHININESS)
+ _needed = 1;
+ break;
+#if defined(GL_AMBIENT)
+ case GL_AMBIENT:
+#endif // defined(GL_AMBIENT)
+#if defined(GL_DIFFUSE)
+ case GL_DIFFUSE:
+#endif // defined(GL_DIFFUSE)
+#if defined(GL_SPECULAR)
+ case GL_SPECULAR:
+#endif // defined(GL_SPECULAR)
+#if defined(GL_EMISSION)
+ case GL_EMISSION:
+#endif // defined(GL_EMISSION)
+#if defined(GL_AMBIENT_AND_DIFFUSE)
+ case GL_AMBIENT_AND_DIFFUSE:
+#endif // defined(GL_AMBIENT_AND_DIFFUSE)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "remaining() < needed");
+ goto exit;
+ }
+ glGetMaterialxv(
+ (GLenum)face,
+ (GLenum)pname,
+ (GLfixed *)params
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ }
+}
+
+/* void glGetTexEnvfv ( GLenum env, GLenum pname, GLfloat *params ) */
+static void
+android_glGetTexEnvfv__II_3FI
+ (JNIEnv *_env, jobject _this, jint env, jint pname, jfloatArray params_ref, jint offset) {
+ jint _exception = 0;
+ GLfloat *params_base = (GLfloat *) 0;
+ jint _remaining;
+ GLfloat *params = (GLfloat *) 0;
+
+ if (!params_ref) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "params == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ int _needed;
+ switch (pname) {
+#if defined(GL_TEXTURE_ENV_MODE)
+ case GL_TEXTURE_ENV_MODE:
+#endif // defined(GL_TEXTURE_ENV_MODE)
+#if defined(GL_COMBINE_RGB)
+ case GL_COMBINE_RGB:
+#endif // defined(GL_COMBINE_RGB)
+#if defined(GL_COMBINE_ALPHA)
+ case GL_COMBINE_ALPHA:
+#endif // defined(GL_COMBINE_ALPHA)
+ _needed = 1;
+ break;
+#if defined(GL_TEXTURE_ENV_COLOR)
+ case GL_TEXTURE_ENV_COLOR:
+#endif // defined(GL_TEXTURE_ENV_COLOR)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "length - offset < needed");
+ goto exit;
+ }
+ params_base = (GLfloat *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glGetTexEnvfv(
+ (GLenum)env,
+ (GLenum)pname,
+ (GLfloat *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _exception ? JNI_ABORT: 0);
+ }
+}
+
+/* void glGetTexEnvfv ( GLenum env, GLenum pname, GLfloat *params ) */
+static void
+android_glGetTexEnvfv__IILjava_nio_FloatBuffer_2
+ (JNIEnv *_env, jobject _this, jint env, jint pname, jobject params_buf) {
+ jint _exception = 0;
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfloat *params = (GLfloat *) 0;
+
+ params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining);
+ int _needed;
+ switch (pname) {
+#if defined(GL_TEXTURE_ENV_MODE)
+ case GL_TEXTURE_ENV_MODE:
+#endif // defined(GL_TEXTURE_ENV_MODE)
+#if defined(GL_COMBINE_RGB)
+ case GL_COMBINE_RGB:
+#endif // defined(GL_COMBINE_RGB)
+#if defined(GL_COMBINE_ALPHA)
+ case GL_COMBINE_ALPHA:
+#endif // defined(GL_COMBINE_ALPHA)
+ _needed = 1;
+ break;
+#if defined(GL_TEXTURE_ENV_COLOR)
+ case GL_TEXTURE_ENV_COLOR:
+#endif // defined(GL_TEXTURE_ENV_COLOR)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "remaining() < needed");
+ goto exit;
+ }
+ glGetTexEnvfv(
+ (GLenum)env,
+ (GLenum)pname,
+ (GLfloat *)params
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ }
+}
+
+/* void glGetTexEnviv ( GLenum env, GLenum pname, GLint *params ) */
+static void
+android_glGetTexEnviv__II_3II
+ (JNIEnv *_env, jobject _this, jint env, jint pname, jintArray params_ref, jint offset) {
+ jint _exception = 0;
+ GLint *params_base = (GLint *) 0;
+ jint _remaining;
+ GLint *params = (GLint *) 0;
+
+ if (!params_ref) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "params == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ int _needed;
+ switch (pname) {
+#if defined(GL_TEXTURE_ENV_MODE)
+ case GL_TEXTURE_ENV_MODE:
+#endif // defined(GL_TEXTURE_ENV_MODE)
+#if defined(GL_COMBINE_RGB)
+ case GL_COMBINE_RGB:
+#endif // defined(GL_COMBINE_RGB)
+#if defined(GL_COMBINE_ALPHA)
+ case GL_COMBINE_ALPHA:
+#endif // defined(GL_COMBINE_ALPHA)
+ _needed = 1;
+ break;
+#if defined(GL_TEXTURE_ENV_COLOR)
+ case GL_TEXTURE_ENV_COLOR:
+#endif // defined(GL_TEXTURE_ENV_COLOR)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "length - offset < needed");
+ goto exit;
+ }
+ params_base = (GLint *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glGetTexEnviv(
+ (GLenum)env,
+ (GLenum)pname,
+ (GLint *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _exception ? JNI_ABORT: 0);
+ }
+}
+
+/* void glGetTexEnviv ( GLenum env, GLenum pname, GLint *params ) */
+static void
+android_glGetTexEnviv__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint env, jint pname, jobject params_buf) {
+ jint _exception = 0;
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLint *params = (GLint *) 0;
+
+ params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining);
+ int _needed;
+ switch (pname) {
+#if defined(GL_TEXTURE_ENV_MODE)
+ case GL_TEXTURE_ENV_MODE:
+#endif // defined(GL_TEXTURE_ENV_MODE)
+#if defined(GL_COMBINE_RGB)
+ case GL_COMBINE_RGB:
+#endif // defined(GL_COMBINE_RGB)
+#if defined(GL_COMBINE_ALPHA)
+ case GL_COMBINE_ALPHA:
+#endif // defined(GL_COMBINE_ALPHA)
+ _needed = 1;
+ break;
+#if defined(GL_TEXTURE_ENV_COLOR)
+ case GL_TEXTURE_ENV_COLOR:
+#endif // defined(GL_TEXTURE_ENV_COLOR)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "remaining() < needed");
+ goto exit;
+ }
+ glGetTexEnviv(
+ (GLenum)env,
+ (GLenum)pname,
+ (GLint *)params
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ }
+}
+
+/* void glGetTexEnvxv ( GLenum env, GLenum pname, GLfixed *params ) */
+static void
+android_glGetTexEnvxv__II_3II
+ (JNIEnv *_env, jobject _this, jint env, jint pname, jintArray params_ref, jint offset) {
+ jint _exception = 0;
+ GLfixed *params_base = (GLfixed *) 0;
+ jint _remaining;
+ GLfixed *params = (GLfixed *) 0;
+
+ if (!params_ref) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "params == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ int _needed;
+ switch (pname) {
+#if defined(GL_TEXTURE_ENV_MODE)
+ case GL_TEXTURE_ENV_MODE:
+#endif // defined(GL_TEXTURE_ENV_MODE)
+#if defined(GL_COMBINE_RGB)
+ case GL_COMBINE_RGB:
+#endif // defined(GL_COMBINE_RGB)
+#if defined(GL_COMBINE_ALPHA)
+ case GL_COMBINE_ALPHA:
+#endif // defined(GL_COMBINE_ALPHA)
+ _needed = 1;
+ break;
+#if defined(GL_TEXTURE_ENV_COLOR)
+ case GL_TEXTURE_ENV_COLOR:
+#endif // defined(GL_TEXTURE_ENV_COLOR)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "length - offset < needed");
+ goto exit;
+ }
+ params_base = (GLfixed *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glGetTexEnvxv(
+ (GLenum)env,
+ (GLenum)pname,
+ (GLfixed *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _exception ? JNI_ABORT: 0);
+ }
+}
+
+/* void glGetTexEnvxv ( GLenum env, GLenum pname, GLfixed *params ) */
+static void
+android_glGetTexEnvxv__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint env, jint pname, jobject params_buf) {
+ jint _exception = 0;
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfixed *params = (GLfixed *) 0;
+
+ params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining);
+ int _needed;
+ switch (pname) {
+#if defined(GL_TEXTURE_ENV_MODE)
+ case GL_TEXTURE_ENV_MODE:
+#endif // defined(GL_TEXTURE_ENV_MODE)
+#if defined(GL_COMBINE_RGB)
+ case GL_COMBINE_RGB:
+#endif // defined(GL_COMBINE_RGB)
+#if defined(GL_COMBINE_ALPHA)
+ case GL_COMBINE_ALPHA:
+#endif // defined(GL_COMBINE_ALPHA)
+ _needed = 1;
+ break;
+#if defined(GL_TEXTURE_ENV_COLOR)
+ case GL_TEXTURE_ENV_COLOR:
+#endif // defined(GL_TEXTURE_ENV_COLOR)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "remaining() < needed");
+ goto exit;
+ }
+ glGetTexEnvxv(
+ (GLenum)env,
+ (GLenum)pname,
+ (GLfixed *)params
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ }
+}
+
+/* void glGetTexParameterfv ( GLenum target, GLenum pname, GLfloat *params ) */
+static void
+android_glGetTexParameterfv__II_3FI
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jfloatArray params_ref, jint offset) {
+ jint _exception = 0;
+ GLfloat *params_base = (GLfloat *) 0;
+ jint _remaining;
+ GLfloat *params = (GLfloat *) 0;
+
+ if (!params_ref) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "params == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ if (_remaining < 1) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "length - offset < 1");
+ goto exit;
+ }
+ params_base = (GLfloat *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glGetTexParameterfv(
+ (GLenum)target,
+ (GLenum)pname,
+ (GLfloat *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _exception ? JNI_ABORT: 0);
+ }
+}
+
+/* void glGetTexParameterfv ( GLenum target, GLenum pname, GLfloat *params ) */
+static void
+android_glGetTexParameterfv__IILjava_nio_FloatBuffer_2
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
+ jint _exception = 0;
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfloat *params = (GLfloat *) 0;
+
+ params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining);
+ if (_remaining < 1) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "remaining() < 1");
+ goto exit;
+ }
+ glGetTexParameterfv(
+ (GLenum)target,
+ (GLenum)pname,
+ (GLfloat *)params
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ }
+}
+
+/* void glGetTexParameteriv ( GLenum target, GLenum pname, GLint *params ) */
+static void
+android_glGetTexParameteriv__II_3II
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
+ jint _exception = 0;
+ GLint *params_base = (GLint *) 0;
+ jint _remaining;
+ GLint *params = (GLint *) 0;
+
+ if (!params_ref) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "params == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ if (_remaining < 1) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "length - offset < 1");
+ goto exit;
+ }
+ params_base = (GLint *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glGetTexParameteriv(
+ (GLenum)target,
+ (GLenum)pname,
+ (GLint *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _exception ? JNI_ABORT: 0);
+ }
+}
+
+/* void glGetTexParameteriv ( GLenum target, GLenum pname, GLint *params ) */
+static void
+android_glGetTexParameteriv__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
+ jint _exception = 0;
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLint *params = (GLint *) 0;
+
+ params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining);
+ if (_remaining < 1) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "remaining() < 1");
+ goto exit;
+ }
+ glGetTexParameteriv(
+ (GLenum)target,
+ (GLenum)pname,
+ (GLint *)params
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ }
+}
+
+/* void glGetTexParameterxv ( GLenum target, GLenum pname, GLfixed *params ) */
+static void
+android_glGetTexParameterxv__II_3II
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
+ jint _exception = 0;
+ GLfixed *params_base = (GLfixed *) 0;
+ jint _remaining;
+ GLfixed *params = (GLfixed *) 0;
+
+ if (!params_ref) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "params == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ if (_remaining < 1) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "length - offset < 1");
+ goto exit;
+ }
+ params_base = (GLfixed *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glGetTexParameterxv(
+ (GLenum)target,
+ (GLenum)pname,
+ (GLfixed *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _exception ? JNI_ABORT: 0);
+ }
+}
+
+/* void glGetTexParameterxv ( GLenum target, GLenum pname, GLfixed *params ) */
+static void
+android_glGetTexParameterxv__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
+ jint _exception = 0;
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfixed *params = (GLfixed *) 0;
+
+ params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining);
+ if (_remaining < 1) {
+ _exception = 1;
+ _env->ThrowNew(IAEClass, "remaining() < 1");
+ goto exit;
+ }
+ glGetTexParameterxv(
+ (GLenum)target,
+ (GLenum)pname,
+ (GLfixed *)params
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ }
+}
+
+/* GLboolean glIsBuffer ( GLuint buffer ) */
+static jboolean
+android_glIsBuffer__I
+ (JNIEnv *_env, jobject _this, jint buffer) {
+ GLboolean _returnValue;
+ _returnValue = glIsBuffer(
+ (GLuint)buffer
+ );
+ return _returnValue;
+}
+
+/* GLboolean glIsEnabled ( GLenum cap ) */
+static jboolean
+android_glIsEnabled__I
+ (JNIEnv *_env, jobject _this, jint cap) {
+ GLboolean _returnValue;
+ _returnValue = glIsEnabled(
+ (GLenum)cap
+ );
+ return _returnValue;
+}
+
+/* GLboolean glIsTexture ( GLuint texture ) */
+static jboolean
+android_glIsTexture__I
+ (JNIEnv *_env, jobject _this, jint texture) {
+ GLboolean _returnValue;
+ _returnValue = glIsTexture(
+ (GLuint)texture
+ );
+ return _returnValue;
+}
+
+/* void glNormalPointer ( GLenum type, GLsizei stride, GLint offset ) */
+static void
+android_glNormalPointer__III
+ (JNIEnv *_env, jobject _this, jint type, jint stride, jint offset) {
+ glNormalPointer(
+ (GLenum)type,
+ (GLsizei)stride,
+ (const GLvoid *)offset
+ );
+}
+
+/* void glPointParameterf ( GLenum pname, GLfloat param ) */
+static void
+android_glPointParameterf__IF
+ (JNIEnv *_env, jobject _this, jint pname, jfloat param) {
+ glPointParameterf(
+ (GLenum)pname,
+ (GLfloat)param
+ );
+}
+
+/* void glPointParameterfv ( GLenum pname, const GLfloat *params ) */
+static void
+android_glPointParameterfv__I_3FI
+ (JNIEnv *_env, jobject _this, jint pname, jfloatArray params_ref, jint offset) {
+ GLfloat *params_base = (GLfloat *) 0;
+ jint _remaining;
+ GLfloat *params = (GLfloat *) 0;
+
+ if (!params_ref) {
+ _env->ThrowNew(IAEClass, "params == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ if (_remaining < 1) {
+ _env->ThrowNew(IAEClass, "length - offset < 1");
+ goto exit;
+ }
+ params_base = (GLfloat *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glPointParameterfv(
+ (GLenum)pname,
+ (GLfloat *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ JNI_ABORT);
+ }
+}
+
+/* void glPointParameterfv ( GLenum pname, const GLfloat *params ) */
+static void
+android_glPointParameterfv__ILjava_nio_FloatBuffer_2
+ (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfloat *params = (GLfloat *) 0;
+
+ params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining);
+ if (_remaining < 1) {
+ _env->ThrowNew(IAEClass, "remaining() < 1");
+ goto exit;
+ }
+ glPointParameterfv(
+ (GLenum)pname,
+ (GLfloat *)params
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, params, JNI_FALSE);
+ }
+}
+
+/* void glPointParameterx ( GLenum pname, GLfixed param ) */
+static void
+android_glPointParameterx__II
+ (JNIEnv *_env, jobject _this, jint pname, jint param) {
+ glPointParameterx(
+ (GLenum)pname,
+ (GLfixed)param
+ );
+}
+
+/* void glPointParameterxv ( GLenum pname, const GLfixed *params ) */
+static void
+android_glPointParameterxv__I_3II
+ (JNIEnv *_env, jobject _this, jint pname, jintArray params_ref, jint offset) {
+ GLfixed *params_base = (GLfixed *) 0;
+ jint _remaining;
+ GLfixed *params = (GLfixed *) 0;
+
+ if (!params_ref) {
+ _env->ThrowNew(IAEClass, "params == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ if (_remaining < 1) {
+ _env->ThrowNew(IAEClass, "length - offset < 1");
+ goto exit;
+ }
+ params_base = (GLfixed *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glPointParameterxv(
+ (GLenum)pname,
+ (GLfixed *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ JNI_ABORT);
+ }
+}
+
+/* void glPointParameterxv ( GLenum pname, const GLfixed *params ) */
+static void
+android_glPointParameterxv__ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfixed *params = (GLfixed *) 0;
+
+ params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining);
+ if (_remaining < 1) {
+ _env->ThrowNew(IAEClass, "remaining() < 1");
+ goto exit;
+ }
+ glPointParameterxv(
+ (GLenum)pname,
+ (GLfixed *)params
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, params, JNI_FALSE);
+ }
+}
+
+/* void glPointSizePointerOES ( GLenum type, GLsizei stride, const GLvoid *pointer ) */
+static void
+android_glPointSizePointerOES__IILjava_nio_Buffer_2
+ (JNIEnv *_env, jobject _this, jint type, jint stride, jobject pointer_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLvoid *pointer = (GLvoid *) 0;
+
+ pointer = (GLvoid *)getPointer(_env, pointer_buf, &_array, &_remaining);
+ glPointSizePointerOES(
+ (GLenum)type,
+ (GLsizei)stride,
+ (GLvoid *)pointer
+ );
+ if (_array) {
+ releasePointer(_env, _array, pointer, JNI_FALSE);
+ }
+}
+
+/* void glTexCoordPointer ( GLint size, GLenum type, GLsizei stride, GLint offset ) */
+static void
+android_glTexCoordPointer__IIII
+ (JNIEnv *_env, jobject _this, jint size, jint type, jint stride, jint offset) {
+ glTexCoordPointer(
+ (GLint)size,
+ (GLenum)type,
+ (GLsizei)stride,
+ (const GLvoid *)offset
+ );
+}
+
+/* void glTexEnvi ( GLenum target, GLenum pname, GLint param ) */
+static void
+android_glTexEnvi__III
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jint param) {
+ glTexEnvi(
+ (GLenum)target,
+ (GLenum)pname,
+ (GLint)param
+ );
+}
+
+/* void glTexEnviv ( GLenum target, GLenum pname, const GLint *params ) */
+static void
+android_glTexEnviv__II_3II
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
+ GLint *params_base = (GLint *) 0;
+ jint _remaining;
+ GLint *params = (GLint *) 0;
+
+ if (!params_ref) {
+ _env->ThrowNew(IAEClass, "params == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ int _needed;
+ switch (pname) {
+#if defined(GL_TEXTURE_ENV_MODE)
+ case GL_TEXTURE_ENV_MODE:
+#endif // defined(GL_TEXTURE_ENV_MODE)
+#if defined(GL_COMBINE_RGB)
+ case GL_COMBINE_RGB:
+#endif // defined(GL_COMBINE_RGB)
+#if defined(GL_COMBINE_ALPHA)
+ case GL_COMBINE_ALPHA:
+#endif // defined(GL_COMBINE_ALPHA)
+ _needed = 1;
+ break;
+#if defined(GL_TEXTURE_ENV_COLOR)
+ case GL_TEXTURE_ENV_COLOR:
+#endif // defined(GL_TEXTURE_ENV_COLOR)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _env->ThrowNew(IAEClass, "length - offset < needed");
+ goto exit;
+ }
+ params_base = (GLint *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glTexEnviv(
+ (GLenum)target,
+ (GLenum)pname,
+ (GLint *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ JNI_ABORT);
+ }
+}
+
+/* void glTexEnviv ( GLenum target, GLenum pname, const GLint *params ) */
+static void
+android_glTexEnviv__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLint *params = (GLint *) 0;
+
+ params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining);
+ int _needed;
+ switch (pname) {
+#if defined(GL_TEXTURE_ENV_MODE)
+ case GL_TEXTURE_ENV_MODE:
+#endif // defined(GL_TEXTURE_ENV_MODE)
+#if defined(GL_COMBINE_RGB)
+ case GL_COMBINE_RGB:
+#endif // defined(GL_COMBINE_RGB)
+#if defined(GL_COMBINE_ALPHA)
+ case GL_COMBINE_ALPHA:
+#endif // defined(GL_COMBINE_ALPHA)
+ _needed = 1;
+ break;
+#if defined(GL_TEXTURE_ENV_COLOR)
+ case GL_TEXTURE_ENV_COLOR:
+#endif // defined(GL_TEXTURE_ENV_COLOR)
+ _needed = 4;
+ break;
+ default:
+ _needed = 0;
+ break;
+ }
+ if (_remaining < _needed) {
+ _env->ThrowNew(IAEClass, "remaining() < needed");
+ goto exit;
+ }
+ glTexEnviv(
+ (GLenum)target,
+ (GLenum)pname,
+ (GLint *)params
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, params, JNI_FALSE);
+ }
+}
+
+/* void glTexParameterfv ( GLenum target, GLenum pname, const GLfloat *params ) */
+static void
+android_glTexParameterfv__II_3FI
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jfloatArray params_ref, jint offset) {
+ GLfloat *params_base = (GLfloat *) 0;
+ jint _remaining;
+ GLfloat *params = (GLfloat *) 0;
+
+ if (!params_ref) {
+ _env->ThrowNew(IAEClass, "params == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ if (_remaining < 1) {
+ _env->ThrowNew(IAEClass, "length - offset < 1");
+ goto exit;
+ }
+ params_base = (GLfloat *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glTexParameterfv(
+ (GLenum)target,
+ (GLenum)pname,
+ (GLfloat *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ JNI_ABORT);
+ }
+}
+
+/* void glTexParameterfv ( GLenum target, GLenum pname, const GLfloat *params ) */
+static void
+android_glTexParameterfv__IILjava_nio_FloatBuffer_2
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfloat *params = (GLfloat *) 0;
+
+ params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining);
+ if (_remaining < 1) {
+ _env->ThrowNew(IAEClass, "remaining() < 1");
+ goto exit;
+ }
+ glTexParameterfv(
+ (GLenum)target,
+ (GLenum)pname,
+ (GLfloat *)params
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, params, JNI_FALSE);
+ }
+}
+
+/* void glTexParameteri ( GLenum target, GLenum pname, GLint param ) */
+static void
+android_glTexParameteri__III
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jint param) {
+ glTexParameteri(
+ (GLenum)target,
+ (GLenum)pname,
+ (GLint)param
+ );
+}
+
+/* void glTexParameteriv ( GLenum target, GLenum pname, const GLint *params ) */
+static void
+android_glTexParameteriv__II_3II
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
+ GLint *params_base = (GLint *) 0;
+ jint _remaining;
+ GLint *params = (GLint *) 0;
+
+ if (!params_ref) {
+ _env->ThrowNew(IAEClass, "params == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ if (_remaining < 1) {
+ _env->ThrowNew(IAEClass, "length - offset < 1");
+ goto exit;
+ }
+ params_base = (GLint *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glTexParameteriv(
+ (GLenum)target,
+ (GLenum)pname,
+ (GLint *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ JNI_ABORT);
+ }
+}
+
+/* void glTexParameteriv ( GLenum target, GLenum pname, const GLint *params ) */
+static void
+android_glTexParameteriv__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLint *params = (GLint *) 0;
+
+ params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining);
+ if (_remaining < 1) {
+ _env->ThrowNew(IAEClass, "remaining() < 1");
+ goto exit;
+ }
+ glTexParameteriv(
+ (GLenum)target,
+ (GLenum)pname,
+ (GLint *)params
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, params, JNI_FALSE);
+ }
+}
+
+/* void glTexParameterxv ( GLenum target, GLenum pname, const GLfixed *params ) */
+static void
+android_glTexParameterxv__II_3II
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
+ GLfixed *params_base = (GLfixed *) 0;
+ jint _remaining;
+ GLfixed *params = (GLfixed *) 0;
+
+ if (!params_ref) {
+ _env->ThrowNew(IAEClass, "params == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ if (_remaining < 1) {
+ _env->ThrowNew(IAEClass, "length - offset < 1");
+ goto exit;
+ }
+ params_base = (GLfixed *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glTexParameterxv(
+ (GLenum)target,
+ (GLenum)pname,
+ (GLfixed *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ JNI_ABORT);
+ }
+}
+
+/* void glTexParameterxv ( GLenum target, GLenum pname, const GLfixed *params ) */
+static void
+android_glTexParameterxv__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfixed *params = (GLfixed *) 0;
+
+ params = (GLfixed *)getPointer(_env, params_buf, &_array, &_remaining);
+ if (_remaining < 1) {
+ _env->ThrowNew(IAEClass, "remaining() < 1");
+ goto exit;
+ }
+ glTexParameterxv(
+ (GLenum)target,
+ (GLenum)pname,
+ (GLfixed *)params
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, params, JNI_FALSE);
+ }
+}
+
+/* void glVertexPointer ( GLint size, GLenum type, GLsizei stride, GLint offset ) */
+static void
+android_glVertexPointer__IIII
+ (JNIEnv *_env, jobject _this, jint size, jint type, jint stride, jint offset) {
+ glVertexPointer(
+ (GLint)size,
+ (GLenum)type,
+ (GLsizei)stride,
+ (const GLvoid *)offset
+ );
+}
+
+static const char *classPathName = "android/opengl/GLES11";
+
+static JNINativeMethod methods[] = {
+{"_nativeClassInit", "()V", (void*)nativeClassInit },
+{"glBindBuffer", "(II)V", (void *) android_glBindBuffer__II },
+{"glBufferData", "(IILjava/nio/Buffer;I)V", (void *) android_glBufferData__IILjava_nio_Buffer_2I },
+{"glBufferSubData", "(IIILjava/nio/Buffer;)V", (void *) android_glBufferSubData__IIILjava_nio_Buffer_2 },
+{"glClipPlanef", "(I[FI)V", (void *) android_glClipPlanef__I_3FI },
+{"glClipPlanef", "(ILjava/nio/FloatBuffer;)V", (void *) android_glClipPlanef__ILjava_nio_FloatBuffer_2 },
+{"glClipPlanex", "(I[II)V", (void *) android_glClipPlanex__I_3II },
+{"glClipPlanex", "(ILjava/nio/IntBuffer;)V", (void *) android_glClipPlanex__ILjava_nio_IntBuffer_2 },
+{"glColor4ub", "(BBBB)V", (void *) android_glColor4ub__BBBB },
+{"glColorPointer", "(IIII)V", (void *) android_glColorPointer__IIII },
+{"glDeleteBuffers", "(I[II)V", (void *) android_glDeleteBuffers__I_3II },
+{"glDeleteBuffers", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteBuffers__ILjava_nio_IntBuffer_2 },
+{"glDrawElements", "(IIII)V", (void *) android_glDrawElements__IIII },
+{"glGenBuffers", "(I[II)V", (void *) android_glGenBuffers__I_3II },
+{"glGenBuffers", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenBuffers__ILjava_nio_IntBuffer_2 },
+{"glGetBooleanv", "(I[ZI)V", (void *) android_glGetBooleanv__I_3ZI },
+{"glGetBooleanv", "(ILjava/nio/IntBuffer;)V", (void *) android_glGetBooleanv__ILjava_nio_IntBuffer_2 },
+{"glGetBufferParameteriv", "(II[II)V", (void *) android_glGetBufferParameteriv__II_3II },
+{"glGetBufferParameteriv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetBufferParameteriv__IILjava_nio_IntBuffer_2 },
+{"glGetClipPlanef", "(I[FI)V", (void *) android_glGetClipPlanef__I_3FI },
+{"glGetClipPlanef", "(ILjava/nio/FloatBuffer;)V", (void *) android_glGetClipPlanef__ILjava_nio_FloatBuffer_2 },
+{"glGetClipPlanex", "(I[II)V", (void *) android_glGetClipPlanex__I_3II },
+{"glGetClipPlanex", "(ILjava/nio/IntBuffer;)V", (void *) android_glGetClipPlanex__ILjava_nio_IntBuffer_2 },
+{"glGetFixedv", "(I[II)V", (void *) android_glGetFixedv__I_3II },
+{"glGetFixedv", "(ILjava/nio/IntBuffer;)V", (void *) android_glGetFixedv__ILjava_nio_IntBuffer_2 },
+{"glGetFloatv", "(I[FI)V", (void *) android_glGetFloatv__I_3FI },
+{"glGetFloatv", "(ILjava/nio/FloatBuffer;)V", (void *) android_glGetFloatv__ILjava_nio_FloatBuffer_2 },
+{"glGetLightfv", "(II[FI)V", (void *) android_glGetLightfv__II_3FI },
+{"glGetLightfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glGetLightfv__IILjava_nio_FloatBuffer_2 },
+{"glGetLightxv", "(II[II)V", (void *) android_glGetLightxv__II_3II },
+{"glGetLightxv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetLightxv__IILjava_nio_IntBuffer_2 },
+{"glGetMaterialfv", "(II[FI)V", (void *) android_glGetMaterialfv__II_3FI },
+{"glGetMaterialfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glGetMaterialfv__IILjava_nio_FloatBuffer_2 },
+{"glGetMaterialxv", "(II[II)V", (void *) android_glGetMaterialxv__II_3II },
+{"glGetMaterialxv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetMaterialxv__IILjava_nio_IntBuffer_2 },
+{"glGetTexEnvfv", "(II[FI)V", (void *) android_glGetTexEnvfv__II_3FI },
+{"glGetTexEnvfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glGetTexEnvfv__IILjava_nio_FloatBuffer_2 },
+{"glGetTexEnviv", "(II[II)V", (void *) android_glGetTexEnviv__II_3II },
+{"glGetTexEnviv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetTexEnviv__IILjava_nio_IntBuffer_2 },
+{"glGetTexEnvxv", "(II[II)V", (void *) android_glGetTexEnvxv__II_3II },
+{"glGetTexEnvxv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetTexEnvxv__IILjava_nio_IntBuffer_2 },
+{"glGetTexParameterfv", "(II[FI)V", (void *) android_glGetTexParameterfv__II_3FI },
+{"glGetTexParameterfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glGetTexParameterfv__IILjava_nio_FloatBuffer_2 },
+{"glGetTexParameteriv", "(II[II)V", (void *) android_glGetTexParameteriv__II_3II },
+{"glGetTexParameteriv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetTexParameteriv__IILjava_nio_IntBuffer_2 },
+{"glGetTexParameterxv", "(II[II)V", (void *) android_glGetTexParameterxv__II_3II },
+{"glGetTexParameterxv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetTexParameterxv__IILjava_nio_IntBuffer_2 },
+{"glIsBuffer", "(I)Z", (void *) android_glIsBuffer__I },
+{"glIsEnabled", "(I)Z", (void *) android_glIsEnabled__I },
+{"glIsTexture", "(I)Z", (void *) android_glIsTexture__I },
+{"glNormalPointer", "(III)V", (void *) android_glNormalPointer__III },
+{"glPointParameterf", "(IF)V", (void *) android_glPointParameterf__IF },
+{"glPointParameterfv", "(I[FI)V", (void *) android_glPointParameterfv__I_3FI },
+{"glPointParameterfv", "(ILjava/nio/FloatBuffer;)V", (void *) android_glPointParameterfv__ILjava_nio_FloatBuffer_2 },
+{"glPointParameterx", "(II)V", (void *) android_glPointParameterx__II },
+{"glPointParameterxv", "(I[II)V", (void *) android_glPointParameterxv__I_3II },
+{"glPointParameterxv", "(ILjava/nio/IntBuffer;)V", (void *) android_glPointParameterxv__ILjava_nio_IntBuffer_2 },
+{"glPointSizePointerOES", "(IILjava/nio/Buffer;)V", (void *) android_glPointSizePointerOES__IILjava_nio_Buffer_2 },
+{"glTexCoordPointer", "(IIII)V", (void *) android_glTexCoordPointer__IIII },
+{"glTexEnvi", "(III)V", (void *) android_glTexEnvi__III },
+{"glTexEnviv", "(II[II)V", (void *) android_glTexEnviv__II_3II },
+{"glTexEnviv", "(IILjava/nio/IntBuffer;)V", (void *) android_glTexEnviv__IILjava_nio_IntBuffer_2 },
+{"glTexParameterfv", "(II[FI)V", (void *) android_glTexParameterfv__II_3FI },
+{"glTexParameterfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glTexParameterfv__IILjava_nio_FloatBuffer_2 },
+{"glTexParameteri", "(III)V", (void *) android_glTexParameteri__III },
+{"glTexParameteriv", "(II[II)V", (void *) android_glTexParameteriv__II_3II },
+{"glTexParameteriv", "(IILjava/nio/IntBuffer;)V", (void *) android_glTexParameteriv__IILjava_nio_IntBuffer_2 },
+{"glTexParameterxv", "(II[II)V", (void *) android_glTexParameterxv__II_3II },
+{"glTexParameterxv", "(IILjava/nio/IntBuffer;)V", (void *) android_glTexParameterxv__IILjava_nio_IntBuffer_2 },
+{"glVertexPointer", "(IIII)V", (void *) android_glVertexPointer__IIII },
+};
+
+int register_android_opengl_jni_GLES11(JNIEnv *_env)
+{
+ int err;
+ err = android::AndroidRuntime::registerNativeMethods(_env, classPathName, methods, NELEM(methods));
+ return err;
+}
diff --git a/core/jni/android_opengl_GLES11Ext.cpp b/core/jni/android_opengl_GLES11Ext.cpp
new file mode 100644
index 0000000..2576d8a
--- /dev/null
+++ b/core/jni/android_opengl_GLES11Ext.cpp
@@ -0,0 +1,1417 @@
+/*
+**
+** Copyright 2009, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+
+// This source file is automatically generated
+
+#include <android_runtime/AndroidRuntime.h>
+#include <utils/misc.h>
+
+#include <assert.h>
+#include <GLES/gl.h>
+
+#include <private/opengles/gl_context.h>
+
+#define _NUM_COMPRESSED_TEXTURE_FORMATS \
+ (::android::OGLES_NUM_COMPRESSED_TEXTURE_FORMATS)
+
+static int initialized = 0;
+
+static jclass nioAccessClass;
+static jclass bufferClass;
+static jclass OOMEClass;
+static jclass UOEClass;
+static jclass IAEClass;
+static jclass AIOOBEClass;
+static jmethodID getBasePointerID;
+static jmethodID getBaseArrayID;
+static jmethodID getBaseArrayOffsetID;
+static jfieldID positionID;
+static jfieldID limitID;
+static jfieldID elementSizeShiftID;
+
+/* Cache method IDs each time the class is loaded. */
+
+static void
+nativeClassInitBuffer(JNIEnv *_env)
+{
+ jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess");
+ nioAccessClass = (jclass) _env->NewGlobalRef(nioAccessClassLocal);
+
+ jclass bufferClassLocal = _env->FindClass("java/nio/Buffer");
+ bufferClass = (jclass) _env->NewGlobalRef(bufferClassLocal);
+
+ getBasePointerID = _env->GetStaticMethodID(nioAccessClass,
+ "getBasePointer", "(Ljava/nio/Buffer;)J");
+ getBaseArrayID = _env->GetStaticMethodID(nioAccessClass,
+ "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;");
+ getBaseArrayOffsetID = _env->GetStaticMethodID(nioAccessClass,
+ "getBaseArrayOffset", "(Ljava/nio/Buffer;)I");
+
+ positionID = _env->GetFieldID(bufferClass, "position", "I");
+ limitID = _env->GetFieldID(bufferClass, "limit", "I");
+ elementSizeShiftID =
+ _env->GetFieldID(bufferClass, "_elementSizeShift", "I");
+}
+
+
+static void
+nativeClassInit(JNIEnv *_env, jclass glImplClass)
+{
+ nativeClassInitBuffer(_env);
+
+ jclass IAEClassLocal =
+ _env->FindClass("java/lang/IllegalArgumentException");
+ jclass OOMEClassLocal =
+ _env->FindClass("java/lang/OutOfMemoryError");
+ jclass UOEClassLocal =
+ _env->FindClass("java/lang/UnsupportedOperationException");
+ jclass AIOOBEClassLocal =
+ _env->FindClass("java/lang/ArrayIndexOutOfBoundsException");
+
+ IAEClass = (jclass) _env->NewGlobalRef(IAEClassLocal);
+ OOMEClass = (jclass) _env->NewGlobalRef(OOMEClassLocal);
+ UOEClass = (jclass) _env->NewGlobalRef(UOEClassLocal);
+ AIOOBEClass = (jclass) _env->NewGlobalRef(AIOOBEClassLocal);
+}
+
+static void *
+getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining)
+{
+ jint position;
+ jint limit;
+ jint elementSizeShift;
+ jlong pointer;
+ jint offset;
+ void *data;
+
+ position = _env->GetIntField(buffer, positionID);
+ limit = _env->GetIntField(buffer, limitID);
+ elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID);
+ *remaining = (limit - position) << elementSizeShift;
+ pointer = _env->CallStaticLongMethod(nioAccessClass,
+ getBasePointerID, buffer);
+ if (pointer != 0L) {
+ *array = NULL;
+ return (void *) (jint) pointer;
+ }
+
+ *array = (jarray) _env->CallStaticObjectMethod(nioAccessClass,
+ getBaseArrayID, buffer);
+ offset = _env->CallStaticIntMethod(nioAccessClass,
+ getBaseArrayOffsetID, buffer);
+ data = _env->GetPrimitiveArrayCritical(*array, (jboolean *) 0);
+
+ return (void *) ((char *) data + offset);
+}
+
+
+static void
+releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit)
+{
+ _env->ReleasePrimitiveArrayCritical(array, data,
+ commit ? 0 : JNI_ABORT);
+}
+
+// --------------------------------------------------------------------------
+
+/* void glBlendEquationSeparateOES ( GLenum modeRGB, GLenum modeAlpha ) */
+static void
+android_glBlendEquationSeparateOES__II
+ (JNIEnv *_env, jobject _this, jint modeRGB, jint modeAlpha) {
+ _env->ThrowNew(UOEClass,
+ "glBlendEquationSeparateOES");
+}
+
+/* void glBlendFuncSeparateOES ( GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha ) */
+static void
+android_glBlendFuncSeparateOES__IIII
+ (JNIEnv *_env, jobject _this, jint srcRGB, jint dstRGB, jint srcAlpha, jint dstAlpha) {
+ _env->ThrowNew(UOEClass,
+ "glBlendFuncSeparateOES");
+}
+
+/* void glBlendEquationOES ( GLenum mode ) */
+static void
+android_glBlendEquationOES__I
+ (JNIEnv *_env, jobject _this, jint mode) {
+ _env->ThrowNew(UOEClass,
+ "glBlendEquationOES");
+}
+
+/* void glDrawTexsOES ( GLshort x, GLshort y, GLshort z, GLshort width, GLshort height ) */
+static void
+android_glDrawTexsOES__SSSSS
+ (JNIEnv *_env, jobject _this, jshort x, jshort y, jshort z, jshort width, jshort height) {
+ glDrawTexsOES(
+ (GLshort)x,
+ (GLshort)y,
+ (GLshort)z,
+ (GLshort)width,
+ (GLshort)height
+ );
+}
+
+/* void glDrawTexiOES ( GLint x, GLint y, GLint z, GLint width, GLint height ) */
+static void
+android_glDrawTexiOES__IIIII
+ (JNIEnv *_env, jobject _this, jint x, jint y, jint z, jint width, jint height) {
+ glDrawTexiOES(
+ (GLint)x,
+ (GLint)y,
+ (GLint)z,
+ (GLint)width,
+ (GLint)height
+ );
+}
+
+/* void glDrawTexxOES ( GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height ) */
+static void
+android_glDrawTexxOES__IIIII
+ (JNIEnv *_env, jobject _this, jint x, jint y, jint z, jint width, jint height) {
+ glDrawTexxOES(
+ (GLfixed)x,
+ (GLfixed)y,
+ (GLfixed)z,
+ (GLfixed)width,
+ (GLfixed)height
+ );
+}
+
+/* void glDrawTexsvOES ( const GLshort *coords ) */
+static void
+android_glDrawTexsvOES___3SI
+ (JNIEnv *_env, jobject _this, jshortArray coords_ref, jint offset) {
+ GLshort *coords_base = (GLshort *) 0;
+ jint _remaining;
+ GLshort *coords = (GLshort *) 0;
+
+ if (!coords_ref) {
+ _env->ThrowNew(IAEClass, "coords == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(coords_ref) - offset;
+ if (_remaining < 5) {
+ _env->ThrowNew(IAEClass, "length - offset < 5");
+ goto exit;
+ }
+ coords_base = (GLshort *)
+ _env->GetPrimitiveArrayCritical(coords_ref, (jboolean *)0);
+ coords = coords_base + offset;
+
+ glDrawTexsvOES(
+ (GLshort *)coords
+ );
+
+exit:
+ if (coords_base) {
+ _env->ReleasePrimitiveArrayCritical(coords_ref, coords_base,
+ JNI_ABORT);
+ }
+}
+
+/* void glDrawTexsvOES ( const GLshort *coords ) */
+static void
+android_glDrawTexsvOES__Ljava_nio_ShortBuffer_2
+ (JNIEnv *_env, jobject _this, jobject coords_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLshort *coords = (GLshort *) 0;
+
+ coords = (GLshort *)getPointer(_env, coords_buf, &_array, &_remaining);
+ if (_remaining < 5) {
+ _env->ThrowNew(IAEClass, "remaining() < 5");
+ goto exit;
+ }
+ glDrawTexsvOES(
+ (GLshort *)coords
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, coords, JNI_FALSE);
+ }
+}
+
+/* void glDrawTexivOES ( const GLint *coords ) */
+static void
+android_glDrawTexivOES___3II
+ (JNIEnv *_env, jobject _this, jintArray coords_ref, jint offset) {
+ GLint *coords_base = (GLint *) 0;
+ jint _remaining;
+ GLint *coords = (GLint *) 0;
+
+ if (!coords_ref) {
+ _env->ThrowNew(IAEClass, "coords == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(coords_ref) - offset;
+ if (_remaining < 5) {
+ _env->ThrowNew(IAEClass, "length - offset < 5");
+ goto exit;
+ }
+ coords_base = (GLint *)
+ _env->GetPrimitiveArrayCritical(coords_ref, (jboolean *)0);
+ coords = coords_base + offset;
+
+ glDrawTexivOES(
+ (GLint *)coords
+ );
+
+exit:
+ if (coords_base) {
+ _env->ReleasePrimitiveArrayCritical(coords_ref, coords_base,
+ JNI_ABORT);
+ }
+}
+
+/* void glDrawTexivOES ( const GLint *coords ) */
+static void
+android_glDrawTexivOES__Ljava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jobject coords_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLint *coords = (GLint *) 0;
+
+ coords = (GLint *)getPointer(_env, coords_buf, &_array, &_remaining);
+ if (_remaining < 5) {
+ _env->ThrowNew(IAEClass, "remaining() < 5");
+ goto exit;
+ }
+ glDrawTexivOES(
+ (GLint *)coords
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, coords, JNI_FALSE);
+ }
+}
+
+/* void glDrawTexxvOES ( const GLfixed *coords ) */
+static void
+android_glDrawTexxvOES___3II
+ (JNIEnv *_env, jobject _this, jintArray coords_ref, jint offset) {
+ GLfixed *coords_base = (GLfixed *) 0;
+ jint _remaining;
+ GLfixed *coords = (GLfixed *) 0;
+
+ if (!coords_ref) {
+ _env->ThrowNew(IAEClass, "coords == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(coords_ref) - offset;
+ if (_remaining < 5) {
+ _env->ThrowNew(IAEClass, "length - offset < 5");
+ goto exit;
+ }
+ coords_base = (GLfixed *)
+ _env->GetPrimitiveArrayCritical(coords_ref, (jboolean *)0);
+ coords = coords_base + offset;
+
+ glDrawTexxvOES(
+ (GLfixed *)coords
+ );
+
+exit:
+ if (coords_base) {
+ _env->ReleasePrimitiveArrayCritical(coords_ref, coords_base,
+ JNI_ABORT);
+ }
+}
+
+/* void glDrawTexxvOES ( const GLfixed *coords ) */
+static void
+android_glDrawTexxvOES__Ljava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jobject coords_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfixed *coords = (GLfixed *) 0;
+
+ coords = (GLfixed *)getPointer(_env, coords_buf, &_array, &_remaining);
+ if (_remaining < 5) {
+ _env->ThrowNew(IAEClass, "remaining() < 5");
+ goto exit;
+ }
+ glDrawTexxvOES(
+ (GLfixed *)coords
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, coords, JNI_FALSE);
+ }
+}
+
+/* void glDrawTexfOES ( GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height ) */
+static void
+android_glDrawTexfOES__FFFFF
+ (JNIEnv *_env, jobject _this, jfloat x, jfloat y, jfloat z, jfloat width, jfloat height) {
+ glDrawTexfOES(
+ (GLfloat)x,
+ (GLfloat)y,
+ (GLfloat)z,
+ (GLfloat)width,
+ (GLfloat)height
+ );
+}
+
+/* void glDrawTexfvOES ( const GLfloat *coords ) */
+static void
+android_glDrawTexfvOES___3FI
+ (JNIEnv *_env, jobject _this, jfloatArray coords_ref, jint offset) {
+ GLfloat *coords_base = (GLfloat *) 0;
+ jint _remaining;
+ GLfloat *coords = (GLfloat *) 0;
+
+ if (!coords_ref) {
+ _env->ThrowNew(IAEClass, "coords == null");
+ goto exit;
+ }
+ if (offset < 0) {
+ _env->ThrowNew(IAEClass, "offset < 0");
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(coords_ref) - offset;
+ if (_remaining < 5) {
+ _env->ThrowNew(IAEClass, "length - offset < 5");
+ goto exit;
+ }
+ coords_base = (GLfloat *)
+ _env->GetPrimitiveArrayCritical(coords_ref, (jboolean *)0);
+ coords = coords_base + offset;
+
+ glDrawTexfvOES(
+ (GLfloat *)coords
+ );
+
+exit:
+ if (coords_base) {
+ _env->ReleasePrimitiveArrayCritical(coords_ref, coords_base,
+ JNI_ABORT);
+ }
+}
+
+/* void glDrawTexfvOES ( const GLfloat *coords ) */
+static void
+android_glDrawTexfvOES__Ljava_nio_FloatBuffer_2
+ (JNIEnv *_env, jobject _this, jobject coords_buf) {
+ jarray _array = (jarray) 0;
+ jint _remaining;
+ GLfloat *coords = (GLfloat *) 0;
+
+ coords = (GLfloat *)getPointer(_env, coords_buf, &_array, &_remaining);
+ if (_remaining < 5) {
+ _env->ThrowNew(IAEClass, "remaining() < 5");
+ goto exit;
+ }
+ glDrawTexfvOES(
+ (GLfloat *)coords
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, coords, JNI_FALSE);
+ }
+}
+
+/* void glEGLImageTargetTexture2DOES ( GLenum target, GLeglImageOES image ) */
+static void
+android_glEGLImageTargetTexture2DOES__ILjava_nio_Buffer_2
+ (JNIEnv *_env, jobject _this, jint target, jobject image_buf) {
+ _env->ThrowNew(UOEClass,
+ "glEGLImageTargetTexture2DOES");
+}
+
+/* void glEGLImageTargetRenderbufferStorageOES ( GLenum target, GLeglImageOES image ) */
+static void
+android_glEGLImageTargetRenderbufferStorageOES__ILjava_nio_Buffer_2
+ (JNIEnv *_env, jobject _this, jint target, jobject image_buf) {
+ _env->ThrowNew(UOEClass,
+ "glEGLImageTargetRenderbufferStorageOES");
+}
+
+/* void glAlphaFuncxOES ( GLenum func, GLclampx ref ) */
+static void
+android_glAlphaFuncxOES__II
+ (JNIEnv *_env, jobject _this, jint func, jint ref) {
+ _env->ThrowNew(UOEClass,
+ "glAlphaFuncxOES");
+}
+
+/* void glClearColorxOES ( GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha ) */
+static void
+android_glClearColorxOES__IIII
+ (JNIEnv *_env, jobject _this, jint red, jint green, jint blue, jint alpha) {
+ _env->ThrowNew(UOEClass,
+ "glClearColorxOES");
+}
+
+/* void glClearDepthxOES ( GLclampx depth ) */
+static void
+android_glClearDepthxOES__I
+ (JNIEnv *_env, jobject _this, jint depth) {
+ _env->ThrowNew(UOEClass,
+ "glClearDepthxOES");
+}
+
+/* void glClipPlanexOES ( GLenum plane, const GLfixed *equation ) */
+static void
+android_glClipPlanexOES__I_3II
+ (JNIEnv *_env, jobject _this, jint plane, jintArray equation_ref, jint offset) {
+ _env->ThrowNew(UOEClass,
+ "glClipPlanexOES");
+}
+
+/* void glClipPlanexOES ( GLenum plane, const GLfixed *equation ) */
+static void
+android_glClipPlanexOES__ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint plane, jobject equation_buf) {
+ _env->ThrowNew(UOEClass,
+ "glClipPlanexOES");
+}
+
+/* void glColor4xOES ( GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha ) */
+static void
+android_glColor4xOES__IIII
+ (JNIEnv *_env, jobject _this, jint red, jint green, jint blue, jint alpha) {
+ _env->ThrowNew(UOEClass,
+ "glColor4xOES");
+}
+
+/* void glDepthRangexOES ( GLclampx zNear, GLclampx zFar ) */
+static void
+android_glDepthRangexOES__II
+ (JNIEnv *_env, jobject _this, jint zNear, jint zFar) {
+ _env->ThrowNew(UOEClass,
+ "glDepthRangexOES");
+}
+
+/* void glFogxOES ( GLenum pname, GLfixed param ) */
+static void
+android_glFogxOES__II
+ (JNIEnv *_env, jobject _this, jint pname, jint param) {
+ _env->ThrowNew(UOEClass,
+ "glFogxOES");
+}
+
+/* void glFogxvOES ( GLenum pname, const GLfixed *params ) */
+static void
+android_glFogxvOES__I_3II
+ (JNIEnv *_env, jobject _this, jint pname, jintArray params_ref, jint offset) {
+ _env->ThrowNew(UOEClass,
+ "glFogxvOES");
+}
+
+/* void glFogxvOES ( GLenum pname, const GLfixed *params ) */
+static void
+android_glFogxvOES__ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
+ _env->ThrowNew(UOEClass,
+ "glFogxvOES");
+}
+
+/* void glFrustumxOES ( GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar ) */
+static void
+android_glFrustumxOES__IIIIII
+ (JNIEnv *_env, jobject _this, jint left, jint right, jint bottom, jint top, jint zNear, jint zFar) {
+ _env->ThrowNew(UOEClass,
+ "glFrustumxOES");
+}
+
+/* void glGetClipPlanexOES ( GLenum pname, GLfixed *eqn ) */
+static void
+android_glGetClipPlanexOES__I_3II
+ (JNIEnv *_env, jobject _this, jint pname, jintArray eqn_ref, jint offset) {
+ _env->ThrowNew(UOEClass,
+ "glGetClipPlanexOES");
+}
+
+/* void glGetClipPlanexOES ( GLenum pname, GLfixed *eqn ) */
+static void
+android_glGetClipPlanexOES__ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint pname, jobject eqn_buf) {
+ _env->ThrowNew(UOEClass,
+ "glGetClipPlanexOES");
+}
+
+/* void glGetFixedvOES ( GLenum pname, GLfixed *params ) */
+static void
+android_glGetFixedvOES__I_3II
+ (JNIEnv *_env, jobject _this, jint pname, jintArray params_ref, jint offset) {
+ _env->ThrowNew(UOEClass,
+ "glGetFixedvOES");
+}
+
+/* void glGetFixedvOES ( GLenum pname, GLfixed *params ) */
+static void
+android_glGetFixedvOES__ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
+ _env->ThrowNew(UOEClass,
+ "glGetFixedvOES");
+}
+
+/* void glGetLightxvOES ( GLenum light, GLenum pname, GLfixed *params ) */
+static void
+android_glGetLightxvOES__II_3II
+ (JNIEnv *_env, jobject _this, jint light, jint pname, jintArray params_ref, jint offset) {
+ _env->ThrowNew(UOEClass,
+ "glGetLightxvOES");
+}
+
+/* void glGetLightxvOES ( GLenum light, GLenum pname, GLfixed *params ) */
+static void
+android_glGetLightxvOES__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint light, jint pname, jobject params_buf) {
+ _env->ThrowNew(UOEClass,
+ "glGetLightxvOES");
+}
+
+/* void glGetMaterialxvOES ( GLenum face, GLenum pname, GLfixed *params ) */
+static void
+android_glGetMaterialxvOES__II_3II
+ (JNIEnv *_env, jobject _this, jint face, jint pname, jintArray params_ref, jint offset) {
+ _env->ThrowNew(UOEClass,
+ "glGetMaterialxvOES");
+}
+
+/* void glGetMaterialxvOES ( GLenum face, GLenum pname, GLfixed *params ) */
+static void
+android_glGetMaterialxvOES__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint face, jint pname, jobject params_buf) {
+ _env->ThrowNew(UOEClass,
+ "glGetMaterialxvOES");
+}
+
+/* void glGetTexEnvxvOES ( GLenum env, GLenum pname, GLfixed *params ) */
+static void
+android_glGetTexEnvxvOES__II_3II
+ (JNIEnv *_env, jobject _this, jint env, jint pname, jintArray params_ref, jint offset) {
+ _env->ThrowNew(UOEClass,
+ "glGetTexEnvxvOES");
+}
+
+/* void glGetTexEnvxvOES ( GLenum env, GLenum pname, GLfixed *params ) */
+static void
+android_glGetTexEnvxvOES__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint env, jint pname, jobject params_buf) {
+ _env->ThrowNew(UOEClass,
+ "glGetTexEnvxvOES");
+}
+
+/* void glGetTexParameterxvOES ( GLenum target, GLenum pname, GLfixed *params ) */
+static void
+android_glGetTexParameterxvOES__II_3II
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
+ _env->ThrowNew(UOEClass,
+ "glGetTexParameterxvOES");
+}
+
+/* void glGetTexParameterxvOES ( GLenum target, GLenum pname, GLfixed *params ) */
+static void
+android_glGetTexParameterxvOES__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
+ _env->ThrowNew(UOEClass,
+ "glGetTexParameterxvOES");
+}
+
+/* void glLightModelxOES ( GLenum pname, GLfixed param ) */
+static void
+android_glLightModelxOES__II
+ (JNIEnv *_env, jobject _this, jint pname, jint param) {
+ _env->ThrowNew(UOEClass,
+ "glLightModelxOES");
+}
+
+/* void glLightModelxvOES ( GLenum pname, const GLfixed *params ) */
+static void
+android_glLightModelxvOES__I_3II
+ (JNIEnv *_env, jobject _this, jint pname, jintArray params_ref, jint offset) {
+ _env->ThrowNew(UOEClass,
+ "glLightModelxvOES");
+}
+
+/* void glLightModelxvOES ( GLenum pname, const GLfixed *params ) */
+static void
+android_glLightModelxvOES__ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
+ _env->ThrowNew(UOEClass,
+ "glLightModelxvOES");
+}
+
+/* void glLightxOES ( GLenum light, GLenum pname, GLfixed param ) */
+static void
+android_glLightxOES__III
+ (JNIEnv *_env, jobject _this, jint light, jint pname, jint param) {
+ _env->ThrowNew(UOEClass,
+ "glLightxOES");
+}
+
+/* void glLightxvOES ( GLenum light, GLenum pname, const GLfixed *params ) */
+static void
+android_glLightxvOES__II_3II
+ (JNIEnv *_env, jobject _this, jint light, jint pname, jintArray params_ref, jint offset) {
+ _env->ThrowNew(UOEClass,
+ "glLightxvOES");
+}
+
+/* void glLightxvOES ( GLenum light, GLenum pname, const GLfixed *params ) */
+static void
+android_glLightxvOES__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint light, jint pname, jobject params_buf) {
+ _env->ThrowNew(UOEClass,
+ "glLightxvOES");
+}
+
+/* void glLineWidthxOES ( GLfixed width ) */
+static void
+android_glLineWidthxOES__I
+ (JNIEnv *_env, jobject _this, jint width) {
+ _env->ThrowNew(UOEClass,
+ "glLineWidthxOES");
+}
+
+/* void glLoadMatrixxOES ( const GLfixed *m ) */
+static void
+android_glLoadMatrixxOES___3II
+ (JNIEnv *_env, jobject _this, jintArray m_ref, jint offset) {
+ _env->ThrowNew(UOEClass,
+ "glLoadMatrixxOES");
+}
+
+/* void glLoadMatrixxOES ( const GLfixed *m ) */
+static void
+android_glLoadMatrixxOES__Ljava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jobject m_buf) {
+ _env->ThrowNew(UOEClass,
+ "glLoadMatrixxOES");
+}
+
+/* void glMaterialxOES ( GLenum face, GLenum pname, GLfixed param ) */
+static void
+android_glMaterialxOES__III
+ (JNIEnv *_env, jobject _this, jint face, jint pname, jint param) {
+ _env->ThrowNew(UOEClass,
+ "glMaterialxOES");
+}
+
+/* void glMaterialxvOES ( GLenum face, GLenum pname, const GLfixed *params ) */
+static void
+android_glMaterialxvOES__II_3II
+ (JNIEnv *_env, jobject _this, jint face, jint pname, jintArray params_ref, jint offset) {
+ _env->ThrowNew(UOEClass,
+ "glMaterialxvOES");
+}
+
+/* void glMaterialxvOES ( GLenum face, GLenum pname, const GLfixed *params ) */
+static void
+android_glMaterialxvOES__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint face, jint pname, jobject params_buf) {
+ _env->ThrowNew(UOEClass,
+ "glMaterialxvOES");
+}
+
+/* void glMultMatrixxOES ( const GLfixed *m ) */
+static void
+android_glMultMatrixxOES___3II
+ (JNIEnv *_env, jobject _this, jintArray m_ref, jint offset) {
+ _env->ThrowNew(UOEClass,
+ "glMultMatrixxOES");
+}
+
+/* void glMultMatrixxOES ( const GLfixed *m ) */
+static void
+android_glMultMatrixxOES__Ljava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jobject m_buf) {
+ _env->ThrowNew(UOEClass,
+ "glMultMatrixxOES");
+}
+
+/* void glMultiTexCoord4xOES ( GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q ) */
+static void
+android_glMultiTexCoord4xOES__IIIII
+ (JNIEnv *_env, jobject _this, jint target, jint s, jint t, jint r, jint q) {
+ _env->ThrowNew(UOEClass,
+ "glMultiTexCoord4xOES");
+}
+
+/* void glNormal3xOES ( GLfixed nx, GLfixed ny, GLfixed nz ) */
+static void
+android_glNormal3xOES__III
+ (JNIEnv *_env, jobject _this, jint nx, jint ny, jint nz) {
+ _env->ThrowNew(UOEClass,
+ "glNormal3xOES");
+}
+
+/* void glOrthoxOES ( GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar ) */
+static void
+android_glOrthoxOES__IIIIII
+ (JNIEnv *_env, jobject _this, jint left, jint right, jint bottom, jint top, jint zNear, jint zFar) {
+ _env->ThrowNew(UOEClass,
+ "glOrthoxOES");
+}
+
+/* void glPointParameterxOES ( GLenum pname, GLfixed param ) */
+static void
+android_glPointParameterxOES__II
+ (JNIEnv *_env, jobject _this, jint pname, jint param) {
+ _env->ThrowNew(UOEClass,
+ "glPointParameterxOES");
+}
+
+/* void glPointParameterxvOES ( GLenum pname, const GLfixed *params ) */
+static void
+android_glPointParameterxvOES__I_3II
+ (JNIEnv *_env, jobject _this, jint pname, jintArray params_ref, jint offset) {
+ _env->ThrowNew(UOEClass,
+ "glPointParameterxvOES");
+}
+
+/* void glPointParameterxvOES ( GLenum pname, const GLfixed *params ) */
+static void
+android_glPointParameterxvOES__ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
+ _env->ThrowNew(UOEClass,
+ "glPointParameterxvOES");
+}
+
+/* void glPointSizexOES ( GLfixed size ) */
+static void
+android_glPointSizexOES__I
+ (JNIEnv *_env, jobject _this, jint size) {
+ _env->ThrowNew(UOEClass,
+ "glPointSizexOES");
+}
+
+/* void glPolygonOffsetxOES ( GLfixed factor, GLfixed units ) */
+static void
+android_glPolygonOffsetxOES__II
+ (JNIEnv *_env, jobject _this, jint factor, jint units) {
+ _env->ThrowNew(UOEClass,
+ "glPolygonOffsetxOES");
+}
+
+/* void glRotatexOES ( GLfixed angle, GLfixed x, GLfixed y, GLfixed z ) */
+static void
+android_glRotatexOES__IIII
+ (JNIEnv *_env, jobject _this, jint angle, jint x, jint y, jint z) {
+ _env->ThrowNew(UOEClass,
+ "glRotatexOES");
+}
+
+/* void glSampleCoveragexOES ( GLclampx value, GLboolean invert ) */
+static void
+android_glSampleCoveragexOES__IZ
+ (JNIEnv *_env, jobject _this, jint value, jboolean invert) {
+ _env->ThrowNew(UOEClass,
+ "glSampleCoveragexOES");
+}
+
+/* void glScalexOES ( GLfixed x, GLfixed y, GLfixed z ) */
+static void
+android_glScalexOES__III
+ (JNIEnv *_env, jobject _this, jint x, jint y, jint z) {
+ _env->ThrowNew(UOEClass,
+ "glScalexOES");
+}
+
+/* void glTexEnvxOES ( GLenum target, GLenum pname, GLfixed param ) */
+static void
+android_glTexEnvxOES__III
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jint param) {
+ _env->ThrowNew(UOEClass,
+ "glTexEnvxOES");
+}
+
+/* void glTexEnvxvOES ( GLenum target, GLenum pname, const GLfixed *params ) */
+static void
+android_glTexEnvxvOES__II_3II
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
+ _env->ThrowNew(UOEClass,
+ "glTexEnvxvOES");
+}
+
+/* void glTexEnvxvOES ( GLenum target, GLenum pname, const GLfixed *params ) */
+static void
+android_glTexEnvxvOES__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
+ _env->ThrowNew(UOEClass,
+ "glTexEnvxvOES");
+}
+
+/* void glTexParameterxOES ( GLenum target, GLenum pname, GLfixed param ) */
+static void
+android_glTexParameterxOES__III
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jint param) {
+ _env->ThrowNew(UOEClass,
+ "glTexParameterxOES");
+}
+
+/* void glTexParameterxvOES ( GLenum target, GLenum pname, const GLfixed *params ) */
+static void
+android_glTexParameterxvOES__II_3II
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
+ _env->ThrowNew(UOEClass,
+ "glTexParameterxvOES");
+}
+
+/* void glTexParameterxvOES ( GLenum target, GLenum pname, const GLfixed *params ) */
+static void
+android_glTexParameterxvOES__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
+ _env->ThrowNew(UOEClass,
+ "glTexParameterxvOES");
+}
+
+/* void glTranslatexOES ( GLfixed x, GLfixed y, GLfixed z ) */
+static void
+android_glTranslatexOES__III
+ (JNIEnv *_env, jobject _this, jint x, jint y, jint z) {
+ _env->ThrowNew(UOEClass,
+ "glTranslatexOES");
+}
+
+/* GLboolean glIsRenderbufferOES ( GLuint renderbuffer ) */
+static jboolean
+android_glIsRenderbufferOES__I
+ (JNIEnv *_env, jobject _this, jint renderbuffer) {
+ _env->ThrowNew(UOEClass,
+ "glIsRenderbufferOES");
+ return JNI_FALSE;
+}
+
+/* void glBindRenderbufferOES ( GLenum target, GLuint renderbuffer ) */
+static void
+android_glBindRenderbufferOES__II
+ (JNIEnv *_env, jobject _this, jint target, jint renderbuffer) {
+ _env->ThrowNew(UOEClass,
+ "glBindRenderbufferOES");
+}
+
+/* void glDeleteRenderbuffersOES ( GLsizei n, const GLuint *renderbuffers ) */
+static void
+android_glDeleteRenderbuffersOES__I_3II
+ (JNIEnv *_env, jobject _this, jint n, jintArray renderbuffers_ref, jint offset) {
+ _env->ThrowNew(UOEClass,
+ "glDeleteRenderbuffersOES");
+}
+
+/* void glDeleteRenderbuffersOES ( GLsizei n, const GLuint *renderbuffers ) */
+static void
+android_glDeleteRenderbuffersOES__ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint n, jobject renderbuffers_buf) {
+ _env->ThrowNew(UOEClass,
+ "glDeleteRenderbuffersOES");
+}
+
+/* void glGenRenderbuffersOES ( GLsizei n, GLuint *renderbuffers ) */
+static void
+android_glGenRenderbuffersOES__I_3II
+ (JNIEnv *_env, jobject _this, jint n, jintArray renderbuffers_ref, jint offset) {
+ _env->ThrowNew(UOEClass,
+ "glGenRenderbuffersOES");
+}
+
+/* void glGenRenderbuffersOES ( GLsizei n, GLuint *renderbuffers ) */
+static void
+android_glGenRenderbuffersOES__ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint n, jobject renderbuffers_buf) {
+ _env->ThrowNew(UOEClass,
+ "glGenRenderbuffersOES");
+}
+
+/* void glRenderbufferStorageOES ( GLenum target, GLenum internalformat, GLsizei width, GLsizei height ) */
+static void
+android_glRenderbufferStorageOES__IIII
+ (JNIEnv *_env, jobject _this, jint target, jint internalformat, jint width, jint height) {
+ _env->ThrowNew(UOEClass,
+ "glRenderbufferStorageOES");
+}
+
+/* void glGetRenderbufferParameterivOES ( GLenum target, GLenum pname, GLint *params ) */
+static void
+android_glGetRenderbufferParameterivOES__II_3II
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
+ _env->ThrowNew(UOEClass,
+ "glGetRenderbufferParameterivOES");
+}
+
+/* void glGetRenderbufferParameterivOES ( GLenum target, GLenum pname, GLint *params ) */
+static void
+android_glGetRenderbufferParameterivOES__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
+ _env->ThrowNew(UOEClass,
+ "glGetRenderbufferParameterivOES");
+}
+
+/* GLboolean glIsFramebufferOES ( GLuint framebuffer ) */
+static jboolean
+android_glIsFramebufferOES__I
+ (JNIEnv *_env, jobject _this, jint framebuffer) {
+ _env->ThrowNew(UOEClass,
+ "glIsFramebufferOES");
+ return JNI_FALSE;
+}
+
+/* void glBindFramebufferOES ( GLenum target, GLuint framebuffer ) */
+static void
+android_glBindFramebufferOES__II
+ (JNIEnv *_env, jobject _this, jint target, jint framebuffer) {
+ _env->ThrowNew(UOEClass,
+ "glBindFramebufferOES");
+}
+
+/* void glDeleteFramebuffersOES ( GLsizei n, const GLuint *framebuffers ) */
+static void
+android_glDeleteFramebuffersOES__I_3II
+ (JNIEnv *_env, jobject _this, jint n, jintArray framebuffers_ref, jint offset) {
+ _env->ThrowNew(UOEClass,
+ "glDeleteFramebuffersOES");
+}
+
+/* void glDeleteFramebuffersOES ( GLsizei n, const GLuint *framebuffers ) */
+static void
+android_glDeleteFramebuffersOES__ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint n, jobject framebuffers_buf) {
+ _env->ThrowNew(UOEClass,
+ "glDeleteFramebuffersOES");
+}
+
+/* void glGenFramebuffersOES ( GLsizei n, GLuint *framebuffers ) */
+static void
+android_glGenFramebuffersOES__I_3II
+ (JNIEnv *_env, jobject _this, jint n, jintArray framebuffers_ref, jint offset) {
+ _env->ThrowNew(UOEClass,
+ "glGenFramebuffersOES");
+}
+
+/* void glGenFramebuffersOES ( GLsizei n, GLuint *framebuffers ) */
+static void
+android_glGenFramebuffersOES__ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint n, jobject framebuffers_buf) {
+ _env->ThrowNew(UOEClass,
+ "glGenFramebuffersOES");
+}
+
+/* GLenum glCheckFramebufferStatusOES ( GLenum target ) */
+static jint
+android_glCheckFramebufferStatusOES__I
+ (JNIEnv *_env, jobject _this, jint target) {
+ _env->ThrowNew(UOEClass,
+ "glCheckFramebufferStatusOES");
+ return 0;
+}
+
+/* void glFramebufferRenderbufferOES ( GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer ) */
+static void
+android_glFramebufferRenderbufferOES__IIII
+ (JNIEnv *_env, jobject _this, jint target, jint attachment, jint renderbuffertarget, jint renderbuffer) {
+ _env->ThrowNew(UOEClass,
+ "glFramebufferRenderbufferOES");
+}
+
+/* void glFramebufferTexture2DOES ( GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level ) */
+static void
+android_glFramebufferTexture2DOES__IIIII
+ (JNIEnv *_env, jobject _this, jint target, jint attachment, jint textarget, jint texture, jint level) {
+ _env->ThrowNew(UOEClass,
+ "glFramebufferTexture2DOES");
+}
+
+/* void glGetFramebufferAttachmentParameterivOES ( GLenum target, GLenum attachment, GLenum pname, GLint *params ) */
+static void
+android_glGetFramebufferAttachmentParameterivOES__III_3II
+ (JNIEnv *_env, jobject _this, jint target, jint attachment, jint pname, jintArray params_ref, jint offset) {
+ _env->ThrowNew(UOEClass,
+ "glGetFramebufferAttachmentParameterivOES");
+}
+
+/* void glGetFramebufferAttachmentParameterivOES ( GLenum target, GLenum attachment, GLenum pname, GLint *params ) */
+static void
+android_glGetFramebufferAttachmentParameterivOES__IIILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint target, jint attachment, jint pname, jobject params_buf) {
+ _env->ThrowNew(UOEClass,
+ "glGetFramebufferAttachmentParameterivOES");
+}
+
+/* void glGenerateMipmapOES ( GLenum target ) */
+static void
+android_glGenerateMipmapOES__I
+ (JNIEnv *_env, jobject _this, jint target) {
+ _env->ThrowNew(UOEClass,
+ "glGenerateMipmapOES");
+}
+
+/* void glCurrentPaletteMatrixOES ( GLuint matrixpaletteindex ) */
+static void
+android_glCurrentPaletteMatrixOES__I
+ (JNIEnv *_env, jobject _this, jint matrixpaletteindex) {
+ _env->ThrowNew(UOEClass,
+ "glCurrentPaletteMatrixOES");
+}
+
+/* void glLoadPaletteFromModelViewMatrixOES ( void ) */
+static void
+android_glLoadPaletteFromModelViewMatrixOES__
+ (JNIEnv *_env, jobject _this) {
+ _env->ThrowNew(UOEClass,
+ "glLoadPaletteFromModelViewMatrixOES");
+}
+
+/* void glMatrixIndexPointerOES ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ) */
+static void
+android_glMatrixIndexPointerOES__IIILjava_nio_Buffer_2
+ (JNIEnv *_env, jobject _this, jint size, jint type, jint stride, jobject pointer_buf) {
+ _env->ThrowNew(UOEClass,
+ "glMatrixIndexPointerOES");
+}
+
+/* void glWeightPointerOES ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ) */
+static void
+android_glWeightPointerOES__IIILjava_nio_Buffer_2
+ (JNIEnv *_env, jobject _this, jint size, jint type, jint stride, jobject pointer_buf) {
+ _env->ThrowNew(UOEClass,
+ "glWeightPointerOES");
+}
+
+/* void glDepthRangefOES ( GLclampf zNear, GLclampf zFar ) */
+static void
+android_glDepthRangefOES__FF
+ (JNIEnv *_env, jobject _this, jfloat zNear, jfloat zFar) {
+ _env->ThrowNew(UOEClass,
+ "glDepthRangefOES");
+}
+
+/* void glFrustumfOES ( GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar ) */
+static void
+android_glFrustumfOES__FFFFFF
+ (JNIEnv *_env, jobject _this, jfloat left, jfloat right, jfloat bottom, jfloat top, jfloat zNear, jfloat zFar) {
+ _env->ThrowNew(UOEClass,
+ "glFrustumfOES");
+}
+
+/* void glOrthofOES ( GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar ) */
+static void
+android_glOrthofOES__FFFFFF
+ (JNIEnv *_env, jobject _this, jfloat left, jfloat right, jfloat bottom, jfloat top, jfloat zNear, jfloat zFar) {
+ _env->ThrowNew(UOEClass,
+ "glOrthofOES");
+}
+
+/* void glClipPlanefOES ( GLenum plane, const GLfloat *equation ) */
+static void
+android_glClipPlanefOES__I_3FI
+ (JNIEnv *_env, jobject _this, jint plane, jfloatArray equation_ref, jint offset) {
+ _env->ThrowNew(UOEClass,
+ "glClipPlanefOES");
+}
+
+/* void glClipPlanefOES ( GLenum plane, const GLfloat *equation ) */
+static void
+android_glClipPlanefOES__ILjava_nio_FloatBuffer_2
+ (JNIEnv *_env, jobject _this, jint plane, jobject equation_buf) {
+ _env->ThrowNew(UOEClass,
+ "glClipPlanefOES");
+}
+
+/* void glGetClipPlanefOES ( GLenum pname, GLfloat *eqn ) */
+static void
+android_glGetClipPlanefOES__I_3FI
+ (JNIEnv *_env, jobject _this, jint pname, jfloatArray eqn_ref, jint offset) {
+ _env->ThrowNew(UOEClass,
+ "glGetClipPlanefOES");
+}
+
+/* void glGetClipPlanefOES ( GLenum pname, GLfloat *eqn ) */
+static void
+android_glGetClipPlanefOES__ILjava_nio_FloatBuffer_2
+ (JNIEnv *_env, jobject _this, jint pname, jobject eqn_buf) {
+ _env->ThrowNew(UOEClass,
+ "glGetClipPlanefOES");
+}
+
+/* void glClearDepthfOES ( GLclampf depth ) */
+static void
+android_glClearDepthfOES__F
+ (JNIEnv *_env, jobject _this, jfloat depth) {
+ _env->ThrowNew(UOEClass,
+ "glClearDepthfOES");
+}
+
+/* void glTexGenfOES ( GLenum coord, GLenum pname, GLfloat param ) */
+static void
+android_glTexGenfOES__IIF
+ (JNIEnv *_env, jobject _this, jint coord, jint pname, jfloat param) {
+ _env->ThrowNew(UOEClass,
+ "glTexGenfOES");
+}
+
+/* void glTexGenfvOES ( GLenum coord, GLenum pname, const GLfloat *params ) */
+static void
+android_glTexGenfvOES__II_3FI
+ (JNIEnv *_env, jobject _this, jint coord, jint pname, jfloatArray params_ref, jint offset) {
+ _env->ThrowNew(UOEClass,
+ "glTexGenfvOES");
+}
+
+/* void glTexGenfvOES ( GLenum coord, GLenum pname, const GLfloat *params ) */
+static void
+android_glTexGenfvOES__IILjava_nio_FloatBuffer_2
+ (JNIEnv *_env, jobject _this, jint coord, jint pname, jobject params_buf) {
+ _env->ThrowNew(UOEClass,
+ "glTexGenfvOES");
+}
+
+/* void glTexGeniOES ( GLenum coord, GLenum pname, GLint param ) */
+static void
+android_glTexGeniOES__III
+ (JNIEnv *_env, jobject _this, jint coord, jint pname, jint param) {
+ _env->ThrowNew(UOEClass,
+ "glTexGeniOES");
+}
+
+/* void glTexGenivOES ( GLenum coord, GLenum pname, const GLint *params ) */
+static void
+android_glTexGenivOES__II_3II
+ (JNIEnv *_env, jobject _this, jint coord, jint pname, jintArray params_ref, jint offset) {
+ _env->ThrowNew(UOEClass,
+ "glTexGenivOES");
+}
+
+/* void glTexGenivOES ( GLenum coord, GLenum pname, const GLint *params ) */
+static void
+android_glTexGenivOES__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint coord, jint pname, jobject params_buf) {
+ _env->ThrowNew(UOEClass,
+ "glTexGenivOES");
+}
+
+/* void glTexGenxOES ( GLenum coord, GLenum pname, GLfixed param ) */
+static void
+android_glTexGenxOES__III
+ (JNIEnv *_env, jobject _this, jint coord, jint pname, jint param) {
+ _env->ThrowNew(UOEClass,
+ "glTexGenxOES");
+}
+
+/* void glTexGenxvOES ( GLenum coord, GLenum pname, const GLfixed *params ) */
+static void
+android_glTexGenxvOES__II_3II
+ (JNIEnv *_env, jobject _this, jint coord, jint pname, jintArray params_ref, jint offset) {
+ _env->ThrowNew(UOEClass,
+ "glTexGenxvOES");
+}
+
+/* void glTexGenxvOES ( GLenum coord, GLenum pname, const GLfixed *params ) */
+static void
+android_glTexGenxvOES__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint coord, jint pname, jobject params_buf) {
+ _env->ThrowNew(UOEClass,
+ "glTexGenxvOES");
+}
+
+/* void glGetTexGenfvOES ( GLenum coord, GLenum pname, GLfloat *params ) */
+static void
+android_glGetTexGenfvOES__II_3FI
+ (JNIEnv *_env, jobject _this, jint coord, jint pname, jfloatArray params_ref, jint offset) {
+ _env->ThrowNew(UOEClass,
+ "glGetTexGenfvOES");
+}
+
+/* void glGetTexGenfvOES ( GLenum coord, GLenum pname, GLfloat *params ) */
+static void
+android_glGetTexGenfvOES__IILjava_nio_FloatBuffer_2
+ (JNIEnv *_env, jobject _this, jint coord, jint pname, jobject params_buf) {
+ _env->ThrowNew(UOEClass,
+ "glGetTexGenfvOES");
+}
+
+/* void glGetTexGenivOES ( GLenum coord, GLenum pname, GLint *params ) */
+static void
+android_glGetTexGenivOES__II_3II
+ (JNIEnv *_env, jobject _this, jint coord, jint pname, jintArray params_ref, jint offset) {
+ _env->ThrowNew(UOEClass,
+ "glGetTexGenivOES");
+}
+
+/* void glGetTexGenivOES ( GLenum coord, GLenum pname, GLint *params ) */
+static void
+android_glGetTexGenivOES__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint coord, jint pname, jobject params_buf) {
+ _env->ThrowNew(UOEClass,
+ "glGetTexGenivOES");
+}
+
+/* void glGetTexGenxvOES ( GLenum coord, GLenum pname, GLfixed *params ) */
+static void
+android_glGetTexGenxvOES__II_3II
+ (JNIEnv *_env, jobject _this, jint coord, jint pname, jintArray params_ref, jint offset) {
+ _env->ThrowNew(UOEClass,
+ "glGetTexGenxvOES");
+}
+
+/* void glGetTexGenxvOES ( GLenum coord, GLenum pname, GLfixed *params ) */
+static void
+android_glGetTexGenxvOES__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint coord, jint pname, jobject params_buf) {
+ _env->ThrowNew(UOEClass,
+ "glGetTexGenxvOES");
+}
+
+static const char *classPathName = "android/opengl/GLES11Ext";
+
+static JNINativeMethod methods[] = {
+{"_nativeClassInit", "()V", (void*)nativeClassInit },
+{"glBlendEquationSeparateOES", "(II)V", (void *) android_glBlendEquationSeparateOES__II },
+{"glBlendFuncSeparateOES", "(IIII)V", (void *) android_glBlendFuncSeparateOES__IIII },
+{"glBlendEquationOES", "(I)V", (void *) android_glBlendEquationOES__I },
+{"glDrawTexsOES", "(SSSSS)V", (void *) android_glDrawTexsOES__SSSSS },
+{"glDrawTexiOES", "(IIIII)V", (void *) android_glDrawTexiOES__IIIII },
+{"glDrawTexxOES", "(IIIII)V", (void *) android_glDrawTexxOES__IIIII },
+{"glDrawTexsvOES", "([SI)V", (void *) android_glDrawTexsvOES___3SI },
+{"glDrawTexsvOES", "(Ljava/nio/ShortBuffer;)V", (void *) android_glDrawTexsvOES__Ljava_nio_ShortBuffer_2 },
+{"glDrawTexivOES", "([II)V", (void *) android_glDrawTexivOES___3II },
+{"glDrawTexivOES", "(Ljava/nio/IntBuffer;)V", (void *) android_glDrawTexivOES__Ljava_nio_IntBuffer_2 },
+{"glDrawTexxvOES", "([II)V", (void *) android_glDrawTexxvOES___3II },
+{"glDrawTexxvOES", "(Ljava/nio/IntBuffer;)V", (void *) android_glDrawTexxvOES__Ljava_nio_IntBuffer_2 },
+{"glDrawTexfOES", "(FFFFF)V", (void *) android_glDrawTexfOES__FFFFF },
+{"glDrawTexfvOES", "([FI)V", (void *) android_glDrawTexfvOES___3FI },
+{"glDrawTexfvOES", "(Ljava/nio/FloatBuffer;)V", (void *) android_glDrawTexfvOES__Ljava_nio_FloatBuffer_2 },
+{"glEGLImageTargetTexture2DOES", "(ILjava/nio/Buffer;)V", (void *) android_glEGLImageTargetTexture2DOES__ILjava_nio_Buffer_2 },
+{"glEGLImageTargetRenderbufferStorageOES", "(ILjava/nio/Buffer;)V", (void *) android_glEGLImageTargetRenderbufferStorageOES__ILjava_nio_Buffer_2 },
+{"glAlphaFuncxOES", "(II)V", (void *) android_glAlphaFuncxOES__II },
+{"glClearColorxOES", "(IIII)V", (void *) android_glClearColorxOES__IIII },
+{"glClearDepthxOES", "(I)V", (void *) android_glClearDepthxOES__I },
+{"glClipPlanexOES", "(I[II)V", (void *) android_glClipPlanexOES__I_3II },
+{"glClipPlanexOES", "(ILjava/nio/IntBuffer;)V", (void *) android_glClipPlanexOES__ILjava_nio_IntBuffer_2 },
+{"glColor4xOES", "(IIII)V", (void *) android_glColor4xOES__IIII },
+{"glDepthRangexOES", "(II)V", (void *) android_glDepthRangexOES__II },
+{"glFogxOES", "(II)V", (void *) android_glFogxOES__II },
+{"glFogxvOES", "(I[II)V", (void *) android_glFogxvOES__I_3II },
+{"glFogxvOES", "(ILjava/nio/IntBuffer;)V", (void *) android_glFogxvOES__ILjava_nio_IntBuffer_2 },
+{"glFrustumxOES", "(IIIIII)V", (void *) android_glFrustumxOES__IIIIII },
+{"glGetClipPlanexOES", "(I[II)V", (void *) android_glGetClipPlanexOES__I_3II },
+{"glGetClipPlanexOES", "(ILjava/nio/IntBuffer;)V", (void *) android_glGetClipPlanexOES__ILjava_nio_IntBuffer_2 },
+{"glGetFixedvOES", "(I[II)V", (void *) android_glGetFixedvOES__I_3II },
+{"glGetFixedvOES", "(ILjava/nio/IntBuffer;)V", (void *) android_glGetFixedvOES__ILjava_nio_IntBuffer_2 },
+{"glGetLightxvOES", "(II[II)V", (void *) android_glGetLightxvOES__II_3II },
+{"glGetLightxvOES", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetLightxvOES__IILjava_nio_IntBuffer_2 },
+{"glGetMaterialxvOES", "(II[II)V", (void *) android_glGetMaterialxvOES__II_3II },
+{"glGetMaterialxvOES", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetMaterialxvOES__IILjava_nio_IntBuffer_2 },
+{"glGetTexEnvxvOES", "(II[II)V", (void *) android_glGetTexEnvxvOES__II_3II },
+{"glGetTexEnvxvOES", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetTexEnvxvOES__IILjava_nio_IntBuffer_2 },
+{"glGetTexParameterxvOES", "(II[II)V", (void *) android_glGetTexParameterxvOES__II_3II },
+{"glGetTexParameterxvOES", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetTexParameterxvOES__IILjava_nio_IntBuffer_2 },
+{"glLightModelxOES", "(II)V", (void *) android_glLightModelxOES__II },
+{"glLightModelxvOES", "(I[II)V", (void *) android_glLightModelxvOES__I_3II },
+{"glLightModelxvOES", "(ILjava/nio/IntBuffer;)V", (void *) android_glLightModelxvOES__ILjava_nio_IntBuffer_2 },
+{"glLightxOES", "(III)V", (void *) android_glLightxOES__III },
+{"glLightxvOES", "(II[II)V", (void *) android_glLightxvOES__II_3II },
+{"glLightxvOES", "(IILjava/nio/IntBuffer;)V", (void *) android_glLightxvOES__IILjava_nio_IntBuffer_2 },
+{"glLineWidthxOES", "(I)V", (void *) android_glLineWidthxOES__I },
+{"glLoadMatrixxOES", "([II)V", (void *) android_glLoadMatrixxOES___3II },
+{"glLoadMatrixxOES", "(Ljava/nio/IntBuffer;)V", (void *) android_glLoadMatrixxOES__Ljava_nio_IntBuffer_2 },
+{"glMaterialxOES", "(III)V", (void *) android_glMaterialxOES__III },
+{"glMaterialxvOES", "(II[II)V", (void *) android_glMaterialxvOES__II_3II },
+{"glMaterialxvOES", "(IILjava/nio/IntBuffer;)V", (void *) android_glMaterialxvOES__IILjava_nio_IntBuffer_2 },
+{"glMultMatrixxOES", "([II)V", (void *) android_glMultMatrixxOES___3II },
+{"glMultMatrixxOES", "(Ljava/nio/IntBuffer;)V", (void *) android_glMultMatrixxOES__Ljava_nio_IntBuffer_2 },
+{"glMultiTexCoord4xOES", "(IIIII)V", (void *) android_glMultiTexCoord4xOES__IIIII },
+{"glNormal3xOES", "(III)V", (void *) android_glNormal3xOES__III },
+{"glOrthoxOES", "(IIIIII)V", (void *) android_glOrthoxOES__IIIIII },
+{"glPointParameterxOES", "(II)V", (void *) android_glPointParameterxOES__II },
+{"glPointParameterxvOES", "(I[II)V", (void *) android_glPointParameterxvOES__I_3II },
+{"glPointParameterxvOES", "(ILjava/nio/IntBuffer;)V", (void *) android_glPointParameterxvOES__ILjava_nio_IntBuffer_2 },
+{"glPointSizexOES", "(I)V", (void *) android_glPointSizexOES__I },
+{"glPolygonOffsetxOES", "(II)V", (void *) android_glPolygonOffsetxOES__II },
+{"glRotatexOES", "(IIII)V", (void *) android_glRotatexOES__IIII },
+{"glSampleCoveragexOES", "(IZ)V", (void *) android_glSampleCoveragexOES__IZ },
+{"glScalexOES", "(III)V", (void *) android_glScalexOES__III },
+{"glTexEnvxOES", "(III)V", (void *) android_glTexEnvxOES__III },
+{"glTexEnvxvOES", "(II[II)V", (void *) android_glTexEnvxvOES__II_3II },
+{"glTexEnvxvOES", "(IILjava/nio/IntBuffer;)V", (void *) android_glTexEnvxvOES__IILjava_nio_IntBuffer_2 },
+{"glTexParameterxOES", "(III)V", (void *) android_glTexParameterxOES__III },
+{"glTexParameterxvOES", "(II[II)V", (void *) android_glTexParameterxvOES__II_3II },
+{"glTexParameterxvOES", "(IILjava/nio/IntBuffer;)V", (void *) android_glTexParameterxvOES__IILjava_nio_IntBuffer_2 },
+{"glTranslatexOES", "(III)V", (void *) android_glTranslatexOES__III },
+{"glIsRenderbufferOES", "(I)Z", (void *) android_glIsRenderbufferOES__I },
+{"glBindRenderbufferOES", "(II)V", (void *) android_glBindRenderbufferOES__II },
+{"glDeleteRenderbuffersOES", "(I[II)V", (void *) android_glDeleteRenderbuffersOES__I_3II },
+{"glDeleteRenderbuffersOES", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteRenderbuffersOES__ILjava_nio_IntBuffer_2 },
+{"glGenRenderbuffersOES", "(I[II)V", (void *) android_glGenRenderbuffersOES__I_3II },
+{"glGenRenderbuffersOES", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenRenderbuffersOES__ILjava_nio_IntBuffer_2 },
+{"glRenderbufferStorageOES", "(IIII)V", (void *) android_glRenderbufferStorageOES__IIII },
+{"glGetRenderbufferParameterivOES", "(II[II)V", (void *) android_glGetRenderbufferParameterivOES__II_3II },
+{"glGetRenderbufferParameterivOES", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetRenderbufferParameterivOES__IILjava_nio_IntBuffer_2 },
+{"glIsFramebufferOES", "(I)Z", (void *) android_glIsFramebufferOES__I },
+{"glBindFramebufferOES", "(II)V", (void *) android_glBindFramebufferOES__II },
+{"glDeleteFramebuffersOES", "(I[II)V", (void *) android_glDeleteFramebuffersOES__I_3II },
+{"glDeleteFramebuffersOES", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteFramebuffersOES__ILjava_nio_IntBuffer_2 },
+{"glGenFramebuffersOES", "(I[II)V", (void *) android_glGenFramebuffersOES__I_3II },
+{"glGenFramebuffersOES", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenFramebuffersOES__ILjava_nio_IntBuffer_2 },
+{"glCheckFramebufferStatusOES", "(I)I", (void *) android_glCheckFramebufferStatusOES__I },
+{"glFramebufferRenderbufferOES", "(IIII)V", (void *) android_glFramebufferRenderbufferOES__IIII },
+{"glFramebufferTexture2DOES", "(IIIII)V", (void *) android_glFramebufferTexture2DOES__IIIII },
+{"glGetFramebufferAttachmentParameterivOES", "(III[II)V", (void *) android_glGetFramebufferAttachmentParameterivOES__III_3II },
+{"glGetFramebufferAttachmentParameterivOES", "(IIILjava/nio/IntBuffer;)V", (void *) android_glGetFramebufferAttachmentParameterivOES__IIILjava_nio_IntBuffer_2 },
+{"glGenerateMipmapOES", "(I)V", (void *) android_glGenerateMipmapOES__I },
+{"glCurrentPaletteMatrixOES", "(I)V", (void *) android_glCurrentPaletteMatrixOES__I },
+{"glLoadPaletteFromModelViewMatrixOES", "()V", (void *) android_glLoadPaletteFromModelViewMatrixOES__ },
+{"glMatrixIndexPointerOES", "(IIILjava/nio/Buffer;)V", (void *) android_glMatrixIndexPointerOES__IIILjava_nio_Buffer_2 },
+{"glWeightPointerOES", "(IIILjava/nio/Buffer;)V", (void *) android_glWeightPointerOES__IIILjava_nio_Buffer_2 },
+{"glDepthRangefOES", "(FF)V", (void *) android_glDepthRangefOES__FF },
+{"glFrustumfOES", "(FFFFFF)V", (void *) android_glFrustumfOES__FFFFFF },
+{"glOrthofOES", "(FFFFFF)V", (void *) android_glOrthofOES__FFFFFF },
+{"glClipPlanefOES", "(I[FI)V", (void *) android_glClipPlanefOES__I_3FI },
+{"glClipPlanefOES", "(ILjava/nio/FloatBuffer;)V", (void *) android_glClipPlanefOES__ILjava_nio_FloatBuffer_2 },
+{"glGetClipPlanefOES", "(I[FI)V", (void *) android_glGetClipPlanefOES__I_3FI },
+{"glGetClipPlanefOES", "(ILjava/nio/FloatBuffer;)V", (void *) android_glGetClipPlanefOES__ILjava_nio_FloatBuffer_2 },
+{"glClearDepthfOES", "(F)V", (void *) android_glClearDepthfOES__F },
+{"glTexGenfOES", "(IIF)V", (void *) android_glTexGenfOES__IIF },
+{"glTexGenfvOES", "(II[FI)V", (void *) android_glTexGenfvOES__II_3FI },
+{"glTexGenfvOES", "(IILjava/nio/FloatBuffer;)V", (void *) android_glTexGenfvOES__IILjava_nio_FloatBuffer_2 },
+{"glTexGeniOES", "(III)V", (void *) android_glTexGeniOES__III },
+{"glTexGenivOES", "(II[II)V", (void *) android_glTexGenivOES__II_3II },
+{"glTexGenivOES", "(IILjava/nio/IntBuffer;)V", (void *) android_glTexGenivOES__IILjava_nio_IntBuffer_2 },
+{"glTexGenxOES", "(III)V", (void *) android_glTexGenxOES__III },
+{"glTexGenxvOES", "(II[II)V", (void *) android_glTexGenxvOES__II_3II },
+{"glTexGenxvOES", "(IILjava/nio/IntBuffer;)V", (void *) android_glTexGenxvOES__IILjava_nio_IntBuffer_2 },
+{"glGetTexGenfvOES", "(II[FI)V", (void *) android_glGetTexGenfvOES__II_3FI },
+{"glGetTexGenfvOES", "(IILjava/nio/FloatBuffer;)V", (void *) android_glGetTexGenfvOES__IILjava_nio_FloatBuffer_2 },
+{"glGetTexGenivOES", "(II[II)V", (void *) android_glGetTexGenivOES__II_3II },
+{"glGetTexGenivOES", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetTexGenivOES__IILjava_nio_IntBuffer_2 },
+{"glGetTexGenxvOES", "(II[II)V", (void *) android_glGetTexGenxvOES__II_3II },
+{"glGetTexGenxvOES", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetTexGenxvOES__IILjava_nio_IntBuffer_2 },
+};
+
+int register_android_opengl_jni_GLES11Ext(JNIEnv *_env)
+{
+ int err;
+ err = android::AndroidRuntime::registerNativeMethods(_env, classPathName, methods, NELEM(methods));
+ return err;
+}
diff --git a/core/jni/com_google_android_gles_jni_GLImpl.cpp b/core/jni/com_google_android_gles_jni_GLImpl.cpp
index 9b09c9b..4ca79b5 100644
--- a/core/jni/com_google_android_gles_jni_GLImpl.cpp
+++ b/core/jni/com_google_android_gles_jni_GLImpl.cpp
@@ -45,7 +45,7 @@
/* Cache method IDs each time the class is loaded. */
-void
+static void
nativeClassInitBuffer(JNIEnv *_env)
{
jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess");
@@ -1654,6 +1654,7 @@
#include <string.h>
/* const GLubyte * glGetString ( GLenum name ) */
+static
jstring
android_glGetString
(JNIEnv *_env, jobject _this, jint name) {
diff --git a/include/media/AudioRecord.h b/include/media/AudioRecord.h
index 7164b78..6aa40d00 100644
--- a/include/media/AudioRecord.h
+++ b/include/media/AudioRecord.h
@@ -312,7 +312,6 @@
bool processAudioBuffer(const sp<ClientRecordThread>& thread);
- sp<IAudioFlinger> mAudioFlinger;
sp<IAudioRecord> mAudioRecord;
sp<IMemory> mCblkMemory;
sp<ClientRecordThread> mClientRecordThread;
diff --git a/include/media/AudioTrack.h b/include/media/AudioTrack.h
index 7645978..ba0467c 100644
--- a/include/media/AudioTrack.h
+++ b/include/media/AudioTrack.h
@@ -383,7 +383,6 @@
bool processAudioBuffer(const sp<AudioTrackThread>& thread);
- sp<IAudioFlinger> mAudioFlinger;
sp<IAudioTrack> mAudioTrack;
sp<IMemory> mCblkMemory;
sp<AudioTrackThread> mAudioTrackThread;
diff --git a/libs/audioflinger/AudioFlinger.cpp b/libs/audioflinger/AudioFlinger.cpp
index d11e13a..b56221f 100644
--- a/libs/audioflinger/AudioFlinger.cpp
+++ b/libs/audioflinger/AudioFlinger.cpp
@@ -651,27 +651,30 @@
return BAD_VALUE;
}
- mHardwareMixerThread->setStreamVolume(stream, value);
-#ifdef WITH_A2DP
- mA2dpMixerThread->setStreamVolume(stream, value);
-#endif
-
status_t ret = NO_ERROR;
if (stream == AudioSystem::VOICE_CALL ||
stream == AudioSystem::BLUETOOTH_SCO) {
-
+ float hwValue;
if (stream == AudioSystem::VOICE_CALL) {
- value = (float)AudioSystem::logToLinear(value)/100.0f;
+ hwValue = (float)AudioSystem::logToLinear(value)/100.0f;
+ // offset value to reflect actual hardware volume that never reaches 0
+ // 1% corresponds roughly to first step in VOICE_CALL stream volume setting (see AudioService.java)
+ value = 0.01 + 0.99 * value;
} else { // (type == AudioSystem::BLUETOOTH_SCO)
- value = 1.0f;
+ hwValue = 1.0f;
}
AutoMutex lock(mHardwareLock);
mHardwareStatus = AUDIO_SET_VOICE_VOLUME;
- ret = mAudioHardware->setVoiceVolume(value);
+ ret = mAudioHardware->setVoiceVolume(hwValue);
mHardwareStatus = AUDIO_HW_IDLE;
}
+ mHardwareMixerThread->setStreamVolume(stream, value);
+#ifdef WITH_A2DP
+ mA2dpMixerThread->setStreamVolume(stream, value);
+#endif
+
return ret;
}
@@ -709,7 +712,14 @@
if (uint32_t(stream) >= AudioSystem::NUM_STREAM_TYPES) {
return 0.0f;
}
- return mHardwareMixerThread->streamVolume(stream);
+
+ float volume = mHardwareMixerThread->streamVolume(stream);
+ // remove correction applied by setStreamVolume()
+ if (stream == AudioSystem::VOICE_CALL) {
+ volume = (volume - 0.01) / 0.99 ;
+ }
+
+ return volume;
}
bool AudioFlinger::streamMute(int stream) const
@@ -812,17 +822,12 @@
if (mForcedRoute == 0 && !(mSavedRoute & AudioSystem::ROUTE_SPEAKER)) {
LOGV("Route forced to Speaker ON %08x", mSavedRoute | AudioSystem::ROUTE_SPEAKER);
mHardwareMixerThread->setStreamMute(AudioSystem::MUSIC, true);
- mHardwareStatus = AUDIO_HW_SET_MASTER_VOLUME;
- mAudioHardware->setMasterVolume(0);
usleep(mHardwareMixerThread->latency()*1000);
mHardwareStatus = AUDIO_HW_SET_ROUTING;
mAudioHardware->setRouting(AudioSystem::MODE_NORMAL, mSavedRoute | AudioSystem::ROUTE_SPEAKER);
mHardwareStatus = AUDIO_HW_IDLE;
// delay track start so that audio hardware has time to siwtch routes
usleep(kStartSleepTime);
- mHardwareStatus = AUDIO_HW_SET_MASTER_VOLUME;
- mAudioHardware->setMasterVolume(mHardwareMixerThread->masterVolume());
- mHardwareStatus = AUDIO_HW_IDLE;
}
mForcedRoute = AudioSystem::ROUTE_SPEAKER;
}
@@ -1480,18 +1485,6 @@
return status;
}
-// removeTrack_l() must be called with AudioFlinger::mLock held
-void AudioFlinger::MixerThread::removeTrack_l(wp<Track> track, int name)
-{
- sp<Track> t = track.promote();
- if (t!=NULL && (t->mState <= TrackBase::STOPPED)) {
- t->reset();
- deleteTrackName_l(name);
- removeActiveTrack_l(track);
- mAudioFlinger->mWaitWorkCV.broadcast();
- }
-}
-
// destroyTrack_l() must be called with AudioFlinger::mLock held
void AudioFlinger::MixerThread::destroyTrack_l(const sp<Track>& track)
{
@@ -1697,7 +1690,7 @@
// Check validity of returned pointer in case the track control block would have been corrupted.
if (bufferStart < mBuffer || bufferStart > bufferEnd || bufferEnd > mBufferEnd ||
- cblk->channels == 2 && ((unsigned long)bufferStart & 3) ) {
+ (cblk->channels == 2 && ((unsigned long)bufferStart & 3))) {
LOGE("TrackBase::getBuffer buffer out of range:\n start: %p, end %p , mBuffer %p mBufferEnd %p\n \
server %d, serverBase %d, user %d, userBase %d, channels %d",
bufferStart, bufferEnd, mBuffer, mBufferEnd,
@@ -1733,7 +1726,6 @@
wp<Track> weak(this); // never create a strong ref from the dtor
Mutex::Autolock _l(mMixerThread->mAudioFlinger->mLock);
mState = TERMINATED;
- mMixerThread->removeTrack_l(weak, mName);
}
void AudioFlinger::MixerThread::Track::destroy()
diff --git a/libs/audioflinger/AudioFlinger.h b/libs/audioflinger/AudioFlinger.h
index db5cc74..c7ca9ec 100644
--- a/libs/audioflinger/AudioFlinger.h
+++ b/libs/audioflinger/AudioFlinger.h
@@ -501,7 +501,6 @@
MixerThread& operator = (const MixerThread&);
status_t addTrack_l(const sp<Track>& track);
- void removeTrack_l(wp<Track> track, int name);
void destroyTrack_l(const sp<Track>& track);
int getTrackName_l();
void deleteTrackName_l(int name);
diff --git a/libs/audioflinger/AudioHardwareInterface.cpp b/libs/audioflinger/AudioHardwareInterface.cpp
index ac76a19..cc1bd8f 100644
--- a/libs/audioflinger/AudioHardwareInterface.cpp
+++ b/libs/audioflinger/AudioHardwareInterface.cpp
@@ -53,7 +53,7 @@
"EARPIECE ",
"SPEAKER ",
"BLUETOOTH ",
- "HEADSET "
+ "HEADSET ",
"BLUETOOTH_A2DP "
};
static const char* routeNone = "NONE";
diff --git a/location/java/android/location/IGeocodeProvider.aidl b/location/java/android/location/IGeocodeProvider.aidl
new file mode 100644
index 0000000..e79e8d2
--- /dev/null
+++ b/location/java/android/location/IGeocodeProvider.aidl
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.location;
+
+import android.location.Address;
+
+/**
+ * An interface for location providers implementing the Geocoder services.
+ *
+ * {@hide}
+ */
+interface IGeocodeProvider {
+
+ String getFromLocation(double latitude, double longitude, int maxResults,
+ String language, String country, String variant, String appName, out List<Address> addrs);
+
+ String getFromLocationName(String locationName,
+ double lowerLeftLatitude, double lowerLeftLongitude,
+ double upperRightLatitude, double upperRightLongitude, int maxResults,
+ String language, String country, String variant, String appName, out List<Address> addrs);
+}
diff --git a/location/java/android/location/ILocationManager.aidl b/location/java/android/location/ILocationManager.aidl
index 86bd8b6..7d35814 100644
--- a/location/java/android/location/ILocationManager.aidl
+++ b/location/java/android/location/ILocationManager.aidl
@@ -18,6 +18,7 @@
import android.app.PendingIntent;
import android.location.Address;
+import android.location.IGeocodeProvider;
import android.location.IGpsStatusListener;
import android.location.ILocationCollector;
import android.location.ILocationListener;
@@ -77,7 +78,8 @@
void setTestProviderStatus(String provider, int status, in Bundle extras, long updateTime);
void clearTestProviderStatus(String provider);
- /* for installing Network Location Provider */
+ /* for installing external Location Providers */
void setNetworkLocationProvider(ILocationProvider provider);
void setLocationCollector(ILocationCollector collector);
+ void setGeocodeProvider(IGeocodeProvider provider);
}
diff --git a/location/java/android/location/ILocationProvider.aidl b/location/java/android/location/ILocationProvider.aidl
index 6f9daff..82533a5 100644
--- a/location/java/android/location/ILocationProvider.aidl
+++ b/location/java/android/location/ILocationProvider.aidl
@@ -16,7 +16,6 @@
package android.location;
-import android.location.Address;
import android.os.Bundle;
/**
@@ -47,15 +46,8 @@
void setMinTime(long minTime);
void updateNetworkState(int state);
boolean sendExtraCommand(String command, inout Bundle extras);
-
- /* the following are only used for NetworkLocationProvider */
- void updateCellLockStatus(boolean acquired);
- void addListener(in String[] applications);
- void removeListener(in String[] applications);
- String getFromLocation(double latitude, double longitude, int maxResults,
- String language, String country, String variant, String appName, out List<Address> addrs);
- String getFromLocationName(String locationName,
- double lowerLeftLatitude, double lowerLeftLongitude,
- double upperRightLatitude, double upperRightLongitude, int maxResults,
- String language, String country, String variant, String appName, out List<Address> addrs);
+ void addListener(int uid);
+ void removeListener(int uid);
+ void wakeLockAcquired();
+ void wakeLockReleased();
}
diff --git a/location/java/android/location/LocationProviderImpl.java b/location/java/android/location/LocationProviderImpl.java
index 2a9199e..a20aa3c 100644
--- a/location/java/android/location/LocationProviderImpl.java
+++ b/location/java/android/location/LocationProviderImpl.java
@@ -249,4 +249,32 @@
public boolean sendExtraCommand(String command, Bundle extras) {
return false;
}
+
+ /**
+ * Informs the location provider when a new client is listening for location information
+ *
+ * @param uid the uid of the client proces
+ */
+ public void addListener(int uid) {
+ }
+
+ /**
+ * Informs the location provider when a client is no longer listening for location information
+ *
+ * @param uid the uid of the client proces
+ */
+ public void removeListener(int uid) {
+ }
+
+ /**
+ * Informs the location provider when the location manager service has acquired its wake lock
+ */
+ public void wakeLockAcquired() {
+ }
+
+ /**
+ * Informs the location provider when the location manager service has released its wake lock
+ */
+ public void wakeLockReleased() {
+ }
}
diff --git a/location/java/com/android/internal/location/GpsLocationProvider.java b/location/java/com/android/internal/location/GpsLocationProvider.java
index 8a33574..924641c 100644
--- a/location/java/com/android/internal/location/GpsLocationProvider.java
+++ b/location/java/com/android/internal/location/GpsLocationProvider.java
@@ -22,20 +22,23 @@
import android.content.IntentFilter;
import android.location.Criteria;
import android.location.IGpsStatusListener;
-import android.location.ILocationCollector;
import android.location.ILocationManager;
import android.location.Location;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.location.LocationProviderImpl;
+import android.net.ConnectivityManager;
import android.net.SntpClient;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
+import android.os.ServiceManager;
import android.os.SystemClock;
import android.util.Config;
import android.util.Log;
+import android.util.SparseIntArray;
+import com.android.internal.app.IBatteryStats;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.TelephonyIntents;
@@ -99,6 +102,14 @@
private static final int GPS_STATUS_ENGINE_ON = 3;
private static final int GPS_STATUS_ENGINE_OFF = 4;
+ // these need to match GpsSuplStatusValue defines in gps.h
+ /** SUPL status event values. */
+ private static final int GPS_REQUEST_SUPL_DATA_CONN = 1;
+ private static final int GPS_RELEASE_SUPL_DATA_CONN = 2;
+ private static final int GPS_SUPL_DATA_CONNECTED = 3;
+ private static final int GPS_SUPL_DATA_CONN_DONE = 4;
+ private static final int GPS_SUPL_DATA_CONN_FAILED = 5;
+
// these need to match GpsLocationFlags enum in gps.h
private static final int LOCATION_INVALID = 0;
private static final int LOCATION_HAS_LAT_LONG = 1;
@@ -122,6 +133,11 @@
private static final int GPS_DELETE_CELLDB_INFO = 0x8000;
private static final int GPS_DELETE_ALL = 0xFFFF;
+ // for mSuplDataConnectionState
+ private static final int SUPL_DATA_CONNECTION_CLOSED = 0;
+ private static final int SUPL_DATA_CONNECTION_OPENING = 1;
+ private static final int SUPL_DATA_CONNECTION_OPEN = 2;
+
private static final String PROPERTIES_FILE = "/etc/gps.conf";
private int mLocationFlags = LOCATION_INVALID;
@@ -176,6 +192,12 @@
private String mSuplHost;
private int mSuplPort;
private boolean mSetSuplServer;
+ private String mSuplApn;
+ private int mSuplDataConnectionState;
+ private final ConnectivityManager mConnMgr;
+
+ private final IBatteryStats mBatteryStats;
+ private final SparseIntArray mClientUids = new SparseIntArray();
// how often to request NTP time, in milliseconds
// current setting 4 hours
@@ -184,8 +206,6 @@
// current setting - 5 minutes
private static final long RETRY_INTERVAL = 5*60*1000;
- private ILocationCollector mCollector;
-
private class TelephonyBroadcastReceiver extends BroadcastReceiver {
@Override public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
@@ -198,10 +218,12 @@
if (Config.LOGD) {
Log.d(TAG, "state: " + state + " apnName: " + apnName + " reason: " + reason);
}
- if ("CONNECTED".equals(state)) {
- native_set_supl_apn(apnName);
- } else {
- native_set_supl_apn("");
+ if ("CONNECTED".equals(state) && apnName != null && apnName.length() > 0) {
+ mSuplApn = apnName;
+ if (mSuplDataConnectionState == SUPL_DATA_CONNECTION_OPENING) {
+ native_supl_data_conn_open(mSuplApn);
+ mSuplDataConnectionState = SUPL_DATA_CONNECTION_OPEN;
+ }
}
}
}
@@ -220,6 +242,11 @@
intentFilter.addAction(TelephonyIntents.ACTION_ANY_DATA_CONNECTION_STATE_CHANGED);
context.registerReceiver(receiver, intentFilter);
+ mConnMgr = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
+
+ // Battery statistics service to be notified when GPS turns on or off
+ mBatteryStats = IBatteryStats.Stub.asInterface(ServiceManager.getService("batteryinfo"));
+
mProperties = new Properties();
try {
File file = new File(PROPERTIES_FILE);
@@ -242,10 +269,6 @@
}
}
- public void setLocationCollector(ILocationCollector collector) {
- mCollector = collector;
- }
-
/**
* Returns true if the provider requires access to a
* data network (e.g., the Internet), false otherwise.
@@ -547,6 +570,30 @@
}
@Override
+ public void addListener(int uid) {
+ mClientUids.put(uid, 0);
+ if (mNavigating) {
+ try {
+ mBatteryStats.noteStartGps(uid);
+ } catch (RemoteException e) {
+ Log.w(TAG, "RemoteException in addListener");
+ }
+ }
+ }
+
+ @Override
+ public void removeListener(int uid) {
+ mClientUids.delete(uid);
+ if (mNavigating) {
+ try {
+ mBatteryStats.noteStopGps(uid);
+ } catch (RemoteException e) {
+ Log.w(TAG, "RemoteException in removeListener");
+ }
+ }
+ }
+
+ @Override
public boolean sendExtraCommand(String command, Bundle extras) {
if ("delete_aiding_data".equals(command)) {
@@ -675,16 +722,6 @@
}
reportLocationChanged(mLocation);
-
- // Send to collector
- if ((flags & LOCATION_HAS_LAT_LONG) == LOCATION_HAS_LAT_LONG
- && mCollector != null) {
- try {
- mCollector.updateLocation(mLocation);
- } catch (RemoteException e) {
- Log.w(TAG, "mCollector.updateLocation failed");
- }
- }
}
if (mStarted && mStatus != AVAILABLE) {
@@ -725,6 +762,20 @@
}
}
+ try {
+ // update battery stats
+ for (int i=mClientUids.size() - 1; i >= 0; i--) {
+ int uid = mClientUids.keyAt(i);
+ if (mNavigating) {
+ mBatteryStats.noteStartGps(uid);
+ } else {
+ mBatteryStats.noteStopGps(uid);
+ }
+ }
+ } catch (RemoteException e) {
+ Log.w(TAG, "RemoteException in reportStatus");
+ }
+
// send an intent to notify that the GPS has been enabled or disabled.
Intent intent = new Intent(GPS_ENABLED_CHANGE_ACTION);
intent.putExtra(EXTRA_ENABLED, mNavigating);
@@ -782,7 +833,44 @@
updateStatus(TEMPORARILY_UNAVAILABLE, mSvCount);
}
}
-
+
+ /**
+ * called from native code to update SUPL status
+ */
+ private void reportSuplStatus(int status) {
+ switch (status) {
+ case GPS_REQUEST_SUPL_DATA_CONN:
+ int result = mConnMgr.startUsingNetworkFeature(
+ ConnectivityManager.TYPE_MOBILE, Phone.FEATURE_ENABLE_SUPL);
+ if (result == Phone.APN_ALREADY_ACTIVE) {
+ native_supl_data_conn_open(mSuplApn);
+ mSuplDataConnectionState = SUPL_DATA_CONNECTION_OPEN;
+ } else if (result == Phone.APN_REQUEST_STARTED) {
+ mSuplDataConnectionState = SUPL_DATA_CONNECTION_OPENING;
+ } else {
+ native_supl_data_conn_failed();
+ }
+ break;
+ case GPS_RELEASE_SUPL_DATA_CONN:
+ if (mSuplDataConnectionState != SUPL_DATA_CONNECTION_CLOSED) {
+ mConnMgr.stopUsingNetworkFeature(
+ ConnectivityManager.TYPE_MOBILE, Phone.FEATURE_ENABLE_SUPL);
+ native_supl_data_conn_closed();
+ mSuplDataConnectionState = SUPL_DATA_CONNECTION_CLOSED;
+ }
+ break;
+ case GPS_SUPL_DATA_CONNECTED:
+ // Log.d(TAG, "GPS_SUPL_DATA_CONNECTED");
+ break;
+ case GPS_SUPL_DATA_CONN_DONE:
+ // Log.d(TAG, "GPS_SUPL_DATA_CONN_DONE");
+ break;
+ case GPS_SUPL_DATA_CONN_FAILED:
+ // Log.d(TAG, "GPS_SUPL_DATA_CONN_FAILED");
+ break;
+ }
+ }
+
private void xtraDownloadRequest() {
if (Config.LOGD) Log.d(TAG, "xtraDownloadRequest");
if (mNetworkThread != null) {
@@ -1002,6 +1090,8 @@
private native void native_inject_xtra_data(byte[] data, int length);
// SUPL Support
+ private native void native_supl_data_conn_open(String apn);
+ private native void native_supl_data_conn_closed();
+ private native void native_supl_data_conn_failed();
private native void native_set_supl_server(int addr, int port);
- private native void native_set_supl_apn(String apn);
}
diff --git a/location/java/com/android/internal/location/LocationProviderProxy.java b/location/java/com/android/internal/location/LocationProviderProxy.java
index 1f4940f..72dd07d 100644
--- a/location/java/com/android/internal/location/LocationProviderProxy.java
+++ b/location/java/com/android/internal/location/LocationProviderProxy.java
@@ -222,52 +222,35 @@
}
}
- public void updateCellLockStatus(boolean acquired) {
+ public void addListener(int uid) {
try {
- mProvider.updateCellLockStatus(acquired);
- } catch (RemoteException e) {
- Log.e(TAG, "updateCellLockStatus failed", e);
- }
- }
-
- public void addListener(String[] applications) {
- try {
- mProvider.addListener(applications);
+ mProvider.addListener(uid);
} catch (RemoteException e) {
Log.e(TAG, "addListener failed", e);
}
}
- public void removeListener(String[] applications) {
+ public void removeListener(int uid) {
try {
- mProvider.removeListener(applications);
+ mProvider.removeListener(uid);
} catch (RemoteException e) {
Log.e(TAG, "removeListener failed", e);
}
}
- public String getFromLocation(double latitude, double longitude, int maxResults,
- String language, String country, String variant, String appName, List<Address> addrs) {
+ public void wakeLockAcquired() {
try {
- return mProvider.getFromLocation(latitude, longitude, maxResults, language, country,
- variant, appName, addrs);
+ mProvider.wakeLockAcquired();
} catch (RemoteException e) {
- Log.e(TAG, "getFromLocation failed", e);
- return null;
+ Log.e(TAG, "wakeLockAcquired failed", e);
}
}
- public String getFromLocationName(String locationName,
- double lowerLeftLatitude, double lowerLeftLongitude,
- double upperRightLatitude, double upperRightLongitude, int maxResults,
- String language, String country, String variant, String appName, List<Address> addrs) {
+ public void wakeLockReleased() {
try {
- return mProvider.getFromLocationName(locationName, lowerLeftLatitude,
- lowerLeftLongitude, upperRightLatitude, upperRightLongitude,
- maxResults, language, country, variant, appName, addrs);
+ mProvider.wakeLockReleased();
} catch (RemoteException e) {
- Log.e(TAG, "getFromLocationName failed", e);
- return null;
+ Log.e(TAG, "wakeLockReleased failed", e);
}
}
}
diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java
index d0fa795..5917ab90 100644
--- a/media/java/android/media/AudioSystem.java
+++ b/media/java/android/media/AudioSystem.java
@@ -200,7 +200,7 @@
* param error error code:
* - AUDIO_STATUS_OK
* - AUDIO_STATUS_SERVER_DIED
- * - UDIO_STATUS_ERROR
+ * - AUDIO_STATUS_ERROR
*/
void onError(int error);
};
diff --git a/media/java/android/media/MediaScanner.java b/media/java/android/media/MediaScanner.java
index fc8476d..ae3e181 100644
--- a/media/java/android/media/MediaScanner.java
+++ b/media/java/android/media/MediaScanner.java
@@ -453,11 +453,12 @@
FileCacheEntry entry = beginFile(path, mimeType, lastModified, fileSize);
// rescan for metadata if file was modified since last scan
if (entry != null && (entry.mLastModifiedChanged || scanAlways)) {
- boolean ringtones = (path.indexOf(RINGTONES_DIR) > 0);
- boolean notifications = (path.indexOf(NOTIFICATIONS_DIR) > 0);
- boolean alarms = (path.indexOf(ALARMS_DIR) > 0);
- boolean podcasts = (path.indexOf(PODCAST_DIR) > 0);
- boolean music = (path.indexOf(MUSIC_DIR) > 0) ||
+ String lowpath = path.toLowerCase();
+ boolean ringtones = (lowpath.indexOf(RINGTONES_DIR) > 0);
+ boolean notifications = (lowpath.indexOf(NOTIFICATIONS_DIR) > 0);
+ boolean alarms = (lowpath.indexOf(ALARMS_DIR) > 0);
+ boolean podcasts = (lowpath.indexOf(PODCAST_DIR) > 0);
+ boolean music = (lowpath.indexOf(MUSIC_DIR) > 0) ||
(!ringtones && !notifications && !alarms && !podcasts);
if (mFileType == MediaFile.FILE_TYPE_MP3 ||
diff --git a/media/libmedia/AudioRecord.cpp b/media/libmedia/AudioRecord.cpp
index 986f88e..1720af0 100644
--- a/media/libmedia/AudioRecord.cpp
+++ b/media/libmedia/AudioRecord.cpp
@@ -73,7 +73,6 @@
// Otherwise the callback thread will never exit.
stop();
if (mClientRecordThread != 0) {
- mCblk->cv.signal();
mClientRecordThread->requestExitAndWait();
mClientRecordThread.clear();
}
@@ -96,7 +95,7 @@
{
LOGV("set(): sampleRate %d, channelCount %d, frameCount %d",sampleRate, channelCount, frameCount);
- if (mAudioFlinger != 0) {
+ if (mAudioRecord != 0) {
return INVALID_OPERATION;
}
@@ -181,7 +180,6 @@
mStatus = NO_ERROR;
- mAudioFlinger = audioFlinger;
mAudioRecord = record;
mCblkMemory = cblk;
mCblk = static_cast<audio_track_cblk_t*>(cblk->pointer());
@@ -293,6 +291,7 @@
}
if (android_atomic_and(~1, &mActive) == 1) {
+ mCblk->cv.signal();
mAudioRecord->stop();
// the record head position will reset to 0, so if a marker is set, we need
// to activate it again
@@ -375,6 +374,7 @@
status_t result;
audio_track_cblk_t* cblk = mCblk;
uint32_t framesReq = audioBuffer->frameCount;
+ uint32_t waitTimeMs = (waitCount < 0) ? cblk->bufferTimeoutMs : WAIT_PERIOD_MS;
audioBuffer->frameCount = 0;
audioBuffer->size = 0;
@@ -391,9 +391,9 @@
if (UNLIKELY(!waitCount))
return WOULD_BLOCK;
timeout = 0;
- result = cblk->cv.waitRelative(cblk->lock, milliseconds(WAIT_PERIOD_MS));
+ result = cblk->cv.waitRelative(cblk->lock, milliseconds(waitTimeMs));
if (__builtin_expect(result!=NO_ERROR, false)) {
- cblk->waitTimeMs += WAIT_PERIOD_MS;
+ cblk->waitTimeMs += waitTimeMs;
if (cblk->waitTimeMs >= cblk->bufferTimeoutMs) {
LOGW( "obtainBuffer timed out (is the CPU pegged?) "
"user=%08x, server=%08x", cblk->user, cblk->server);
@@ -520,7 +520,7 @@
status_t err = obtainBuffer(&audioBuffer, 1);
if (err < NO_ERROR) {
if (err != TIMED_OUT) {
- LOGE("Error obtaining an audio buffer, giving up.");
+ LOGE_IF(err != status_t(NO_MORE_BUFFERS), "Error obtaining an audio buffer, giving up.");
return false;
}
break;
diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp
index 24f7281..289bd75 100644
--- a/media/libmedia/AudioTrack.cpp
+++ b/media/libmedia/AudioTrack.cpp
@@ -92,7 +92,6 @@
// Otherwise the callback thread will never exit.
stop();
if (mAudioTrackThread != 0) {
- mCblk->cv.signal();
mAudioTrackThread->requestExitAndWait();
mAudioTrackThread.clear();
}
@@ -117,7 +116,7 @@
LOGV_IF(sharedBuffer != 0, "sharedBuffer: %p, size: %d", sharedBuffer->pointer(), sharedBuffer->size());
- if (mAudioFlinger != 0) {
+ if (mAudioTrack != 0) {
LOGE("Track already in use");
return INVALID_OPERATION;
}
@@ -228,7 +227,6 @@
mStatus = NO_ERROR;
- mAudioFlinger = audioFlinger;
mAudioTrack = track;
mCblkMemory = cblk;
mCblk = static_cast<audio_track_cblk_t*>(cblk->pointer());
@@ -357,6 +355,7 @@
}
if (android_atomic_and(~1, &mActive) == 1) {
+ mCblk->cv.signal();
mAudioTrack->stop();
// Cancel loops (If we are in the middle of a loop, playback
// would not stop until loopCount reaches 0).
@@ -596,6 +595,7 @@
status_t result;
audio_track_cblk_t* cblk = mCblk;
uint32_t framesReq = audioBuffer->frameCount;
+ uint32_t waitTimeMs = (waitCount < 0) ? cblk->bufferTimeoutMs : WAIT_PERIOD_MS;
audioBuffer->frameCount = 0;
audioBuffer->size = 0;
@@ -614,9 +614,9 @@
if (UNLIKELY(!waitCount))
return WOULD_BLOCK;
timeout = 0;
- result = cblk->cv.waitRelative(cblk->lock, milliseconds(WAIT_PERIOD_MS));
+ result = cblk->cv.waitRelative(cblk->lock, milliseconds(waitTimeMs));
if (__builtin_expect(result!=NO_ERROR, false)) {
- cblk->waitTimeMs += WAIT_PERIOD_MS;
+ cblk->waitTimeMs += waitTimeMs;
if (cblk->waitTimeMs >= cblk->bufferTimeoutMs) {
// timing out when a loop has been set and we have already written upto loop end
// is a normal condition: no need to wake AudioFlinger up.
@@ -798,7 +798,7 @@
status_t err = obtainBuffer(&audioBuffer, 1);
if (err < NO_ERROR) {
if (err != TIMED_OUT) {
- LOGE("Error obtaining an audio buffer, giving up.");
+ LOGE_IF(err != status_t(NO_MORE_BUFFERS), "Error obtaining an audio buffer, giving up.");
return false;
}
break;
diff --git a/media/libmedia/IAudioFlinger.cpp b/media/libmedia/IAudioFlinger.cpp
index 5cbb25c..52bd7d4 100644
--- a/media/libmedia/IAudioFlinger.cpp
+++ b/media/libmedia/IAudioFlinger.cpp
@@ -336,7 +336,7 @@
{
Parcel data, reply;
data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
- remote()->transact(WAKE_UP, data, &reply);
+ remote()->transact(WAKE_UP, data, &reply, IBinder::FLAG_ONEWAY);
return;
}
diff --git a/media/libmedia/IAudioFlingerClient.cpp b/media/libmedia/IAudioFlingerClient.cpp
index 5feb11f..9d00aefb 100644
--- a/media/libmedia/IAudioFlingerClient.cpp
+++ b/media/libmedia/IAudioFlingerClient.cpp
@@ -43,7 +43,7 @@
Parcel data, reply;
data.writeInterfaceToken(IAudioFlingerClient::getInterfaceDescriptor());
data.writeInt32((int)enabled);
- remote()->transact(AUDIO_OUTPUT_CHANGED, data, &reply);
+ remote()->transact(AUDIO_OUTPUT_CHANGED, data, &reply, IBinder::FLAG_ONEWAY);
}
};
diff --git a/opengl/java/android/opengl/GLES10.java b/opengl/java/android/opengl/GLES10.java
new file mode 100644
index 0000000..e597d12
--- /dev/null
+++ b/opengl/java/android/opengl/GLES10.java
@@ -0,0 +1,1336 @@
+/*
+**
+** Copyright 2009, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+
+// This source file is automatically generated
+
+package android.opengl;
+
+import java.nio.Buffer;
+
+public class GLES10 {
+ public static final int GL_ADD = 0x0104;
+ public static final int GL_ALIASED_LINE_WIDTH_RANGE = 0x846E;
+ public static final int GL_ALIASED_POINT_SIZE_RANGE = 0x846D;
+ public static final int GL_ALPHA = 0x1906;
+ public static final int GL_ALPHA_BITS = 0x0D55;
+ public static final int GL_ALPHA_TEST = 0x0BC0;
+ public static final int GL_ALWAYS = 0x0207;
+ public static final int GL_AMBIENT = 0x1200;
+ public static final int GL_AMBIENT_AND_DIFFUSE = 0x1602;
+ public static final int GL_AND = 0x1501;
+ public static final int GL_AND_INVERTED = 0x1504;
+ public static final int GL_AND_REVERSE = 0x1502;
+ public static final int GL_BACK = 0x0405;
+ public static final int GL_BLEND = 0x0BE2;
+ public static final int GL_BLUE_BITS = 0x0D54;
+ public static final int GL_BYTE = 0x1400;
+ public static final int GL_CCW = 0x0901;
+ public static final int GL_CLAMP_TO_EDGE = 0x812F;
+ public static final int GL_CLEAR = 0x1500;
+ public static final int GL_COLOR_ARRAY = 0x8076;
+ public static final int GL_COLOR_BUFFER_BIT = 0x4000;
+ public static final int GL_COLOR_LOGIC_OP = 0x0BF2;
+ public static final int GL_COLOR_MATERIAL = 0x0B57;
+ public static final int GL_COMPRESSED_TEXTURE_FORMATS = 0x86A3;
+ public static final int GL_CONSTANT_ATTENUATION = 0x1207;
+ public static final int GL_COPY = 0x1503;
+ public static final int GL_COPY_INVERTED = 0x150C;
+ public static final int GL_CULL_FACE = 0x0B44;
+ public static final int GL_CW = 0x0900;
+ public static final int GL_DECAL = 0x2101;
+ public static final int GL_DECR = 0x1E03;
+ public static final int GL_DEPTH_BITS = 0x0D56;
+ public static final int GL_DEPTH_BUFFER_BIT = 0x0100;
+ public static final int GL_DEPTH_TEST = 0x0B71;
+ public static final int GL_DIFFUSE = 0x1201;
+ public static final int GL_DITHER = 0x0BD0;
+ public static final int GL_DONT_CARE = 0x1100;
+ public static final int GL_DST_ALPHA = 0x0304;
+ public static final int GL_DST_COLOR = 0x0306;
+ public static final int GL_EMISSION = 0x1600;
+ public static final int GL_EQUAL = 0x0202;
+ public static final int GL_EQUIV = 0x1509;
+ public static final int GL_EXP = 0x0800;
+ public static final int GL_EXP2 = 0x0801;
+ public static final int GL_EXTENSIONS = 0x1F03;
+ public static final int GL_FALSE = 0;
+ public static final int GL_FASTEST = 0x1101;
+ public static final int GL_FIXED = 0x140C;
+ public static final int GL_FLAT = 0x1D00;
+ public static final int GL_FLOAT = 0x1406;
+ public static final int GL_FOG = 0x0B60;
+ public static final int GL_FOG_COLOR = 0x0B66;
+ public static final int GL_FOG_DENSITY = 0x0B62;
+ public static final int GL_FOG_END = 0x0B64;
+ public static final int GL_FOG_HINT = 0x0C54;
+ public static final int GL_FOG_MODE = 0x0B65;
+ public static final int GL_FOG_START = 0x0B63;
+ public static final int GL_FRONT = 0x0404;
+ public static final int GL_FRONT_AND_BACK = 0x0408;
+ public static final int GL_GEQUAL = 0x0206;
+ public static final int GL_GREATER = 0x0204;
+ public static final int GL_GREEN_BITS = 0x0D53;
+ public static final int GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES = 0x8B9B;
+ public static final int GL_IMPLEMENTATION_COLOR_READ_TYPE_OES = 0x8B9A;
+ public static final int GL_INCR = 0x1E02;
+ public static final int GL_INVALID_ENUM = 0x0500;
+ public static final int GL_INVALID_OPERATION = 0x0502;
+ public static final int GL_INVALID_VALUE = 0x0501;
+ public static final int GL_INVERT = 0x150A;
+ public static final int GL_KEEP = 0x1E00;
+ public static final int GL_LEQUAL = 0x0203;
+ public static final int GL_LESS = 0x0201;
+ public static final int GL_LIGHT_MODEL_AMBIENT = 0x0B53;
+ public static final int GL_LIGHT_MODEL_TWO_SIDE = 0x0B52;
+ public static final int GL_LIGHT0 = 0x4000;
+ public static final int GL_LIGHT1 = 0x4001;
+ public static final int GL_LIGHT2 = 0x4002;
+ public static final int GL_LIGHT3 = 0x4003;
+ public static final int GL_LIGHT4 = 0x4004;
+ public static final int GL_LIGHT5 = 0x4005;
+ public static final int GL_LIGHT6 = 0x4006;
+ public static final int GL_LIGHT7 = 0x4007;
+ public static final int GL_LIGHTING = 0x0B50;
+ public static final int GL_LINE_LOOP = 0x0002;
+ public static final int GL_LINE_SMOOTH = 0x0B20;
+ public static final int GL_LINE_SMOOTH_HINT = 0x0C52;
+ public static final int GL_LINE_STRIP = 0x0003;
+ public static final int GL_LINEAR = 0x2601;
+ public static final int GL_LINEAR_ATTENUATION = 0x1208;
+ public static final int GL_LINEAR_MIPMAP_LINEAR = 0x2703;
+ public static final int GL_LINEAR_MIPMAP_NEAREST = 0x2701;
+ public static final int GL_LINES = 0x0001;
+ public static final int GL_LUMINANCE = 0x1909;
+ public static final int GL_LUMINANCE_ALPHA = 0x190A;
+ public static final int GL_MAX_ELEMENTS_INDICES = 0x80E9;
+ public static final int GL_MAX_ELEMENTS_VERTICES = 0x80E8;
+ public static final int GL_MAX_LIGHTS = 0x0D31;
+ public static final int GL_MAX_MODELVIEW_STACK_DEPTH = 0x0D36;
+ public static final int GL_MAX_PROJECTION_STACK_DEPTH = 0x0D38;
+ public static final int GL_MAX_TEXTURE_SIZE = 0x0D33;
+ public static final int GL_MAX_TEXTURE_STACK_DEPTH = 0x0D39;
+ public static final int GL_MAX_TEXTURE_UNITS = 0x84E2;
+ public static final int GL_MAX_VIEWPORT_DIMS = 0x0D3A;
+ public static final int GL_MODELVIEW = 0x1700;
+ public static final int GL_MODULATE = 0x2100;
+ public static final int GL_MULTISAMPLE = 0x809D;
+ public static final int GL_NAND = 0x150E;
+ public static final int GL_NEAREST = 0x2600;
+ public static final int GL_NEAREST_MIPMAP_LINEAR = 0x2702;
+ public static final int GL_NEAREST_MIPMAP_NEAREST = 0x2700;
+ public static final int GL_NEVER = 0x0200;
+ public static final int GL_NICEST = 0x1102;
+ public static final int GL_NO_ERROR = 0;
+ public static final int GL_NOOP = 0x1505;
+ public static final int GL_NOR = 0x1508;
+ public static final int GL_NORMAL_ARRAY = 0x8075;
+ public static final int GL_NORMALIZE = 0x0BA1;
+ public static final int GL_NOTEQUAL = 0x0205;
+ public static final int GL_NUM_COMPRESSED_TEXTURE_FORMATS = 0x86A2;
+ public static final int GL_ONE = 1;
+ public static final int GL_ONE_MINUS_DST_ALPHA = 0x0305;
+ public static final int GL_ONE_MINUS_DST_COLOR = 0x0307;
+ public static final int GL_ONE_MINUS_SRC_ALPHA = 0x0303;
+ public static final int GL_ONE_MINUS_SRC_COLOR = 0x0301;
+ public static final int GL_OR = 0x1507;
+ public static final int GL_OR_INVERTED = 0x150D;
+ public static final int GL_OR_REVERSE = 0x150B;
+ public static final int GL_OUT_OF_MEMORY = 0x0505;
+ public static final int GL_PACK_ALIGNMENT = 0x0D05;
+ public static final int GL_PALETTE4_R5_G6_B5_OES = 0x8B92;
+ public static final int GL_PALETTE4_RGB5_A1_OES = 0x8B94;
+ public static final int GL_PALETTE4_RGB8_OES = 0x8B90;
+ public static final int GL_PALETTE4_RGBA4_OES = 0x8B93;
+ public static final int GL_PALETTE4_RGBA8_OES = 0x8B91;
+ public static final int GL_PALETTE8_R5_G6_B5_OES = 0x8B97;
+ public static final int GL_PALETTE8_RGB5_A1_OES = 0x8B99;
+ public static final int GL_PALETTE8_RGB8_OES = 0x8B95;
+ public static final int GL_PALETTE8_RGBA4_OES = 0x8B98;
+ public static final int GL_PALETTE8_RGBA8_OES = 0x8B96;
+ public static final int GL_PERSPECTIVE_CORRECTION_HINT = 0x0C50;
+ public static final int GL_POINT_SMOOTH = 0x0B10;
+ public static final int GL_POINT_SMOOTH_HINT = 0x0C51;
+ public static final int GL_POINTS = 0x0000;
+ public static final int GL_POINT_FADE_THRESHOLD_SIZE = 0x8128;
+ public static final int GL_POINT_SIZE = 0x0B11;
+ public static final int GL_POLYGON_OFFSET_FILL = 0x8037;
+ public static final int GL_POLYGON_SMOOTH_HINT = 0x0C53;
+ public static final int GL_POSITION = 0x1203;
+ public static final int GL_PROJECTION = 0x1701;
+ public static final int GL_QUADRATIC_ATTENUATION = 0x1209;
+ public static final int GL_RED_BITS = 0x0D52;
+ public static final int GL_RENDERER = 0x1F01;
+ public static final int GL_REPEAT = 0x2901;
+ public static final int GL_REPLACE = 0x1E01;
+ public static final int GL_RESCALE_NORMAL = 0x803A;
+ public static final int GL_RGB = 0x1907;
+ public static final int GL_RGBA = 0x1908;
+ public static final int GL_SAMPLE_ALPHA_TO_COVERAGE = 0x809E;
+ public static final int GL_SAMPLE_ALPHA_TO_ONE = 0x809F;
+ public static final int GL_SAMPLE_COVERAGE = 0x80A0;
+ public static final int GL_SCISSOR_TEST = 0x0C11;
+ public static final int GL_SET = 0x150F;
+ public static final int GL_SHININESS = 0x1601;
+ public static final int GL_SHORT = 0x1402;
+ public static final int GL_SMOOTH = 0x1D01;
+ public static final int GL_SMOOTH_LINE_WIDTH_RANGE = 0x0B22;
+ public static final int GL_SMOOTH_POINT_SIZE_RANGE = 0x0B12;
+ public static final int GL_SPECULAR = 0x1202;
+ public static final int GL_SPOT_CUTOFF = 0x1206;
+ public static final int GL_SPOT_DIRECTION = 0x1204;
+ public static final int GL_SPOT_EXPONENT = 0x1205;
+ public static final int GL_SRC_ALPHA = 0x0302;
+ public static final int GL_SRC_ALPHA_SATURATE = 0x0308;
+ public static final int GL_SRC_COLOR = 0x0300;
+ public static final int GL_STACK_OVERFLOW = 0x0503;
+ public static final int GL_STACK_UNDERFLOW = 0x0504;
+ public static final int GL_STENCIL_BITS = 0x0D57;
+ public static final int GL_STENCIL_BUFFER_BIT = 0x0400;
+ public static final int GL_STENCIL_TEST = 0x0B90;
+ public static final int GL_SUBPIXEL_BITS = 0x0D50;
+ public static final int GL_TEXTURE = 0x1702;
+ public static final int GL_TEXTURE_2D = 0x0DE1;
+ public static final int GL_TEXTURE_COORD_ARRAY = 0x8078;
+ public static final int GL_TEXTURE_ENV = 0x2300;
+ public static final int GL_TEXTURE_ENV_COLOR = 0x2201;
+ public static final int GL_TEXTURE_ENV_MODE = 0x2200;
+ public static final int GL_TEXTURE_MAG_FILTER = 0x2800;
+ public static final int GL_TEXTURE_MIN_FILTER = 0x2801;
+ public static final int GL_TEXTURE_WRAP_S = 0x2802;
+ public static final int GL_TEXTURE_WRAP_T = 0x2803;
+ public static final int GL_TEXTURE0 = 0x84C0;
+ public static final int GL_TEXTURE1 = 0x84C1;
+ public static final int GL_TEXTURE2 = 0x84C2;
+ public static final int GL_TEXTURE3 = 0x84C3;
+ public static final int GL_TEXTURE4 = 0x84C4;
+ public static final int GL_TEXTURE5 = 0x84C5;
+ public static final int GL_TEXTURE6 = 0x84C6;
+ public static final int GL_TEXTURE7 = 0x84C7;
+ public static final int GL_TEXTURE8 = 0x84C8;
+ public static final int GL_TEXTURE9 = 0x84C9;
+ public static final int GL_TEXTURE10 = 0x84CA;
+ public static final int GL_TEXTURE11 = 0x84CB;
+ public static final int GL_TEXTURE12 = 0x84CC;
+ public static final int GL_TEXTURE13 = 0x84CD;
+ public static final int GL_TEXTURE14 = 0x84CE;
+ public static final int GL_TEXTURE15 = 0x84CF;
+ public static final int GL_TEXTURE16 = 0x84D0;
+ public static final int GL_TEXTURE17 = 0x84D1;
+ public static final int GL_TEXTURE18 = 0x84D2;
+ public static final int GL_TEXTURE19 = 0x84D3;
+ public static final int GL_TEXTURE20 = 0x84D4;
+ public static final int GL_TEXTURE21 = 0x84D5;
+ public static final int GL_TEXTURE22 = 0x84D6;
+ public static final int GL_TEXTURE23 = 0x84D7;
+ public static final int GL_TEXTURE24 = 0x84D8;
+ public static final int GL_TEXTURE25 = 0x84D9;
+ public static final int GL_TEXTURE26 = 0x84DA;
+ public static final int GL_TEXTURE27 = 0x84DB;
+ public static final int GL_TEXTURE28 = 0x84DC;
+ public static final int GL_TEXTURE29 = 0x84DD;
+ public static final int GL_TEXTURE30 = 0x84DE;
+ public static final int GL_TEXTURE31 = 0x84DF;
+ public static final int GL_TRIANGLE_FAN = 0x0006;
+ public static final int GL_TRIANGLE_STRIP = 0x0005;
+ public static final int GL_TRIANGLES = 0x0004;
+ public static final int GL_TRUE = 1;
+ public static final int GL_UNPACK_ALIGNMENT = 0x0CF5;
+ public static final int GL_UNSIGNED_BYTE = 0x1401;
+ public static final int GL_UNSIGNED_SHORT = 0x1403;
+ public static final int GL_UNSIGNED_SHORT_4_4_4_4 = 0x8033;
+ public static final int GL_UNSIGNED_SHORT_5_5_5_1 = 0x8034;
+ public static final int GL_UNSIGNED_SHORT_5_6_5 = 0x8363;
+ public static final int GL_VENDOR = 0x1F00;
+ public static final int GL_VERSION = 0x1F02;
+ public static final int GL_VERTEX_ARRAY = 0x8074;
+ public static final int GL_XOR = 0x1506;
+ public static final int GL_ZERO = 0;
+
+ native private static void _nativeClassInit();
+ static {
+ _nativeClassInit();
+ }
+
+ private static Buffer _colorPointer;
+ private static Buffer _normalPointer;
+ private static Buffer _texCoordPointer;
+ private static Buffer _vertexPointer;
+
+ // C function void glActiveTexture ( GLenum texture )
+
+ public static native void glActiveTexture(
+ int texture
+ );
+
+ // C function void glAlphaFunc ( GLenum func, GLclampf ref )
+
+ public static native void glAlphaFunc(
+ int func,
+ float ref
+ );
+
+ // C function void glAlphaFuncx ( GLenum func, GLclampx ref )
+
+ public static native void glAlphaFuncx(
+ int func,
+ int ref
+ );
+
+ // C function void glBindTexture ( GLenum target, GLuint texture )
+
+ public static native void glBindTexture(
+ int target,
+ int texture
+ );
+
+ // C function void glBlendFunc ( GLenum sfactor, GLenum dfactor )
+
+ public static native void glBlendFunc(
+ int sfactor,
+ int dfactor
+ );
+
+ // C function void glClear ( GLbitfield mask )
+
+ public static native void glClear(
+ int mask
+ );
+
+ // C function void glClearColor ( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha )
+
+ public static native void glClearColor(
+ float red,
+ float green,
+ float blue,
+ float alpha
+ );
+
+ // C function void glClearColorx ( GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha )
+
+ public static native void glClearColorx(
+ int red,
+ int green,
+ int blue,
+ int alpha
+ );
+
+ // C function void glClearDepthf ( GLclampf depth )
+
+ public static native void glClearDepthf(
+ float depth
+ );
+
+ // C function void glClearDepthx ( GLclampx depth )
+
+ public static native void glClearDepthx(
+ int depth
+ );
+
+ // C function void glClearStencil ( GLint s )
+
+ public static native void glClearStencil(
+ int s
+ );
+
+ // C function void glClientActiveTexture ( GLenum texture )
+
+ public static native void glClientActiveTexture(
+ int texture
+ );
+
+ // C function void glColor4f ( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha )
+
+ public static native void glColor4f(
+ float red,
+ float green,
+ float blue,
+ float alpha
+ );
+
+ // C function void glColor4x ( GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha )
+
+ public static native void glColor4x(
+ int red,
+ int green,
+ int blue,
+ int alpha
+ );
+
+ // C function void glColorMask ( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha )
+
+ public static native void glColorMask(
+ boolean red,
+ boolean green,
+ boolean blue,
+ boolean alpha
+ );
+
+ // C function void glColorPointer ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer )
+
+ private static native void glColorPointerBounds(
+ int size,
+ int type,
+ int stride,
+ java.nio.Buffer pointer,
+ int remaining
+ );
+
+ public static void glColorPointer(
+ int size,
+ int type,
+ int stride,
+ java.nio.Buffer pointer
+ ) {
+ if ((size == 4) &&
+ ((type == GL_FLOAT) ||
+ (type == GL_UNSIGNED_BYTE) ||
+ (type == GL_FIXED)) &&
+ (stride >= 0)) {
+ _colorPointer = pointer;
+ }
+ glColorPointerBounds(
+ size,
+ type,
+ stride,
+ pointer,
+ pointer.remaining()
+ );
+ }
+
+ // C function void glCompressedTexImage2D ( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data )
+
+ public static native void glCompressedTexImage2D(
+ int target,
+ int level,
+ int internalformat,
+ int width,
+ int height,
+ int border,
+ int imageSize,
+ java.nio.Buffer data
+ );
+
+ // C function void glCompressedTexSubImage2D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data )
+
+ public static native void glCompressedTexSubImage2D(
+ int target,
+ int level,
+ int xoffset,
+ int yoffset,
+ int width,
+ int height,
+ int format,
+ int imageSize,
+ java.nio.Buffer data
+ );
+
+ // C function void glCopyTexImage2D ( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border )
+
+ public static native void glCopyTexImage2D(
+ int target,
+ int level,
+ int internalformat,
+ int x,
+ int y,
+ int width,
+ int height,
+ int border
+ );
+
+ // C function void glCopyTexSubImage2D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height )
+
+ public static native void glCopyTexSubImage2D(
+ int target,
+ int level,
+ int xoffset,
+ int yoffset,
+ int x,
+ int y,
+ int width,
+ int height
+ );
+
+ // C function void glCullFace ( GLenum mode )
+
+ public static native void glCullFace(
+ int mode
+ );
+
+ // C function void glDeleteTextures ( GLsizei n, const GLuint *textures )
+
+ public static native void glDeleteTextures(
+ int n,
+ int[] textures,
+ int offset
+ );
+
+ // C function void glDeleteTextures ( GLsizei n, const GLuint *textures )
+
+ public static native void glDeleteTextures(
+ int n,
+ java.nio.IntBuffer textures
+ );
+
+ // C function void glDepthFunc ( GLenum func )
+
+ public static native void glDepthFunc(
+ int func
+ );
+
+ // C function void glDepthMask ( GLboolean flag )
+
+ public static native void glDepthMask(
+ boolean flag
+ );
+
+ // C function void glDepthRangef ( GLclampf zNear, GLclampf zFar )
+
+ public static native void glDepthRangef(
+ float zNear,
+ float zFar
+ );
+
+ // C function void glDepthRangex ( GLclampx zNear, GLclampx zFar )
+
+ public static native void glDepthRangex(
+ int zNear,
+ int zFar
+ );
+
+ // C function void glDisable ( GLenum cap )
+
+ public static native void glDisable(
+ int cap
+ );
+
+ // C function void glDisableClientState ( GLenum array )
+
+ public static native void glDisableClientState(
+ int array
+ );
+
+ // C function void glDrawArrays ( GLenum mode, GLint first, GLsizei count )
+
+ public static native void glDrawArrays(
+ int mode,
+ int first,
+ int count
+ );
+
+ // C function void glDrawElements ( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices )
+
+ public static native void glDrawElements(
+ int mode,
+ int count,
+ int type,
+ java.nio.Buffer indices
+ );
+
+ // C function void glEnable ( GLenum cap )
+
+ public static native void glEnable(
+ int cap
+ );
+
+ // C function void glEnableClientState ( GLenum array )
+
+ public static native void glEnableClientState(
+ int array
+ );
+
+ // C function void glFinish ( void )
+
+ public static native void glFinish(
+ );
+
+ // C function void glFlush ( void )
+
+ public static native void glFlush(
+ );
+
+ // C function void glFogf ( GLenum pname, GLfloat param )
+
+ public static native void glFogf(
+ int pname,
+ float param
+ );
+
+ // C function void glFogfv ( GLenum pname, const GLfloat *params )
+
+ public static native void glFogfv(
+ int pname,
+ float[] params,
+ int offset
+ );
+
+ // C function void glFogfv ( GLenum pname, const GLfloat *params )
+
+ public static native void glFogfv(
+ int pname,
+ java.nio.FloatBuffer params
+ );
+
+ // C function void glFogx ( GLenum pname, GLfixed param )
+
+ public static native void glFogx(
+ int pname,
+ int param
+ );
+
+ // C function void glFogxv ( GLenum pname, const GLfixed *params )
+
+ public static native void glFogxv(
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glFogxv ( GLenum pname, const GLfixed *params )
+
+ public static native void glFogxv(
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glFrontFace ( GLenum mode )
+
+ public static native void glFrontFace(
+ int mode
+ );
+
+ // C function void glFrustumf ( GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar )
+
+ public static native void glFrustumf(
+ float left,
+ float right,
+ float bottom,
+ float top,
+ float zNear,
+ float zFar
+ );
+
+ // C function void glFrustumx ( GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar )
+
+ public static native void glFrustumx(
+ int left,
+ int right,
+ int bottom,
+ int top,
+ int zNear,
+ int zFar
+ );
+
+ // C function void glGenTextures ( GLsizei n, GLuint *textures )
+
+ public static native void glGenTextures(
+ int n,
+ int[] textures,
+ int offset
+ );
+
+ // C function void glGenTextures ( GLsizei n, GLuint *textures )
+
+ public static native void glGenTextures(
+ int n,
+ java.nio.IntBuffer textures
+ );
+
+ // C function GLenum glGetError ( void )
+
+ public static native int glGetError(
+ );
+
+ // C function void glGetIntegerv ( GLenum pname, GLint *params )
+
+ public static native void glGetIntegerv(
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetIntegerv ( GLenum pname, GLint *params )
+
+ public static native void glGetIntegerv(
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function const GLubyte * glGetString ( GLenum name )
+
+ public native String _glGetString(
+ int name
+ );
+
+ public String glGetString(
+ int name
+ ) {
+ String returnValue;
+ returnValue = _glGetString(
+ name
+ );
+ return returnValue;
+ }
+
+ // C function void glHint ( GLenum target, GLenum mode )
+
+ public static native void glHint(
+ int target,
+ int mode
+ );
+
+ // C function void glLightModelf ( GLenum pname, GLfloat param )
+
+ public static native void glLightModelf(
+ int pname,
+ float param
+ );
+
+ // C function void glLightModelfv ( GLenum pname, const GLfloat *params )
+
+ public static native void glLightModelfv(
+ int pname,
+ float[] params,
+ int offset
+ );
+
+ // C function void glLightModelfv ( GLenum pname, const GLfloat *params )
+
+ public static native void glLightModelfv(
+ int pname,
+ java.nio.FloatBuffer params
+ );
+
+ // C function void glLightModelx ( GLenum pname, GLfixed param )
+
+ public static native void glLightModelx(
+ int pname,
+ int param
+ );
+
+ // C function void glLightModelxv ( GLenum pname, const GLfixed *params )
+
+ public static native void glLightModelxv(
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glLightModelxv ( GLenum pname, const GLfixed *params )
+
+ public static native void glLightModelxv(
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glLightf ( GLenum light, GLenum pname, GLfloat param )
+
+ public static native void glLightf(
+ int light,
+ int pname,
+ float param
+ );
+
+ // C function void glLightfv ( GLenum light, GLenum pname, const GLfloat *params )
+
+ public static native void glLightfv(
+ int light,
+ int pname,
+ float[] params,
+ int offset
+ );
+
+ // C function void glLightfv ( GLenum light, GLenum pname, const GLfloat *params )
+
+ public static native void glLightfv(
+ int light,
+ int pname,
+ java.nio.FloatBuffer params
+ );
+
+ // C function void glLightx ( GLenum light, GLenum pname, GLfixed param )
+
+ public static native void glLightx(
+ int light,
+ int pname,
+ int param
+ );
+
+ // C function void glLightxv ( GLenum light, GLenum pname, const GLfixed *params )
+
+ public static native void glLightxv(
+ int light,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glLightxv ( GLenum light, GLenum pname, const GLfixed *params )
+
+ public static native void glLightxv(
+ int light,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glLineWidth ( GLfloat width )
+
+ public static native void glLineWidth(
+ float width
+ );
+
+ // C function void glLineWidthx ( GLfixed width )
+
+ public static native void glLineWidthx(
+ int width
+ );
+
+ // C function void glLoadIdentity ( void )
+
+ public static native void glLoadIdentity(
+ );
+
+ // C function void glLoadMatrixf ( const GLfloat *m )
+
+ public static native void glLoadMatrixf(
+ float[] m,
+ int offset
+ );
+
+ // C function void glLoadMatrixf ( const GLfloat *m )
+
+ public static native void glLoadMatrixf(
+ java.nio.FloatBuffer m
+ );
+
+ // C function void glLoadMatrixx ( const GLfixed *m )
+
+ public static native void glLoadMatrixx(
+ int[] m,
+ int offset
+ );
+
+ // C function void glLoadMatrixx ( const GLfixed *m )
+
+ public static native void glLoadMatrixx(
+ java.nio.IntBuffer m
+ );
+
+ // C function void glLogicOp ( GLenum opcode )
+
+ public static native void glLogicOp(
+ int opcode
+ );
+
+ // C function void glMaterialf ( GLenum face, GLenum pname, GLfloat param )
+
+ public static native void glMaterialf(
+ int face,
+ int pname,
+ float param
+ );
+
+ // C function void glMaterialfv ( GLenum face, GLenum pname, const GLfloat *params )
+
+ public static native void glMaterialfv(
+ int face,
+ int pname,
+ float[] params,
+ int offset
+ );
+
+ // C function void glMaterialfv ( GLenum face, GLenum pname, const GLfloat *params )
+
+ public static native void glMaterialfv(
+ int face,
+ int pname,
+ java.nio.FloatBuffer params
+ );
+
+ // C function void glMaterialx ( GLenum face, GLenum pname, GLfixed param )
+
+ public static native void glMaterialx(
+ int face,
+ int pname,
+ int param
+ );
+
+ // C function void glMaterialxv ( GLenum face, GLenum pname, const GLfixed *params )
+
+ public static native void glMaterialxv(
+ int face,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glMaterialxv ( GLenum face, GLenum pname, const GLfixed *params )
+
+ public static native void glMaterialxv(
+ int face,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glMatrixMode ( GLenum mode )
+
+ public static native void glMatrixMode(
+ int mode
+ );
+
+ // C function void glMultMatrixf ( const GLfloat *m )
+
+ public static native void glMultMatrixf(
+ float[] m,
+ int offset
+ );
+
+ // C function void glMultMatrixf ( const GLfloat *m )
+
+ public static native void glMultMatrixf(
+ java.nio.FloatBuffer m
+ );
+
+ // C function void glMultMatrixx ( const GLfixed *m )
+
+ public static native void glMultMatrixx(
+ int[] m,
+ int offset
+ );
+
+ // C function void glMultMatrixx ( const GLfixed *m )
+
+ public static native void glMultMatrixx(
+ java.nio.IntBuffer m
+ );
+
+ // C function void glMultiTexCoord4f ( GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q )
+
+ public static native void glMultiTexCoord4f(
+ int target,
+ float s,
+ float t,
+ float r,
+ float q
+ );
+
+ // C function void glMultiTexCoord4x ( GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q )
+
+ public static native void glMultiTexCoord4x(
+ int target,
+ int s,
+ int t,
+ int r,
+ int q
+ );
+
+ // C function void glNormal3f ( GLfloat nx, GLfloat ny, GLfloat nz )
+
+ public static native void glNormal3f(
+ float nx,
+ float ny,
+ float nz
+ );
+
+ // C function void glNormal3x ( GLfixed nx, GLfixed ny, GLfixed nz )
+
+ public static native void glNormal3x(
+ int nx,
+ int ny,
+ int nz
+ );
+
+ // C function void glNormalPointer ( GLenum type, GLsizei stride, const GLvoid *pointer )
+
+ private static native void glNormalPointerBounds(
+ int type,
+ int stride,
+ java.nio.Buffer pointer,
+ int remaining
+ );
+
+ public static void glNormalPointer(
+ int type,
+ int stride,
+ java.nio.Buffer pointer
+ ) {
+ if (((type == GL_FLOAT) ||
+ (type == GL_BYTE) ||
+ (type == GL_SHORT) ||
+ (type == GL_FIXED)) &&
+ (stride >= 0)) {
+ _normalPointer = pointer;
+ }
+ glNormalPointerBounds(
+ type,
+ stride,
+ pointer,
+ pointer.remaining()
+ );
+ }
+
+ // C function void glOrthof ( GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar )
+
+ public static native void glOrthof(
+ float left,
+ float right,
+ float bottom,
+ float top,
+ float zNear,
+ float zFar
+ );
+
+ // C function void glOrthox ( GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar )
+
+ public static native void glOrthox(
+ int left,
+ int right,
+ int bottom,
+ int top,
+ int zNear,
+ int zFar
+ );
+
+ // C function void glPixelStorei ( GLenum pname, GLint param )
+
+ public static native void glPixelStorei(
+ int pname,
+ int param
+ );
+
+ // C function void glPointSize ( GLfloat size )
+
+ public static native void glPointSize(
+ float size
+ );
+
+ // C function void glPointSizex ( GLfixed size )
+
+ public static native void glPointSizex(
+ int size
+ );
+
+ // C function void glPolygonOffset ( GLfloat factor, GLfloat units )
+
+ public static native void glPolygonOffset(
+ float factor,
+ float units
+ );
+
+ // C function void glPolygonOffsetx ( GLfixed factor, GLfixed units )
+
+ public static native void glPolygonOffsetx(
+ int factor,
+ int units
+ );
+
+ // C function void glPopMatrix ( void )
+
+ public static native void glPopMatrix(
+ );
+
+ // C function void glPushMatrix ( void )
+
+ public static native void glPushMatrix(
+ );
+
+ // C function void glReadPixels ( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels )
+
+ public static native void glReadPixels(
+ int x,
+ int y,
+ int width,
+ int height,
+ int format,
+ int type,
+ java.nio.Buffer pixels
+ );
+
+ // C function void glRotatef ( GLfloat angle, GLfloat x, GLfloat y, GLfloat z )
+
+ public static native void glRotatef(
+ float angle,
+ float x,
+ float y,
+ float z
+ );
+
+ // C function void glRotatex ( GLfixed angle, GLfixed x, GLfixed y, GLfixed z )
+
+ public static native void glRotatex(
+ int angle,
+ int x,
+ int y,
+ int z
+ );
+
+ // C function void glSampleCoverage ( GLclampf value, GLboolean invert )
+
+ public static native void glSampleCoverage(
+ float value,
+ boolean invert
+ );
+
+ // C function void glSampleCoveragex ( GLclampx value, GLboolean invert )
+
+ public static native void glSampleCoveragex(
+ int value,
+ boolean invert
+ );
+
+ // C function void glScalef ( GLfloat x, GLfloat y, GLfloat z )
+
+ public static native void glScalef(
+ float x,
+ float y,
+ float z
+ );
+
+ // C function void glScalex ( GLfixed x, GLfixed y, GLfixed z )
+
+ public static native void glScalex(
+ int x,
+ int y,
+ int z
+ );
+
+ // C function void glScissor ( GLint x, GLint y, GLsizei width, GLsizei height )
+
+ public static native void glScissor(
+ int x,
+ int y,
+ int width,
+ int height
+ );
+
+ // C function void glShadeModel ( GLenum mode )
+
+ public static native void glShadeModel(
+ int mode
+ );
+
+ // C function void glStencilFunc ( GLenum func, GLint ref, GLuint mask )
+
+ public static native void glStencilFunc(
+ int func,
+ int ref,
+ int mask
+ );
+
+ // C function void glStencilMask ( GLuint mask )
+
+ public static native void glStencilMask(
+ int mask
+ );
+
+ // C function void glStencilOp ( GLenum fail, GLenum zfail, GLenum zpass )
+
+ public static native void glStencilOp(
+ int fail,
+ int zfail,
+ int zpass
+ );
+
+ // C function void glTexCoordPointer ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer )
+
+ private static native void glTexCoordPointerBounds(
+ int size,
+ int type,
+ int stride,
+ java.nio.Buffer pointer,
+ int remaining
+ );
+
+ public static void glTexCoordPointer(
+ int size,
+ int type,
+ int stride,
+ java.nio.Buffer pointer
+ ) {
+ if (((size == 2) ||
+ (size == 3) ||
+ (size == 4)) &&
+ ((type == GL_FLOAT) ||
+ (type == GL_BYTE) ||
+ (type == GL_SHORT) ||
+ (type == GL_FIXED)) &&
+ (stride >= 0)) {
+ _texCoordPointer = pointer;
+ }
+ glTexCoordPointerBounds(
+ size,
+ type,
+ stride,
+ pointer,
+ pointer.remaining()
+ );
+ }
+
+ // C function void glTexEnvf ( GLenum target, GLenum pname, GLfloat param )
+
+ public static native void glTexEnvf(
+ int target,
+ int pname,
+ float param
+ );
+
+ // C function void glTexEnvfv ( GLenum target, GLenum pname, const GLfloat *params )
+
+ public static native void glTexEnvfv(
+ int target,
+ int pname,
+ float[] params,
+ int offset
+ );
+
+ // C function void glTexEnvfv ( GLenum target, GLenum pname, const GLfloat *params )
+
+ public static native void glTexEnvfv(
+ int target,
+ int pname,
+ java.nio.FloatBuffer params
+ );
+
+ // C function void glTexEnvx ( GLenum target, GLenum pname, GLfixed param )
+
+ public static native void glTexEnvx(
+ int target,
+ int pname,
+ int param
+ );
+
+ // C function void glTexEnvxv ( GLenum target, GLenum pname, const GLfixed *params )
+
+ public static native void glTexEnvxv(
+ int target,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glTexEnvxv ( GLenum target, GLenum pname, const GLfixed *params )
+
+ public static native void glTexEnvxv(
+ int target,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glTexImage2D ( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels )
+
+ public static native void glTexImage2D(
+ int target,
+ int level,
+ int internalformat,
+ int width,
+ int height,
+ int border,
+ int format,
+ int type,
+ java.nio.Buffer pixels
+ );
+
+ // C function void glTexParameterf ( GLenum target, GLenum pname, GLfloat param )
+
+ public static native void glTexParameterf(
+ int target,
+ int pname,
+ float param
+ );
+
+ // C function void glTexParameterx ( GLenum target, GLenum pname, GLfixed param )
+
+ public static native void glTexParameterx(
+ int target,
+ int pname,
+ int param
+ );
+
+ // C function void glTexSubImage2D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels )
+
+ public static native void glTexSubImage2D(
+ int target,
+ int level,
+ int xoffset,
+ int yoffset,
+ int width,
+ int height,
+ int format,
+ int type,
+ java.nio.Buffer pixels
+ );
+
+ // C function void glTranslatef ( GLfloat x, GLfloat y, GLfloat z )
+
+ public static native void glTranslatef(
+ float x,
+ float y,
+ float z
+ );
+
+ // C function void glTranslatex ( GLfixed x, GLfixed y, GLfixed z )
+
+ public static native void glTranslatex(
+ int x,
+ int y,
+ int z
+ );
+
+ // C function void glVertexPointer ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer )
+
+ private static native void glVertexPointerBounds(
+ int size,
+ int type,
+ int stride,
+ java.nio.Buffer pointer,
+ int remaining
+ );
+
+ public static void glVertexPointer(
+ int size,
+ int type,
+ int stride,
+ java.nio.Buffer pointer
+ ) {
+ if (((size == 2) ||
+ (size == 3) ||
+ (size == 4)) &&
+ ((type == GL_FLOAT) ||
+ (type == GL_BYTE) ||
+ (type == GL_SHORT) ||
+ (type == GL_FIXED)) &&
+ (stride >= 0)) {
+ _vertexPointer = pointer;
+ }
+ glVertexPointerBounds(
+ size,
+ type,
+ stride,
+ pointer,
+ pointer.remaining()
+ );
+ }
+
+ // C function void glViewport ( GLint x, GLint y, GLsizei width, GLsizei height )
+
+ public static native void glViewport(
+ int x,
+ int y,
+ int width,
+ int height
+ );
+
+}
diff --git a/opengl/java/android/opengl/GLES10Ext.java b/opengl/java/android/opengl/GLES10Ext.java
new file mode 100644
index 0000000..81fc59e
--- /dev/null
+++ b/opengl/java/android/opengl/GLES10Ext.java
@@ -0,0 +1,44 @@
+/*
+**
+** Copyright 2009, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+
+// This source file is automatically generated
+
+package android.opengl;
+
+public class GLES10Ext {
+ native private static void _nativeClassInit();
+ static {
+ _nativeClassInit();
+ }
+
+ // C function GLbitfield glQueryMatrixxOES ( GLfixed *mantissa, GLint *exponent )
+
+ public static native int glQueryMatrixxOES(
+ int[] mantissa,
+ int mantissaOffset,
+ int[] exponent,
+ int exponentOffset
+ );
+
+ // C function GLbitfield glQueryMatrixxOES ( GLfixed *mantissa, GLint *exponent )
+
+ public static native int glQueryMatrixxOES(
+ java.nio.IntBuffer mantissa,
+ java.nio.IntBuffer exponent
+ );
+
+}
diff --git a/opengl/java/android/opengl/GLES11.java b/opengl/java/android/opengl/GLES11.java
new file mode 100644
index 0000000..3399af7
--- /dev/null
+++ b/opengl/java/android/opengl/GLES11.java
@@ -0,0 +1,707 @@
+/*
+**
+** Copyright 2009, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+
+// This source file is automatically generated
+
+package android.opengl;
+
+import java.nio.Buffer;
+
+public class GLES11 extends GLES10 {
+ public static final int GL_ACTIVE_TEXTURE = 0x84E0;
+ public static final int GL_ADD_SIGNED = 0x8574;
+ public static final int GL_ALPHA_SCALE = 0x0D1C;
+ public static final int GL_ALPHA_TEST_FUNC = 0x0BC1;
+ public static final int GL_ALPHA_TEST_REF = 0x0BC2;
+ public static final int GL_ARRAY_BUFFER = 0x8892;
+ public static final int GL_ARRAY_BUFFER_BINDING = 0x8894;
+ public static final int GL_BLEND_DST = 0x0BE0;
+ public static final int GL_BLEND_SRC = 0x0BE1;
+ public static final int GL_BUFFER_ACCESS = 0x88BB;
+ public static final int GL_BUFFER_SIZE = 0x8764;
+ public static final int GL_BUFFER_USAGE = 0x8765;
+ public static final int GL_CLIENT_ACTIVE_TEXTURE = 0x84E1;
+ public static final int GL_CLIP_PLANE0 = 0x3000;
+ public static final int GL_CLIP_PLANE1 = 0x3001;
+ public static final int GL_CLIP_PLANE2 = 0x3002;
+ public static final int GL_CLIP_PLANE3 = 0x3003;
+ public static final int GL_CLIP_PLANE4 = 0x3004;
+ public static final int GL_CLIP_PLANE5 = 0x3005;
+ public static final int GL_COLOR_ARRAY_BUFFER_BINDING = 0x8898;
+ public static final int GL_COLOR_ARRAY_POINTER = 0x8090;
+ public static final int GL_COLOR_ARRAY_SIZE = 0x8081;
+ public static final int GL_COLOR_ARRAY_STRIDE = 0x8083;
+ public static final int GL_COLOR_ARRAY_TYPE = 0x8082;
+ public static final int GL_COLOR_CLEAR_VALUE = 0x0C22;
+ public static final int GL_COLOR_WRITEMASK = 0x0C23;
+ public static final int GL_COMBINE = 0x8570;
+ public static final int GL_COMBINE_ALPHA = 0x8572;
+ public static final int GL_COMBINE_RGB = 0x8571;
+ public static final int GL_CONSTANT = 0x8576;
+ public static final int GL_COORD_REPLACE_OES = 0x8862;
+ public static final int GL_CULL_FACE_MODE = 0x0B45;
+ public static final int GL_CURRENT_COLOR = 0x0B00;
+ public static final int GL_CURRENT_NORMAL = 0x0B02;
+ public static final int GL_CURRENT_TEXTURE_COORDS = 0x0B03;
+ public static final int GL_DEPTH_CLEAR_VALUE = 0x0B73;
+ public static final int GL_DEPTH_FUNC = 0x0B74;
+ public static final int GL_DEPTH_RANGE = 0x0B70;
+ public static final int GL_DEPTH_WRITEMASK = 0x0B72;
+ public static final int GL_DOT3_RGB = 0x86AE;
+ public static final int GL_DOT3_RGBA = 0x86AF;
+ public static final int GL_DYNAMIC_DRAW = 0x88E8;
+ public static final int GL_ELEMENT_ARRAY_BUFFER = 0x8893;
+ public static final int GL_ELEMENT_ARRAY_BUFFER_BINDING = 0x8895;
+ public static final int GL_FRONT_FACE = 0x0B46;
+ public static final int GL_GENERATE_MIPMAP = 0x8191;
+ public static final int GL_GENERATE_MIPMAP_HINT = 0x8192;
+ public static final int GL_INTERPOLATE = 0x8575;
+ public static final int GL_LINE_WIDTH = 0x0B21;
+ public static final int GL_LOGIC_OP_MODE = 0x0BF0;
+ public static final int GL_MATRIX_MODE = 0x0BA0;
+ public static final int GL_MAX_CLIP_PLANES = 0x0D32;
+ public static final int GL_MODELVIEW_MATRIX = 0x0BA6;
+ public static final int GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES = 0x898D;
+ public static final int GL_MODELVIEW_STACK_DEPTH = 0x0BA3;
+ public static final int GL_NORMAL_ARRAY_BUFFER_BINDING = 0x8897;
+ public static final int GL_NORMAL_ARRAY_POINTER = 0x808F;
+ public static final int GL_NORMAL_ARRAY_STRIDE = 0x807F;
+ public static final int GL_NORMAL_ARRAY_TYPE = 0x807E;
+ public static final int GL_OPERAND0_ALPHA = 0x8598;
+ public static final int GL_OPERAND0_RGB = 0x8590;
+ public static final int GL_OPERAND1_ALPHA = 0x8599;
+ public static final int GL_OPERAND1_RGB = 0x8591;
+ public static final int GL_OPERAND2_ALPHA = 0x859A;
+ public static final int GL_OPERAND2_RGB = 0x8592;
+ public static final int GL_POINT_DISTANCE_ATTENUATION = 0x8129;
+ public static final int GL_POINT_FADE_THRESHOLD_SIZE = 0x8128;
+ public static final int GL_POINT_SIZE = 0x0B11;
+ public static final int GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES = 0x8B9F;
+ public static final int GL_POINT_SIZE_ARRAY_OES = 0x8B9C;
+ public static final int GL_POINT_SIZE_ARRAY_POINTER_OES = 0x898C;
+ public static final int GL_POINT_SIZE_ARRAY_STRIDE_OES = 0x898B;
+ public static final int GL_POINT_SIZE_ARRAY_TYPE_OES = 0x898A;
+ public static final int GL_POINT_SIZE_MAX = 0x8127;
+ public static final int GL_POINT_SIZE_MIN = 0x8126;
+ public static final int GL_POINT_SPRITE_OES = 0x8861;
+ public static final int GL_POLYGON_OFFSET_FACTOR = 0x8038;
+ public static final int GL_POLYGON_OFFSET_UNITS = 0x2A00;
+ public static final int GL_PREVIOUS = 0x8578;
+ public static final int GL_PRIMARY_COLOR = 0x8577;
+ public static final int GL_PROJECTION_MATRIX = 0x0BA7;
+ public static final int GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES = 0x898E;
+ public static final int GL_PROJECTION_STACK_DEPTH = 0x0BA4;
+ public static final int GL_RGB_SCALE = 0x8573;
+ public static final int GL_SAMPLE_BUFFERS = 0x80A8;
+ public static final int GL_SAMPLE_COVERAGE_INVERT = 0x80AB;
+ public static final int GL_SAMPLE_COVERAGE_VALUE = 0x80AA;
+ public static final int GL_SAMPLES = 0x80A9;
+ public static final int GL_SCISSOR_BOX = 0x0C10;
+ public static final int GL_SHADE_MODEL = 0x0B54;
+ public static final int GL_SRC0_ALPHA = 0x8588;
+ public static final int GL_SRC0_RGB = 0x8580;
+ public static final int GL_SRC1_ALPHA = 0x8589;
+ public static final int GL_SRC1_RGB = 0x8581;
+ public static final int GL_SRC2_ALPHA = 0x858A;
+ public static final int GL_SRC2_RGB = 0x8582;
+ public static final int GL_STATIC_DRAW = 0x88E4;
+ public static final int GL_STENCIL_CLEAR_VALUE = 0x0B91;
+ public static final int GL_STENCIL_FAIL = 0x0B94;
+ public static final int GL_STENCIL_FUNC = 0x0B92;
+ public static final int GL_STENCIL_PASS_DEPTH_FAIL = 0x0B95;
+ public static final int GL_STENCIL_PASS_DEPTH_PASS = 0x0B96;
+ public static final int GL_STENCIL_REF = 0x0B97;
+ public static final int GL_STENCIL_VALUE_MASK = 0x0B93;
+ public static final int GL_STENCIL_WRITEMASK = 0x0B98;
+ public static final int GL_SUBTRACT = 0x84E7;
+ public static final int GL_TEXTURE_BINDING_2D = 0x8069;
+ public static final int GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING = 0x889A;
+ public static final int GL_TEXTURE_COORD_ARRAY_POINTER = 0x8092;
+ public static final int GL_TEXTURE_COORD_ARRAY_SIZE = 0x8088;
+ public static final int GL_TEXTURE_COORD_ARRAY_STRIDE = 0x808A;
+ public static final int GL_TEXTURE_COORD_ARRAY_TYPE = 0x8089;
+ public static final int GL_TEXTURE_MATRIX = 0x0BA8;
+ public static final int GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES = 0x898F;
+ public static final int GL_TEXTURE_STACK_DEPTH = 0x0BA5;
+ public static final int GL_VERTEX_ARRAY_BUFFER_BINDING = 0x8896;
+ public static final int GL_VERTEX_ARRAY_POINTER = 0x808E;
+ public static final int GL_VERTEX_ARRAY_SIZE = 0x807A;
+ public static final int GL_VERTEX_ARRAY_STRIDE = 0x807C;
+ public static final int GL_VERTEX_ARRAY_TYPE = 0x807B;
+ public static final int GL_VIEWPORT = 0x0BA2;
+ public static final int GL_WRITE_ONLY = 0x88B9;
+
+ native private static void _nativeClassInit();
+ static {
+ _nativeClassInit();
+ }
+
+ // C function void glBindBuffer ( GLenum target, GLuint buffer )
+
+ public static native void glBindBuffer(
+ int target,
+ int buffer
+ );
+
+ // C function void glBufferData ( GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage )
+
+ public static native void glBufferData(
+ int target,
+ int size,
+ java.nio.Buffer data,
+ int usage
+ );
+
+ // C function void glBufferSubData ( GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data )
+
+ public static native void glBufferSubData(
+ int target,
+ int offset,
+ int size,
+ java.nio.Buffer data
+ );
+
+ // C function void glClipPlanef ( GLenum plane, const GLfloat *equation )
+
+ public static native void glClipPlanef(
+ int plane,
+ float[] equation,
+ int offset
+ );
+
+ // C function void glClipPlanef ( GLenum plane, const GLfloat *equation )
+
+ public static native void glClipPlanef(
+ int plane,
+ java.nio.FloatBuffer equation
+ );
+
+ // C function void glClipPlanex ( GLenum plane, const GLfixed *equation )
+
+ public static native void glClipPlanex(
+ int plane,
+ int[] equation,
+ int offset
+ );
+
+ // C function void glClipPlanex ( GLenum plane, const GLfixed *equation )
+
+ public static native void glClipPlanex(
+ int plane,
+ java.nio.IntBuffer equation
+ );
+
+ // C function void glColor4ub ( GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha )
+
+ public static native void glColor4ub(
+ byte red,
+ byte green,
+ byte blue,
+ byte alpha
+ );
+
+ // C function void glColorPointer ( GLint size, GLenum type, GLsizei stride, GLint offset )
+
+ public static native void glColorPointer(
+ int size,
+ int type,
+ int stride,
+ int offset
+ );
+
+ // C function void glDeleteBuffers ( GLsizei n, const GLuint *buffers )
+
+ public static native void glDeleteBuffers(
+ int n,
+ int[] buffers,
+ int offset
+ );
+
+ // C function void glDeleteBuffers ( GLsizei n, const GLuint *buffers )
+
+ public static native void glDeleteBuffers(
+ int n,
+ java.nio.IntBuffer buffers
+ );
+
+ // C function void glDrawElements ( GLenum mode, GLsizei count, GLenum type, GLint offset )
+
+ public static native void glDrawElements(
+ int mode,
+ int count,
+ int type,
+ int offset
+ );
+
+ // C function void glGenBuffers ( GLsizei n, GLuint *buffers )
+
+ public static native void glGenBuffers(
+ int n,
+ int[] buffers,
+ int offset
+ );
+
+ // C function void glGenBuffers ( GLsizei n, GLuint *buffers )
+
+ public static native void glGenBuffers(
+ int n,
+ java.nio.IntBuffer buffers
+ );
+
+ // C function void glGetBooleanv ( GLenum pname, GLboolean *params )
+
+ public static native void glGetBooleanv(
+ int pname,
+ boolean[] params,
+ int offset
+ );
+
+ // C function void glGetBooleanv ( GLenum pname, GLboolean *params )
+
+ public static native void glGetBooleanv(
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glGetBufferParameteriv ( GLenum target, GLenum pname, GLint *params )
+
+ public static native void glGetBufferParameteriv(
+ int target,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetBufferParameteriv ( GLenum target, GLenum pname, GLint *params )
+
+ public static native void glGetBufferParameteriv(
+ int target,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glGetClipPlanef ( GLenum pname, GLfloat *eqn )
+
+ public static native void glGetClipPlanef(
+ int pname,
+ float[] eqn,
+ int offset
+ );
+
+ // C function void glGetClipPlanef ( GLenum pname, GLfloat *eqn )
+
+ public static native void glGetClipPlanef(
+ int pname,
+ java.nio.FloatBuffer eqn
+ );
+
+ // C function void glGetClipPlanex ( GLenum pname, GLfixed *eqn )
+
+ public static native void glGetClipPlanex(
+ int pname,
+ int[] eqn,
+ int offset
+ );
+
+ // C function void glGetClipPlanex ( GLenum pname, GLfixed *eqn )
+
+ public static native void glGetClipPlanex(
+ int pname,
+ java.nio.IntBuffer eqn
+ );
+
+ // C function void glGetFixedv ( GLenum pname, GLfixed *params )
+
+ public static native void glGetFixedv(
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetFixedv ( GLenum pname, GLfixed *params )
+
+ public static native void glGetFixedv(
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glGetFloatv ( GLenum pname, GLfloat *params )
+
+ public static native void glGetFloatv(
+ int pname,
+ float[] params,
+ int offset
+ );
+
+ // C function void glGetFloatv ( GLenum pname, GLfloat *params )
+
+ public static native void glGetFloatv(
+ int pname,
+ java.nio.FloatBuffer params
+ );
+
+ // C function void glGetLightfv ( GLenum light, GLenum pname, GLfloat *params )
+
+ public static native void glGetLightfv(
+ int light,
+ int pname,
+ float[] params,
+ int offset
+ );
+
+ // C function void glGetLightfv ( GLenum light, GLenum pname, GLfloat *params )
+
+ public static native void glGetLightfv(
+ int light,
+ int pname,
+ java.nio.FloatBuffer params
+ );
+
+ // C function void glGetLightxv ( GLenum light, GLenum pname, GLfixed *params )
+
+ public static native void glGetLightxv(
+ int light,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetLightxv ( GLenum light, GLenum pname, GLfixed *params )
+
+ public static native void glGetLightxv(
+ int light,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glGetMaterialfv ( GLenum face, GLenum pname, GLfloat *params )
+
+ public static native void glGetMaterialfv(
+ int face,
+ int pname,
+ float[] params,
+ int offset
+ );
+
+ // C function void glGetMaterialfv ( GLenum face, GLenum pname, GLfloat *params )
+
+ public static native void glGetMaterialfv(
+ int face,
+ int pname,
+ java.nio.FloatBuffer params
+ );
+
+ // C function void glGetMaterialxv ( GLenum face, GLenum pname, GLfixed *params )
+
+ public static native void glGetMaterialxv(
+ int face,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetMaterialxv ( GLenum face, GLenum pname, GLfixed *params )
+
+ public static native void glGetMaterialxv(
+ int face,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glGetTexEnvfv ( GLenum env, GLenum pname, GLfloat *params )
+
+ public static native void glGetTexEnvfv(
+ int env,
+ int pname,
+ float[] params,
+ int offset
+ );
+
+ // C function void glGetTexEnvfv ( GLenum env, GLenum pname, GLfloat *params )
+
+ public static native void glGetTexEnvfv(
+ int env,
+ int pname,
+ java.nio.FloatBuffer params
+ );
+
+ // C function void glGetTexEnviv ( GLenum env, GLenum pname, GLint *params )
+
+ public static native void glGetTexEnviv(
+ int env,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetTexEnviv ( GLenum env, GLenum pname, GLint *params )
+
+ public static native void glGetTexEnviv(
+ int env,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glGetTexEnvxv ( GLenum env, GLenum pname, GLfixed *params )
+
+ public static native void glGetTexEnvxv(
+ int env,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetTexEnvxv ( GLenum env, GLenum pname, GLfixed *params )
+
+ public static native void glGetTexEnvxv(
+ int env,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glGetTexParameterfv ( GLenum target, GLenum pname, GLfloat *params )
+
+ public static native void glGetTexParameterfv(
+ int target,
+ int pname,
+ float[] params,
+ int offset
+ );
+
+ // C function void glGetTexParameterfv ( GLenum target, GLenum pname, GLfloat *params )
+
+ public static native void glGetTexParameterfv(
+ int target,
+ int pname,
+ java.nio.FloatBuffer params
+ );
+
+ // C function void glGetTexParameteriv ( GLenum target, GLenum pname, GLint *params )
+
+ public static native void glGetTexParameteriv(
+ int target,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetTexParameteriv ( GLenum target, GLenum pname, GLint *params )
+
+ public static native void glGetTexParameteriv(
+ int target,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glGetTexParameterxv ( GLenum target, GLenum pname, GLfixed *params )
+
+ public static native void glGetTexParameterxv(
+ int target,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetTexParameterxv ( GLenum target, GLenum pname, GLfixed *params )
+
+ public static native void glGetTexParameterxv(
+ int target,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function GLboolean glIsBuffer ( GLuint buffer )
+
+ public static native boolean glIsBuffer(
+ int buffer
+ );
+
+ // C function GLboolean glIsEnabled ( GLenum cap )
+
+ public static native boolean glIsEnabled(
+ int cap
+ );
+
+ // C function GLboolean glIsTexture ( GLuint texture )
+
+ public static native boolean glIsTexture(
+ int texture
+ );
+
+ // C function void glNormalPointer ( GLenum type, GLsizei stride, GLint offset )
+
+ public static native void glNormalPointer(
+ int type,
+ int stride,
+ int offset
+ );
+
+ // C function void glPointParameterf ( GLenum pname, GLfloat param )
+
+ public static native void glPointParameterf(
+ int pname,
+ float param
+ );
+
+ // C function void glPointParameterfv ( GLenum pname, const GLfloat *params )
+
+ public static native void glPointParameterfv(
+ int pname,
+ float[] params,
+ int offset
+ );
+
+ // C function void glPointParameterfv ( GLenum pname, const GLfloat *params )
+
+ public static native void glPointParameterfv(
+ int pname,
+ java.nio.FloatBuffer params
+ );
+
+ // C function void glPointParameterx ( GLenum pname, GLfixed param )
+
+ public static native void glPointParameterx(
+ int pname,
+ int param
+ );
+
+ // C function void glPointParameterxv ( GLenum pname, const GLfixed *params )
+
+ public static native void glPointParameterxv(
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glPointParameterxv ( GLenum pname, const GLfixed *params )
+
+ public static native void glPointParameterxv(
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glPointSizePointerOES ( GLenum type, GLsizei stride, const GLvoid *pointer )
+
+ public static native void glPointSizePointerOES(
+ int type,
+ int stride,
+ java.nio.Buffer pointer
+ );
+
+ // C function void glTexCoordPointer ( GLint size, GLenum type, GLsizei stride, GLint offset )
+
+ public static native void glTexCoordPointer(
+ int size,
+ int type,
+ int stride,
+ int offset
+ );
+
+ // C function void glTexEnvi ( GLenum target, GLenum pname, GLint param )
+
+ public static native void glTexEnvi(
+ int target,
+ int pname,
+ int param
+ );
+
+ // C function void glTexEnviv ( GLenum target, GLenum pname, const GLint *params )
+
+ public static native void glTexEnviv(
+ int target,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glTexEnviv ( GLenum target, GLenum pname, const GLint *params )
+
+ public static native void glTexEnviv(
+ int target,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glTexParameterfv ( GLenum target, GLenum pname, const GLfloat *params )
+
+ public static native void glTexParameterfv(
+ int target,
+ int pname,
+ float[] params,
+ int offset
+ );
+
+ // C function void glTexParameterfv ( GLenum target, GLenum pname, const GLfloat *params )
+
+ public static native void glTexParameterfv(
+ int target,
+ int pname,
+ java.nio.FloatBuffer params
+ );
+
+ // C function void glTexParameteri ( GLenum target, GLenum pname, GLint param )
+
+ public static native void glTexParameteri(
+ int target,
+ int pname,
+ int param
+ );
+
+ // C function void glTexParameteriv ( GLenum target, GLenum pname, const GLint *params )
+
+ public static native void glTexParameteriv(
+ int target,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glTexParameteriv ( GLenum target, GLenum pname, const GLint *params )
+
+ public static native void glTexParameteriv(
+ int target,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glTexParameterxv ( GLenum target, GLenum pname, const GLfixed *params )
+
+ public static native void glTexParameterxv(
+ int target,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glTexParameterxv ( GLenum target, GLenum pname, const GLfixed *params )
+
+ public static native void glTexParameterxv(
+ int target,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glVertexPointer ( GLint size, GLenum type, GLsizei stride, GLint offset )
+
+ public static native void glVertexPointer(
+ int size,
+ int type,
+ int stride,
+ int offset
+ );
+
+}
diff --git a/opengl/java/android/opengl/GLES11Ext.java b/opengl/java/android/opengl/GLES11Ext.java
new file mode 100644
index 0000000..4384e9e
--- /dev/null
+++ b/opengl/java/android/opengl/GLES11Ext.java
@@ -0,0 +1,1076 @@
+/*
+**
+** Copyright 2009, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+
+// This source file is automatically generated
+
+package android.opengl;
+
+public class GLES11Ext {
+ public static final int GL_BLEND_EQUATION_RGB_OES = 0x8009;
+ public static final int GL_BLEND_EQUATION_ALPHA_OES = 0x883D;
+ public static final int GL_BLEND_DST_RGB_OES = 0x80C8;
+ public static final int GL_BLEND_SRC_RGB_OES = 0x80C9;
+ public static final int GL_BLEND_DST_ALPHA_OES = 0x80CA;
+ public static final int GL_BLEND_SRC_ALPHA_OES = 0x80CB;
+ public static final int GL_BLEND_EQUATION_OES = 0x8009;
+ public static final int GL_FUNC_ADD_OES = 0x8006;
+ public static final int GL_FUNC_SUBTRACT_OES = 0x800A;
+ public static final int GL_FUNC_REVERSE_SUBTRACT_OES = 0x800B;
+ public static final int GL_ETC1_RGB8_OES = 0x8D64;
+ public static final int GL_DEPTH_COMPONENT24_OES = 0x81A6;
+ public static final int GL_DEPTH_COMPONENT32_OES = 0x81A7;
+ public static final int GL_TEXTURE_CROP_RECT_OES = 0x8B9D;
+ public static final int GL_FIXED_OES = 0x140C;
+ public static final int GL_NONE_OES = 0;
+ public static final int GL_FRAMEBUFFER_OES = 0x8D40;
+ public static final int GL_RENDERBUFFER_OES = 0x8D41;
+ public static final int GL_RGBA4_OES = 0x8056;
+ public static final int GL_RGB5_A1_OES = 0x8057;
+ public static final int GL_RGB565_OES = 0x8D62;
+ public static final int GL_DEPTH_COMPONENT16_OES = 0x81A5;
+ public static final int GL_RENDERBUFFER_WIDTH_OES = 0x8D42;
+ public static final int GL_RENDERBUFFER_HEIGHT_OES = 0x8D43;
+ public static final int GL_RENDERBUFFER_INTERNAL_FORMAT_OES = 0x8D44;
+ public static final int GL_RENDERBUFFER_RED_SIZE_OES = 0x8D50;
+ public static final int GL_RENDERBUFFER_GREEN_SIZE_OES = 0x8D51;
+ public static final int GL_RENDERBUFFER_BLUE_SIZE_OES = 0x8D52;
+ public static final int GL_RENDERBUFFER_ALPHA_SIZE_OES = 0x8D53;
+ public static final int GL_RENDERBUFFER_DEPTH_SIZE_OES = 0x8D54;
+ public static final int GL_RENDERBUFFER_STENCIL_SIZE_OES = 0x8D55;
+ public static final int GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES = 0x8CD0;
+ public static final int GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES = 0x8CD1;
+ public static final int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES = 0x8CD2;
+ public static final int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES = 0x8CD3;
+ public static final int GL_COLOR_ATTACHMENT0_OES = 0x8CE0;
+ public static final int GL_DEPTH_ATTACHMENT_OES = 0x8D00;
+ public static final int GL_STENCIL_ATTACHMENT_OES = 0x8D20;
+ public static final int GL_FRAMEBUFFER_COMPLETE_OES = 0x8CD5;
+ public static final int GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES = 0x8CD6;
+ public static final int GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES = 0x8CD7;
+ public static final int GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES = 0x8CD9;
+ public static final int GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES = 0x8CDA;
+ public static final int GL_FRAMEBUFFER_UNSUPPORTED_OES = 0x8CDD;
+ public static final int GL_FRAMEBUFFER_BINDING_OES = 0x8CA6;
+ public static final int GL_RENDERBUFFER_BINDING_OES = 0x8CA7;
+ public static final int GL_MAX_RENDERBUFFER_SIZE_OES = 0x84E8;
+ public static final int GL_INVALID_FRAMEBUFFER_OPERATION_OES = 0x0506;
+ public static final int GL_WRITE_ONLY_OES = 0x88B9;
+ public static final int GL_BUFFER_ACCESS_OES = 0x88BB;
+ public static final int GL_BUFFER_MAPPED_OES = 0x88BC;
+ public static final int GL_BUFFER_MAP_POINTER_OES = 0x88BD;
+ public static final int GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES = 0x898D;
+ public static final int GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES = 0x898E;
+ public static final int GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES = 0x898F;
+ public static final int GL_MAX_VERTEX_UNITS_OES = 0x86A4;
+ public static final int GL_MAX_PALETTE_MATRICES_OES = 0x8842;
+ public static final int GL_MATRIX_PALETTE_OES = 0x8840;
+ public static final int GL_MATRIX_INDEX_ARRAY_OES = 0x8844;
+ public static final int GL_WEIGHT_ARRAY_OES = 0x86AD;
+ public static final int GL_CURRENT_PALETTE_MATRIX_OES = 0x8843;
+ public static final int GL_MATRIX_INDEX_ARRAY_SIZE_OES = 0x8846;
+ public static final int GL_MATRIX_INDEX_ARRAY_TYPE_OES = 0x8847;
+ public static final int GL_MATRIX_INDEX_ARRAY_STRIDE_OES = 0x8848;
+ public static final int GL_MATRIX_INDEX_ARRAY_POINTER_OES = 0x8849;
+ public static final int GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES = 0x8B9E;
+ public static final int GL_WEIGHT_ARRAY_SIZE_OES = 0x86AB;
+ public static final int GL_WEIGHT_ARRAY_TYPE_OES = 0x86A9;
+ public static final int GL_WEIGHT_ARRAY_STRIDE_OES = 0x86AA;
+ public static final int GL_WEIGHT_ARRAY_POINTER_OES = 0x86AC;
+ public static final int GL_WEIGHT_ARRAY_BUFFER_BINDING_OES = 0x889E;
+ public static final int GL_DEPTH_STENCIL_OES = 0x84F9;
+ public static final int GL_UNSIGNED_INT_24_8_OES = 0x84FA;
+ public static final int GL_DEPTH24_STENCIL8_OES = 0x88F0;
+ public static final int GL_RGB8_OES = 0x8051;
+ public static final int GL_RGBA8_OES = 0x8058;
+ public static final int GL_STENCIL_INDEX1_OES = 0x8D46;
+ public static final int GL_STENCIL_INDEX4_OES = 0x8D47;
+ public static final int GL_STENCIL_INDEX8_OES = 0x8D48;
+ public static final int GL_INCR_WRAP_OES = 0x8507;
+ public static final int GL_DECR_WRAP_OES = 0x8508;
+ public static final int GL_NORMAL_MAP_OES = 0x8511;
+ public static final int GL_REFLECTION_MAP_OES = 0x8512;
+ public static final int GL_TEXTURE_CUBE_MAP_OES = 0x8513;
+ public static final int GL_TEXTURE_BINDING_CUBE_MAP_OES = 0x8514;
+ public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES = 0x8515;
+ public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES = 0x8516;
+ public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES = 0x8517;
+ public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES = 0x8518;
+ public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES = 0x8519;
+ public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES = 0x851A;
+ public static final int GL_MAX_CUBE_MAP_TEXTURE_SIZE_OES = 0x851C;
+ public static final int GL_TEXTURE_GEN_MODE_OES = 0x2500;
+ public static final int GL_TEXTURE_GEN_STR_OES = 0x8D60;
+ public static final int GL_MIRRORED_REPEAT_OES = 0x8370;
+ public static final int GL_3DC_X_AMD = 0x87F9;
+ public static final int GL_3DC_XY_AMD = 0x87FA;
+ public static final int GL_ATC_RGB_AMD = 0x8C92;
+ public static final int GL_ATC_RGBA_EXPLICIT_ALPHA_AMD = 0x8C93;
+ public static final int GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD = 0x87EE;
+ public static final int GL_TEXTURE_MAX_ANISOTROPY_EXT = 0x84FE;
+ public static final int GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT = 0x84FF;
+ public static final int GL_BGRA = 0x80E1;
+
+ native private static void _nativeClassInit();
+ static {
+ _nativeClassInit();
+ }
+
+ // C function void glBlendEquationSeparateOES ( GLenum modeRGB, GLenum modeAlpha )
+
+ public static native void glBlendEquationSeparateOES(
+ int modeRGB,
+ int modeAlpha
+ );
+
+ // C function void glBlendFuncSeparateOES ( GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha )
+
+ public static native void glBlendFuncSeparateOES(
+ int srcRGB,
+ int dstRGB,
+ int srcAlpha,
+ int dstAlpha
+ );
+
+ // C function void glBlendEquationOES ( GLenum mode )
+
+ public static native void glBlendEquationOES(
+ int mode
+ );
+
+ // C function void glDrawTexsOES ( GLshort x, GLshort y, GLshort z, GLshort width, GLshort height )
+
+ public static native void glDrawTexsOES(
+ short x,
+ short y,
+ short z,
+ short width,
+ short height
+ );
+
+ // C function void glDrawTexiOES ( GLint x, GLint y, GLint z, GLint width, GLint height )
+
+ public static native void glDrawTexiOES(
+ int x,
+ int y,
+ int z,
+ int width,
+ int height
+ );
+
+ // C function void glDrawTexxOES ( GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height )
+
+ public static native void glDrawTexxOES(
+ int x,
+ int y,
+ int z,
+ int width,
+ int height
+ );
+
+ // C function void glDrawTexsvOES ( const GLshort *coords )
+
+ public static native void glDrawTexsvOES(
+ short[] coords,
+ int offset
+ );
+
+ // C function void glDrawTexsvOES ( const GLshort *coords )
+
+ public static native void glDrawTexsvOES(
+ java.nio.ShortBuffer coords
+ );
+
+ // C function void glDrawTexivOES ( const GLint *coords )
+
+ public static native void glDrawTexivOES(
+ int[] coords,
+ int offset
+ );
+
+ // C function void glDrawTexivOES ( const GLint *coords )
+
+ public static native void glDrawTexivOES(
+ java.nio.IntBuffer coords
+ );
+
+ // C function void glDrawTexxvOES ( const GLfixed *coords )
+
+ public static native void glDrawTexxvOES(
+ int[] coords,
+ int offset
+ );
+
+ // C function void glDrawTexxvOES ( const GLfixed *coords )
+
+ public static native void glDrawTexxvOES(
+ java.nio.IntBuffer coords
+ );
+
+ // C function void glDrawTexfOES ( GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height )
+
+ public static native void glDrawTexfOES(
+ float x,
+ float y,
+ float z,
+ float width,
+ float height
+ );
+
+ // C function void glDrawTexfvOES ( const GLfloat *coords )
+
+ public static native void glDrawTexfvOES(
+ float[] coords,
+ int offset
+ );
+
+ // C function void glDrawTexfvOES ( const GLfloat *coords )
+
+ public static native void glDrawTexfvOES(
+ java.nio.FloatBuffer coords
+ );
+
+ // C function void glEGLImageTargetTexture2DOES ( GLenum target, GLeglImageOES image )
+
+ public static native void glEGLImageTargetTexture2DOES(
+ int target,
+ java.nio.Buffer image
+ );
+
+ // C function void glEGLImageTargetRenderbufferStorageOES ( GLenum target, GLeglImageOES image )
+
+ public static native void glEGLImageTargetRenderbufferStorageOES(
+ int target,
+ java.nio.Buffer image
+ );
+
+ // C function void glAlphaFuncxOES ( GLenum func, GLclampx ref )
+
+ public static native void glAlphaFuncxOES(
+ int func,
+ int ref
+ );
+
+ // C function void glClearColorxOES ( GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha )
+
+ public static native void glClearColorxOES(
+ int red,
+ int green,
+ int blue,
+ int alpha
+ );
+
+ // C function void glClearDepthxOES ( GLclampx depth )
+
+ public static native void glClearDepthxOES(
+ int depth
+ );
+
+ // C function void glClipPlanexOES ( GLenum plane, const GLfixed *equation )
+
+ public static native void glClipPlanexOES(
+ int plane,
+ int[] equation,
+ int offset
+ );
+
+ // C function void glClipPlanexOES ( GLenum plane, const GLfixed *equation )
+
+ public static native void glClipPlanexOES(
+ int plane,
+ java.nio.IntBuffer equation
+ );
+
+ // C function void glColor4xOES ( GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha )
+
+ public static native void glColor4xOES(
+ int red,
+ int green,
+ int blue,
+ int alpha
+ );
+
+ // C function void glDepthRangexOES ( GLclampx zNear, GLclampx zFar )
+
+ public static native void glDepthRangexOES(
+ int zNear,
+ int zFar
+ );
+
+ // C function void glFogxOES ( GLenum pname, GLfixed param )
+
+ public static native void glFogxOES(
+ int pname,
+ int param
+ );
+
+ // C function void glFogxvOES ( GLenum pname, const GLfixed *params )
+
+ public static native void glFogxvOES(
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glFogxvOES ( GLenum pname, const GLfixed *params )
+
+ public static native void glFogxvOES(
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glFrustumxOES ( GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar )
+
+ public static native void glFrustumxOES(
+ int left,
+ int right,
+ int bottom,
+ int top,
+ int zNear,
+ int zFar
+ );
+
+ // C function void glGetClipPlanexOES ( GLenum pname, GLfixed *eqn )
+
+ public static native void glGetClipPlanexOES(
+ int pname,
+ int[] eqn,
+ int offset
+ );
+
+ // C function void glGetClipPlanexOES ( GLenum pname, GLfixed *eqn )
+
+ public static native void glGetClipPlanexOES(
+ int pname,
+ java.nio.IntBuffer eqn
+ );
+
+ // C function void glGetFixedvOES ( GLenum pname, GLfixed *params )
+
+ public static native void glGetFixedvOES(
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetFixedvOES ( GLenum pname, GLfixed *params )
+
+ public static native void glGetFixedvOES(
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glGetLightxvOES ( GLenum light, GLenum pname, GLfixed *params )
+
+ public static native void glGetLightxvOES(
+ int light,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetLightxvOES ( GLenum light, GLenum pname, GLfixed *params )
+
+ public static native void glGetLightxvOES(
+ int light,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glGetMaterialxvOES ( GLenum face, GLenum pname, GLfixed *params )
+
+ public static native void glGetMaterialxvOES(
+ int face,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetMaterialxvOES ( GLenum face, GLenum pname, GLfixed *params )
+
+ public static native void glGetMaterialxvOES(
+ int face,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glGetTexEnvxvOES ( GLenum env, GLenum pname, GLfixed *params )
+
+ public static native void glGetTexEnvxvOES(
+ int env,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetTexEnvxvOES ( GLenum env, GLenum pname, GLfixed *params )
+
+ public static native void glGetTexEnvxvOES(
+ int env,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glGetTexParameterxvOES ( GLenum target, GLenum pname, GLfixed *params )
+
+ public static native void glGetTexParameterxvOES(
+ int target,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetTexParameterxvOES ( GLenum target, GLenum pname, GLfixed *params )
+
+ public static native void glGetTexParameterxvOES(
+ int target,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glLightModelxOES ( GLenum pname, GLfixed param )
+
+ public static native void glLightModelxOES(
+ int pname,
+ int param
+ );
+
+ // C function void glLightModelxvOES ( GLenum pname, const GLfixed *params )
+
+ public static native void glLightModelxvOES(
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glLightModelxvOES ( GLenum pname, const GLfixed *params )
+
+ public static native void glLightModelxvOES(
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glLightxOES ( GLenum light, GLenum pname, GLfixed param )
+
+ public static native void glLightxOES(
+ int light,
+ int pname,
+ int param
+ );
+
+ // C function void glLightxvOES ( GLenum light, GLenum pname, const GLfixed *params )
+
+ public static native void glLightxvOES(
+ int light,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glLightxvOES ( GLenum light, GLenum pname, const GLfixed *params )
+
+ public static native void glLightxvOES(
+ int light,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glLineWidthxOES ( GLfixed width )
+
+ public static native void glLineWidthxOES(
+ int width
+ );
+
+ // C function void glLoadMatrixxOES ( const GLfixed *m )
+
+ public static native void glLoadMatrixxOES(
+ int[] m,
+ int offset
+ );
+
+ // C function void glLoadMatrixxOES ( const GLfixed *m )
+
+ public static native void glLoadMatrixxOES(
+ java.nio.IntBuffer m
+ );
+
+ // C function void glMaterialxOES ( GLenum face, GLenum pname, GLfixed param )
+
+ public static native void glMaterialxOES(
+ int face,
+ int pname,
+ int param
+ );
+
+ // C function void glMaterialxvOES ( GLenum face, GLenum pname, const GLfixed *params )
+
+ public static native void glMaterialxvOES(
+ int face,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glMaterialxvOES ( GLenum face, GLenum pname, const GLfixed *params )
+
+ public static native void glMaterialxvOES(
+ int face,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glMultMatrixxOES ( const GLfixed *m )
+
+ public static native void glMultMatrixxOES(
+ int[] m,
+ int offset
+ );
+
+ // C function void glMultMatrixxOES ( const GLfixed *m )
+
+ public static native void glMultMatrixxOES(
+ java.nio.IntBuffer m
+ );
+
+ // C function void glMultiTexCoord4xOES ( GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q )
+
+ public static native void glMultiTexCoord4xOES(
+ int target,
+ int s,
+ int t,
+ int r,
+ int q
+ );
+
+ // C function void glNormal3xOES ( GLfixed nx, GLfixed ny, GLfixed nz )
+
+ public static native void glNormal3xOES(
+ int nx,
+ int ny,
+ int nz
+ );
+
+ // C function void glOrthoxOES ( GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar )
+
+ public static native void glOrthoxOES(
+ int left,
+ int right,
+ int bottom,
+ int top,
+ int zNear,
+ int zFar
+ );
+
+ // C function void glPointParameterxOES ( GLenum pname, GLfixed param )
+
+ public static native void glPointParameterxOES(
+ int pname,
+ int param
+ );
+
+ // C function void glPointParameterxvOES ( GLenum pname, const GLfixed *params )
+
+ public static native void glPointParameterxvOES(
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glPointParameterxvOES ( GLenum pname, const GLfixed *params )
+
+ public static native void glPointParameterxvOES(
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glPointSizexOES ( GLfixed size )
+
+ public static native void glPointSizexOES(
+ int size
+ );
+
+ // C function void glPolygonOffsetxOES ( GLfixed factor, GLfixed units )
+
+ public static native void glPolygonOffsetxOES(
+ int factor,
+ int units
+ );
+
+ // C function void glRotatexOES ( GLfixed angle, GLfixed x, GLfixed y, GLfixed z )
+
+ public static native void glRotatexOES(
+ int angle,
+ int x,
+ int y,
+ int z
+ );
+
+ // C function void glSampleCoveragexOES ( GLclampx value, GLboolean invert )
+
+ public static native void glSampleCoveragexOES(
+ int value,
+ boolean invert
+ );
+
+ // C function void glScalexOES ( GLfixed x, GLfixed y, GLfixed z )
+
+ public static native void glScalexOES(
+ int x,
+ int y,
+ int z
+ );
+
+ // C function void glTexEnvxOES ( GLenum target, GLenum pname, GLfixed param )
+
+ public static native void glTexEnvxOES(
+ int target,
+ int pname,
+ int param
+ );
+
+ // C function void glTexEnvxvOES ( GLenum target, GLenum pname, const GLfixed *params )
+
+ public static native void glTexEnvxvOES(
+ int target,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glTexEnvxvOES ( GLenum target, GLenum pname, const GLfixed *params )
+
+ public static native void glTexEnvxvOES(
+ int target,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glTexParameterxOES ( GLenum target, GLenum pname, GLfixed param )
+
+ public static native void glTexParameterxOES(
+ int target,
+ int pname,
+ int param
+ );
+
+ // C function void glTexParameterxvOES ( GLenum target, GLenum pname, const GLfixed *params )
+
+ public static native void glTexParameterxvOES(
+ int target,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glTexParameterxvOES ( GLenum target, GLenum pname, const GLfixed *params )
+
+ public static native void glTexParameterxvOES(
+ int target,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glTranslatexOES ( GLfixed x, GLfixed y, GLfixed z )
+
+ public static native void glTranslatexOES(
+ int x,
+ int y,
+ int z
+ );
+
+ // C function GLboolean glIsRenderbufferOES ( GLuint renderbuffer )
+
+ public static native boolean glIsRenderbufferOES(
+ int renderbuffer
+ );
+
+ // C function void glBindRenderbufferOES ( GLenum target, GLuint renderbuffer )
+
+ public static native void glBindRenderbufferOES(
+ int target,
+ int renderbuffer
+ );
+
+ // C function void glDeleteRenderbuffersOES ( GLsizei n, const GLuint *renderbuffers )
+
+ public static native void glDeleteRenderbuffersOES(
+ int n,
+ int[] renderbuffers,
+ int offset
+ );
+
+ // C function void glDeleteRenderbuffersOES ( GLsizei n, const GLuint *renderbuffers )
+
+ public static native void glDeleteRenderbuffersOES(
+ int n,
+ java.nio.IntBuffer renderbuffers
+ );
+
+ // C function void glGenRenderbuffersOES ( GLsizei n, GLuint *renderbuffers )
+
+ public static native void glGenRenderbuffersOES(
+ int n,
+ int[] renderbuffers,
+ int offset
+ );
+
+ // C function void glGenRenderbuffersOES ( GLsizei n, GLuint *renderbuffers )
+
+ public static native void glGenRenderbuffersOES(
+ int n,
+ java.nio.IntBuffer renderbuffers
+ );
+
+ // C function void glRenderbufferStorageOES ( GLenum target, GLenum internalformat, GLsizei width, GLsizei height )
+
+ public static native void glRenderbufferStorageOES(
+ int target,
+ int internalformat,
+ int width,
+ int height
+ );
+
+ // C function void glGetRenderbufferParameterivOES ( GLenum target, GLenum pname, GLint *params )
+
+ public static native void glGetRenderbufferParameterivOES(
+ int target,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetRenderbufferParameterivOES ( GLenum target, GLenum pname, GLint *params )
+
+ public static native void glGetRenderbufferParameterivOES(
+ int target,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function GLboolean glIsFramebufferOES ( GLuint framebuffer )
+
+ public static native boolean glIsFramebufferOES(
+ int framebuffer
+ );
+
+ // C function void glBindFramebufferOES ( GLenum target, GLuint framebuffer )
+
+ public static native void glBindFramebufferOES(
+ int target,
+ int framebuffer
+ );
+
+ // C function void glDeleteFramebuffersOES ( GLsizei n, const GLuint *framebuffers )
+
+ public static native void glDeleteFramebuffersOES(
+ int n,
+ int[] framebuffers,
+ int offset
+ );
+
+ // C function void glDeleteFramebuffersOES ( GLsizei n, const GLuint *framebuffers )
+
+ public static native void glDeleteFramebuffersOES(
+ int n,
+ java.nio.IntBuffer framebuffers
+ );
+
+ // C function void glGenFramebuffersOES ( GLsizei n, GLuint *framebuffers )
+
+ public static native void glGenFramebuffersOES(
+ int n,
+ int[] framebuffers,
+ int offset
+ );
+
+ // C function void glGenFramebuffersOES ( GLsizei n, GLuint *framebuffers )
+
+ public static native void glGenFramebuffersOES(
+ int n,
+ java.nio.IntBuffer framebuffers
+ );
+
+ // C function GLenum glCheckFramebufferStatusOES ( GLenum target )
+
+ public static native int glCheckFramebufferStatusOES(
+ int target
+ );
+
+ // C function void glFramebufferRenderbufferOES ( GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer )
+
+ public static native void glFramebufferRenderbufferOES(
+ int target,
+ int attachment,
+ int renderbuffertarget,
+ int renderbuffer
+ );
+
+ // C function void glFramebufferTexture2DOES ( GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level )
+
+ public static native void glFramebufferTexture2DOES(
+ int target,
+ int attachment,
+ int textarget,
+ int texture,
+ int level
+ );
+
+ // C function void glGetFramebufferAttachmentParameterivOES ( GLenum target, GLenum attachment, GLenum pname, GLint *params )
+
+ public static native void glGetFramebufferAttachmentParameterivOES(
+ int target,
+ int attachment,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetFramebufferAttachmentParameterivOES ( GLenum target, GLenum attachment, GLenum pname, GLint *params )
+
+ public static native void glGetFramebufferAttachmentParameterivOES(
+ int target,
+ int attachment,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glGenerateMipmapOES ( GLenum target )
+
+ public static native void glGenerateMipmapOES(
+ int target
+ );
+
+ // C function void glCurrentPaletteMatrixOES ( GLuint matrixpaletteindex )
+
+ public static native void glCurrentPaletteMatrixOES(
+ int matrixpaletteindex
+ );
+
+ // C function void glLoadPaletteFromModelViewMatrixOES ( void )
+
+ public static native void glLoadPaletteFromModelViewMatrixOES(
+ );
+
+ // C function void glMatrixIndexPointerOES ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer )
+
+ public static native void glMatrixIndexPointerOES(
+ int size,
+ int type,
+ int stride,
+ java.nio.Buffer pointer
+ );
+
+ // C function void glWeightPointerOES ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer )
+
+ public static native void glWeightPointerOES(
+ int size,
+ int type,
+ int stride,
+ java.nio.Buffer pointer
+ );
+
+ // C function void glDepthRangefOES ( GLclampf zNear, GLclampf zFar )
+
+ public static native void glDepthRangefOES(
+ float zNear,
+ float zFar
+ );
+
+ // C function void glFrustumfOES ( GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar )
+
+ public static native void glFrustumfOES(
+ float left,
+ float right,
+ float bottom,
+ float top,
+ float zNear,
+ float zFar
+ );
+
+ // C function void glOrthofOES ( GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar )
+
+ public static native void glOrthofOES(
+ float left,
+ float right,
+ float bottom,
+ float top,
+ float zNear,
+ float zFar
+ );
+
+ // C function void glClipPlanefOES ( GLenum plane, const GLfloat *equation )
+
+ public static native void glClipPlanefOES(
+ int plane,
+ float[] equation,
+ int offset
+ );
+
+ // C function void glClipPlanefOES ( GLenum plane, const GLfloat *equation )
+
+ public static native void glClipPlanefOES(
+ int plane,
+ java.nio.FloatBuffer equation
+ );
+
+ // C function void glGetClipPlanefOES ( GLenum pname, GLfloat *eqn )
+
+ public static native void glGetClipPlanefOES(
+ int pname,
+ float[] eqn,
+ int offset
+ );
+
+ // C function void glGetClipPlanefOES ( GLenum pname, GLfloat *eqn )
+
+ public static native void glGetClipPlanefOES(
+ int pname,
+ java.nio.FloatBuffer eqn
+ );
+
+ // C function void glClearDepthfOES ( GLclampf depth )
+
+ public static native void glClearDepthfOES(
+ float depth
+ );
+
+ // C function void glTexGenfOES ( GLenum coord, GLenum pname, GLfloat param )
+
+ public static native void glTexGenfOES(
+ int coord,
+ int pname,
+ float param
+ );
+
+ // C function void glTexGenfvOES ( GLenum coord, GLenum pname, const GLfloat *params )
+
+ public static native void glTexGenfvOES(
+ int coord,
+ int pname,
+ float[] params,
+ int offset
+ );
+
+ // C function void glTexGenfvOES ( GLenum coord, GLenum pname, const GLfloat *params )
+
+ public static native void glTexGenfvOES(
+ int coord,
+ int pname,
+ java.nio.FloatBuffer params
+ );
+
+ // C function void glTexGeniOES ( GLenum coord, GLenum pname, GLint param )
+
+ public static native void glTexGeniOES(
+ int coord,
+ int pname,
+ int param
+ );
+
+ // C function void glTexGenivOES ( GLenum coord, GLenum pname, const GLint *params )
+
+ public static native void glTexGenivOES(
+ int coord,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glTexGenivOES ( GLenum coord, GLenum pname, const GLint *params )
+
+ public static native void glTexGenivOES(
+ int coord,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glTexGenxOES ( GLenum coord, GLenum pname, GLfixed param )
+
+ public static native void glTexGenxOES(
+ int coord,
+ int pname,
+ int param
+ );
+
+ // C function void glTexGenxvOES ( GLenum coord, GLenum pname, const GLfixed *params )
+
+ public static native void glTexGenxvOES(
+ int coord,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glTexGenxvOES ( GLenum coord, GLenum pname, const GLfixed *params )
+
+ public static native void glTexGenxvOES(
+ int coord,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glGetTexGenfvOES ( GLenum coord, GLenum pname, GLfloat *params )
+
+ public static native void glGetTexGenfvOES(
+ int coord,
+ int pname,
+ float[] params,
+ int offset
+ );
+
+ // C function void glGetTexGenfvOES ( GLenum coord, GLenum pname, GLfloat *params )
+
+ public static native void glGetTexGenfvOES(
+ int coord,
+ int pname,
+ java.nio.FloatBuffer params
+ );
+
+ // C function void glGetTexGenivOES ( GLenum coord, GLenum pname, GLint *params )
+
+ public static native void glGetTexGenivOES(
+ int coord,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetTexGenivOES ( GLenum coord, GLenum pname, GLint *params )
+
+ public static native void glGetTexGenivOES(
+ int coord,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glGetTexGenxvOES ( GLenum coord, GLenum pname, GLfixed *params )
+
+ public static native void glGetTexGenxvOES(
+ int coord,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetTexGenxvOES ( GLenum coord, GLenum pname, GLfixed *params )
+
+ public static native void glGetTexGenxvOES(
+ int coord,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+}
diff --git a/opengl/tools/glgen/.gitignore b/opengl/tools/glgen/.gitignore
new file mode 100644
index 0000000..007ec65
--- /dev/null
+++ b/opengl/tools/glgen/.gitignore
@@ -0,0 +1,2 @@
+generated
+out
diff --git a/opengl/tools/glgen/gen b/opengl/tools/glgen/gen
index c060040c..011a6ed 100755
--- a/opengl/tools/glgen/gen
+++ b/opengl/tools/glgen/gen
@@ -1,28 +1,58 @@
-#!/bin/sh
+#!/bin/bash
+set -u
+set -e
rm -rf out generated
mkdir out
mkdir -p out/javax/microedition/khronos/opengles
mkdir -p out/com/google/android/gles_jni
mkdir -p out/android/graphics
+mkdir -p out/android/opengl
echo "package android.graphics;" > out/android/graphics/Canvas.java
echo "public interface Canvas {}" >> out/android/graphics/Canvas.java
GLFILE=out/javax/microedition/khronos/opengles/GL.java
-cp stubs/GLHeader.java-if $GLFILE
+cp stubs/jsr239/GLHeader.java-if $GLFILE
-GLGEN_FILES="CFunc.java CType.java CodeEmitter.java GenerateGL.java JFunc.java JType.java JniCodeEmitter.java ParameterChecker.java"
+GLGEN_FILES="CFunc.java CType.java CodeEmitter.java GenerateGL.java GenerateGLES.java GLESCodeEmitter.java JFunc.java JniCodeEmitter.java JType.java Jsr239CodeEmitter.java ParameterChecker.java"
pushd src > /dev/null
javac ${GLGEN_FILES}
+JAVAC_RESULT=$?
+if [ $JAVAC_RESULT -ne 0 ]; then
+ echo "Could not compile glgen."
+ exit $JAVAC_RESULT
+fi
popd > /dev/null
-java -classpath src GenerateGL -c glspec-1.0 glspec-1.0ext glspec-1.1 glspec-1.1ext glspec-1.1extpack glspec-checks
+
+echo "Generating JSR239-like APIs"
+java -classpath src GenerateGL -c specs/jsr239/glspec-1.0 specs/jsr239/glspec-1.0ext specs/jsr239/glspec-1.1 specs/jsr239/glspec-1.1ext specs/jsr239/glspec-1.1extpack specs/jsr239/glspec-checks
+JAVA_RESULT=$?
+if [ $JAVA_RESULT -ne 0 ]; then
+ echo "Could not run GenerateGL."
+ exit $JAVA_RESULT
+fi
+
+echo "Generating static OpenGLES 1.1 bindings"
+java -classpath src GenerateGLES
+JAVA_RESULT=$?
+if [ $JAVA_RESULT -ne 0 ]; then
+ echo "Could not run GenerateGLES."
+ exit $JAVA_RESULT
+fi
+
+rm src/*.class
pushd out > /dev/null
mkdir classes
-javac -d classes com/google/android/gles_jni/GLImpl.java javax/microedition/khronos/opengles/GL10.java javax/microedition/khronos/opengles/GL10Ext.java javax/microedition/khronos/opengles/GL11.java javax/microedition/khronos/opengles/GL11Ext.java javax/microedition/khronos/opengles/GL11ExtensionPack.java
+javac -d classes com/google/android/gles_jni/GLImpl.java javax/microedition/khronos/opengles/GL10.java javax/microedition/khronos/opengles/GL10Ext.java javax/microedition/khronos/opengles/GL11.java javax/microedition/khronos/opengles/GL11Ext.java javax/microedition/khronos/opengles/GL11ExtensionPack.java android/opengl/GLES10.java android/opengl/GLES10Ext.java android/opengl/GLES11.java android/opengl/GLES11Ext.java
popd > /dev/null
+JAVA_RESULT=$?
+if [ $JAVA_RESULT -ne 0 ]; then
+ echo "Could not compile generated classes."
+ exit $JAVA_RESULT
+fi
rm -rf generated
mkdir -p generated/C
@@ -30,81 +60,44 @@
cp -r out/com generated
cp -r out/javax generated
+cp out/android_opengl_*.cpp generated/C
+mkdir -p generated/android/opengl
+cp -r out/android/opengl generated/android
+
rm -rf out
KEEP_GENERATED=0
+SAID_PLEASE=0
-# com_google_android_gles_jni_GLImpl.cpp
-if cmp ../../../../../frameworks/base/core/jni/com_google_android_gles_jni_GLImpl.cpp generated/C/com_google_android_gles_jni_GLImpl.cpp ; then
-echo com_google_android_gles_jni_GLImpl.cpp unchanged
-else
-echo Please p4 edit ../../../../../frameworks/base/core/jni/com_google_android_gles_jni_GLImpl.cpp
-echo Please cp generated/C/com_google_android_gles_jni_GLImpl.cpp ../../../../../frameworks/base/core/jni
-KEEP_GENERATED=1
-fi
+# compareGenerated destDir generatedDir file
+compareGenerated() {
+ if cmp -s $1/$3 $2/$3 ; then
+ echo "# " $3 unchanged
+ else
+ if [ $SAID_PLEASE == "0" ] ; then
+ echo Please evaluate the following commands:
+ echo
+ SAID_PLEASE=1
+ fi
+ echo " " cp $2/$3 $1
+ echo " " git add $1/$3
+ KEEP_GENERATED=1
+ fi
+}
-# GLImpl.java
-if cmp ../../java/com/google/android/gles_jni/GLImpl.java generated/com/google/android/gles_jni/GLImpl.java ; then
-echo GLImpl.java unchanged
-else
-echo Please edit ../../java/com/google/android/gles_jni/GLImpl.java
-echo Please cp generated/com/google/android/gles_jni/GLImpl.java ../../java/com/google/android/gles_jni
-KEEP_GENERATED=1
-fi
+compareGenerated ../../../core/jni generated/C com_google_android_gles_jni_GLImpl.cpp
+compareGenerated ../../java/com/google/android/gles_jni generated/com/google/android/gles_jni GLImpl.java
-# GL.java
-if cmp ../../java/javax/microedition/khronos/opengles/GL.java generated/javax/microedition/khronos/opengles/GL.java ; then
-echo GL.java unchanged
-else
-echo Please edit ../../java/javax/microedition/khronos/opengles/GL.java
-echo Please cp generated/javax/microedition/khronos/opengles/GL.java ../../java/javax/microedition/khronos/opengles/GL.java
-KEEP_GENERATED=1
-fi
+for x in GL.java GL10.java GL10Ext.java GL11.java GL11Ext.java GL11ExtensionPack.java
+do
+ compareGenerated ../../java/javax/microedition/khronos/opengles generated/javax/microedition/khronos/opengles $x
+done
-# GL10.java
-if cmp ../../java/javax/microedition/khronos/opengles/GL10.java generated/javax/microedition/khronos/opengles/GL10.java ; then
-echo GL10.java unchanged
-else
-echo Please edit ../../java/javax/microedition/khronos/opengles/GL10.java
-echo Please cp generated/javax/microedition/khronos/opengles/GL10.java ../../java/javax/microedition/khronos/opengles/GL10.java
-KEEP_GENERATED=1
-fi
-
-# GL10Ext.java
-if cmp ../../java/javax/microedition/khronos/opengles/GL10Ext.java generated/javax/microedition/khronos/opengles/GL10Ext.java ; then
-echo GL10Ext.java unchanged
-else
-echo Please edit ../../java/javax/microedition/khronos/opengles/GL10Ext.java
-echo Please cp generated/javax/microedition/khronos/opengles/GL10Ext.java ../../java/javax/microedition/khronos/opengles/GL10Ext.java
-KEEP_GENERATED=1
-fi
-
-# GL11.java
-if cmp ../../java/javax/microedition/khronos/opengles/GL11.java generated/javax/microedition/khronos/opengles/GL11.java ; then
-echo GL11.java unchanged
-else
-echo Please edit ../../java/javax/microedition/khronos/opengles/GL11.java
-echo Please cp generated/javax/microedition/khronos/opengles/GL11.java ../../java/javax/microedition/khronos/opengles/GL11.java
-KEEP_GENERATED=1
-fi
-
-# GL11Ext.java
-if cmp ../../java/javax/microedition/khronos/opengles/GL11Ext.java generated/javax/microedition/khronos/opengles/GL11Ext.java ; then
-echo GL11Ext.java unchanged
-else
-echo Please edit ../../java/javax/microedition/khronos/opengles/GL11Ext.java
-echo Please cp generated/javax/microedition/khronos/opengles/GL11Ext.java ../../java/javax/microedition/khronos/opengles/GL11Ext.java
-KEEP_GENERATED=1
-fi
-
-# GL11ExtensionPack.java
-if cmp ../../java/javax/microedition/khronos/opengles/GL11ExtensionPack.java generated/javax/microedition/khronos/opengles/GL11ExtensionPack.java ; then
-echo GL11ExtensionPack.java unchanged
-else
-echo Please edit ../../java/javax/microedition/khronos/opengles/GL11ExtensionPack.java
-echo Please cp generated/javax/microedition/khronos/opengles/GL11ExtensionPack.java ../../java/javax/microedition/khronos/opengles/GL11ExtensionPack.java
-KEEP_GENERATED=1
-fi
+for x in GLES10 GLES10Ext GLES11 GLES11Ext
+do
+ compareGenerated ../../java/android/opengl generated/android/opengl ${x}.java
+ compareGenerated ../../../core/jni generated/C android_opengl_${x}.cpp
+done
if [ $KEEP_GENERATED == "0" ] ; then
-rm -rf generated
+ rm -rf generated
fi
diff --git a/opengl/tools/glgen/specs/gles11/GLES10.spec b/opengl/tools/glgen/specs/gles11/GLES10.spec
new file mode 100644
index 0000000..8e1152d
--- /dev/null
+++ b/opengl/tools/glgen/specs/gles11/GLES10.spec
@@ -0,0 +1,106 @@
+void glActiveTexture ( GLenum texture )
+void glAlphaFunc ( GLenum func, GLclampf ref )
+void glAlphaFuncx ( GLenum func, GLclampx ref )
+void glBindTexture ( GLenum target, GLuint texture )
+void glBlendFunc ( GLenum sfactor, GLenum dfactor )
+void glClear ( GLbitfield mask )
+void glClearColor ( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha )
+void glClearColorx ( GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha )
+void glClearDepthf ( GLclampf depth )
+void glClearDepthx ( GLclampx depth )
+void glClearStencil ( GLint s )
+void glClientActiveTexture ( GLenum texture )
+void glColor4f ( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha )
+void glColor4x ( GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha )
+void glColorMask ( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha )
+void glColorPointer ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer )
+void glCompressedTexImage2D ( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data )
+void glCompressedTexSubImage2D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data )
+void glCopyTexImage2D ( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border )
+void glCopyTexSubImage2D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height )
+void glCullFace ( GLenum mode )
+void glDeleteTextures ( GLsizei n, const GLuint *textures )
+void glDepthFunc ( GLenum func )
+void glDepthMask ( GLboolean flag )
+void glDepthRangef ( GLclampf zNear, GLclampf zFar )
+void glDepthRangex ( GLclampx zNear, GLclampx zFar )
+void glDisable ( GLenum cap )
+void glDisableClientState ( GLenum array )
+void glDrawArrays ( GLenum mode, GLint first, GLsizei count )
+void glDrawElements ( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices )
+void glEnable ( GLenum cap )
+void glEnableClientState ( GLenum array )
+void glFinish ( void )
+void glFlush ( void )
+void glFogf ( GLenum pname, GLfloat param )
+void glFogfv ( GLenum pname, const GLfloat *params )
+void glFogx ( GLenum pname, GLfixed param )
+void glFogxv ( GLenum pname, const GLfixed *params )
+void glFrontFace ( GLenum mode )
+void glFrustumf ( GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar )
+void glFrustumx ( GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar )
+void glGenTextures ( GLsizei n, GLuint *textures )
+GLenum glGetError ( void )
+void glGetIntegerv ( GLenum pname, GLint *params )
+const GLubyte * glGetString ( GLenum name )
+void glHint ( GLenum target, GLenum mode )
+void glLightModelf ( GLenum pname, GLfloat param )
+void glLightModelfv ( GLenum pname, const GLfloat *params )
+void glLightModelx ( GLenum pname, GLfixed param )
+void glLightModelxv ( GLenum pname, const GLfixed *params )
+void glLightf ( GLenum light, GLenum pname, GLfloat param )
+void glLightfv ( GLenum light, GLenum pname, const GLfloat *params )
+void glLightx ( GLenum light, GLenum pname, GLfixed param )
+void glLightxv ( GLenum light, GLenum pname, const GLfixed *params )
+void glLineWidth ( GLfloat width )
+void glLineWidthx ( GLfixed width )
+void glLoadIdentity ( void )
+void glLoadMatrixf ( const GLfloat *m )
+void glLoadMatrixx ( const GLfixed *m )
+void glLogicOp ( GLenum opcode )
+void glMaterialf ( GLenum face, GLenum pname, GLfloat param )
+void glMaterialfv ( GLenum face, GLenum pname, const GLfloat *params )
+void glMaterialx ( GLenum face, GLenum pname, GLfixed param )
+void glMaterialxv ( GLenum face, GLenum pname, const GLfixed *params )
+void glMatrixMode ( GLenum mode )
+void glMultMatrixf ( const GLfloat *m )
+void glMultMatrixx ( const GLfixed *m )
+void glMultiTexCoord4f ( GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q )
+void glMultiTexCoord4x ( GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q )
+void glNormal3f ( GLfloat nx, GLfloat ny, GLfloat nz )
+void glNormal3x ( GLfixed nx, GLfixed ny, GLfixed nz )
+void glNormalPointer ( GLenum type, GLsizei stride, const GLvoid *pointer )
+void glOrthof ( GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar )
+void glOrthox ( GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar )
+void glPixelStorei ( GLenum pname, GLint param )
+void glPointSize ( GLfloat size )
+void glPointSizex ( GLfixed size )
+void glPolygonOffset ( GLfloat factor, GLfloat units )
+void glPolygonOffsetx ( GLfixed factor, GLfixed units )
+void glPopMatrix ( void )
+void glPushMatrix ( void )
+void glReadPixels ( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels )
+void glRotatef ( GLfloat angle, GLfloat x, GLfloat y, GLfloat z )
+void glRotatex ( GLfixed angle, GLfixed x, GLfixed y, GLfixed z )
+void glSampleCoverage ( GLclampf value, GLboolean invert )
+void glSampleCoveragex ( GLclampx value, GLboolean invert )
+void glScalef ( GLfloat x, GLfloat y, GLfloat z )
+void glScalex ( GLfixed x, GLfixed y, GLfixed z )
+void glScissor ( GLint x, GLint y, GLsizei width, GLsizei height )
+void glShadeModel ( GLenum mode )
+void glStencilFunc ( GLenum func, GLint ref, GLuint mask )
+void glStencilMask ( GLuint mask )
+void glStencilOp ( GLenum fail, GLenum zfail, GLenum zpass )
+void glTexCoordPointer ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer )
+void glTexEnvf ( GLenum target, GLenum pname, GLfloat param )
+void glTexEnvfv ( GLenum target, GLenum pname, const GLfloat *params )
+void glTexEnvx ( GLenum target, GLenum pname, GLfixed param )
+void glTexEnvxv ( GLenum target, GLenum pname, const GLfixed *params )
+void glTexImage2D ( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels )
+void glTexParameterf ( GLenum target, GLenum pname, GLfloat param )
+void glTexParameterx ( GLenum target, GLenum pname, GLfixed param )
+void glTexSubImage2D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels )
+void glTranslatef ( GLfloat x, GLfloat y, GLfloat z )
+void glTranslatex ( GLfixed x, GLfixed y, GLfixed z )
+void glVertexPointer ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer )
+void glViewport ( GLint x, GLint y, GLsizei width, GLsizei height )
diff --git a/opengl/tools/glgen/specs/gles11/GLES10Ext.spec b/opengl/tools/glgen/specs/gles11/GLES10Ext.spec
new file mode 100644
index 0000000..53f6c65
--- /dev/null
+++ b/opengl/tools/glgen/specs/gles11/GLES10Ext.spec
@@ -0,0 +1 @@
+GLbitfield glQueryMatrixxOES ( GLfixed *mantissa, GLint *exponent )
diff --git a/opengl/tools/glgen/specs/gles11/GLES11.spec b/opengl/tools/glgen/specs/gles11/GLES11.spec
new file mode 100644
index 0000000..5527c18
--- /dev/null
+++ b/opengl/tools/glgen/specs/gles11/GLES11.spec
@@ -0,0 +1,44 @@
+void glBindBuffer ( GLenum target, GLuint buffer )
+void glBufferData ( GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage )
+void glBufferSubData ( GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data )
+void glClipPlanef ( GLenum plane, const GLfloat *equation )
+void glClipPlanex ( GLenum plane, const GLfixed *equation )
+void glColor4ub ( GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha )
+void glColorPointer ( GLint size, GLenum type, GLsizei stride, GLint offset )
+void glDeleteBuffers ( GLsizei n, const GLuint *buffers )
+void glDrawElements ( GLenum mode, GLsizei count, GLenum type, GLint offset )
+void glGenBuffers ( GLsizei n, GLuint *buffers )
+void glGetBooleanv ( GLenum pname, GLboolean *params )
+void glGetBufferParameteriv ( GLenum target, GLenum pname, GLint *params )
+void glGetClipPlanef ( GLenum pname, GLfloat *eqn )
+void glGetClipPlanex ( GLenum pname, GLfixed *eqn )
+void glGetFixedv ( GLenum pname, GLfixed *params )
+void glGetFloatv ( GLenum pname, GLfloat *params )
+void glGetLightfv ( GLenum light, GLenum pname, GLfloat *params )
+void glGetLightxv ( GLenum light, GLenum pname, GLfixed *params )
+void glGetMaterialfv ( GLenum face, GLenum pname, GLfloat *params )
+void glGetMaterialxv ( GLenum face, GLenum pname, GLfixed *params )
+// void glGetPointerv ( GLenum pname, void **params )
+void glGetTexEnvfv ( GLenum env, GLenum pname, GLfloat *params )
+void glGetTexEnviv ( GLenum env, GLenum pname, GLint *params )
+void glGetTexEnvxv ( GLenum env, GLenum pname, GLfixed *params )
+void glGetTexParameterfv ( GLenum target, GLenum pname, GLfloat *params )
+void glGetTexParameteriv ( GLenum target, GLenum pname, GLint *params )
+void glGetTexParameterxv ( GLenum target, GLenum pname, GLfixed *params )
+GLboolean glIsBuffer ( GLuint buffer )
+GLboolean glIsEnabled ( GLenum cap )
+GLboolean glIsTexture ( GLuint texture )
+void glNormalPointer ( GLenum type, GLsizei stride, GLint offset )
+void glPointParameterf ( GLenum pname, GLfloat param )
+void glPointParameterfv ( GLenum pname, const GLfloat *params )
+void glPointParameterx ( GLenum pname, GLfixed param )
+void glPointParameterxv ( GLenum pname, const GLfixed *params )
+void glPointSizePointerOES ( GLenum type, GLsizei stride, const GLvoid *pointer )
+void glTexCoordPointer ( GLint size, GLenum type, GLsizei stride, GLint offset )
+void glTexEnvi ( GLenum target, GLenum pname, GLint param )
+void glTexEnviv ( GLenum target, GLenum pname, const GLint *params )
+void glTexParameterfv ( GLenum target, GLenum pname, const GLfloat *params )
+void glTexParameteri ( GLenum target, GLenum pname, GLint param )
+void glTexParameteriv ( GLenum target, GLenum pname, const GLint *params )
+void glTexParameterxv ( GLenum target, GLenum pname, const GLfixed *params )
+void glVertexPointer ( GLint size, GLenum type, GLsizei stride, GLint offset )
diff --git a/opengl/tools/glgen/specs/gles11/GLES11Ext.spec b/opengl/tools/glgen/specs/gles11/GLES11Ext.spec
new file mode 100644
index 0000000..cd7333a
--- /dev/null
+++ b/opengl/tools/glgen/specs/gles11/GLES11Ext.spec
@@ -0,0 +1,90 @@
+void glBlendEquationSeparateOES ( GLenum modeRGB, GLenum modeAlpha )
+void glBlendFuncSeparateOES ( GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha )
+void glBlendEquationOES ( GLenum mode )
+void glDrawTexsOES ( GLshort x, GLshort y, GLshort z, GLshort width, GLshort height )
+void glDrawTexiOES ( GLint x, GLint y, GLint z, GLint width, GLint height )
+void glDrawTexxOES ( GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height )
+void glDrawTexsvOES ( const GLshort *coords )
+void glDrawTexivOES ( const GLint *coords )
+void glDrawTexxvOES ( const GLfixed *coords )
+void glDrawTexfOES ( GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height )
+void glDrawTexfvOES ( const GLfloat *coords )
+void glEGLImageTargetTexture2DOES ( GLenum target, GLeglImageOES image )
+void glEGLImageTargetRenderbufferStorageOES ( GLenum target, GLeglImageOES image )
+void glAlphaFuncxOES ( GLenum func, GLclampx ref )
+void glClearColorxOES ( GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha )
+void glClearDepthxOES ( GLclampx depth )
+void glClipPlanexOES ( GLenum plane, const GLfixed *equation )
+void glColor4xOES ( GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha )
+void glDepthRangexOES ( GLclampx zNear, GLclampx zFar )
+void glFogxOES ( GLenum pname, GLfixed param )
+void glFogxvOES ( GLenum pname, const GLfixed *params )
+void glFrustumxOES ( GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar )
+void glGetClipPlanexOES ( GLenum pname, GLfixed *eqn )
+void glGetFixedvOES ( GLenum pname, GLfixed *params )
+void glGetLightxvOES ( GLenum light, GLenum pname, GLfixed *params )
+void glGetMaterialxvOES ( GLenum face, GLenum pname, GLfixed *params )
+void glGetTexEnvxvOES ( GLenum env, GLenum pname, GLfixed *params )
+void glGetTexParameterxvOES ( GLenum target, GLenum pname, GLfixed *params )
+void glLightModelxOES ( GLenum pname, GLfixed param )
+void glLightModelxvOES ( GLenum pname, const GLfixed *params )
+void glLightxOES ( GLenum light, GLenum pname, GLfixed param )
+void glLightxvOES ( GLenum light, GLenum pname, const GLfixed *params )
+void glLineWidthxOES ( GLfixed width )
+void glLoadMatrixxOES ( const GLfixed *m )
+void glMaterialxOES ( GLenum face, GLenum pname, GLfixed param )
+void glMaterialxvOES ( GLenum face, GLenum pname, const GLfixed *params )
+void glMultMatrixxOES ( const GLfixed *m )
+void glMultiTexCoord4xOES ( GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q )
+void glNormal3xOES ( GLfixed nx, GLfixed ny, GLfixed nz )
+void glOrthoxOES ( GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar )
+void glPointParameterxOES ( GLenum pname, GLfixed param )
+void glPointParameterxvOES ( GLenum pname, const GLfixed *params )
+void glPointSizexOES ( GLfixed size )
+void glPolygonOffsetxOES ( GLfixed factor, GLfixed units )
+void glRotatexOES ( GLfixed angle, GLfixed x, GLfixed y, GLfixed z )
+void glSampleCoveragexOES ( GLclampx value, GLboolean invert )
+void glScalexOES ( GLfixed x, GLfixed y, GLfixed z )
+void glTexEnvxOES ( GLenum target, GLenum pname, GLfixed param )
+void glTexEnvxvOES ( GLenum target, GLenum pname, const GLfixed *params )
+void glTexParameterxOES ( GLenum target, GLenum pname, GLfixed param )
+void glTexParameterxvOES ( GLenum target, GLenum pname, const GLfixed *params )
+void glTranslatexOES ( GLfixed x, GLfixed y, GLfixed z )
+GLboolean glIsRenderbufferOES ( GLuint renderbuffer )
+void glBindRenderbufferOES ( GLenum target, GLuint renderbuffer )
+void glDeleteRenderbuffersOES ( GLsizei n, const GLuint *renderbuffers )
+void glGenRenderbuffersOES ( GLsizei n, GLuint *renderbuffers )
+void glRenderbufferStorageOES ( GLenum target, GLenum internalformat, GLsizei width, GLsizei height )
+void glGetRenderbufferParameterivOES ( GLenum target, GLenum pname, GLint *params )
+GLboolean glIsFramebufferOES ( GLuint framebuffer )
+void glBindFramebufferOES ( GLenum target, GLuint framebuffer )
+void glDeleteFramebuffersOES ( GLsizei n, const GLuint *framebuffers )
+void glGenFramebuffersOES ( GLsizei n, GLuint *framebuffers )
+GLenum glCheckFramebufferStatusOES ( GLenum target )
+void glFramebufferRenderbufferOES ( GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer )
+void glFramebufferTexture2DOES ( GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level )
+void glGetFramebufferAttachmentParameterivOES ( GLenum target, GLenum attachment, GLenum pname, GLint *params )
+void glGenerateMipmapOES ( GLenum target )
+// Hard to export to Java:
+// void *glMapBufferOES ( GLenum target, GLenum access )
+// GLboolean glUnmapBufferOES ( GLenum target )
+// void glGetBufferPointervOES ( GLenum target, GLenum pname, void **params )
+void glCurrentPaletteMatrixOES ( GLuint matrixpaletteindex )
+void glLoadPaletteFromModelViewMatrixOES ( void )
+void glMatrixIndexPointerOES ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer )
+void glWeightPointerOES ( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer )
+void glDepthRangefOES ( GLclampf zNear, GLclampf zFar )
+void glFrustumfOES ( GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar )
+void glOrthofOES ( GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar )
+void glClipPlanefOES ( GLenum plane, const GLfloat *equation )
+void glGetClipPlanefOES ( GLenum pname, GLfloat *eqn )
+void glClearDepthfOES ( GLclampf depth )
+void glTexGenfOES ( GLenum coord, GLenum pname, GLfloat param )
+void glTexGenfvOES ( GLenum coord, GLenum pname, const GLfloat *params )
+void glTexGeniOES ( GLenum coord, GLenum pname, GLint param )
+void glTexGenivOES ( GLenum coord, GLenum pname, const GLint *params )
+void glTexGenxOES ( GLenum coord, GLenum pname, GLfixed param )
+void glTexGenxvOES ( GLenum coord, GLenum pname, const GLfixed *params )
+void glGetTexGenfvOES ( GLenum coord, GLenum pname, GLfloat *params )
+void glGetTexGenivOES ( GLenum coord, GLenum pname, GLint *params )
+void glGetTexGenxvOES ( GLenum coord, GLenum pname, GLfixed *params )
diff --git a/opengl/tools/glgen/specs/gles11/checks.spec b/opengl/tools/glgen/specs/gles11/checks.spec
new file mode 100644
index 0000000..9ff1205
--- /dev/null
+++ b/opengl/tools/glgen/specs/gles11/checks.spec
@@ -0,0 +1,145 @@
+glClipPlanef check eqn 4
+glClipPlanex check eqn 4
+glGetClipPlanefOES check eqn 4
+glGetClipPlanexOES check eqn 4
+glDeleteBuffers check buffers n
+glDeleteTextures check textures n
+glDrawElements check_AIOOBE indices count
+glFog ifcheck params 1 pname GL_FOG_MODE,GL_FOG_DENSITY,GL_FOG_START,GL_FOG_END ifcheck params 4 pname GL_FOG_COLOR
+glGenBuffers check buffers n
+glGenTextures check textures n
+glGetClipPlane check eqn 4
+glGetIntegerv ifcheck params 1 pname GL_ALPHA_BITS,GL_ALPHA_TEST_FUNC,GL_ALPHA_TEST_REF,GL_BLEND_DST,GL_BLUE_BITS,GL_COLOR_ARRAY_BUFFER_BINDING,GL_COLOR_ARRAY_SIZE,GL_COLOR_ARRAY_STRIDE,GL_COLOR_ARRAY_TYPE,GL_CULL_FACE,GL_DEPTH_BITS,GL_DEPTH_CLEAR_VALUE,GL_DEPTH_FUNC,GL_DEPTH_WRITEMASK,GL_FOG_DENSITY,GL_FOG_END,GL_FOG_MODE,GL_FOG_START,GL_FRONT_FACE,GL_GREEN_BITS,GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES,GL_IMPLEMENTATION_COLOR_READ_TYPE_OES,GL_LIGHT_MODEL_TWO_SIDE,GL_LINE_SMOOTH_HINT,GL_LINE_WIDTH,GL_LOGIC_OP_MODE,GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES,GL_MATRIX_INDEX_ARRAY_SIZE_OES,GL_MATRIX_INDEX_ARRAY_STRIDE_OES,GL_MATRIX_INDEX_ARRAY_TYPE_OES,GL_MATRIX_MODE,GL_MAX_CLIP_PLANES,GL_MAX_ELEMENTS_INDICES,GL_MAX_ELEMENTS_VERTICES,GL_MAX_LIGHTS,GL_MAX_MODELVIEW_STACK_DEPTH,GL_MAX_PALETTE_MATRICES_OES,GL_MAX_PROJECTION_STACK_DEPTH,GL_MAX_TEXTURE_SIZE,GL_MAX_TEXTURE_STACK_DEPTH,GL_MAX_TEXTURE_UNITS,GL_MAX_VERTEX_UNITS_OES,GL_MODELVIEW_STACK_DEPTH,GL_NORMAL_ARRAY_BUFFER_BINDING,GL_NORMAL_ARRAY_STRIDE,GL_NORMAL_ARRAY_TYPE,GL_NUM_COMPRESSED_TEXTURE_FORMATS,GL_PACK_ALIGNMENT,GL_PERSPECTIVE_CORRECTION_HINT,GL_POINT_SIZE,GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES,GL_POINT_SIZE_ARRAY_STRIDE_OES,GL_POINT_SIZE_ARRAY_TYPE_OES,GL_POINT_SMOOTH_HINT,GL_POLYGON_OFFSET_FACTOR,GL_POLYGON_OFFSET_UNITS,GL_PROJECTION_STACK_DEPTH,GL_RED_BITS,GL_SHADE_MODEL,GL_STENCIL_BITS,GL_STENCIL_CLEAR_VALUE,GL_STENCIL_FAIL,GL_STENCIL_FUNC,GL_STENCIL_PASS_DEPTH_FAIL,GL_STENCIL_PASS_DEPTH_PASS,GL_STENCIL_REF,GL_STENCIL_VALUE_MASK,GL_STENCIL_WRITEMASK,GL_SUBPIXEL_BITS,GL_TEXTURE_BINDING_2D,GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING,GL_TEXTURE_COORD_ARRAY_SIZE,GL_TEXTURE_COORD_ARRAY_STRIDE,GL_TEXTURE_COORD_ARRAY_TYPE,GL_TEXTURE_STACK_DEPTH,GL_UNPACK_ALIGNMENT,GL_VERTEX_ARRAY_BUFFER_BINDING,GL_VERTEX_ARRAY_SIZE,GL_VERTEX_ARRAY_STRIDE,GL_VERTEX_ARRAY_TYPE,GL_WEIGHT_ARRAY_BUFFER_BINDING_OES,GL_WEIGHT_ARRAY_SIZE_OES,GL_WEIGHT_ARRAY_STRIDE_OES,GL_WEIGHT_ARRAY_TYPE_OES ifcheck params 2 pname GL_ALIASED_POINT_SIZE_RANGE,GL_ALIASED_LINE_WIDTH_RANGE,GL_DEPTH_RANGE,GL_MAX_VIEWPORT_DIMS,GL_SMOOTH_LINE_WIDTH_RANGE,GL_SMOOTH_POINT_SIZE_RANGE ifcheck params 4 pname GL_COLOR_CLEAR_VALUE,GL_COLOR_WRITEMASK,GL_SCISSOR_BOX,GL_VIEWPORT ifcheck params 16 pname GL_MODELVIEW_MATRIX,GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES,GL_PROJECTION_MATRIX,GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES,GL_TEXTURE_MATRIX,GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES ifcheck params _NUM_COMPRESSED_TEXTURE_FORMATS pname GL_COMPRESSED_TEXTURE_FORMATS,GL_FOG_COLOR,GL_LIGHT_MODEL_AMBIENT
+glGetLight ifcheck params 1 pname GL_SPOT_EXPONENT,GL_SPOT_CUTOFF,GL_CONSTANT_ATTENUATION,GL_LINEAR_ATTENUATION,GL_QUADRATIC_ATTENUATION ifcheck params 3 pname GL_SPOT_DIRECTION ifcheck params 4 pname GL_AMBIENT,GL_DIFFUSE,GL_SPECULAR,GL_EMISSION
+glGetMaterial ifcheck params 1 pname GL_SHININESS ifcheck params 4 pname GL_AMBIENT,GL_DIFFUSE,GL_SPECULAR,GL_EMISSION,GL_AMBIENT_AND_DIFFUSE
+glGetTexEnv ifcheck params 1 pname GL_TEXTURE_ENV_MODE,GL_COMBINE_RGB,GL_COMBINE_ALPHA ifcheck params 4 pname GL_TEXTURE_ENV_COLOR
+glGetTexParameter check params 1
+glLightModel ifcheck params 1 pname GL_LIGHT_MODEL_TWO_SIDE ifcheck params 4 pname GL_LIGHT_MODEL_AMBIENT
+glLight ifcheck params 1 pname GL_SPOT_EXPONENT,GL_SPOT_CUTOFF,GL_CONSTANT_ATTENUATION,GL_LINEAR_ATTENUATION,GL_QUADRATIC_ATTENUATION ifcheck params 3 pname GL_SPOT_DIRECTION ifcheck params 4 pname GL_AMBIENT,GL_DIFFUSE,GL_SPECULAR,GL_EMISSION
+glLoadMatrix check m 16
+glMaterial ifcheck params 1 pname GL_SHININESS ifcheck params 4 pname GL_AMBIENT,GL_DIFFUSE,GL_SPECULAR,GL_EMISSION,GL_AMBIENT_AND_DIFFUSE
+glMultMatrix check m 16
+glPointParameter check params 1
+glTexEnv ifcheck params 1 pname GL_TEXTURE_ENV_MODE,GL_COMBINE_RGB,GL_COMBINE_ALPHA ifcheck params 4 pname GL_TEXTURE_ENV_COLOR
+glTexImage2D nullAllowed
+glTexSubImage2D nullAllowed
+glBufferData nullAllowed
+glTexParameter check params 1
+glQueryMatrixxOES check mantissa 16 check exponent 16 return -1
+glDrawTexfvOES check coords 5
+glDrawTexivOES check coords 5
+glDrawTexsvOES check coords 5
+glDrawTexxvOES check coords 5
+glBindFramebufferOES unsupported
+glBindRenderbufferOES unsupported
+glBlendEquation unsupported
+glBlendEquationSeparate unsupported
+glBlendFuncSeparate unsupported
+glCheckFramebufferStatusOES unsupported return 0
+glCurrentPaletteMatrixOES unsupported
+glDeleteFramebuffersOES unsupported
+glDeleteRenderbuffersOES unsupported
+glFramebufferRenderbufferOES unsupported
+glFramebufferStorageOES unsupported
+glFramebufferTexture2DOES unsupported
+glGenFramebuffersOES unsupported
+glGenRenderbuffersOES unsupported
+glGenerateMipmapOES unsupported
+glGetBufferParameter unsupported
+glGetFramebufferAttachmentParameterivOES unsupported
+glGetRenderbufferParameterivOES unsupported
+glGetTexGen unsupported
+glIsFramebufferOES unsupported return JNI_FALSE
+glIsRenderbufferOES unsupported return JNI_FALSE
+glLoadPaletteFromModelViewMatrixOES unsupported
+glMatrixIndexPointerOES unsupported
+glRenderbufferStorageOES unsupported return false
+glTexGen unsupported
+glTexGenf unsupported
+glTexGeni unsupported
+glTexGenx unsupported
+glWeightPointerOES unsupported
+// Lots of unsupported
+glAlphaFuncxOES unsupported
+glBlendEquationOES unsupported
+glBlendEquationSeparateOES unsupported
+glBlendFuncSeparateOES unsupported
+glClearColorxOES unsupported
+glClearDepthfOES unsupported
+glClearDepthxOES unsupported
+glClipPlanefOES unsupported
+glClipPlanefOES unsupported
+glClipPlanexOES unsupported
+glClipPlanexOES unsupported
+glColor4xOES unsupported
+glDepthRangefOES unsupported
+glDepthRangexOES unsupported
+glEGLImageTargetRenderbufferStorageOES unsupported
+glEGLImageTargetTexture2DOES unsupported
+glFogxOES unsupported
+glFogxvOES unsupported
+glFogxvOES unsupported
+glFrustumfOES unsupported
+glFrustumxOES unsupported
+glGetClipPlanefOES unsupported
+glGetClipPlanefOES unsupported
+glGetClipPlanexOES unsupported
+glGetClipPlanexOES unsupported
+glGetFixedvOES unsupported
+glGetFixedvOES unsupported
+glGetLightxvOES unsupported
+glGetLightxvOES unsupported
+glGetMaterialxvOES unsupported
+glGetMaterialxvOES unsupported
+glGetTexEnvxvOES unsupported
+glGetTexEnvxvOES unsupported
+glGetTexGenfvOES unsupported
+glGetTexGenfvOES unsupported
+glGetTexGenivOES unsupported
+glGetTexGenivOES unsupported
+glGetTexGenxvOES unsupported
+glGetTexGenxvOES unsupported
+glGetTexParameterxvOES unsupported
+glGetTexParameterxvOES unsupported
+glLightModelxOES unsupported
+glLightModelxvOES unsupported
+glLightModelxvOES unsupported
+glLightxOES unsupported
+glLightxvOES unsupported
+glLightxvOES unsupported
+glLineWidthxOES unsupported
+glLoadMatrixxOES unsupported
+glLoadMatrixxOES unsupported
+glMaterialxOES unsupported
+glMaterialxvOES unsupported
+glMaterialxvOES unsupported
+glMultMatrixxOES unsupported
+glMultMatrixxOES unsupported
+glMultiTexCoord4xOES unsupported
+glNormal3xOES unsupported
+glOrthofOES unsupported
+glOrthoxOES unsupported
+glPointParameterxOES unsupported
+glPointParameterxvOES unsupported
+glPointParameterxvOES unsupported
+glPointSizexOES unsupported
+glPolygonOffsetxOES unsupported
+glRotatexOES unsupported
+glSampleCoveragexOES unsupported
+glScalexOES unsupported
+glTexEnvxOES unsupported
+glTexEnvxvOES unsupported
+glTexEnvxvOES unsupported
+glTexGenfOES unsupported
+glTexGenfvOES unsupported
+glTexGenfvOES unsupported
+glTexGeniOES unsupported
+glTexGenivOES unsupported
+glTexGenivOES unsupported
+glTexGenxOES unsupported
+glTexGenxvOES unsupported
+glTexGenxvOES unsupported
+glTexParameterxOES unsupported
+glTexParameterxvOES unsupported
+glTexParameterxvOES unsupported
+glTranslatexOES unsupported
\ No newline at end of file
diff --git a/opengl/tools/glgen/glspec-1.0 b/opengl/tools/glgen/specs/jsr239/glspec-1.0
similarity index 100%
rename from opengl/tools/glgen/glspec-1.0
rename to opengl/tools/glgen/specs/jsr239/glspec-1.0
diff --git a/opengl/tools/glgen/glspec-1.0ext b/opengl/tools/glgen/specs/jsr239/glspec-1.0ext
similarity index 100%
rename from opengl/tools/glgen/glspec-1.0ext
rename to opengl/tools/glgen/specs/jsr239/glspec-1.0ext
diff --git a/opengl/tools/glgen/glspec-1.1 b/opengl/tools/glgen/specs/jsr239/glspec-1.1
similarity index 100%
rename from opengl/tools/glgen/glspec-1.1
rename to opengl/tools/glgen/specs/jsr239/glspec-1.1
diff --git a/opengl/tools/glgen/glspec-1.1ext b/opengl/tools/glgen/specs/jsr239/glspec-1.1ext
similarity index 100%
rename from opengl/tools/glgen/glspec-1.1ext
rename to opengl/tools/glgen/specs/jsr239/glspec-1.1ext
diff --git a/opengl/tools/glgen/glspec-1.1extpack b/opengl/tools/glgen/specs/jsr239/glspec-1.1extpack
similarity index 100%
rename from opengl/tools/glgen/glspec-1.1extpack
rename to opengl/tools/glgen/specs/jsr239/glspec-1.1extpack
diff --git a/opengl/tools/glgen/glspec-checks b/opengl/tools/glgen/specs/jsr239/glspec-checks
similarity index 100%
rename from opengl/tools/glgen/glspec-checks
rename to opengl/tools/glgen/specs/jsr239/glspec-checks
diff --git a/opengl/tools/glgen/src/.gitignore b/opengl/tools/glgen/src/.gitignore
new file mode 100644
index 0000000..6b468b6
--- /dev/null
+++ b/opengl/tools/glgen/src/.gitignore
@@ -0,0 +1 @@
+*.class
diff --git a/opengl/tools/glgen/src/CFunc.java b/opengl/tools/glgen/src/CFunc.java
index 0794f41..a89e1c5 100644
--- a/opengl/tools/glgen/src/CFunc.java
+++ b/opengl/tools/glgen/src/CFunc.java
@@ -1,155 +1,156 @@
-
-import java.util.*;
-
-public class CFunc {
-
- String original;
-
- CType ftype;
- String fname;
-
- List<String> argNames = new ArrayList<String>();
- List<CType> argTypes = new ArrayList<CType>();
-
- boolean hasPointerArg = false;
- boolean hasTypedPointerArg = false;
-
- public CFunc(String original) {
- this.original = original;
- }
-
- public String getOriginal() {
- return original;
- }
-
- public void setName(String fname) {
- this.fname = fname;
- }
-
- public String getName() {
- return fname;
- }
-
- public void setType(CType ftype) {
- this.ftype = ftype;
- }
-
- public CType getType() {
- return ftype;
- }
-
- public void addArgument(String argName, CType argType) {
- argNames.add(argName);
- argTypes.add(argType);
-
- if (argType.isPointer()) {
- hasPointerArg = true;
- }
- if (argType.isTypedPointer()) {
- hasTypedPointerArg = true;
- }
- }
-
- public int getNumArgs() {
- return argNames.size();
- }
-
- public int getArgIndex(String name) {
- int len = argNames.size();
- for (int i = 0; i < len; i++) {
- if (name.equals(argNames.get(i))) {
- return i;
- }
- }
- return -1;
- }
-
- public String getArgName(int index) {
- return argNames.get(index);
- }
-
- public CType getArgType(int index) {
- return argTypes.get(index);
- }
-
- public boolean hasPointerArg() {
- return hasPointerArg;
- }
-
- public boolean hasTypedPointerArg() {
- return hasTypedPointerArg;
- }
-
- public String toString() {
- String s = "Function " + fname + " returns " + ftype + ": ";
- for (int i = 0; i < argNames.size(); i++) {
- if (i > 0) {
- s += ", ";
- }
- s += argTypes.get(i) + " " + argNames.get(i);
- }
- return s;
- }
-
- public static CFunc parseCFunc(String s) {
- CFunc cfunc = new CFunc(s);
- String[] tokens = s.split("\\s");
-
- int i = 0;
- CType ftype = new CType();
- String ftypeName = tokens[i++];
- if (ftypeName.equals("const")) {
- ftype.setIsConst(true);
- ftypeName = tokens[i++];
- }
- ftype.setBaseType(ftypeName);
-
- String fname = tokens[i++];
- if (fname.equals("*")) {
- ftype.setIsPointer(true);
- fname = tokens[i++];
- }
-
- cfunc.setName(fname);
- cfunc.setType(ftype);
-
- while (i < tokens.length) {
- String tok = tokens[i++];
-
- if (tok.equals("(")) {
- continue;
- }
- if (tok.equals(")")) {
- break;
- }
-
- CType argType = new CType();
-
- String argTypeName = tok;
- String argName = "";
-
- if (argTypeName.equals("const")) {
- argType.setIsConst(true);
- argTypeName = tokens[i++];
- }
- argType.setBaseType(argTypeName);
-
- if (argTypeName.equals("void")) {
- break;
- }
-
- argName = tokens[i++];
- if (argName.startsWith("*")) {
- argType.setIsPointer(true);
- argName = argName.substring(1, argName.length());
- }
- if (argName.endsWith(",")) {
- argName = argName.substring(0, argName.length() - 1);
- }
-
- cfunc.addArgument(argName, argType);
- }
-
- return cfunc;
- }
-}
+
+import java.util.*;
+
+public class CFunc {
+
+ String original;
+
+ CType ftype;
+ String fname;
+
+ List<String> argNames = new ArrayList<String>();
+ List<CType> argTypes = new ArrayList<CType>();
+
+ boolean hasPointerArg = false;
+ boolean hasTypedPointerArg = false;
+
+ public CFunc(String original) {
+ this.original = original;
+ }
+
+ public String getOriginal() {
+ return original;
+ }
+
+ public void setName(String fname) {
+ this.fname = fname;
+ }
+
+ public String getName() {
+ return fname;
+ }
+
+ public void setType(CType ftype) {
+ this.ftype = ftype;
+ }
+
+ public CType getType() {
+ return ftype;
+ }
+
+ public void addArgument(String argName, CType argType) {
+ argNames.add(argName);
+ argTypes.add(argType);
+
+ if (argType.isPointer()) {
+ hasPointerArg = true;
+ }
+ if (argType.isTypedPointer()) {
+ hasTypedPointerArg = true;
+ }
+ }
+
+ public int getNumArgs() {
+ return argNames.size();
+ }
+
+ public int getArgIndex(String name) {
+ int len = argNames.size();
+ for (int i = 0; i < len; i++) {
+ if (name.equals(argNames.get(i))) {
+ return i;
+ }
+ }
+ return -1;
+ }
+
+ public String getArgName(int index) {
+ return argNames.get(index);
+ }
+
+ public CType getArgType(int index) {
+ return argTypes.get(index);
+ }
+
+ public boolean hasPointerArg() {
+ return hasPointerArg;
+ }
+
+ public boolean hasTypedPointerArg() {
+ return hasTypedPointerArg;
+ }
+
+ @Override
+ public String toString() {
+ String s = "Function " + fname + " returns " + ftype + ": ";
+ for (int i = 0; i < argNames.size(); i++) {
+ if (i > 0) {
+ s += ", ";
+ }
+ s += argTypes.get(i) + " " + argNames.get(i);
+ }
+ return s;
+ }
+
+ public static CFunc parseCFunc(String s) {
+ CFunc cfunc = new CFunc(s);
+ String[] tokens = s.split("\\s");
+
+ int i = 0;
+ CType ftype = new CType();
+ String ftypeName = tokens[i++];
+ if (ftypeName.equals("const")) {
+ ftype.setIsConst(true);
+ ftypeName = tokens[i++];
+ }
+ ftype.setBaseType(ftypeName);
+
+ String fname = tokens[i++];
+ if (fname.equals("*")) {
+ ftype.setIsPointer(true);
+ fname = tokens[i++];
+ }
+
+ cfunc.setName(fname);
+ cfunc.setType(ftype);
+
+ while (i < tokens.length) {
+ String tok = tokens[i++];
+
+ if (tok.equals("(")) {
+ continue;
+ }
+ if (tok.equals(")")) {
+ break;
+ }
+
+ CType argType = new CType();
+
+ String argTypeName = tok;
+ String argName = "";
+
+ if (argTypeName.equals("const")) {
+ argType.setIsConst(true);
+ argTypeName = tokens[i++];
+ }
+ argType.setBaseType(argTypeName);
+
+ if (argTypeName.equals("void")) {
+ break;
+ }
+
+ argName = tokens[i++];
+ if (argName.startsWith("*")) {
+ argType.setIsPointer(true);
+ argName = argName.substring(1, argName.length());
+ }
+ if (argName.endsWith(",")) {
+ argName = argName.substring(0, argName.length() - 1);
+ }
+
+ cfunc.addArgument(argName, argType);
+ }
+
+ return cfunc;
+ }
+}
diff --git a/opengl/tools/glgen/src/CType.java b/opengl/tools/glgen/src/CType.java
index 331ec62..826c90d 100644
--- a/opengl/tools/glgen/src/CType.java
+++ b/opengl/tools/glgen/src/CType.java
@@ -1,85 +1,88 @@
-
-public class CType {
-
- String baseType;
- boolean isConst;
- boolean isPointer;
-
- public CType() {
- }
-
- public CType(String baseType) {
- setBaseType(baseType);
- }
-
- public CType(String baseType, boolean isConst, boolean isPointer) {
- setBaseType(baseType);
- setIsConst(isConst);
- setIsPointer(isPointer);
- }
-
- public String getDeclaration() {
- return baseType + (isPointer ? " *" : "");
- }
-
- public void setIsConst(boolean isConst) {
- this.isConst = isConst;
- }
-
- public boolean isConst() {
- return isConst;
- }
-
- public void setIsPointer(boolean isPointer) {
- this.isPointer = isPointer;
- }
-
- public boolean isPointer() {
- return isPointer;
- }
-
- boolean isVoid() {
- String baseType = getBaseType();
- return baseType.equals("GLvoid") ||
- baseType.equals("void");
- }
-
- public boolean isTypedPointer() {
- return isPointer() && !isVoid();
- }
-
- public void setBaseType(String baseType) {
- this.baseType = baseType;
- }
-
- public String getBaseType() {
- return baseType;
- }
-
- public String toString() {
- String s = "";
- if (isConst()) {
- s += "const ";
- }
- s += baseType;
- if (isPointer()) {
- s += "*";
- }
-
- return s;
- }
-
- public int hashCode() {
- return baseType.hashCode() ^ (isPointer ? 2 : 0) ^ (isConst ? 1 : 0);
- }
-
- public boolean equals(Object o) {
- if (o != null && o instanceof CType) {
- CType c = (CType)o;
- return baseType.equals(c.baseType) &&
- isPointer() == c.isPointer() &&
- isConst() == c.isConst();
- }
- return false;
- }
-}
+
+public class CType {
+
+ String baseType;
+ boolean isConst;
+ boolean isPointer;
+
+ public CType() {
+ }
+
+ public CType(String baseType) {
+ setBaseType(baseType);
+ }
+
+ public CType(String baseType, boolean isConst, boolean isPointer) {
+ setBaseType(baseType);
+ setIsConst(isConst);
+ setIsPointer(isPointer);
+ }
+
+ public String getDeclaration() {
+ return baseType + (isPointer ? " *" : "");
+ }
+
+ public void setIsConst(boolean isConst) {
+ this.isConst = isConst;
+ }
+
+ public boolean isConst() {
+ return isConst;
+ }
+
+ public void setIsPointer(boolean isPointer) {
+ this.isPointer = isPointer;
+ }
+
+ public boolean isPointer() {
+ return isPointer;
+ }
+
+ boolean isVoid() {
+ String baseType = getBaseType();
+ return baseType.equals("GLvoid") ||
+ baseType.equals("void");
+ }
+
+ public boolean isTypedPointer() {
+ return isPointer() && !isVoid();
+ }
+
+ public void setBaseType(String baseType) {
+ this.baseType = baseType;
+ }
+
+ public String getBaseType() {
+ return baseType;
+ }
+
+ @Override
+ public String toString() {
+ String s = "";
+ if (isConst()) {
+ s += "const ";
+ }
+ s += baseType;
+ if (isPointer()) {
+ s += "*";
+ }
+
+ return s;
+ }
+
+ @Override
+ public int hashCode() {
+ return baseType.hashCode() ^ (isPointer ? 2 : 0) ^ (isConst ? 1 : 0);
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (o != null && o instanceof CType) {
+ CType c = (CType)o;
+ return baseType.equals(c.baseType) &&
+ isPointer() == c.isPointer() &&
+ isConst() == c.isConst();
+ }
+ return false;
+ }
+}
diff --git a/opengl/tools/glgen/src/CodeEmitter.java b/opengl/tools/glgen/src/CodeEmitter.java
index 3e9b90a..ebb9727 100644
--- a/opengl/tools/glgen/src/CodeEmitter.java
+++ b/opengl/tools/glgen/src/CodeEmitter.java
@@ -1,8 +1,8 @@
-
-public interface CodeEmitter {
-
- void setVersion(int version, boolean ext, boolean pack);
- void emitCode(CFunc cfunc, String original);
- void addNativeRegistration(String fname);
- void emitNativeRegistration();
-}
+
+public interface CodeEmitter {
+
+ void setVersion(int version, boolean ext, boolean pack);
+ void emitCode(CFunc cfunc, String original);
+ void addNativeRegistration(String fname);
+ void emitNativeRegistration();
+}
diff --git a/opengl/tools/glgen/src/GLESCodeEmitter.java b/opengl/tools/glgen/src/GLESCodeEmitter.java
new file mode 100644
index 0000000..b303503
--- /dev/null
+++ b/opengl/tools/glgen/src/GLESCodeEmitter.java
@@ -0,0 +1,40 @@
+import java.io.PrintStream;
+
+/**
+ * Emits a Java interface and Java & C implementation for a C function.
+ *
+ * <p> The Java interface will have Buffer and array variants for functions that
+ * have a typed pointer argument. The array variant will convert a single "<type> *data"
+ * argument to a pair of arguments "<type>[] data, int offset".
+ */
+public class GLESCodeEmitter extends JniCodeEmitter {
+
+ PrintStream mJavaImplStream;
+ PrintStream mCStream;
+
+ PrintStream mJavaInterfaceStream;
+
+ /**
+ */
+ public GLESCodeEmitter(String classPathName,
+ ParameterChecker checker,
+ PrintStream javaImplStream,
+ PrintStream cStream) {
+ mClassPathName = classPathName;
+ mChecker = checker;
+
+ mJavaImplStream = javaImplStream;
+ mCStream = cStream;
+ mUseContextPointer = false;
+ mUseStaticMethods = true;
+ }
+
+ public void emitCode(CFunc cfunc, String original) {
+ emitCode(cfunc, original, null, mJavaImplStream,
+ mCStream);
+ }
+
+ public void emitNativeRegistration(String nativeRegistrationName) {
+ emitNativeRegistration(nativeRegistrationName, mCStream);
+ }
+}
diff --git a/opengl/tools/glgen/src/GenerateGL.java b/opengl/tools/glgen/src/GenerateGL.java
index 657ee6e..3715a96 100644
--- a/opengl/tools/glgen/src/GenerateGL.java
+++ b/opengl/tools/glgen/src/GenerateGL.java
@@ -1,164 +1,167 @@
-
-import java.io.*;
-import java.util.*;
-
-public class GenerateGL {
-
- static void copy(String filename, PrintStream out) throws IOException {
- BufferedReader br = new BufferedReader(new FileReader(filename));
- String s;
- while ((s = br.readLine()) != null) {
- out.println(s);
- }
- }
-
- private static void emit(int version, boolean ext, boolean pack,
- CodeEmitter emitter,
- BufferedReader specReader,
- PrintStream glStream,
- PrintStream glImplStream,
- PrintStream cStream) throws Exception {
- String s = null;
- int counter = 0;
- while ((s = specReader.readLine()) != null) {
- if (s.trim().startsWith("//")) {
- continue;
- }
-
- CFunc cfunc = CFunc.parseCFunc(s);
-
- String fname = cfunc.getName();
- File f = new File("stubs/" + fname +
- ".java-1" + version + "-if");
- if (f.exists()) {
- System.out.println("Special-casing function " + fname);
- copy("stubs/" + fname +
- ".java-1" + version + "-if", glStream);
- copy("stubs/" + fname + ".java-impl", glImplStream);
- copy("stubs/" + fname + ".cpp", cStream);
-
- // Register native function names
- // This should be improved to require fewer discrete files
- String filename = "stubs/" + fname + ".nativeReg";
- BufferedReader br =
- new BufferedReader(new FileReader(filename));
- String nfunc;
- while ((nfunc = br.readLine()) != null) {
- emitter.addNativeRegistration(nfunc);
- }
- } else {
- emitter.setVersion(version, ext, pack);
- emitter.emitCode(cfunc, s);
- }
- }
- }
-
- public static void main(String[] args) throws Exception {
- String classPathName = "com/google/android/gles_jni/GLImpl";
- boolean useContextPointer = true;
-
- int aidx = 0;
- while (args[aidx].charAt(0) == '-') {
- switch (args[aidx].charAt(1)) {
- case 'c':
- useContextPointer = false;
- break;
-
- default:
- System.err.println("Unknown flag: " + args[aidx]);
- System.exit(1);
- }
-
- aidx++;
- }
-
- System.out.println("useContextPointer = " + useContextPointer);
-
- BufferedReader spec10Reader =
- new BufferedReader(new FileReader(args[aidx++]));
- BufferedReader spec10ExtReader =
- new BufferedReader(new FileReader(args[aidx++]));
- BufferedReader spec11Reader =
- new BufferedReader(new FileReader(args[aidx++]));
- BufferedReader spec11ExtReader =
- new BufferedReader(new FileReader(args[aidx++]));
- BufferedReader spec11ExtPackReader =
- new BufferedReader(new FileReader(args[aidx++]));
- BufferedReader checksReader =
- new BufferedReader(new FileReader(args[aidx++]));
-
- String gl10Filename = "javax/microedition/khronos/opengles/GL10.java";
- String gl10ExtFilename =
- "javax/microedition/khronos/opengles/GL10Ext.java";
- String gl11Filename = "javax/microedition/khronos/opengles/GL11.java";
- String gl11ExtFilename =
- "javax/microedition/khronos/opengles/GL11Ext.java";
- String gl11ExtPackFilename =
- "javax/microedition/khronos/opengles/GL11ExtensionPack.java";
- String glImplFilename = "com/google/android/gles_jni/GLImpl.java";
- String cFilename = "com_google_android_gles_jni_GLImpl.cpp";
-
- PrintStream gl10Stream =
- new PrintStream(new FileOutputStream("out/" + gl10Filename));
- PrintStream gl10ExtStream =
- new PrintStream(new FileOutputStream("out/" + gl10ExtFilename));
- PrintStream gl11Stream =
- new PrintStream(new FileOutputStream("out/" + gl11Filename));
- PrintStream gl11ExtStream =
- new PrintStream(new FileOutputStream("out/" + gl11ExtFilename));
- PrintStream gl11ExtPackStream =
- new PrintStream(new FileOutputStream("out/" + gl11ExtPackFilename));
- PrintStream glImplStream =
- new PrintStream(new FileOutputStream("out/" + glImplFilename));
- PrintStream cStream =
- new PrintStream(new FileOutputStream("out/" + cFilename));
-
- ParameterChecker checker = new ParameterChecker(checksReader);
-
- CodeEmitter emitter =
- new JniCodeEmitter(classPathName,
- checker,
- gl10Stream, gl10ExtStream,
- gl11Stream, gl11ExtStream, gl11ExtPackStream,
- glImplStream, cStream,
- useContextPointer);
-
- gl10Stream.println("/* //device/java/android/" + gl10Filename);
- gl10ExtStream.println("/* //device/java/android/" + gl10ExtFilename);
- gl11Stream.println("/* //device/java/android/" + gl11Filename);
- gl11ExtStream.println("/* //device/java/android/" + gl11ExtFilename);
- gl11ExtPackStream.println("/* //device/java/android/" +
- gl11ExtPackFilename);
- glImplStream.println("/* //device/java/android/" + glImplFilename);
- cStream.println("/* //device/libs/android_runtime/" + cFilename);
-
- copy("stubs/GL10Header.java-if", gl10Stream);
- copy("stubs/GL10ExtHeader.java-if", gl10ExtStream);
- copy("stubs/GL11Header.java-if", gl11Stream);
- copy("stubs/GL11ExtHeader.java-if", gl11ExtStream);
- copy("stubs/GL11ExtensionPackHeader.java-if", gl11ExtPackStream);
- copy("stubs/GLImplHeader.java-impl", glImplStream);
- copy("stubs/GLCHeader.cpp", cStream);
-
- emit(0, false, false,
- emitter, spec10Reader, gl10Stream, glImplStream, cStream);
- emit(0, true, false,
- emitter, spec10ExtReader, gl10ExtStream, glImplStream, cStream);
- emit(1, false, false,
- emitter, spec11Reader, gl11Stream, glImplStream, cStream);
- emit(1, true, false,
- emitter, spec11ExtReader, gl11ExtStream, glImplStream, cStream);
- emit(1, true, true,
- emitter, spec11ExtPackReader, gl11ExtPackStream, glImplStream,
- cStream);
-
- emitter.emitNativeRegistration();
-
- gl10Stream.println("}");
- gl10ExtStream.println("}");
- gl11Stream.println("}");
- gl11ExtStream.println("}");
- gl11ExtPackStream.println("}");
- glImplStream.println("}");
- }
-}
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.PrintStream;
+
+public class GenerateGL {
+
+ static void copy(String filename, PrintStream out) throws IOException {
+ BufferedReader br = new BufferedReader(new FileReader(filename));
+ String s;
+ while ((s = br.readLine()) != null) {
+ out.println(s);
+ }
+ }
+
+ private static void emit(int version, boolean ext, boolean pack,
+ CodeEmitter emitter,
+ BufferedReader specReader,
+ PrintStream glStream,
+ PrintStream glImplStream,
+ PrintStream cStream) throws Exception {
+ String s = null;
+ while ((s = specReader.readLine()) != null) {
+ if (s.trim().startsWith("//")) {
+ continue;
+ }
+
+ CFunc cfunc = CFunc.parseCFunc(s);
+
+ String fname = cfunc.getName();
+ File f = new File("stubs/jsr239/" + fname +
+ ".java-1" + version + "-if");
+ if (f.exists()) {
+ System.out.println("Special-casing function " + fname);
+ copy("stubs/jsr239/" + fname +
+ ".java-1" + version + "-if", glStream);
+ copy("stubs/jsr239/" + fname + ".java-impl", glImplStream);
+ copy("stubs/jsr239/" + fname + ".cpp", cStream);
+
+ // Register native function names
+ // This should be improved to require fewer discrete files
+ String filename = "stubs/jsr239/" + fname + ".nativeReg";
+ BufferedReader br =
+ new BufferedReader(new FileReader(filename));
+ String nfunc;
+ while ((nfunc = br.readLine()) != null) {
+ emitter.addNativeRegistration(nfunc);
+ }
+ } else {
+ emitter.setVersion(version, ext, pack);
+ emitter.emitCode(cfunc, s);
+ }
+ }
+ }
+
+ public static void main(String[] args) throws Exception {
+ String classPathName = "com/google/android/gles_jni/GLImpl";
+ boolean useContextPointer = true;
+
+ int aidx = 0;
+ while (args[aidx].charAt(0) == '-') {
+ switch (args[aidx].charAt(1)) {
+ case 'c':
+ useContextPointer = false;
+ break;
+
+ default:
+ System.err.println("Unknown flag: " + args[aidx]);
+ System.exit(1);
+ }
+
+ aidx++;
+ }
+
+ System.out.println("useContextPointer = " + useContextPointer);
+
+ BufferedReader spec10Reader =
+ new BufferedReader(new FileReader(args[aidx++]));
+ BufferedReader spec10ExtReader =
+ new BufferedReader(new FileReader(args[aidx++]));
+ BufferedReader spec11Reader =
+ new BufferedReader(new FileReader(args[aidx++]));
+ BufferedReader spec11ExtReader =
+ new BufferedReader(new FileReader(args[aidx++]));
+ BufferedReader spec11ExtPackReader =
+ new BufferedReader(new FileReader(args[aidx++]));
+ BufferedReader checksReader =
+ new BufferedReader(new FileReader(args[aidx++]));
+
+ String gl10Filename = "javax/microedition/khronos/opengles/GL10.java";
+ String gl10ExtFilename =
+ "javax/microedition/khronos/opengles/GL10Ext.java";
+ String gl11Filename = "javax/microedition/khronos/opengles/GL11.java";
+ String gl11ExtFilename =
+ "javax/microedition/khronos/opengles/GL11Ext.java";
+ String gl11ExtPackFilename =
+ "javax/microedition/khronos/opengles/GL11ExtensionPack.java";
+ String glImplFilename = "com/google/android/gles_jni/GLImpl.java";
+ String cFilename = "com_google_android_gles_jni_GLImpl.cpp";
+
+ PrintStream gl10Stream =
+ new PrintStream(new FileOutputStream("out/" + gl10Filename));
+ PrintStream gl10ExtStream =
+ new PrintStream(new FileOutputStream("out/" + gl10ExtFilename));
+ PrintStream gl11Stream =
+ new PrintStream(new FileOutputStream("out/" + gl11Filename));
+ PrintStream gl11ExtStream =
+ new PrintStream(new FileOutputStream("out/" + gl11ExtFilename));
+ PrintStream gl11ExtPackStream =
+ new PrintStream(new FileOutputStream("out/" + gl11ExtPackFilename));
+ PrintStream glImplStream =
+ new PrintStream(new FileOutputStream("out/" + glImplFilename));
+ PrintStream cStream =
+ new PrintStream(new FileOutputStream("out/" + cFilename));
+
+ ParameterChecker checker = new ParameterChecker(checksReader);
+
+ CodeEmitter emitter =
+ new Jsr239CodeEmitter(classPathName,
+ checker,
+ gl10Stream, gl10ExtStream,
+ gl11Stream, gl11ExtStream, gl11ExtPackStream,
+ glImplStream, cStream,
+ useContextPointer);
+
+ gl10Stream.println("/* //device/java/android/" + gl10Filename);
+ gl10ExtStream.println("/* //device/java/android/" + gl10ExtFilename);
+ gl11Stream.println("/* //device/java/android/" + gl11Filename);
+ gl11ExtStream.println("/* //device/java/android/" + gl11ExtFilename);
+ gl11ExtPackStream.println("/* //device/java/android/" +
+ gl11ExtPackFilename);
+ glImplStream.println("/* //device/java/android/" + glImplFilename);
+ cStream.println("/* //device/libs/android_runtime/" + cFilename);
+
+ copy("stubs/jsr239/GL10Header.java-if", gl10Stream);
+ copy("stubs/jsr239/GL10ExtHeader.java-if", gl10ExtStream);
+ copy("stubs/jsr239/GL11Header.java-if", gl11Stream);
+ copy("stubs/jsr239/GL11ExtHeader.java-if", gl11ExtStream);
+ copy("stubs/jsr239/GL11ExtensionPackHeader.java-if", gl11ExtPackStream);
+ copy("stubs/jsr239/GLImplHeader.java-impl", glImplStream);
+ copy("stubs/jsr239/GLCHeader.cpp", cStream);
+
+ emit(0, false, false,
+ emitter, spec10Reader, gl10Stream, glImplStream, cStream);
+ emit(0, true, false,
+ emitter, spec10ExtReader, gl10ExtStream, glImplStream, cStream);
+ emit(1, false, false,
+ emitter, spec11Reader, gl11Stream, glImplStream, cStream);
+ emit(1, true, false,
+ emitter, spec11ExtReader, gl11ExtStream, glImplStream, cStream);
+ emit(1, true, true,
+ emitter, spec11ExtPackReader, gl11ExtPackStream, glImplStream,
+ cStream);
+
+ emitter.emitNativeRegistration();
+
+ gl10Stream.println("}");
+ gl10ExtStream.println("}");
+ gl11Stream.println("}");
+ gl11ExtStream.println("}");
+ gl11ExtPackStream.println("}");
+ glImplStream.println("}");
+ }
+}
diff --git a/opengl/tools/glgen/src/GenerateGLES.java b/opengl/tools/glgen/src/GenerateGLES.java
new file mode 100644
index 0000000..60775b7
--- /dev/null
+++ b/opengl/tools/glgen/src/GenerateGLES.java
@@ -0,0 +1,99 @@
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.PrintStream;
+
+public class GenerateGLES {
+
+ static void copy(String filename, PrintStream out) throws IOException {
+ BufferedReader br = new BufferedReader(new FileReader(filename));
+ String s;
+ while ((s = br.readLine()) != null) {
+ out.println(s);
+ }
+ }
+
+ private static void emit(GLESCodeEmitter emitter,
+ BufferedReader specReader,
+ PrintStream glStream,
+ PrintStream cStream) throws Exception {
+ String s = null;
+ while ((s = specReader.readLine()) != null) {
+ if (s.trim().startsWith("//")) {
+ continue;
+ }
+
+ CFunc cfunc = CFunc.parseCFunc(s);
+
+ String fname = cfunc.getName();
+ String stubRoot = "stubs/gles11/" + fname;
+ String javaPath = stubRoot + ".java";
+ File f = new File(javaPath);
+ if (f.exists()) {
+ System.out.println("Special-casing function " + fname);
+ copy(javaPath, glStream);
+ copy(stubRoot + ".cpp", cStream);
+
+ // Register native function names
+ // This should be improved to require fewer discrete files
+ String filename = stubRoot + ".nativeReg";
+ BufferedReader br =
+ new BufferedReader(new FileReader(filename));
+ String nfunc;
+ while ((nfunc = br.readLine()) != null) {
+ emitter.addNativeRegistration(nfunc);
+ }
+ } else {
+ emitter.emitCode(cfunc, s);
+ }
+ }
+ }
+
+ public static void main(String[] args) throws Exception {
+ int aidx = 0;
+ while ((aidx < args.length) && (args[aidx].charAt(0) == '-')) {
+ switch (args[aidx].charAt(1)) {
+ default:
+ System.err.println("Unknown flag: " + args[aidx]);
+ System.exit(1);
+ }
+
+ aidx++;
+ }
+
+ BufferedReader checksReader =
+ new BufferedReader(new FileReader("specs/gles11/checks.spec"));
+ ParameterChecker checker = new ParameterChecker(checksReader);
+
+ // Generate files
+ for(String suffix: new String[] {"GLES10", "GLES10Ext",
+ "GLES11", "GLES11Ext"})
+ {
+ BufferedReader spec11Reader =
+ new BufferedReader(new FileReader("specs/gles11/"
+ + suffix + ".spec"));
+ String gl11Filename = "android/opengl/" + suffix + ".java";
+ String gl11cFilename = "android_opengl_" + suffix + ".cpp";
+ PrintStream gl11Stream =
+ new PrintStream(new FileOutputStream("out/" + gl11Filename));
+ PrintStream gl11cStream =
+ new PrintStream(new FileOutputStream("out/" + gl11cFilename));
+ gl11Stream.println("/*");
+ gl11cStream.println("/*");
+ copy("stubs/gles11/" + suffix + "Header.java-if", gl11Stream);
+ copy("stubs/gles11/" + suffix + "cHeader.cpp", gl11cStream);
+ GLESCodeEmitter emitter = new GLESCodeEmitter(
+ "android/opengl/" + suffix,
+ checker, gl11Stream, gl11cStream);
+ emit(emitter, spec11Reader, gl11Stream, gl11cStream);
+ emitter.emitNativeRegistration("register_android_opengl_jni_"
+ + suffix);
+ gl11Stream.println("}");
+ gl11Stream.close();
+ gl11cStream.close();
+ }
+ }
+}
diff --git a/opengl/tools/glgen/src/JFunc.java b/opengl/tools/glgen/src/JFunc.java
index 42d466c..63c045b 100644
--- a/opengl/tools/glgen/src/JFunc.java
+++ b/opengl/tools/glgen/src/JFunc.java
@@ -1,148 +1,154 @@
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class JFunc {
-
- String className = "com.google.android.gles_jni.GL11Impl";
-
- CFunc cfunc;
- JType ftype;
- String fname;
-
- List<String> argNames = new ArrayList<String>();
- List<JType> argTypes = new ArrayList<JType>();
- List<Integer> argCIndices = new ArrayList<Integer>();
-
- boolean hasBufferArg = false;
- boolean hasTypedBufferArg = false;
- ArrayList<String> bufferArgNames = new ArrayList<String>();
-
- public JFunc(CFunc cfunc) {
- this.cfunc = cfunc;
- }
-
- public CFunc getCFunc() {
- return cfunc;
- }
-
- public void setName(String fname) {
- this.fname = fname;
- }
-
- public String getName() {
- return fname;
- }
-
- public void setType(JType ftype) {
- this.ftype = ftype;
- }
-
- public JType getType() {
- return ftype;
- }
-
- public void setClassName(String className) {
- this.className = className;
- }
-
- public String getClassName() {
- return className;
- }
-
- public boolean hasBufferArg() {
- return hasBufferArg;
- }
-
- public boolean hasTypedBufferArg() {
- return hasTypedBufferArg;
- }
-
- public String getBufferArgName(int index) {
- return bufferArgNames.get(index);
- }
-
- public void addArgument(String argName, JType argType, int cindex) {
- argNames.add(argName);
- argTypes.add(argType);
- argCIndices.add(new Integer(cindex));
-
- if (argType.isBuffer()) {
- hasBufferArg = true;
- bufferArgNames.add(argName);
- }
- if (argType.isTypedBuffer()) {
- hasTypedBufferArg = true;
- bufferArgNames.add(argName);
- }
- }
-
- public int getNumArgs() {
- return argNames.size();
- }
-
- public int getArgIndex(String name) {
- int len = argNames.size();
- for (int i = 0; i < len; i++) {
- if (name.equals(argNames.get(i))) {
- return i;
- }
- }
- return -1;
- }
-
- public String getArgName(int index) {
- return argNames.get(index);
- }
-
- public JType getArgType(int index) {
- return argTypes.get(index);
- }
-
- public int getArgCIndex(int index) {
- return argCIndices.get(index).intValue();
- }
-
- public static JFunc convert(CFunc cfunc, boolean useArray) {
- JFunc jfunc = new JFunc(cfunc);
- jfunc.setName(cfunc.getName());
- jfunc.setType(JType.convert(cfunc.getType(), false));
-
- int numArgs = cfunc.getNumArgs();
- int numOffsets = 0;
- for (int i = 0; i < numArgs; i++) {
- CType cArgType = cfunc.getArgType(i);
- if (cArgType.isTypedPointer() && useArray) {
- ++numOffsets;
- }
- }
-
- for (int i = 0; i < numArgs; i++) {
- String cArgName = cfunc.getArgName(i);
- CType cArgType = cfunc.getArgType(i);
-
- jfunc.addArgument(cArgName, JType.convert(cArgType, useArray), i);
- if (cArgType.isTypedPointer() && useArray) {
- if (numOffsets > 1) {
- jfunc.addArgument(cArgName + "Offset", new JType("int"), i);
- } else {
- jfunc.addArgument("offset", new JType("int"), i);
- }
- }
- }
-
- return jfunc;
- }
-
- public String toString() {
- String s = "Function " + fname + " returns " + ftype + ": ";
- for (int i = 0; i < argNames.size(); i++) {
- if (i > 0) {
- s += ", ";
- }
- s += argTypes.get(i) + " " + argNames.get(i);
- }
- return s;
- }
-
-}
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class JFunc {
+
+ String className = "com.google.android.gles_jni.GL11Impl";
+
+ CFunc cfunc;
+ JType ftype;
+ String fname;
+
+ List<String> argNames = new ArrayList<String>();
+ List<JType> argTypes = new ArrayList<JType>();
+ List<Integer> argCIndices = new ArrayList<Integer>();
+
+ boolean hasBufferArg = false;
+ boolean hasTypedBufferArg = false;
+ ArrayList<String> bufferArgNames = new ArrayList<String>();
+
+ public JFunc(CFunc cfunc) {
+ this.cfunc = cfunc;
+ }
+
+ public CFunc getCFunc() {
+ return cfunc;
+ }
+
+ public void setName(String fname) {
+ this.fname = fname;
+ }
+
+ public String getName() {
+ return fname;
+ }
+
+ public void setType(JType ftype) {
+ this.ftype = ftype;
+ }
+
+ public JType getType() {
+ return ftype;
+ }
+
+ public void setClassName(String className) {
+ this.className = className;
+ }
+
+ public String getClassName() {
+ return className;
+ }
+
+ public boolean hasBufferArg() {
+ return hasBufferArg;
+ }
+
+ public boolean hasTypedBufferArg() {
+ return hasTypedBufferArg;
+ }
+
+ public String getBufferArgName(int index) {
+ return bufferArgNames.get(index);
+ }
+
+ public void addArgument(String argName, JType argType, int cindex) {
+ argNames.add(argName);
+ argTypes.add(argType);
+ argCIndices.add(new Integer(cindex));
+
+ if (argType.isBuffer()) {
+ hasBufferArg = true;
+ bufferArgNames.add(argName);
+ }
+ if (argType.isTypedBuffer()) {
+ hasTypedBufferArg = true;
+ bufferArgNames.add(argName);
+ }
+ }
+
+ public int getNumArgs() {
+ return argNames.size();
+ }
+
+ public int getArgIndex(String name) {
+ int len = argNames.size();
+ for (int i = 0; i < len; i++) {
+ if (name.equals(argNames.get(i))) {
+ return i;
+ }
+ }
+ return -1;
+ }
+
+ public String getArgName(int index) {
+ return argNames.get(index);
+ }
+
+ public JType getArgType(int index) {
+ return argTypes.get(index);
+ }
+
+ public int getArgCIndex(int index) {
+ return argCIndices.get(index).intValue();
+ }
+
+ public static JFunc convert(CFunc cfunc, boolean useArray) {
+ try {
+ JFunc jfunc = new JFunc(cfunc);
+ jfunc.setName(cfunc.getName());
+ jfunc.setType(JType.convert(cfunc.getType(), false));
+
+ int numArgs = cfunc.getNumArgs();
+ int numOffsets = 0;
+ for (int i = 0; i < numArgs; i++) {
+ CType cArgType = cfunc.getArgType(i);
+ if (cArgType.isTypedPointer() && useArray) {
+ ++numOffsets;
+ }
+ }
+
+ for (int i = 0; i < numArgs; i++) {
+ String cArgName = cfunc.getArgName(i);
+ CType cArgType = cfunc.getArgType(i);
+
+ jfunc.addArgument(cArgName, JType.convert(cArgType, useArray), i);
+ if (cArgType.isTypedPointer() && useArray) {
+ if (numOffsets > 1) {
+ jfunc.addArgument(cArgName + "Offset", new JType("int"), i);
+ } else {
+ jfunc.addArgument("offset", new JType("int"), i);
+ }
+ }
+ }
+
+ return jfunc;
+ } catch (RuntimeException e) {
+ System.err.println("Failed to convert function " + cfunc);
+ throw e;
+ }
+ }
+
+ @Override
+ public String toString() {
+ String s = "Function " + fname + " returns " + ftype + ": ";
+ for (int i = 0; i < argNames.size(); i++) {
+ if (i > 0) {
+ s += ", ";
+ }
+ s += argTypes.get(i) + " " + argNames.get(i);
+ }
+ return s;
+ }
+
+}
diff --git a/opengl/tools/glgen/src/JType.java b/opengl/tools/glgen/src/JType.java
index a16d440..df1177b 100644
--- a/opengl/tools/glgen/src/JType.java
+++ b/opengl/tools/glgen/src/JType.java
@@ -1,139 +1,142 @@
-
-import java.util.HashMap;
-
-public class JType {
-
- String baseType;
- boolean isArray;
- boolean isClass;
-
- static HashMap<CType,JType> typeMapping = new HashMap<CType,JType>();
- static HashMap<CType,JType> arrayTypeMapping = new HashMap<CType,JType>();
-
- static {
- // Primitive types
- typeMapping.put(new CType("GLbitfield"), new JType("int"));
- typeMapping.put(new CType("GLboolean"), new JType("boolean"));
- typeMapping.put(new CType("GLclampf"), new JType("float"));
- typeMapping.put(new CType("GLclampx"), new JType("int"));
- typeMapping.put(new CType("GLenum"), new JType("int"));
- typeMapping.put(new CType("GLfloat"), new JType("float"));
- typeMapping.put(new CType("GLfixed"), new JType("int"));
- typeMapping.put(new CType("GLint"), new JType("int"));
- typeMapping.put(new CType("GLintptr"), new JType("int"));
- typeMapping.put(new CType("GLshort"), new JType("short"));
- typeMapping.put(new CType("GLsizei"), new JType("int"));
- typeMapping.put(new CType("GLsizeiptr"), new JType("int"));
- typeMapping.put(new CType("GLubyte"), new JType("byte"));
- typeMapping.put(new CType("GLuint"), new JType("int"));
- typeMapping.put(new CType("void"), new JType("void"));
- typeMapping.put(new CType("GLubyte", true, true), new JType("String"));
-
- // Untyped pointers map to untyped Buffers
- typeMapping.put(new CType("GLvoid", true, true),
- new JType("java.nio.Buffer", true, false));
- typeMapping.put(new CType("GLvoid", false, true),
- new JType("java.nio.Buffer", true, false));
- typeMapping.put(new CType("void", false, true),
- new JType("java.nio.Buffer", true, false));
-
- // Typed pointers map to typed Buffers
- typeMapping.put(new CType("GLboolean", false, true),
- new JType("java.nio.IntBuffer", true, false));
- typeMapping.put(new CType("GLfixed", false, true),
- new JType("java.nio.IntBuffer", true, false));
- typeMapping.put(new CType("GLfixed", true, true),
- new JType("java.nio.IntBuffer", true, false));
- typeMapping.put(new CType("GLfloat", false, true),
- new JType("java.nio.FloatBuffer", true, false));
- typeMapping.put(new CType("GLfloat", true, true),
- new JType("java.nio.FloatBuffer", true, false));
- typeMapping.put(new CType("GLint", false, true),
- new JType("java.nio.IntBuffer", true, false));
- typeMapping.put(new CType("GLint", true, true),
- new JType("java.nio.IntBuffer", true, false));
- typeMapping.put(new CType("GLuint", false, true),
- new JType("java.nio.IntBuffer", true, false));
- typeMapping.put(new CType("GLuint", true, true),
- new JType("java.nio.IntBuffer", true, false));
- typeMapping.put(new CType("GLshort", true, true),
- new JType("java.nio.ShortBuffer", true, false));
-
- // Typed pointers map to arrays + offsets
- arrayTypeMapping.put(new CType("GLboolean", false, true),
- new JType("boolean", false, true));
- arrayTypeMapping.put(new CType("GLfixed", true, true), new JType("int", false, true));
- arrayTypeMapping.put(new CType("GLfixed", false, true), new JType("int", false, true));
- arrayTypeMapping.put(new CType("GLfloat", false, true), new JType("float", false, true));
- arrayTypeMapping.put(new CType("GLfloat", true, true), new JType("float", false, true));
- arrayTypeMapping.put(new CType("GLint", false, true), new JType("int", false, true));
- arrayTypeMapping.put(new CType("GLint", true, true), new JType("int", false, true));
- arrayTypeMapping.put(new CType("GLshort", true, true), new JType("short", false, true));
- arrayTypeMapping.put(new CType("GLuint", false, true), new JType("int", false, true));
- arrayTypeMapping.put(new CType("GLuint", true, true), new JType("int", false, true));
- arrayTypeMapping.put(new CType("GLintptr"), new JType("int", false, true));
- arrayTypeMapping.put(new CType("GLsizeiptr"), new JType("int", false, true));
- }
-
- public JType() {
- }
-
- public JType(String primitiveTypeName) {
- this.baseType = primitiveTypeName;
- this.isClass = false;
- this.isArray = false;
- }
-
- public JType(String primitiveTypeName, boolean isClass, boolean isArray) {
- this.baseType = primitiveTypeName;
- this.isClass = isClass;
- this.isArray = isArray;
- }
-
- public String getBaseType() {
- return baseType;
- }
-
- public String toString() {
- return baseType + (isArray ? "[]" : "");
- }
-
- public boolean isArray() {
- return isArray;
- }
-
- public boolean isClass() {
- return isClass;
- }
-
- public boolean isPrimitive() {
- return !isClass() && !isArray();
- }
-
- public boolean isVoid() {
- return baseType.equals("void");
- }
-
- public boolean isBuffer() {
- return baseType.indexOf("Buffer") != -1;
- }
-
- public boolean isTypedBuffer() {
- return !baseType.equals("java.nio.Buffer") &&
- (baseType.indexOf("Buffer") != -1);
- }
-
- public static JType convert(CType ctype, boolean useArray) {
- JType javaType = null;
- if (useArray) {
- javaType = arrayTypeMapping.get(ctype);
- }
- if (javaType == null) {
- javaType = typeMapping.get(ctype);
- }
- if (javaType == null) {
- throw new RuntimeException("Unsupported C type: " + ctype);
- }
- return javaType;
- }
-}
+
+import java.util.HashMap;
+
+public class JType {
+
+ String baseType;
+ boolean isArray;
+ boolean isClass;
+
+ static HashMap<CType,JType> typeMapping = new HashMap<CType,JType>();
+ static HashMap<CType,JType> arrayTypeMapping = new HashMap<CType,JType>();
+
+ static {
+ // Primitive types
+ typeMapping.put(new CType("GLbitfield"), new JType("int"));
+ typeMapping.put(new CType("GLboolean"), new JType("boolean"));
+ typeMapping.put(new CType("GLclampf"), new JType("float"));
+ typeMapping.put(new CType("GLclampx"), new JType("int"));
+ typeMapping.put(new CType("GLenum"), new JType("int"));
+ typeMapping.put(new CType("GLfloat"), new JType("float"));
+ typeMapping.put(new CType("GLfixed"), new JType("int"));
+ typeMapping.put(new CType("GLint"), new JType("int"));
+ typeMapping.put(new CType("GLintptr"), new JType("int"));
+ typeMapping.put(new CType("GLshort"), new JType("short"));
+ typeMapping.put(new CType("GLsizei"), new JType("int"));
+ typeMapping.put(new CType("GLsizeiptr"), new JType("int"));
+ typeMapping.put(new CType("GLubyte"), new JType("byte"));
+ typeMapping.put(new CType("GLuint"), new JType("int"));
+ typeMapping.put(new CType("void"), new JType("void"));
+ typeMapping.put(new CType("GLubyte", true, true), new JType("String"));
+
+ // Untyped pointers map to untyped Buffers
+ typeMapping.put(new CType("GLvoid", true, true),
+ new JType("java.nio.Buffer", true, false));
+ typeMapping.put(new CType("GLvoid", false, true),
+ new JType("java.nio.Buffer", true, false));
+ typeMapping.put(new CType("void", false, true),
+ new JType("java.nio.Buffer", true, false));
+ typeMapping.put(new CType("GLeglImageOES", false, false),
+ new JType("java.nio.Buffer", true, false));
+
+ // Typed pointers map to typed Buffers
+ typeMapping.put(new CType("GLboolean", false, true),
+ new JType("java.nio.IntBuffer", true, false));
+ typeMapping.put(new CType("GLfixed", false, true),
+ new JType("java.nio.IntBuffer", true, false));
+ typeMapping.put(new CType("GLfixed", true, true),
+ new JType("java.nio.IntBuffer", true, false));
+ typeMapping.put(new CType("GLfloat", false, true),
+ new JType("java.nio.FloatBuffer", true, false));
+ typeMapping.put(new CType("GLfloat", true, true),
+ new JType("java.nio.FloatBuffer", true, false));
+ typeMapping.put(new CType("GLint", false, true),
+ new JType("java.nio.IntBuffer", true, false));
+ typeMapping.put(new CType("GLint", true, true),
+ new JType("java.nio.IntBuffer", true, false));
+ typeMapping.put(new CType("GLuint", false, true),
+ new JType("java.nio.IntBuffer", true, false));
+ typeMapping.put(new CType("GLuint", true, true),
+ new JType("java.nio.IntBuffer", true, false));
+ typeMapping.put(new CType("GLshort", true, true),
+ new JType("java.nio.ShortBuffer", true, false));
+
+ // Typed pointers map to arrays + offsets
+ arrayTypeMapping.put(new CType("GLboolean", false, true),
+ new JType("boolean", false, true));
+ arrayTypeMapping.put(new CType("GLfixed", true, true), new JType("int", false, true));
+ arrayTypeMapping.put(new CType("GLfixed", false, true), new JType("int", false, true));
+ arrayTypeMapping.put(new CType("GLfloat", false, true), new JType("float", false, true));
+ arrayTypeMapping.put(new CType("GLfloat", true, true), new JType("float", false, true));
+ arrayTypeMapping.put(new CType("GLint", false, true), new JType("int", false, true));
+ arrayTypeMapping.put(new CType("GLint", true, true), new JType("int", false, true));
+ arrayTypeMapping.put(new CType("GLshort", true, true), new JType("short", false, true));
+ arrayTypeMapping.put(new CType("GLuint", false, true), new JType("int", false, true));
+ arrayTypeMapping.put(new CType("GLuint", true, true), new JType("int", false, true));
+ arrayTypeMapping.put(new CType("GLintptr"), new JType("int", false, true));
+ arrayTypeMapping.put(new CType("GLsizeiptr"), new JType("int", false, true));
+ }
+
+ public JType() {
+ }
+
+ public JType(String primitiveTypeName) {
+ this.baseType = primitiveTypeName;
+ this.isClass = false;
+ this.isArray = false;
+ }
+
+ public JType(String primitiveTypeName, boolean isClass, boolean isArray) {
+ this.baseType = primitiveTypeName;
+ this.isClass = isClass;
+ this.isArray = isArray;
+ }
+
+ public String getBaseType() {
+ return baseType;
+ }
+
+ @Override
+ public String toString() {
+ return baseType + (isArray ? "[]" : "");
+ }
+
+ public boolean isArray() {
+ return isArray;
+ }
+
+ public boolean isClass() {
+ return isClass;
+ }
+
+ public boolean isPrimitive() {
+ return !isClass() && !isArray();
+ }
+
+ public boolean isVoid() {
+ return baseType.equals("void");
+ }
+
+ public boolean isBuffer() {
+ return baseType.indexOf("Buffer") != -1;
+ }
+
+ public boolean isTypedBuffer() {
+ return !baseType.equals("java.nio.Buffer") &&
+ (baseType.indexOf("Buffer") != -1);
+ }
+
+ public static JType convert(CType ctype, boolean useArray) {
+ JType javaType = null;
+ if (useArray) {
+ javaType = arrayTypeMapping.get(ctype);
+ }
+ if (javaType == null) {
+ javaType = typeMapping.get(ctype);
+ }
+ if (javaType == null) {
+ throw new RuntimeException("Unsupported C type: " + ctype);
+ }
+ return javaType;
+ }
+}
diff --git a/opengl/tools/glgen/src/JniCodeEmitter.java b/opengl/tools/glgen/src/JniCodeEmitter.java
index 33b9a3e..ef0dbd0 100644
--- a/opengl/tools/glgen/src/JniCodeEmitter.java
+++ b/opengl/tools/glgen/src/JniCodeEmitter.java
@@ -1,99 +1,55 @@
import java.io.PrintStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
-/**
- * Emits a Java interface and Java & C implementation for a C function.
- *
- * <p> The Java interface will have Buffer and array variants for functions that
- * have a typed pointer argument. The array variant will convert a single "<type> *data"
- * argument to a pair of arguments "<type>[] data, int offset".
- */
-public class JniCodeEmitter implements CodeEmitter {
+public class JniCodeEmitter {
- // If true, use C++ style for calling through a JNIEnv *:
- // env->Func(...)
- // If false, use C style:
- // (*env)->Func(env, ...)
static final boolean mUseCPlusPlus = true;
-
- boolean mUseContextPointer = true;
-
- String mClassPathName;
-
- ParameterChecker mChecker;
- PrintStream mJava10InterfaceStream;
- PrintStream mJava10ExtInterfaceStream;
- PrintStream mJava11InterfaceStream;
- PrintStream mJava11ExtInterfaceStream;
- PrintStream mJava11ExtPackInterfaceStream;
- PrintStream mJavaImplStream;
- PrintStream mCStream;
-
- PrintStream mJavaInterfaceStream;
-
- List<String> nativeRegistrations = new ArrayList<String>();
-
+ protected boolean mUseContextPointer = true;
+ protected boolean mUseStaticMethods = false;
+ protected String mClassPathName;
+ protected ParameterChecker mChecker;
+ protected List<String> nativeRegistrations = new ArrayList<String>();
boolean needsExit;
-
- static String indent = " ";
-
+ protected static String indent = " ";
HashSet<String> mFunctionsEmitted = new HashSet<String>();
- /**
- * @param java10InterfaceStream the PrintStream to which to emit the Java interface for GL 1.0 functions
- * @param java10ExtInterfaceStream the PrintStream to which to emit the Java interface for GL 1.0 extension functions
- * @param java11InterfaceStream the PrintStream to which to emit the Java interface for GL 1.1 functions
- * @param java11ExtInterfaceStream the PrintStream to which to emit the Java interface for GL 1.1 Extension functions
- * @param java11ExtPackInterfaceStream the PrintStream to which to emit the Java interface for GL 1.1 Extension Pack functions
- * @param javaImplStream the PrintStream to which to emit the Java implementation
- * @param cStream the PrintStream to which to emit the C implementation
- */
- public JniCodeEmitter(String classPathName,
- ParameterChecker checker,
- PrintStream java10InterfaceStream,
- PrintStream java10ExtInterfaceStream,
- PrintStream java11InterfaceStream,
- PrintStream java11ExtInterfaceStream,
- PrintStream java11ExtPackInterfaceStream,
- PrintStream javaImplStream,
- PrintStream cStream,
- boolean useContextPointer) {
- mClassPathName = classPathName;
- mChecker = checker;
- mJava10InterfaceStream = java10InterfaceStream;
- mJava10ExtInterfaceStream = java10ExtInterfaceStream;
- mJava11InterfaceStream = java11InterfaceStream;
- mJava11ExtInterfaceStream = java11ExtInterfaceStream;
- mJava11ExtPackInterfaceStream = java11ExtPackInterfaceStream;
- mJavaImplStream = javaImplStream;
- mCStream = cStream;
- mUseContextPointer = useContextPointer;
- }
-
- public void setVersion(int version, boolean ext, boolean pack) {
- if (version == 0) {
- mJavaInterfaceStream = ext ? mJava10ExtInterfaceStream :
- mJava10InterfaceStream;
- } else if (version == 1) {
- mJavaInterfaceStream = ext ?
- (pack ? mJava11ExtPackInterfaceStream :
- mJava11ExtInterfaceStream) :
- mJava11InterfaceStream;
- } else {
- throw new RuntimeException("Bad version: " + version);
+ public static String getJniName(JType jType) {
+ String jniName = "";
+ if (jType.isClass()) {
+ return "L" + jType.getBaseType() + ";";
+ } else if (jType.isArray()) {
+ jniName = "[";
}
+
+ String baseType = jType.getBaseType();
+ if (baseType.equals("int")) {
+ jniName += "I";
+ } else if (baseType.equals("float")) {
+ jniName += "F";
+ } else if (baseType.equals("boolean")) {
+ jniName += "Z";
+ } else if (baseType.equals("short")) {
+ jniName += "S";
+ } else if (baseType.equals("long")) {
+ jniName += "L";
+ } else if (baseType.equals("byte")) {
+ jniName += "B";
+ }
+ return jniName;
}
- public void emitCode(CFunc cfunc, String original) {
+
+ public void emitCode(CFunc cfunc, String original,
+ PrintStream javaInterfaceStream,
+ PrintStream javaImplStream,
+ PrintStream cStream) {
JFunc jfunc;
String signature;
boolean duplicate;
-
+
if (cfunc.hasTypedPointerArg()) {
jfunc = JFunc.convert(cfunc, true);
@@ -109,12 +65,14 @@
}
if (!duplicate) {
- emitNativeDeclaration(jfunc, mJavaImplStream);
- emitJavaCode(jfunc, mJavaImplStream);
+ emitNativeDeclaration(jfunc, javaImplStream);
+ emitJavaCode(jfunc, javaImplStream);
}
- emitJavaInterfaceCode(jfunc, mJavaInterfaceStream);
+ if (javaInterfaceStream != null) {
+ emitJavaInterfaceCode(jfunc, javaInterfaceStream);
+ }
if (!duplicate) {
- emitJniCode(jfunc, mCStream);
+ emitJniCode(jfunc, cStream);
}
}
@@ -129,12 +87,14 @@
}
if (!duplicate) {
- emitNativeDeclaration(jfunc, mJavaImplStream);
+ emitNativeDeclaration(jfunc, javaImplStream);
}
- emitJavaInterfaceCode(jfunc, mJavaInterfaceStream);
+ if (javaInterfaceStream != null) {
+ emitJavaInterfaceCode(jfunc, javaInterfaceStream);
+ }
if (!duplicate) {
- emitJavaCode(jfunc, mJavaImplStream);
- emitJniCode(jfunc, mCStream);
+ emitJavaCode(jfunc, javaImplStream);
+ emitJniCode(jfunc, cStream);
}
}
@@ -152,8 +112,8 @@
public void emitJavaCode(JFunc jfunc, PrintStream out) {
emitFunction(jfunc, out, false, false);
}
-
- void emitFunctionCall(JFunc jfunc, PrintStream out, String iii, boolean grabArray ) {
+
+ void emitFunctionCall(JFunc jfunc, PrintStream out, String iii, boolean grabArray) {
boolean isVoid = jfunc.getType().isVoid();
boolean isPointerFunc = jfunc.getName().endsWith("Pointer") &&
jfunc.getCFunc().hasPointerArg();
@@ -167,7 +127,7 @@
jfunc.getName() +
(isPointerFunc ? "Bounds" : "" ) +
"(");
-
+
int numArgs = jfunc.getNumArgs();
for (int i = 0; i < numArgs; i++) {
String argName = jfunc.getArgName(i);
@@ -177,7 +137,7 @@
String typeName = argType.getBaseType();
typeName = typeName.substring(9, typeName.length() - 6);
out.println(iii + indent + "get" + typeName + "Array(" + argName + "),");
- out.print(iii + indent + "getOffset(" + argName + ")");
+ out.print(iii + indent + "getOffset(" + argName + ")");
} else {
out.print(iii + indent + argName);
}
@@ -192,41 +152,40 @@
out.println(",");
}
}
-
+
out.println(iii + ");");
}
- void printIfcheckPostamble(PrintStream out, boolean isBuffer,
- boolean emitExceptionCheck, String iii) {
- printIfcheckPostamble(out, isBuffer, emitExceptionCheck,
- "offset", "_remaining", iii);
- }
+ void printIfcheckPostamble(PrintStream out, boolean isBuffer, boolean emitExceptionCheck,
+ String iii) {
+ printIfcheckPostamble(out, isBuffer, emitExceptionCheck,
+ "offset", "_remaining", iii);
+ }
- void printIfcheckPostamble(PrintStream out, boolean isBuffer,
- boolean emitExceptionCheck,
- String offset, String remaining, String iii) {
- out.println(iii + " default:");
- out.println(iii + " _needed = 0;");
- out.println(iii + " break;");
- out.println(iii + "}");
+ void printIfcheckPostamble(PrintStream out, boolean isBuffer, boolean emitExceptionCheck,
+ String offset, String remaining, String iii) {
+ out.println(iii + " default:");
+ out.println(iii + " _needed = 0;");
+ out.println(iii + " break;");
+ out.println(iii + "}");
- out.println(iii + "if (" + remaining + " < _needed) {");
- if (emitExceptionCheck) {
- out.println(iii + indent + "_exception = 1;");
- }
- out.println(iii + indent +
- (mUseCPlusPlus ? "_env" : "(*_env)") +
- "->ThrowNew(" +
- (mUseCPlusPlus ? "" : "_env, ") +
- "IAEClass, " +
- "\"" +
- (isBuffer ?
- "remaining()" : "length - " + offset) +
- " < needed\");");
- out.println(iii + indent + "goto exit;");
- needsExit = true;
- out.println(iii + "}");
- }
+ out.println(iii + "if (" + remaining + " < _needed) {");
+ if (emitExceptionCheck) {
+ out.println(iii + indent + "_exception = 1;");
+ }
+ out.println(iii + indent +
+ (mUseCPlusPlus ? "_env" : "(*_env)") +
+ "->ThrowNew(" +
+ (mUseCPlusPlus ? "" : "_env, ") +
+ "IAEClass, " +
+ "\"" +
+ (isBuffer ?
+ "remaining()" : "length - " + offset) +
+ " < needed\");");
+ out.println(iii + indent + "goto exit;");
+ needsExit = true;
+ out.println(iii + "}");
+ }
boolean isNullAllowed(CFunc cfunc) {
String[] checks = mChecker.getChecks(cfunc.getName());
@@ -312,115 +271,106 @@
}
void emitNativeBoundsChecks(CFunc cfunc, String cname, PrintStream out,
- boolean isBuffer, boolean emitExceptionCheck,
- String offset, String remaining, String iii) {
- CType returnType = cfunc.getType();
- boolean isVoid = returnType.isVoid();
+ boolean isBuffer, boolean emitExceptionCheck, String offset, String remaining, String iii) {
- String[] checks = mChecker.getChecks(cfunc.getName());
- String checkVar;
- String retval = getErrorReturnValue(cfunc);
+ String[] checks = mChecker.getChecks(cfunc.getName());
- boolean lastWasIfcheck = false;
+ boolean lastWasIfcheck = false;
- int index = 1;
- if (checks != null) {
- boolean remainingDeclared = false;
- boolean nullCheckDeclared = false;
- boolean offsetChecked = false;
- while (index < checks.length) {
- if (checks[index].startsWith("check")) {
- if (lastWasIfcheck) {
- printIfcheckPostamble(out, isBuffer, emitExceptionCheck,
- offset, remaining, iii);
+ int index = 1;
+ if (checks != null) {
+ while (index < checks.length) {
+ if (checks[index].startsWith("check")) {
+ if (lastWasIfcheck) {
+ printIfcheckPostamble(out, isBuffer, emitExceptionCheck,
+ offset, remaining, iii);
+ }
+ lastWasIfcheck = false;
+ if (cname != null && !cname.equals(checks[index + 1])) {
+ index += 3;
+ continue;
+ }
+ out.println(iii + "if (" + remaining + " < " +
+ checks[index + 2] +
+ ") {");
+ if (emitExceptionCheck) {
+ out.println(iii + indent + "_exception = 1;");
+ }
+ String exceptionClassName = "IAEClass";
+ // If the "check" keyword was of the form
+ // "check_<class name>", use the class name in the
+ // exception to be thrown
+ int underscore = checks[index].indexOf('_');
+ if (underscore >= 0) {
+ exceptionClassName = checks[index].substring(underscore + 1) + "Class";
}
- lastWasIfcheck = false;
- if (cname != null && !cname.equals(checks[index + 1])) {
- index += 3;
- continue;
- }
- out.println(iii + "if (" + remaining + " < " +
- checks[index + 2] +
- ") {");
- if (emitExceptionCheck) {
- out.println(iii + indent + "_exception = 1;");
- }
- String exceptionClassName = "IAEClass";
- // If the "check" keyword was of the form
- // "check_<class name>", use the class name in the
- // exception to be thrown
- int underscore = checks[index].indexOf('_');
- if (underscore >= 0) {
- exceptionClassName = checks[index].substring(underscore + 1) + "Class";
- }
- out.println(iii + indent +
- (mUseCPlusPlus ? "_env" : "(*_env)") +
- "->ThrowNew(" +
- (mUseCPlusPlus ? "" : "_env, ") +
- exceptionClassName + ", " +
- "\"" +
- (isBuffer ?
- "remaining()" : "length - " + offset) +
- " < " + checks[index + 2] +
- "\");");
+ out.println(iii + indent +
+ (mUseCPlusPlus ? "_env" : "(*_env)") +
+ "->ThrowNew(" +
+ (mUseCPlusPlus ? "" : "_env, ") +
+ exceptionClassName + ", " +
+ "\"" +
+ (isBuffer ?
+ "remaining()" : "length - " + offset) +
+ " < " + checks[index + 2] +
+ "\");");
- out.println(iii + indent + "goto exit;");
- needsExit = true;
- out.println(iii + "}");
-
- index += 3;
- } else if (checks[index].equals("ifcheck")) {
- String[] matches = checks[index + 4].split(",");
+ out.println(iii + indent + "goto exit;");
+ needsExit = true;
+ out.println(iii + "}");
- if (!lastWasIfcheck) {
- out.println(iii + "int _needed;");
- out.println(iii +
- "switch (" +
- checks[index + 3] +
- ") {");
+ index += 3;
+ } else if (checks[index].equals("ifcheck")) {
+ String[] matches = checks[index + 4].split(",");
+
+ if (!lastWasIfcheck) {
+ out.println(iii + "int _needed;");
+ out.println(iii +
+ "switch (" +
+ checks[index + 3] +
+ ") {");
+ }
+
+ for (int i = 0; i < matches.length; i++) {
+ out.println("#if defined(" + matches[i] + ")");
+ out.println(iii +
+ " case " +
+ matches[i] +
+ ":");
+ out.println("#endif // defined(" + matches[i] + ")");
+ }
+ out.println(iii +
+ " _needed = " +
+ checks[index + 2] +
+ ";");
+ out.println(iii +
+ " break;");
+
+ lastWasIfcheck = true;
+ index += 5;
+ } else if (checks[index].equals("return")) {
+ // ignore
+ index += 2;
+ } else if (checks[index].equals("unsupported")) {
+ // ignore
+ index += 1;
+ } else if (checks[index].equals("nullAllowed")) {
+ // ignore
+ index += 1;
+ } else {
+ System.out.println("Error: unknown keyword \"" +
+ checks[index] + "\"");
+ System.exit(0);
+ }
}
-
- for (int i = 0; i < matches.length; i++) {
- out.println("#if defined(" + matches[i] + ")");
- out.println(iii +
- " case " +
- matches[i] +
- ":");
- out.println("#endif // defined(" + matches[i] + ")");
- }
- out.println(iii +
- " _needed = " +
- checks[index + 2] +
- ";");
- out.println(iii +
- " break;");
-
- lastWasIfcheck = true;
- index += 5;
- } else if (checks[index].equals("return")) {
- // ignore
- index += 2;
- } else if (checks[index].equals("unsupported")) {
- // ignore
- index += 1;
- } else if (checks[index].equals("nullAllowed")) {
- // ignore
- index += 1;
- } else {
- System.out.println("Error: unknown keyword \"" +
- checks[index] + "\"");
- System.exit(0);
+ }
+
+ if (lastWasIfcheck) {
+ printIfcheckPostamble(out, isBuffer, emitExceptionCheck, iii);
}
}
- }
- if (lastWasIfcheck) {
- printIfcheckPostamble(out, isBuffer, emitExceptionCheck, iii);
- }
- }
-
- boolean hasNonConstArg(JFunc jfunc, CFunc cfunc,
- List<Integer> nonPrimitiveArgs) {
+ boolean hasNonConstArg(JFunc jfunc, CFunc cfunc, List<Integer> nonPrimitiveArgs) {
if (nonPrimitiveArgs.size() > 0) {
for (int i = nonPrimitiveArgs.size() - 1; i >= 0; i--) {
int idx = nonPrimitiveArgs.get(i).intValue();
@@ -439,7 +389,7 @@
return false;
}
-
+
/**
* Emit a function in several variants:
*
@@ -449,9 +399,7 @@
* if interfaceDecl: public <returntype> func(args);
* if !interfaceDecl: public <returntype> func(args) { body }
*/
- void emitFunction(JFunc jfunc,
- PrintStream out,
- boolean nativeDecl, boolean interfaceDecl) {
+ void emitFunction(JFunc jfunc, PrintStream out, boolean nativeDecl, boolean interfaceDecl) {
boolean isPointerFunc =
jfunc.getName().endsWith("Pointer") &&
jfunc.getCFunc().hasPointerArg();
@@ -462,28 +410,30 @@
return;
}
+ String maybeStatic = mUseStaticMethods ? "static " : "";
+
if (isPointerFunc) {
out.println(indent +
- (nativeDecl ? "private native " :
- (interfaceDecl ? "" : "public ")) +
+ (nativeDecl ? "private " + maybeStatic +"native " :
+ (interfaceDecl ? "" : "public ") + maybeStatic) +
jfunc.getType() + " " +
jfunc.getName() +
(nativeDecl ? "Bounds" : "") +
"(");
} else {
out.println(indent +
- (nativeDecl ? "public native " :
- (interfaceDecl ? "" : "public ")) +
+ (nativeDecl ? "public " + maybeStatic +"native " :
+ (interfaceDecl ? "" : "public ") + maybeStatic) +
jfunc.getType() + " " +
jfunc.getName() +
"(");
}
-
+
int numArgs = jfunc.getNumArgs();
for (int i = 0; i < numArgs; i++) {
String argName = jfunc.getArgName(i);
JType argType = jfunc.getArgType(i);
-
+
out.print(indent + indent + argType + " " + argName);
if (i == numArgs - 1) {
if (isPointerFunc && nativeDecl) {
@@ -561,29 +511,44 @@
out.println();
}
- public static String getJniName(JType jType) {
- String jniName = "";
- if (jType.isClass()) {
- return "L" + jType.getBaseType() + ";";
- } else if (jType.isArray()) {
- jniName = "[";
+ public void addNativeRegistration(String s) {
+ nativeRegistrations.add(s);
+ }
+
+ public void emitNativeRegistration(String registrationFunctionName,
+ PrintStream cStream) {
+ cStream.println("static const char *classPathName = \"" +
+ mClassPathName +
+ "\";");
+ cStream.println();
+
+ cStream.println("static JNINativeMethod methods[] = {");
+
+ cStream.println("{\"_nativeClassInit\", \"()V\", (void*)nativeClassInit },");
+
+ Iterator<String> i = nativeRegistrations.iterator();
+ while (i.hasNext()) {
+ cStream.println(i.next());
}
-
- String baseType = jType.getBaseType();
- if (baseType.equals("int")) {
- jniName += "I";
- } else if (baseType.equals("float")) {
- jniName += "F";
- } else if (baseType.equals("boolean")) {
- jniName += "Z";
- } else if (baseType.equals("short")) {
- jniName += "S";
- } else if (baseType.equals("long")) {
- jniName += "L";
- } else if (baseType.equals("byte")) {
- jniName += "B";
- }
- return jniName;
+
+ cStream.println("};");
+ cStream.println();
+
+
+ cStream.println("int " + registrationFunctionName + "(JNIEnv *_env)");
+ cStream.println("{");
+ cStream.println(indent +
+ "int err;");
+
+ cStream.println(indent +
+ "err = android::AndroidRuntime::registerNativeMethods(_env, classPathName, methods, NELEM(methods));");
+
+ cStream.println(indent + "return err;");
+ cStream.println("}");
+ }
+
+ public JniCodeEmitter() {
+ super();
}
String getJniType(JType jType) {
@@ -604,7 +569,7 @@
return "jobject";
}
}
-
+
String getJniMangledName(String name) {
name = name.replaceAll("_", "_1");
name = name.replaceAll(";", "_2");
@@ -614,7 +579,7 @@
public void emitJniCode(JFunc jfunc, PrintStream out) {
CFunc cfunc = jfunc.getCFunc();
-
+
// Emit comment identifying original C function
//
// Example:
@@ -658,13 +623,13 @@
}
// Append signature to function name
- String sig = getJniMangledName(signature).replace('.', '_');
+ String sig = getJniMangledName(signature).replace('.', '_');
out.print("__" + sig);
outName += "__" + sig;
-
+
signature = signature.replace('.', '/');
rsignature = rsignature.replace('.', '/');
-
+
out.println();
if (rsignature.length() == 0) {
rsignature = "V";
@@ -718,13 +683,11 @@
out.print(", jint remaining");
}
out.println(") {");
-
+
int numArrays = 0;
int numBuffers = 0;
for (int i = 0; i < nonPrimitiveArgs.size(); i++) {
int idx = nonPrimitiveArgs.get(i).intValue();
- int cIndex = jfunc.getArgCIndex(idx);
- String cname = cfunc.getArgName(cIndex);
if (jfunc.getArgType(idx).isArray()) {
++numArrays;
}
@@ -740,7 +703,7 @@
// Example:
//
// android::gl::ogles_context_t *ctx;
- //
+ //
// jint _exception;
// GLenum _returnValue;
//
@@ -827,15 +790,13 @@
out.println(indent +
decl +
(decl.endsWith("*") ? "" : " ") +
- jfunc.getArgName(idx) +
+ jfunc.getArgName(idx) +
" = (" + decl + ") 0;");
}
out.println();
}
- String retval = isVoid ? "" : " _returnValue";
-
// Emit 'GetPrimitiveArrayCritical' for arrays
// Emit 'GetPointer' calls for Buffer pointers
int bufArgIdx = 0;
@@ -843,7 +804,7 @@
for (int i = 0; i < nonPrimitiveArgs.size(); i++) {
int idx = nonPrimitiveArgs.get(i).intValue();
int cIndex = jfunc.getArgCIndex(idx);
-
+
String cname = cfunc.getArgName(cIndex);
offset = numArrays <= 1 ? "offset" :
cname + "Offset";
@@ -852,7 +813,7 @@
if (jfunc.getArgType(idx).isArray()) {
out.println(indent +
- "if (!" +
+ "if (!" +
cname +
"_ref) {");
if (emitExceptionCheck) {
@@ -884,7 +845,7 @@
out.println(indent + "}");
out.println(indent + remaining + " = " +
- (mUseCPlusPlus ? "_env" : "(*_env)") +
+ (mUseCPlusPlus ? "_env" : "(*_env)") +
"->GetArrayLength(" +
(mUseCPlusPlus ? "" : "_env, ") +
cname + "_ref) - " + offset + ";");
@@ -901,7 +862,7 @@
out.println(indent + " " +
(mUseCPlusPlus ? "_env" : "(*_env)") +
"->GetPrimitiveArrayCritical(" +
- (mUseCPlusPlus ? "" : "_env, ") +
+ (mUseCPlusPlus ? "" : "_env, ") +
jfunc.getArgName(idx) +
"_ref, (jboolean *)0);");
out.println(indent +
@@ -917,7 +878,7 @@
out.println(indent + "if (" + cname + "_buf) {");
out.print(indent);
}
-
+
out.println(indent +
cname +
" = (" +
@@ -950,10 +911,10 @@
name.substring(1, name.length());
out.print("ctx->procs.");
}
-
+
out.print(name + (isPointerFunc ? "Bounds" : "") + "(");
- numArgs = cfunc.getNumArgs();
+ numArgs = cfunc.getNumArgs();
if (numArgs == 0) {
if (mUseContextPointer) {
out.println("ctx);");
@@ -1006,7 +967,7 @@
int cIndex = jfunc.getArgCIndex(idx);
if (jfunc.getArgType(idx).isArray()) {
-
+
// If the argument is 'const', GL will not write to it.
// In this case, we can use the 'JNI_ABORT' flag to avoid
// the need to write back to the Java array
@@ -1015,7 +976,7 @@
out.println(indent + indent +
(mUseCPlusPlus ? "_env" : "(*_env)") +
"->ReleasePrimitiveArrayCritical(" +
- (mUseCPlusPlus ? "" : "_env, ") +
+ (mUseCPlusPlus ? "" : "_env, ") +
jfunc.getArgName(idx) + "_ref, " +
cfunc.getArgName(cIndex) +
"_base,");
@@ -1049,38 +1010,4 @@
out.println();
}
- public void addNativeRegistration(String s) {
- nativeRegistrations.add(s);
- }
-
- public void emitNativeRegistration() {
- mCStream.println("static const char *classPathName = \"" +
- mClassPathName +
- "\";");
- mCStream.println();
-
- mCStream.println("static JNINativeMethod methods[] = {");
-
- mCStream.println("{\"_nativeClassInit\", \"()V\", (void*)nativeClassInit },");
-
- Iterator<String> i = nativeRegistrations.iterator();
- while (i.hasNext()) {
- mCStream.println(i.next());
- }
-
- mCStream.println("};");
- mCStream.println();
-
-
- mCStream.println("int register_com_google_android_gles_jni_GLImpl(JNIEnv *_env)");
- mCStream.println("{");
- mCStream.println(indent +
- "int err;");
-
- mCStream.println(indent +
- "err = android::AndroidRuntime::registerNativeMethods(_env, classPathName, methods, NELEM(methods));");
-
- mCStream.println(indent + "return err;");
- mCStream.println("}");
- }
}
diff --git a/opengl/tools/glgen/src/Jsr239CodeEmitter.java b/opengl/tools/glgen/src/Jsr239CodeEmitter.java
new file mode 100644
index 0000000..335d226
--- /dev/null
+++ b/opengl/tools/glgen/src/Jsr239CodeEmitter.java
@@ -0,0 +1,74 @@
+import java.io.PrintStream;
+
+/**
+ * Emits a Java interface and Java & C implementation for a C function.
+ *
+ * <p> The Java interface will have Buffer and array variants for functions that
+ * have a typed pointer argument. The array variant will convert a single "<type> *data"
+ * argument to a pair of arguments "<type>[] data, int offset".
+ */
+public class Jsr239CodeEmitter extends JniCodeEmitter implements CodeEmitter {
+
+ PrintStream mJava10InterfaceStream;
+ PrintStream mJava10ExtInterfaceStream;
+ PrintStream mJava11InterfaceStream;
+ PrintStream mJava11ExtInterfaceStream;
+ PrintStream mJava11ExtPackInterfaceStream;
+ PrintStream mJavaImplStream;
+ PrintStream mCStream;
+
+ PrintStream mJavaInterfaceStream;
+
+ /**
+ * @param java10InterfaceStream the PrintStream to which to emit the Java interface for GL 1.0 functions
+ * @param java10ExtInterfaceStream the PrintStream to which to emit the Java interface for GL 1.0 extension functions
+ * @param java11InterfaceStream the PrintStream to which to emit the Java interface for GL 1.1 functions
+ * @param java11ExtInterfaceStream the PrintStream to which to emit the Java interface for GL 1.1 Extension functions
+ * @param java11ExtPackInterfaceStream the PrintStream to which to emit the Java interface for GL 1.1 Extension Pack functions
+ * @param javaImplStream the PrintStream to which to emit the Java implementation
+ * @param cStream the PrintStream to which to emit the C implementation
+ */
+ public Jsr239CodeEmitter(String classPathName,
+ ParameterChecker checker,
+ PrintStream java10InterfaceStream,
+ PrintStream java10ExtInterfaceStream,
+ PrintStream java11InterfaceStream,
+ PrintStream java11ExtInterfaceStream,
+ PrintStream java11ExtPackInterfaceStream,
+ PrintStream javaImplStream,
+ PrintStream cStream,
+ boolean useContextPointer) {
+ mClassPathName = classPathName;
+ mChecker = checker;
+ mJava10InterfaceStream = java10InterfaceStream;
+ mJava10ExtInterfaceStream = java10ExtInterfaceStream;
+ mJava11InterfaceStream = java11InterfaceStream;
+ mJava11ExtInterfaceStream = java11ExtInterfaceStream;
+ mJava11ExtPackInterfaceStream = java11ExtPackInterfaceStream;
+ mJavaImplStream = javaImplStream;
+ mCStream = cStream;
+ mUseContextPointer = useContextPointer;
+ }
+
+ public void setVersion(int version, boolean ext, boolean pack) {
+ if (version == 0) {
+ mJavaInterfaceStream = ext ? mJava10ExtInterfaceStream :
+ mJava10InterfaceStream;
+ } else if (version == 1) {
+ mJavaInterfaceStream = ext ?
+ (pack ? mJava11ExtPackInterfaceStream :
+ mJava11ExtInterfaceStream) :
+ mJava11InterfaceStream;
+ } else {
+ throw new RuntimeException("Bad version: " + version);
+ }
+ }
+
+ public void emitCode(CFunc cfunc, String original) {
+ emitCode(cfunc, original, mJavaInterfaceStream, mJavaImplStream, mCStream);
+ }
+
+ public void emitNativeRegistration() {
+ emitNativeRegistration("register_com_google_android_gles_jni_GLImpl", mCStream);
+ }
+}
diff --git a/opengl/tools/glgen/stubs/gles11/GLES10ExtHeader.java-if b/opengl/tools/glgen/stubs/gles11/GLES10ExtHeader.java-if
new file mode 100644
index 0000000..42891ea
--- /dev/null
+++ b/opengl/tools/glgen/stubs/gles11/GLES10ExtHeader.java-if
@@ -0,0 +1,26 @@
+**
+** Copyright 2009, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+
+// This source file is automatically generated
+
+package android.opengl;
+
+public class GLES10Ext {
+ native private static void _nativeClassInit();
+ static {
+ _nativeClassInit();
+ }
+
\ No newline at end of file
diff --git a/opengl/tools/glgen/stubs/GLCHeader.cpp b/opengl/tools/glgen/stubs/gles11/GLES10ExtcHeader.cpp
similarity index 97%
copy from opengl/tools/glgen/stubs/GLCHeader.cpp
copy to opengl/tools/glgen/stubs/gles11/GLES10ExtcHeader.cpp
index 6495686..3e5c19c 100644
--- a/opengl/tools/glgen/stubs/GLCHeader.cpp
+++ b/opengl/tools/glgen/stubs/gles11/GLES10ExtcHeader.cpp
@@ -1,5 +1,5 @@
**
-** Copyright 2006, The Android Open Source Project
+** Copyright 2009, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
@@ -44,7 +44,7 @@
/* Cache method IDs each time the class is loaded. */
-void
+static void
nativeClassInitBuffer(JNIEnv *_env)
{
jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess");
diff --git a/opengl/tools/glgen/stubs/gles11/GLES10Header.java-if b/opengl/tools/glgen/stubs/gles11/GLES10Header.java-if
new file mode 100644
index 0000000..4b2a831
--- /dev/null
+++ b/opengl/tools/glgen/stubs/gles11/GLES10Header.java-if
@@ -0,0 +1,271 @@
+**
+** Copyright 2009, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+
+// This source file is automatically generated
+
+package android.opengl;
+
+import java.nio.Buffer;
+
+public class GLES10 {
+ public static final int GL_ADD = 0x0104;
+ public static final int GL_ALIASED_LINE_WIDTH_RANGE = 0x846E;
+ public static final int GL_ALIASED_POINT_SIZE_RANGE = 0x846D;
+ public static final int GL_ALPHA = 0x1906;
+ public static final int GL_ALPHA_BITS = 0x0D55;
+ public static final int GL_ALPHA_TEST = 0x0BC0;
+ public static final int GL_ALWAYS = 0x0207;
+ public static final int GL_AMBIENT = 0x1200;
+ public static final int GL_AMBIENT_AND_DIFFUSE = 0x1602;
+ public static final int GL_AND = 0x1501;
+ public static final int GL_AND_INVERTED = 0x1504;
+ public static final int GL_AND_REVERSE = 0x1502;
+ public static final int GL_BACK = 0x0405;
+ public static final int GL_BLEND = 0x0BE2;
+ public static final int GL_BLUE_BITS = 0x0D54;
+ public static final int GL_BYTE = 0x1400;
+ public static final int GL_CCW = 0x0901;
+ public static final int GL_CLAMP_TO_EDGE = 0x812F;
+ public static final int GL_CLEAR = 0x1500;
+ public static final int GL_COLOR_ARRAY = 0x8076;
+ public static final int GL_COLOR_BUFFER_BIT = 0x4000;
+ public static final int GL_COLOR_LOGIC_OP = 0x0BF2;
+ public static final int GL_COLOR_MATERIAL = 0x0B57;
+ public static final int GL_COMPRESSED_TEXTURE_FORMATS = 0x86A3;
+ public static final int GL_CONSTANT_ATTENUATION = 0x1207;
+ public static final int GL_COPY = 0x1503;
+ public static final int GL_COPY_INVERTED = 0x150C;
+ public static final int GL_CULL_FACE = 0x0B44;
+ public static final int GL_CW = 0x0900;
+ public static final int GL_DECAL = 0x2101;
+ public static final int GL_DECR = 0x1E03;
+ public static final int GL_DEPTH_BITS = 0x0D56;
+ public static final int GL_DEPTH_BUFFER_BIT = 0x0100;
+ public static final int GL_DEPTH_TEST = 0x0B71;
+ public static final int GL_DIFFUSE = 0x1201;
+ public static final int GL_DITHER = 0x0BD0;
+ public static final int GL_DONT_CARE = 0x1100;
+ public static final int GL_DST_ALPHA = 0x0304;
+ public static final int GL_DST_COLOR = 0x0306;
+ public static final int GL_EMISSION = 0x1600;
+ public static final int GL_EQUAL = 0x0202;
+ public static final int GL_EQUIV = 0x1509;
+ public static final int GL_EXP = 0x0800;
+ public static final int GL_EXP2 = 0x0801;
+ public static final int GL_EXTENSIONS = 0x1F03;
+ public static final int GL_FALSE = 0;
+ public static final int GL_FASTEST = 0x1101;
+ public static final int GL_FIXED = 0x140C;
+ public static final int GL_FLAT = 0x1D00;
+ public static final int GL_FLOAT = 0x1406;
+ public static final int GL_FOG = 0x0B60;
+ public static final int GL_FOG_COLOR = 0x0B66;
+ public static final int GL_FOG_DENSITY = 0x0B62;
+ public static final int GL_FOG_END = 0x0B64;
+ public static final int GL_FOG_HINT = 0x0C54;
+ public static final int GL_FOG_MODE = 0x0B65;
+ public static final int GL_FOG_START = 0x0B63;
+ public static final int GL_FRONT = 0x0404;
+ public static final int GL_FRONT_AND_BACK = 0x0408;
+ public static final int GL_GEQUAL = 0x0206;
+ public static final int GL_GREATER = 0x0204;
+ public static final int GL_GREEN_BITS = 0x0D53;
+ public static final int GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES = 0x8B9B;
+ public static final int GL_IMPLEMENTATION_COLOR_READ_TYPE_OES = 0x8B9A;
+ public static final int GL_INCR = 0x1E02;
+ public static final int GL_INVALID_ENUM = 0x0500;
+ public static final int GL_INVALID_OPERATION = 0x0502;
+ public static final int GL_INVALID_VALUE = 0x0501;
+ public static final int GL_INVERT = 0x150A;
+ public static final int GL_KEEP = 0x1E00;
+ public static final int GL_LEQUAL = 0x0203;
+ public static final int GL_LESS = 0x0201;
+ public static final int GL_LIGHT_MODEL_AMBIENT = 0x0B53;
+ public static final int GL_LIGHT_MODEL_TWO_SIDE = 0x0B52;
+ public static final int GL_LIGHT0 = 0x4000;
+ public static final int GL_LIGHT1 = 0x4001;
+ public static final int GL_LIGHT2 = 0x4002;
+ public static final int GL_LIGHT3 = 0x4003;
+ public static final int GL_LIGHT4 = 0x4004;
+ public static final int GL_LIGHT5 = 0x4005;
+ public static final int GL_LIGHT6 = 0x4006;
+ public static final int GL_LIGHT7 = 0x4007;
+ public static final int GL_LIGHTING = 0x0B50;
+ public static final int GL_LINE_LOOP = 0x0002;
+ public static final int GL_LINE_SMOOTH = 0x0B20;
+ public static final int GL_LINE_SMOOTH_HINT = 0x0C52;
+ public static final int GL_LINE_STRIP = 0x0003;
+ public static final int GL_LINEAR = 0x2601;
+ public static final int GL_LINEAR_ATTENUATION = 0x1208;
+ public static final int GL_LINEAR_MIPMAP_LINEAR = 0x2703;
+ public static final int GL_LINEAR_MIPMAP_NEAREST = 0x2701;
+ public static final int GL_LINES = 0x0001;
+ public static final int GL_LUMINANCE = 0x1909;
+ public static final int GL_LUMINANCE_ALPHA = 0x190A;
+ public static final int GL_MAX_ELEMENTS_INDICES = 0x80E9;
+ public static final int GL_MAX_ELEMENTS_VERTICES = 0x80E8;
+ public static final int GL_MAX_LIGHTS = 0x0D31;
+ public static final int GL_MAX_MODELVIEW_STACK_DEPTH = 0x0D36;
+ public static final int GL_MAX_PROJECTION_STACK_DEPTH = 0x0D38;
+ public static final int GL_MAX_TEXTURE_SIZE = 0x0D33;
+ public static final int GL_MAX_TEXTURE_STACK_DEPTH = 0x0D39;
+ public static final int GL_MAX_TEXTURE_UNITS = 0x84E2;
+ public static final int GL_MAX_VIEWPORT_DIMS = 0x0D3A;
+ public static final int GL_MODELVIEW = 0x1700;
+ public static final int GL_MODULATE = 0x2100;
+ public static final int GL_MULTISAMPLE = 0x809D;
+ public static final int GL_NAND = 0x150E;
+ public static final int GL_NEAREST = 0x2600;
+ public static final int GL_NEAREST_MIPMAP_LINEAR = 0x2702;
+ public static final int GL_NEAREST_MIPMAP_NEAREST = 0x2700;
+ public static final int GL_NEVER = 0x0200;
+ public static final int GL_NICEST = 0x1102;
+ public static final int GL_NO_ERROR = 0;
+ public static final int GL_NOOP = 0x1505;
+ public static final int GL_NOR = 0x1508;
+ public static final int GL_NORMAL_ARRAY = 0x8075;
+ public static final int GL_NORMALIZE = 0x0BA1;
+ public static final int GL_NOTEQUAL = 0x0205;
+ public static final int GL_NUM_COMPRESSED_TEXTURE_FORMATS = 0x86A2;
+ public static final int GL_ONE = 1;
+ public static final int GL_ONE_MINUS_DST_ALPHA = 0x0305;
+ public static final int GL_ONE_MINUS_DST_COLOR = 0x0307;
+ public static final int GL_ONE_MINUS_SRC_ALPHA = 0x0303;
+ public static final int GL_ONE_MINUS_SRC_COLOR = 0x0301;
+ public static final int GL_OR = 0x1507;
+ public static final int GL_OR_INVERTED = 0x150D;
+ public static final int GL_OR_REVERSE = 0x150B;
+ public static final int GL_OUT_OF_MEMORY = 0x0505;
+ public static final int GL_PACK_ALIGNMENT = 0x0D05;
+ public static final int GL_PALETTE4_R5_G6_B5_OES = 0x8B92;
+ public static final int GL_PALETTE4_RGB5_A1_OES = 0x8B94;
+ public static final int GL_PALETTE4_RGB8_OES = 0x8B90;
+ public static final int GL_PALETTE4_RGBA4_OES = 0x8B93;
+ public static final int GL_PALETTE4_RGBA8_OES = 0x8B91;
+ public static final int GL_PALETTE8_R5_G6_B5_OES = 0x8B97;
+ public static final int GL_PALETTE8_RGB5_A1_OES = 0x8B99;
+ public static final int GL_PALETTE8_RGB8_OES = 0x8B95;
+ public static final int GL_PALETTE8_RGBA4_OES = 0x8B98;
+ public static final int GL_PALETTE8_RGBA8_OES = 0x8B96;
+ public static final int GL_PERSPECTIVE_CORRECTION_HINT = 0x0C50;
+ public static final int GL_POINT_SMOOTH = 0x0B10;
+ public static final int GL_POINT_SMOOTH_HINT = 0x0C51;
+ public static final int GL_POINTS = 0x0000;
+ public static final int GL_POINT_FADE_THRESHOLD_SIZE = 0x8128;
+ public static final int GL_POINT_SIZE = 0x0B11;
+ public static final int GL_POLYGON_OFFSET_FILL = 0x8037;
+ public static final int GL_POLYGON_SMOOTH_HINT = 0x0C53;
+ public static final int GL_POSITION = 0x1203;
+ public static final int GL_PROJECTION = 0x1701;
+ public static final int GL_QUADRATIC_ATTENUATION = 0x1209;
+ public static final int GL_RED_BITS = 0x0D52;
+ public static final int GL_RENDERER = 0x1F01;
+ public static final int GL_REPEAT = 0x2901;
+ public static final int GL_REPLACE = 0x1E01;
+ public static final int GL_RESCALE_NORMAL = 0x803A;
+ public static final int GL_RGB = 0x1907;
+ public static final int GL_RGBA = 0x1908;
+ public static final int GL_SAMPLE_ALPHA_TO_COVERAGE = 0x809E;
+ public static final int GL_SAMPLE_ALPHA_TO_ONE = 0x809F;
+ public static final int GL_SAMPLE_COVERAGE = 0x80A0;
+ public static final int GL_SCISSOR_TEST = 0x0C11;
+ public static final int GL_SET = 0x150F;
+ public static final int GL_SHININESS = 0x1601;
+ public static final int GL_SHORT = 0x1402;
+ public static final int GL_SMOOTH = 0x1D01;
+ public static final int GL_SMOOTH_LINE_WIDTH_RANGE = 0x0B22;
+ public static final int GL_SMOOTH_POINT_SIZE_RANGE = 0x0B12;
+ public static final int GL_SPECULAR = 0x1202;
+ public static final int GL_SPOT_CUTOFF = 0x1206;
+ public static final int GL_SPOT_DIRECTION = 0x1204;
+ public static final int GL_SPOT_EXPONENT = 0x1205;
+ public static final int GL_SRC_ALPHA = 0x0302;
+ public static final int GL_SRC_ALPHA_SATURATE = 0x0308;
+ public static final int GL_SRC_COLOR = 0x0300;
+ public static final int GL_STACK_OVERFLOW = 0x0503;
+ public static final int GL_STACK_UNDERFLOW = 0x0504;
+ public static final int GL_STENCIL_BITS = 0x0D57;
+ public static final int GL_STENCIL_BUFFER_BIT = 0x0400;
+ public static final int GL_STENCIL_TEST = 0x0B90;
+ public static final int GL_SUBPIXEL_BITS = 0x0D50;
+ public static final int GL_TEXTURE = 0x1702;
+ public static final int GL_TEXTURE_2D = 0x0DE1;
+ public static final int GL_TEXTURE_COORD_ARRAY = 0x8078;
+ public static final int GL_TEXTURE_ENV = 0x2300;
+ public static final int GL_TEXTURE_ENV_COLOR = 0x2201;
+ public static final int GL_TEXTURE_ENV_MODE = 0x2200;
+ public static final int GL_TEXTURE_MAG_FILTER = 0x2800;
+ public static final int GL_TEXTURE_MIN_FILTER = 0x2801;
+ public static final int GL_TEXTURE_WRAP_S = 0x2802;
+ public static final int GL_TEXTURE_WRAP_T = 0x2803;
+ public static final int GL_TEXTURE0 = 0x84C0;
+ public static final int GL_TEXTURE1 = 0x84C1;
+ public static final int GL_TEXTURE2 = 0x84C2;
+ public static final int GL_TEXTURE3 = 0x84C3;
+ public static final int GL_TEXTURE4 = 0x84C4;
+ public static final int GL_TEXTURE5 = 0x84C5;
+ public static final int GL_TEXTURE6 = 0x84C6;
+ public static final int GL_TEXTURE7 = 0x84C7;
+ public static final int GL_TEXTURE8 = 0x84C8;
+ public static final int GL_TEXTURE9 = 0x84C9;
+ public static final int GL_TEXTURE10 = 0x84CA;
+ public static final int GL_TEXTURE11 = 0x84CB;
+ public static final int GL_TEXTURE12 = 0x84CC;
+ public static final int GL_TEXTURE13 = 0x84CD;
+ public static final int GL_TEXTURE14 = 0x84CE;
+ public static final int GL_TEXTURE15 = 0x84CF;
+ public static final int GL_TEXTURE16 = 0x84D0;
+ public static final int GL_TEXTURE17 = 0x84D1;
+ public static final int GL_TEXTURE18 = 0x84D2;
+ public static final int GL_TEXTURE19 = 0x84D3;
+ public static final int GL_TEXTURE20 = 0x84D4;
+ public static final int GL_TEXTURE21 = 0x84D5;
+ public static final int GL_TEXTURE22 = 0x84D6;
+ public static final int GL_TEXTURE23 = 0x84D7;
+ public static final int GL_TEXTURE24 = 0x84D8;
+ public static final int GL_TEXTURE25 = 0x84D9;
+ public static final int GL_TEXTURE26 = 0x84DA;
+ public static final int GL_TEXTURE27 = 0x84DB;
+ public static final int GL_TEXTURE28 = 0x84DC;
+ public static final int GL_TEXTURE29 = 0x84DD;
+ public static final int GL_TEXTURE30 = 0x84DE;
+ public static final int GL_TEXTURE31 = 0x84DF;
+ public static final int GL_TRIANGLE_FAN = 0x0006;
+ public static final int GL_TRIANGLE_STRIP = 0x0005;
+ public static final int GL_TRIANGLES = 0x0004;
+ public static final int GL_TRUE = 1;
+ public static final int GL_UNPACK_ALIGNMENT = 0x0CF5;
+ public static final int GL_UNSIGNED_BYTE = 0x1401;
+ public static final int GL_UNSIGNED_SHORT = 0x1403;
+ public static final int GL_UNSIGNED_SHORT_4_4_4_4 = 0x8033;
+ public static final int GL_UNSIGNED_SHORT_5_5_5_1 = 0x8034;
+ public static final int GL_UNSIGNED_SHORT_5_6_5 = 0x8363;
+ public static final int GL_VENDOR = 0x1F00;
+ public static final int GL_VERSION = 0x1F02;
+ public static final int GL_VERTEX_ARRAY = 0x8074;
+ public static final int GL_XOR = 0x1506;
+ public static final int GL_ZERO = 0;
+
+ native private static void _nativeClassInit();
+ static {
+ _nativeClassInit();
+ }
+
+ private static Buffer _colorPointer;
+ private static Buffer _normalPointer;
+ private static Buffer _texCoordPointer;
+ private static Buffer _vertexPointer;
+
diff --git a/opengl/tools/glgen/stubs/GLCHeader.cpp b/opengl/tools/glgen/stubs/gles11/GLES10cHeader.cpp
similarity index 98%
copy from opengl/tools/glgen/stubs/GLCHeader.cpp
copy to opengl/tools/glgen/stubs/gles11/GLES10cHeader.cpp
index 6495686..3e5c19c 100644
--- a/opengl/tools/glgen/stubs/GLCHeader.cpp
+++ b/opengl/tools/glgen/stubs/gles11/GLES10cHeader.cpp
@@ -1,5 +1,5 @@
**
-** Copyright 2006, The Android Open Source Project
+** Copyright 2009, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
@@ -44,7 +44,7 @@
/* Cache method IDs each time the class is loaded. */
-void
+static void
nativeClassInitBuffer(JNIEnv *_env)
{
jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess");
diff --git a/opengl/tools/glgen/stubs/gles11/GLES11ExtHeader.java-if b/opengl/tools/glgen/stubs/gles11/GLES11ExtHeader.java-if
new file mode 100644
index 0000000..428ccee
--- /dev/null
+++ b/opengl/tools/glgen/stubs/gles11/GLES11ExtHeader.java-if
@@ -0,0 +1,130 @@
+**
+** Copyright 2009, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+
+// This source file is automatically generated
+
+package android.opengl;
+
+public class GLES11Ext {
+ public static final int GL_BLEND_EQUATION_RGB_OES = 0x8009;
+ public static final int GL_BLEND_EQUATION_ALPHA_OES = 0x883D;
+ public static final int GL_BLEND_DST_RGB_OES = 0x80C8;
+ public static final int GL_BLEND_SRC_RGB_OES = 0x80C9;
+ public static final int GL_BLEND_DST_ALPHA_OES = 0x80CA;
+ public static final int GL_BLEND_SRC_ALPHA_OES = 0x80CB;
+ public static final int GL_BLEND_EQUATION_OES = 0x8009;
+ public static final int GL_FUNC_ADD_OES = 0x8006;
+ public static final int GL_FUNC_SUBTRACT_OES = 0x800A;
+ public static final int GL_FUNC_REVERSE_SUBTRACT_OES = 0x800B;
+ public static final int GL_ETC1_RGB8_OES = 0x8D64;
+ public static final int GL_DEPTH_COMPONENT24_OES = 0x81A6;
+ public static final int GL_DEPTH_COMPONENT32_OES = 0x81A7;
+ public static final int GL_TEXTURE_CROP_RECT_OES = 0x8B9D;
+ public static final int GL_FIXED_OES = 0x140C;
+ public static final int GL_NONE_OES = 0;
+ public static final int GL_FRAMEBUFFER_OES = 0x8D40;
+ public static final int GL_RENDERBUFFER_OES = 0x8D41;
+ public static final int GL_RGBA4_OES = 0x8056;
+ public static final int GL_RGB5_A1_OES = 0x8057;
+ public static final int GL_RGB565_OES = 0x8D62;
+ public static final int GL_DEPTH_COMPONENT16_OES = 0x81A5;
+ public static final int GL_RENDERBUFFER_WIDTH_OES = 0x8D42;
+ public static final int GL_RENDERBUFFER_HEIGHT_OES = 0x8D43;
+ public static final int GL_RENDERBUFFER_INTERNAL_FORMAT_OES = 0x8D44;
+ public static final int GL_RENDERBUFFER_RED_SIZE_OES = 0x8D50;
+ public static final int GL_RENDERBUFFER_GREEN_SIZE_OES = 0x8D51;
+ public static final int GL_RENDERBUFFER_BLUE_SIZE_OES = 0x8D52;
+ public static final int GL_RENDERBUFFER_ALPHA_SIZE_OES = 0x8D53;
+ public static final int GL_RENDERBUFFER_DEPTH_SIZE_OES = 0x8D54;
+ public static final int GL_RENDERBUFFER_STENCIL_SIZE_OES = 0x8D55;
+ public static final int GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES = 0x8CD0;
+ public static final int GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES = 0x8CD1;
+ public static final int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES = 0x8CD2;
+ public static final int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES = 0x8CD3;
+ public static final int GL_COLOR_ATTACHMENT0_OES = 0x8CE0;
+ public static final int GL_DEPTH_ATTACHMENT_OES = 0x8D00;
+ public static final int GL_STENCIL_ATTACHMENT_OES = 0x8D20;
+ public static final int GL_FRAMEBUFFER_COMPLETE_OES = 0x8CD5;
+ public static final int GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES = 0x8CD6;
+ public static final int GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES = 0x8CD7;
+ public static final int GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES = 0x8CD9;
+ public static final int GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES = 0x8CDA;
+ public static final int GL_FRAMEBUFFER_UNSUPPORTED_OES = 0x8CDD;
+ public static final int GL_FRAMEBUFFER_BINDING_OES = 0x8CA6;
+ public static final int GL_RENDERBUFFER_BINDING_OES = 0x8CA7;
+ public static final int GL_MAX_RENDERBUFFER_SIZE_OES = 0x84E8;
+ public static final int GL_INVALID_FRAMEBUFFER_OPERATION_OES = 0x0506;
+ public static final int GL_WRITE_ONLY_OES = 0x88B9;
+ public static final int GL_BUFFER_ACCESS_OES = 0x88BB;
+ public static final int GL_BUFFER_MAPPED_OES = 0x88BC;
+ public static final int GL_BUFFER_MAP_POINTER_OES = 0x88BD;
+ public static final int GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES = 0x898D;
+ public static final int GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES = 0x898E;
+ public static final int GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES = 0x898F;
+ public static final int GL_MAX_VERTEX_UNITS_OES = 0x86A4;
+ public static final int GL_MAX_PALETTE_MATRICES_OES = 0x8842;
+ public static final int GL_MATRIX_PALETTE_OES = 0x8840;
+ public static final int GL_MATRIX_INDEX_ARRAY_OES = 0x8844;
+ public static final int GL_WEIGHT_ARRAY_OES = 0x86AD;
+ public static final int GL_CURRENT_PALETTE_MATRIX_OES = 0x8843;
+ public static final int GL_MATRIX_INDEX_ARRAY_SIZE_OES = 0x8846;
+ public static final int GL_MATRIX_INDEX_ARRAY_TYPE_OES = 0x8847;
+ public static final int GL_MATRIX_INDEX_ARRAY_STRIDE_OES = 0x8848;
+ public static final int GL_MATRIX_INDEX_ARRAY_POINTER_OES = 0x8849;
+ public static final int GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES = 0x8B9E;
+ public static final int GL_WEIGHT_ARRAY_SIZE_OES = 0x86AB;
+ public static final int GL_WEIGHT_ARRAY_TYPE_OES = 0x86A9;
+ public static final int GL_WEIGHT_ARRAY_STRIDE_OES = 0x86AA;
+ public static final int GL_WEIGHT_ARRAY_POINTER_OES = 0x86AC;
+ public static final int GL_WEIGHT_ARRAY_BUFFER_BINDING_OES = 0x889E;
+ public static final int GL_DEPTH_STENCIL_OES = 0x84F9;
+ public static final int GL_UNSIGNED_INT_24_8_OES = 0x84FA;
+ public static final int GL_DEPTH24_STENCIL8_OES = 0x88F0;
+ public static final int GL_RGB8_OES = 0x8051;
+ public static final int GL_RGBA8_OES = 0x8058;
+ public static final int GL_STENCIL_INDEX1_OES = 0x8D46;
+ public static final int GL_STENCIL_INDEX4_OES = 0x8D47;
+ public static final int GL_STENCIL_INDEX8_OES = 0x8D48;
+ public static final int GL_INCR_WRAP_OES = 0x8507;
+ public static final int GL_DECR_WRAP_OES = 0x8508;
+ public static final int GL_NORMAL_MAP_OES = 0x8511;
+ public static final int GL_REFLECTION_MAP_OES = 0x8512;
+ public static final int GL_TEXTURE_CUBE_MAP_OES = 0x8513;
+ public static final int GL_TEXTURE_BINDING_CUBE_MAP_OES = 0x8514;
+ public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES = 0x8515;
+ public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES = 0x8516;
+ public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES = 0x8517;
+ public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES = 0x8518;
+ public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES = 0x8519;
+ public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES = 0x851A;
+ public static final int GL_MAX_CUBE_MAP_TEXTURE_SIZE_OES = 0x851C;
+ public static final int GL_TEXTURE_GEN_MODE_OES = 0x2500;
+ public static final int GL_TEXTURE_GEN_STR_OES = 0x8D60;
+ public static final int GL_MIRRORED_REPEAT_OES = 0x8370;
+ public static final int GL_3DC_X_AMD = 0x87F9;
+ public static final int GL_3DC_XY_AMD = 0x87FA;
+ public static final int GL_ATC_RGB_AMD = 0x8C92;
+ public static final int GL_ATC_RGBA_EXPLICIT_ALPHA_AMD = 0x8C93;
+ public static final int GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD = 0x87EE;
+ public static final int GL_TEXTURE_MAX_ANISOTROPY_EXT = 0x84FE;
+ public static final int GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT = 0x84FF;
+ public static final int GL_BGRA = 0x80E1;
+
+ native private static void _nativeClassInit();
+ static {
+ _nativeClassInit();
+ }
+
\ No newline at end of file
diff --git a/opengl/tools/glgen/stubs/GLCHeader.cpp b/opengl/tools/glgen/stubs/gles11/GLES11ExtcHeader.cpp
similarity index 97%
copy from opengl/tools/glgen/stubs/GLCHeader.cpp
copy to opengl/tools/glgen/stubs/gles11/GLES11ExtcHeader.cpp
index 6495686..3e5c19c 100644
--- a/opengl/tools/glgen/stubs/GLCHeader.cpp
+++ b/opengl/tools/glgen/stubs/gles11/GLES11ExtcHeader.cpp
@@ -1,5 +1,5 @@
**
-** Copyright 2006, The Android Open Source Project
+** Copyright 2009, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
@@ -44,7 +44,7 @@
/* Cache method IDs each time the class is loaded. */
-void
+static void
nativeClassInitBuffer(JNIEnv *_env)
{
jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess");
diff --git a/opengl/tools/glgen/stubs/gles11/GLES11Header.java-if b/opengl/tools/glgen/stubs/gles11/GLES11Header.java-if
new file mode 100644
index 0000000..26f466f
--- /dev/null
+++ b/opengl/tools/glgen/stubs/gles11/GLES11Header.java-if
@@ -0,0 +1,151 @@
+**
+** Copyright 2009, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+
+// This source file is automatically generated
+
+package android.opengl;
+
+import java.nio.Buffer;
+
+public class GLES11 extends GLES10 {
+ public static final int GL_ACTIVE_TEXTURE = 0x84E0;
+ public static final int GL_ADD_SIGNED = 0x8574;
+ public static final int GL_ALPHA_SCALE = 0x0D1C;
+ public static final int GL_ALPHA_TEST_FUNC = 0x0BC1;
+ public static final int GL_ALPHA_TEST_REF = 0x0BC2;
+ public static final int GL_ARRAY_BUFFER = 0x8892;
+ public static final int GL_ARRAY_BUFFER_BINDING = 0x8894;
+ public static final int GL_BLEND_DST = 0x0BE0;
+ public static final int GL_BLEND_SRC = 0x0BE1;
+ public static final int GL_BUFFER_ACCESS = 0x88BB;
+ public static final int GL_BUFFER_SIZE = 0x8764;
+ public static final int GL_BUFFER_USAGE = 0x8765;
+ public static final int GL_CLIENT_ACTIVE_TEXTURE = 0x84E1;
+ public static final int GL_CLIP_PLANE0 = 0x3000;
+ public static final int GL_CLIP_PLANE1 = 0x3001;
+ public static final int GL_CLIP_PLANE2 = 0x3002;
+ public static final int GL_CLIP_PLANE3 = 0x3003;
+ public static final int GL_CLIP_PLANE4 = 0x3004;
+ public static final int GL_CLIP_PLANE5 = 0x3005;
+ public static final int GL_COLOR_ARRAY_BUFFER_BINDING = 0x8898;
+ public static final int GL_COLOR_ARRAY_POINTER = 0x8090;
+ public static final int GL_COLOR_ARRAY_SIZE = 0x8081;
+ public static final int GL_COLOR_ARRAY_STRIDE = 0x8083;
+ public static final int GL_COLOR_ARRAY_TYPE = 0x8082;
+ public static final int GL_COLOR_CLEAR_VALUE = 0x0C22;
+ public static final int GL_COLOR_WRITEMASK = 0x0C23;
+ public static final int GL_COMBINE = 0x8570;
+ public static final int GL_COMBINE_ALPHA = 0x8572;
+ public static final int GL_COMBINE_RGB = 0x8571;
+ public static final int GL_CONSTANT = 0x8576;
+ public static final int GL_COORD_REPLACE_OES = 0x8862;
+ public static final int GL_CULL_FACE_MODE = 0x0B45;
+ public static final int GL_CURRENT_COLOR = 0x0B00;
+ public static final int GL_CURRENT_NORMAL = 0x0B02;
+ public static final int GL_CURRENT_TEXTURE_COORDS = 0x0B03;
+ public static final int GL_DEPTH_CLEAR_VALUE = 0x0B73;
+ public static final int GL_DEPTH_FUNC = 0x0B74;
+ public static final int GL_DEPTH_RANGE = 0x0B70;
+ public static final int GL_DEPTH_WRITEMASK = 0x0B72;
+ public static final int GL_DOT3_RGB = 0x86AE;
+ public static final int GL_DOT3_RGBA = 0x86AF;
+ public static final int GL_DYNAMIC_DRAW = 0x88E8;
+ public static final int GL_ELEMENT_ARRAY_BUFFER = 0x8893;
+ public static final int GL_ELEMENT_ARRAY_BUFFER_BINDING = 0x8895;
+ public static final int GL_FRONT_FACE = 0x0B46;
+ public static final int GL_GENERATE_MIPMAP = 0x8191;
+ public static final int GL_GENERATE_MIPMAP_HINT = 0x8192;
+ public static final int GL_INTERPOLATE = 0x8575;
+ public static final int GL_LINE_WIDTH = 0x0B21;
+ public static final int GL_LOGIC_OP_MODE = 0x0BF0;
+ public static final int GL_MATRIX_MODE = 0x0BA0;
+ public static final int GL_MAX_CLIP_PLANES = 0x0D32;
+ public static final int GL_MODELVIEW_MATRIX = 0x0BA6;
+ public static final int GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES = 0x898D;
+ public static final int GL_MODELVIEW_STACK_DEPTH = 0x0BA3;
+ public static final int GL_NORMAL_ARRAY_BUFFER_BINDING = 0x8897;
+ public static final int GL_NORMAL_ARRAY_POINTER = 0x808F;
+ public static final int GL_NORMAL_ARRAY_STRIDE = 0x807F;
+ public static final int GL_NORMAL_ARRAY_TYPE = 0x807E;
+ public static final int GL_OPERAND0_ALPHA = 0x8598;
+ public static final int GL_OPERAND0_RGB = 0x8590;
+ public static final int GL_OPERAND1_ALPHA = 0x8599;
+ public static final int GL_OPERAND1_RGB = 0x8591;
+ public static final int GL_OPERAND2_ALPHA = 0x859A;
+ public static final int GL_OPERAND2_RGB = 0x8592;
+ public static final int GL_POINT_DISTANCE_ATTENUATION = 0x8129;
+ public static final int GL_POINT_FADE_THRESHOLD_SIZE = 0x8128;
+ public static final int GL_POINT_SIZE = 0x0B11;
+ public static final int GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES = 0x8B9F;
+ public static final int GL_POINT_SIZE_ARRAY_OES = 0x8B9C;
+ public static final int GL_POINT_SIZE_ARRAY_POINTER_OES = 0x898C;
+ public static final int GL_POINT_SIZE_ARRAY_STRIDE_OES = 0x898B;
+ public static final int GL_POINT_SIZE_ARRAY_TYPE_OES = 0x898A;
+ public static final int GL_POINT_SIZE_MAX = 0x8127;
+ public static final int GL_POINT_SIZE_MIN = 0x8126;
+ public static final int GL_POINT_SPRITE_OES = 0x8861;
+ public static final int GL_POLYGON_OFFSET_FACTOR = 0x8038;
+ public static final int GL_POLYGON_OFFSET_UNITS = 0x2A00;
+ public static final int GL_PREVIOUS = 0x8578;
+ public static final int GL_PRIMARY_COLOR = 0x8577;
+ public static final int GL_PROJECTION_MATRIX = 0x0BA7;
+ public static final int GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES = 0x898E;
+ public static final int GL_PROJECTION_STACK_DEPTH = 0x0BA4;
+ public static final int GL_RGB_SCALE = 0x8573;
+ public static final int GL_SAMPLE_BUFFERS = 0x80A8;
+ public static final int GL_SAMPLE_COVERAGE_INVERT = 0x80AB;
+ public static final int GL_SAMPLE_COVERAGE_VALUE = 0x80AA;
+ public static final int GL_SAMPLES = 0x80A9;
+ public static final int GL_SCISSOR_BOX = 0x0C10;
+ public static final int GL_SHADE_MODEL = 0x0B54;
+ public static final int GL_SRC0_ALPHA = 0x8588;
+ public static final int GL_SRC0_RGB = 0x8580;
+ public static final int GL_SRC1_ALPHA = 0x8589;
+ public static final int GL_SRC1_RGB = 0x8581;
+ public static final int GL_SRC2_ALPHA = 0x858A;
+ public static final int GL_SRC2_RGB = 0x8582;
+ public static final int GL_STATIC_DRAW = 0x88E4;
+ public static final int GL_STENCIL_CLEAR_VALUE = 0x0B91;
+ public static final int GL_STENCIL_FAIL = 0x0B94;
+ public static final int GL_STENCIL_FUNC = 0x0B92;
+ public static final int GL_STENCIL_PASS_DEPTH_FAIL = 0x0B95;
+ public static final int GL_STENCIL_PASS_DEPTH_PASS = 0x0B96;
+ public static final int GL_STENCIL_REF = 0x0B97;
+ public static final int GL_STENCIL_VALUE_MASK = 0x0B93;
+ public static final int GL_STENCIL_WRITEMASK = 0x0B98;
+ public static final int GL_SUBTRACT = 0x84E7;
+ public static final int GL_TEXTURE_BINDING_2D = 0x8069;
+ public static final int GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING = 0x889A;
+ public static final int GL_TEXTURE_COORD_ARRAY_POINTER = 0x8092;
+ public static final int GL_TEXTURE_COORD_ARRAY_SIZE = 0x8088;
+ public static final int GL_TEXTURE_COORD_ARRAY_STRIDE = 0x808A;
+ public static final int GL_TEXTURE_COORD_ARRAY_TYPE = 0x8089;
+ public static final int GL_TEXTURE_MATRIX = 0x0BA8;
+ public static final int GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES = 0x898F;
+ public static final int GL_TEXTURE_STACK_DEPTH = 0x0BA5;
+ public static final int GL_VERTEX_ARRAY_BUFFER_BINDING = 0x8896;
+ public static final int GL_VERTEX_ARRAY_POINTER = 0x808E;
+ public static final int GL_VERTEX_ARRAY_SIZE = 0x807A;
+ public static final int GL_VERTEX_ARRAY_STRIDE = 0x807C;
+ public static final int GL_VERTEX_ARRAY_TYPE = 0x807B;
+ public static final int GL_VIEWPORT = 0x0BA2;
+ public static final int GL_WRITE_ONLY = 0x88B9;
+
+ native private static void _nativeClassInit();
+ static {
+ _nativeClassInit();
+ }
+
diff --git a/opengl/tools/glgen/stubs/GLCHeader.cpp b/opengl/tools/glgen/stubs/gles11/GLES11cHeader.cpp
similarity index 98%
copy from opengl/tools/glgen/stubs/GLCHeader.cpp
copy to opengl/tools/glgen/stubs/gles11/GLES11cHeader.cpp
index 6495686..3e5c19c 100644
--- a/opengl/tools/glgen/stubs/GLCHeader.cpp
+++ b/opengl/tools/glgen/stubs/gles11/GLES11cHeader.cpp
@@ -1,5 +1,5 @@
**
-** Copyright 2006, The Android Open Source Project
+** Copyright 2009, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
@@ -44,7 +44,7 @@
/* Cache method IDs each time the class is loaded. */
-void
+static void
nativeClassInitBuffer(JNIEnv *_env)
{
jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess");
diff --git a/opengl/tools/glgen/stubs/glGetString.cpp b/opengl/tools/glgen/stubs/gles11/glGetString.cpp
similarity index 97%
rename from opengl/tools/glgen/stubs/glGetString.cpp
rename to opengl/tools/glgen/stubs/gles11/glGetString.cpp
index 22e1297..a400859 100644
--- a/opengl/tools/glgen/stubs/glGetString.cpp
+++ b/opengl/tools/glgen/stubs/gles11/glGetString.cpp
@@ -1,6 +1,7 @@
#include <string.h>
/* const GLubyte * glGetString ( GLenum name ) */
+static
jstring
android_glGetString
(JNIEnv *_env, jobject _this, jint name) {
diff --git a/opengl/tools/glgen/stubs/glGetString.java-impl b/opengl/tools/glgen/stubs/gles11/glGetString.java
similarity index 100%
copy from opengl/tools/glgen/stubs/glGetString.java-impl
copy to opengl/tools/glgen/stubs/gles11/glGetString.java
diff --git a/opengl/tools/glgen/stubs/glGetString.nativeReg b/opengl/tools/glgen/stubs/gles11/glGetString.nativeReg
similarity index 100%
rename from opengl/tools/glgen/stubs/glGetString.nativeReg
rename to opengl/tools/glgen/stubs/gles11/glGetString.nativeReg
diff --git a/opengl/tools/glgen/stubs/GL10ExtHeader.java-if b/opengl/tools/glgen/stubs/jsr239/GL10ExtHeader.java-if
similarity index 100%
rename from opengl/tools/glgen/stubs/GL10ExtHeader.java-if
rename to opengl/tools/glgen/stubs/jsr239/GL10ExtHeader.java-if
diff --git a/opengl/tools/glgen/stubs/GL10Header.java-if b/opengl/tools/glgen/stubs/jsr239/GL10Header.java-if
similarity index 100%
rename from opengl/tools/glgen/stubs/GL10Header.java-if
rename to opengl/tools/glgen/stubs/jsr239/GL10Header.java-if
diff --git a/opengl/tools/glgen/stubs/GL11ExtHeader.java-if b/opengl/tools/glgen/stubs/jsr239/GL11ExtHeader.java-if
similarity index 100%
rename from opengl/tools/glgen/stubs/GL11ExtHeader.java-if
rename to opengl/tools/glgen/stubs/jsr239/GL11ExtHeader.java-if
diff --git a/opengl/tools/glgen/stubs/GL11ExtensionPackHeader.java-if b/opengl/tools/glgen/stubs/jsr239/GL11ExtensionPackHeader.java-if
similarity index 100%
rename from opengl/tools/glgen/stubs/GL11ExtensionPackHeader.java-if
rename to opengl/tools/glgen/stubs/jsr239/GL11ExtensionPackHeader.java-if
diff --git a/opengl/tools/glgen/stubs/GL11Header.java-if b/opengl/tools/glgen/stubs/jsr239/GL11Header.java-if
similarity index 100%
rename from opengl/tools/glgen/stubs/GL11Header.java-if
rename to opengl/tools/glgen/stubs/jsr239/GL11Header.java-if
diff --git a/opengl/tools/glgen/stubs/GL11ImplHeader.java-impl b/opengl/tools/glgen/stubs/jsr239/GL11ImplHeader.java-impl
similarity index 100%
rename from opengl/tools/glgen/stubs/GL11ImplHeader.java-impl
rename to opengl/tools/glgen/stubs/jsr239/GL11ImplHeader.java-impl
diff --git a/opengl/tools/glgen/stubs/GLCHeader.cpp b/opengl/tools/glgen/stubs/jsr239/GLCHeader.cpp
similarity index 99%
rename from opengl/tools/glgen/stubs/GLCHeader.cpp
rename to opengl/tools/glgen/stubs/jsr239/GLCHeader.cpp
index 6495686..4636081 100644
--- a/opengl/tools/glgen/stubs/GLCHeader.cpp
+++ b/opengl/tools/glgen/stubs/jsr239/GLCHeader.cpp
@@ -44,7 +44,7 @@
/* Cache method IDs each time the class is loaded. */
-void
+static void
nativeClassInitBuffer(JNIEnv *_env)
{
jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess");
diff --git a/opengl/tools/glgen/stubs/GLHeader.java-if b/opengl/tools/glgen/stubs/jsr239/GLHeader.java-if
similarity index 100%
rename from opengl/tools/glgen/stubs/GLHeader.java-if
rename to opengl/tools/glgen/stubs/jsr239/GLHeader.java-if
diff --git a/opengl/tools/glgen/stubs/GLImplHeader.java-impl b/opengl/tools/glgen/stubs/jsr239/GLImplHeader.java-impl
similarity index 100%
rename from opengl/tools/glgen/stubs/GLImplHeader.java-impl
rename to opengl/tools/glgen/stubs/jsr239/GLImplHeader.java-impl
diff --git a/opengl/tools/glgen/stubs/glGetString.cpp b/opengl/tools/glgen/stubs/jsr239/glGetString.cpp
similarity index 97%
copy from opengl/tools/glgen/stubs/glGetString.cpp
copy to opengl/tools/glgen/stubs/jsr239/glGetString.cpp
index 22e1297..a400859 100644
--- a/opengl/tools/glgen/stubs/glGetString.cpp
+++ b/opengl/tools/glgen/stubs/jsr239/glGetString.cpp
@@ -1,6 +1,7 @@
#include <string.h>
/* const GLubyte * glGetString ( GLenum name ) */
+static
jstring
android_glGetString
(JNIEnv *_env, jobject _this, jint name) {
diff --git a/opengl/tools/glgen/stubs/glGetString.java-10-if b/opengl/tools/glgen/stubs/jsr239/glGetString.java-10-if
similarity index 100%
rename from opengl/tools/glgen/stubs/glGetString.java-10-if
rename to opengl/tools/glgen/stubs/jsr239/glGetString.java-10-if
diff --git a/opengl/tools/glgen/stubs/glGetString.java-if b/opengl/tools/glgen/stubs/jsr239/glGetString.java-if
similarity index 100%
rename from opengl/tools/glgen/stubs/glGetString.java-if
rename to opengl/tools/glgen/stubs/jsr239/glGetString.java-if
diff --git a/opengl/tools/glgen/stubs/glGetString.java-impl b/opengl/tools/glgen/stubs/jsr239/glGetString.java-impl
similarity index 100%
rename from opengl/tools/glgen/stubs/glGetString.java-impl
rename to opengl/tools/glgen/stubs/jsr239/glGetString.java-impl
diff --git a/opengl/tools/glgen/stubs/glGetString.nativeReg b/opengl/tools/glgen/stubs/jsr239/glGetString.nativeReg
similarity index 100%
copy from opengl/tools/glgen/stubs/glGetString.nativeReg
copy to opengl/tools/glgen/stubs/jsr239/glGetString.nativeReg
diff --git a/services/java/com/android/server/BatteryService.java b/services/java/com/android/server/BatteryService.java
index 7cd6b17..90d8c9d 100644
--- a/services/java/com/android/server/BatteryService.java
+++ b/services/java/com/android/server/BatteryService.java
@@ -84,7 +84,7 @@
private static final int CRITICAL_BATTERY_LEVEL = 4;
private static final int DUMP_MAX_LENGTH = 24 * 1024;
- private static final String[] DUMPSYS_ARGS = new String[] { "-c", "-u" };
+ private static final String[] DUMPSYS_ARGS = new String[] { "--checkin", "-u" };
private static final String BATTERY_STATS_SERVICE_NAME = "batteryinfo";
private static final String DUMPSYS_DATA_PATH = "/data/system/";
@@ -247,6 +247,20 @@
logOutlier = true;
}
+ // Separate broadcast is sent for power connected / not connected
+ // since the standard intent will not wake any applications and some
+ // applications may want to have smart behavior based on this.
+ if (mPlugType != 0 && mLastPlugType == 0) {
+ Intent intent = new Intent(Intent.ACTION_POWER_CONNECTED);
+ intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
+ mContext.sendBroadcast(intent);
+ }
+ else if (mPlugType == 0 && mLastPlugType != 0) {
+ Intent intent = new Intent(Intent.ACTION_POWER_DISCONNECTED);
+ intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
+ mContext.sendBroadcast(intent);
+ }
+
mLastBatteryStatus = mBatteryStatus;
mLastBatteryHealth = mBatteryHealth;
mLastBatteryPresent = mBatteryPresent;
diff --git a/services/java/com/android/server/LocationManagerService.java b/services/java/com/android/server/LocationManagerService.java
index 938a43d..5e079d4 100644
--- a/services/java/com/android/server/LocationManagerService.java
+++ b/services/java/com/android/server/LocationManagerService.java
@@ -44,6 +44,7 @@
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.location.Address;
+import android.location.IGeocodeProvider;
import android.location.IGpsStatusListener;
import android.location.ILocationCollector;
import android.location.ILocationListener;
@@ -55,7 +56,6 @@
import android.location.LocationProviderImpl;
import android.net.ConnectivityManager;
import android.net.Uri;
-import android.net.wifi.WifiManager;
import android.os.Binder;
import android.os.Bundle;
import android.os.Handler;
@@ -66,13 +66,11 @@
import android.os.RemoteException;
import android.os.SystemClock;
import android.provider.Settings;
-import android.telephony.TelephonyManager;
import android.util.Config;
import android.util.Log;
import android.util.PrintWriterPrinter;
import android.util.SparseIntArray;
-import com.android.internal.app.IBatteryStats;
import com.android.internal.location.GpsLocationProvider;
import com.android.internal.location.LocationProviderProxy;
import com.android.internal.location.MockProvider;
@@ -126,58 +124,33 @@
private final Context mContext;
private GpsLocationProvider mGpsLocationProvider;
- private boolean mGpsNavigating;
private LocationProviderProxy mNetworkLocationProvider;
+ private IGeocodeProvider mGeocodeProvider;
private LocationWorkerHandler mLocationHandler;
// Handler messages
private static final int MESSAGE_LOCATION_CHANGED = 1;
- private static final int MESSAGE_ACQUIRE_WAKE_LOCK = 2;
- private static final int MESSAGE_RELEASE_WAKE_LOCK = 3;
+ private static final int MESSAGE_RELEASE_WAKE_LOCK = 2;
// Alarm manager and wakelock variables
private final static String ALARM_INTENT = "com.android.location.ALARM_INTENT";
private final static String WAKELOCK_KEY = "LocationManagerService";
- private final static String WIFILOCK_KEY = "LocationManagerService";
private AlarmManager mAlarmManager;
private long mAlarmInterval = 0;
- private boolean mScreenOn = true;
private PowerManager.WakeLock mWakeLock = null;
- private WifiManager.WifiLock mWifiLock = null;
private long mWakeLockAcquireTime = 0;
private boolean mWakeLockGpsReceived = true;
private boolean mWakeLockNetworkReceived = true;
- private boolean mWifiWakeLockAcquired = false;
- private boolean mCellWakeLockAcquired = false;
-
- private final IBatteryStats mBatteryStats;
/**
- * Mapping from listener IBinder/PendingIntent to local Listener wrappers.
+ * List of all receivers.
*/
- private final ArrayList<Receiver> mListeners = new ArrayList<Receiver>();
+ private final HashMap<Object, Receiver> mReceivers = new HashMap<Object, Receiver>();
/**
- * Used for reporting which UIDs are causing the GPS to run.
+ * Object used internally for synchronization
*/
- private final SparseIntArray mReportedGpsUids = new SparseIntArray();
- private int mReportedGpsSeq = 0;
-
- /**
- * Mapping from listener IBinder/PendingIntent to a map from provider name to UpdateRecord.
- * This also serves as the lock for our state.
- */
- private final HashMap<Receiver,HashMap<String,UpdateRecord>> mLocationListeners =
- new HashMap<Receiver,HashMap<String,UpdateRecord>>();
-
- /**
- * Mapping from listener IBinder/PendingIntent to a map from provider name to last broadcast
- * location.
- */
- private final HashMap<Receiver,HashMap<String,Location>> mLastFixBroadcast =
- new HashMap<Receiver,HashMap<String,Location>>();
- private final HashMap<Receiver,HashMap<String,Long>> mLastStatusBroadcast =
- new HashMap<Receiver,HashMap<String,Long>>();
+ private final Object mLock = new Object();
/**
* Mapping from provider name to all its UpdateRecords
@@ -196,15 +169,9 @@
private HashMap<String,Location> mLastKnownLocation =
new HashMap<String,Location>();
- // Last known cell service state
- private TelephonyManager mTelephonyManager;
-
// Location collector
private ILocationCollector mCollector;
- // Wifi Manager
- private WifiManager mWifiManager;
-
private int mNetworkState = LocationProvider.TEMPORARILY_UNAVAILABLE;
// for Settings change notification
@@ -217,20 +184,18 @@
private final class Receiver implements IBinder.DeathRecipient {
final ILocationListener mListener;
final PendingIntent mPendingIntent;
- final int mUid;
final Object mKey;
+ final HashMap<String,UpdateRecord> mUpdateRecords = new HashMap<String,UpdateRecord>();
- Receiver(ILocationListener listener, int uid) {
+ Receiver(ILocationListener listener) {
mListener = listener;
mPendingIntent = null;
- mUid = uid;
mKey = listener.asBinder();
}
- Receiver(PendingIntent intent, int uid) {
+ Receiver(PendingIntent intent) {
mPendingIntent = intent;
mListener = null;
- mUid = uid;
mKey = intent;
}
@@ -254,11 +219,11 @@
if (mListener != null) {
return "Receiver{"
+ Integer.toHexString(System.identityHashCode(this))
- + " uid " + mUid + " Listener " + mKey + "}";
+ + " Listener " + mKey + "}";
} else {
return "Receiver{"
+ Integer.toHexString(System.identityHashCode(this))
- + " uid " + mUid + " Intent " + mKey + "}";
+ + " Intent " + mKey + "}";
}
}
@@ -327,7 +292,7 @@
if (LOCAL_LOGV) {
Log.v(TAG, "Location listener died");
}
- synchronized (mLocationListeners) {
+ synchronized (mLock) {
removeUpdatesLocked(this);
}
}
@@ -335,7 +300,7 @@
private final class SettingsObserver implements Observer {
public void update(Observable o, Object arg) {
- synchronized (mLocationListeners) {
+ synchronized (mLock) {
updateProvidersLocked();
}
}
@@ -442,7 +407,7 @@
* properties
*/
private void loadProviders() {
- synchronized (mLocationListeners) {
+ synchronized (mLock) {
if (sProvidersLoaded) {
return;
}
@@ -556,15 +521,9 @@
PowerManager powerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, WAKELOCK_KEY);
- // Battery statistics service to be notified when GPS turns on or off
- mBatteryStats = BatteryStatsService.getService();
-
// Load providers
loadProviders();
- // Listen for Radio changes
- mTelephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
-
// Register for Network (Wifi or Mobile) updates
NetworkStateBroadcastReceiver networkReceiver = new NetworkStateBroadcastReceiver();
IntentFilter networkIntentFilter = new IntentFilter();
@@ -576,8 +535,6 @@
PowerStateBroadcastReceiver powerStateReceiver = new PowerStateBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ALARM_INTENT);
- intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
- intentFilter.addAction(Intent.ACTION_SCREEN_ON);
intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
intentFilter.addAction(Intent.ACTION_PACKAGE_RESTARTED);
context.registerReceiver(powerStateReceiver, intentFilter);
@@ -591,12 +548,6 @@
mSettings = new ContentQueryMap(settingsCursor, Settings.System.NAME, true, mLocationHandler);
SettingsObserver settingsObserver = new SettingsObserver();
mSettings.addObserver(settingsObserver);
-
- // Get the wifi manager
- mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
-
- // Create a wifi lock for future use
- mWifiLock = getWifiWakelockLocked();
}
public void setNetworkLocationProvider(ILocationProvider provider) {
@@ -605,16 +556,14 @@
"Installing location providers outside of the system is not supported");
}
- synchronized (mLocationListeners) {
+ synchronized (mLock) {
mNetworkLocationProvider =
new LocationProviderProxy(LocationManager.NETWORK_PROVIDER, this, provider);
- mNetworkLocationProvider.addListener(getPackageNames());
LocationProviderImpl.addProvider(mNetworkLocationProvider);
updateProvidersLocked();
// notify NetworkLocationProvider of any events it might have missed
mNetworkLocationProvider.updateNetworkState(mNetworkState);
- mNetworkLocationProvider.updateCellLockStatus(mCellWakeLockAcquired);
}
}
@@ -624,20 +573,16 @@
"Installing location collectors outside of the system is not supported");
}
- synchronized (mLocationListeners) {
- mCollector = collector;
- if (mGpsLocationProvider != null) {
- mGpsLocationProvider.setLocationCollector(mCollector);
- }
- }
+ mCollector = collector;
}
- private WifiManager.WifiLock getWifiWakelockLocked() {
- if (mWifiLock == null && mWifiManager != null) {
- mWifiLock = mWifiManager.createWifiLock(WifiManager.WIFI_MODE_SCAN_ONLY, WIFILOCK_KEY);
- mWifiLock.setReferenceCounted(false);
+ public void setGeocodeProvider(IGeocodeProvider provider) {
+ if (Binder.getCallingUid() != Process.SYSTEM_UID) {
+ throw new SecurityException(
+ "Installing location providers outside of the system is not supported");
}
- return mWifiLock;
+
+ mGeocodeProvider = provider;
}
private boolean isAllowedBySettingsLocked(String provider) {
@@ -688,15 +633,9 @@
return true;
}
- private String[] getPackageNames() {
- // Since a single UID may correspond to multiple packages, this can only be used as an
- // approximation for tracking
- return mContext.getPackageManager().getPackagesForUid(Binder.getCallingUid());
- }
-
public List<String> getAllProviders() {
try {
- synchronized (mLocationListeners) {
+ synchronized (mLock) {
return _getAllProvidersLocked();
}
} catch (SecurityException se) {
@@ -722,7 +661,7 @@
public List<String> getProviders(boolean enabledOnly) {
try {
- synchronized (mLocationListeners) {
+ synchronized (mLock) {
return _getProvidersLocked(enabledOnly);
}
} catch (SecurityException se) {
@@ -822,16 +761,12 @@
if (listeners > 0) {
p.setMinTime(getMinTimeLocked(provider));
p.enableLocationTracking(true);
- updateWakelockStatusLocked(mScreenOn);
+ updateWakelockStatusLocked();
}
} else {
p.enableLocationTracking(false);
- if (p == mGpsLocationProvider) {
- mGpsNavigating = false;
- reportStopGpsLocked();
- }
p.disable();
- updateWakelockStatusLocked(mScreenOn);
+ updateWakelockStatusLocked();
}
}
@@ -852,19 +787,19 @@
final long mMinTime;
final float mMinDistance;
final int mUid;
- final String[] mPackages;
+ Location mLastFixBroadcast;
+ long mLastStatusBroadcast;
/**
* Note: must be constructed with lock held.
*/
UpdateRecord(String provider, long minTime, float minDistance,
- Receiver receiver, int uid, String[] packages) {
+ Receiver receiver, int uid) {
mProvider = provider;
mReceiver = receiver;
mMinTime = minTime;
mMinDistance = minDistance;
mUid = uid;
- mPackages = packages;
ArrayList<UpdateRecord> records = mRecordsByProvider.get(provider);
if (records == null) {
@@ -896,33 +831,77 @@
pw.println(prefix + this);
pw.println(prefix + "mProvider=" + mProvider + " mReceiver=" + mReceiver);
pw.println(prefix + "mMinTime=" + mMinTime + " mMinDistance=" + mMinDistance);
- StringBuilder sb = new StringBuilder();
- if (mPackages != null) {
- for (int i=0; i<mPackages.length; i++) {
- if (i > 0) sb.append(", ");
- sb.append(mPackages[i]);
- }
- }
- pw.println(prefix + "mUid=" + mUid + " mPackages=" + sb);
+ pw.println(prefix + "mUid=" + mUid);
+ pw.println(prefix + "mLastFixBroadcast:");
+ mLastFixBroadcast.dump(new PrintWriterPrinter(pw), prefix + " ");
+ pw.println(prefix + "mLastStatusBroadcast=" + mLastStatusBroadcast);
}
/**
* Calls dispose().
*/
@Override protected void finalize() {
- synchronized (mLocationListeners) {
+ synchronized (mLock) {
disposeLocked();
}
}
}
+ private Receiver getReceiver(ILocationListener listener) {
+ IBinder binder = listener.asBinder();
+ Receiver receiver = mReceivers.get(binder);
+ if (receiver == null) {
+ receiver = new Receiver(listener);
+ mReceivers.put(binder, receiver);
+
+ try {
+ if (receiver.isListener()) {
+ receiver.getListener().asBinder().linkToDeath(receiver, 0);
+ }
+ } catch (RemoteException e) {
+ Log.e(TAG, "linkToDeath failed:", e);
+ return null;
+ }
+ }
+ return receiver;
+ }
+
+ private Receiver getReceiver(PendingIntent intent) {
+ Receiver receiver = mReceivers.get(intent);
+ if (receiver == null) {
+ receiver = new Receiver(intent);
+ mReceivers.put(intent, receiver);
+ }
+ return receiver;
+ }
+
+ private boolean providerHasListener(String provider, int uid, Receiver excludedReceiver) {
+ ArrayList<UpdateRecord> records = mRecordsByProvider.get(provider);
+ if (records != null) {
+ for (int i = records.size() - 1; i >= 0; i--) {
+ UpdateRecord record = records.get(i);
+ if (record.mUid == uid && record.mReceiver != excludedReceiver) {
+ return true;
+ }
+ }
+ }
+ if (LocationManager.GPS_PROVIDER.equals(provider) ||
+ LocationManager.NETWORK_PROVIDER.equals(provider)) {
+ for (ProximityAlert alert : mProximityAlerts.values()) {
+ if (alert.mUid == uid) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
public void requestLocationUpdates(String provider,
long minTime, float minDistance, ILocationListener listener) {
try {
- synchronized (mLocationListeners) {
- requestLocationUpdatesLocked(provider, minTime, minDistance,
- new Receiver(listener, Binder.getCallingUid()));
+ synchronized (mLock) {
+ requestLocationUpdatesLocked(provider, minTime, minDistance, getReceiver(listener));
}
} catch (SecurityException se) {
throw se;
@@ -934,9 +913,8 @@
public void requestLocationUpdatesPI(String provider,
long minTime, float minDistance, PendingIntent intent) {
try {
- synchronized (mLocationListeners) {
- requestLocationUpdatesLocked(provider, minTime, minDistance,
- new Receiver(intent, Binder.getCallingUid()));
+ synchronized (mLock) {
+ requestLocationUpdatesLocked(provider, minTime, minDistance, getReceiver(intent));
}
} catch (SecurityException se) {
throw se;
@@ -958,47 +936,27 @@
checkPermissionsSafe(provider);
- String[] packages = getPackageNames();
-
// so wakelock calls will succeed
final int callingUid = Binder.getCallingUid();
+ boolean newUid = !providerHasListener(provider, callingUid, null);
long identity = Binder.clearCallingIdentity();
try {
- UpdateRecord r = new UpdateRecord(provider, minTime, minDistance,
- receiver, callingUid, packages);
- if (!mListeners.contains(receiver)) {
- try {
- if (receiver.isListener()) {
- receiver.getListener().asBinder().linkToDeath(receiver, 0);
- }
- mListeners.add(receiver);
- } catch (RemoteException e) {
- return;
- }
- }
-
- HashMap<String,UpdateRecord> records = mLocationListeners.get(receiver);
- if (records == null) {
- records = new HashMap<String,UpdateRecord>();
- mLocationListeners.put(receiver, records);
- }
- UpdateRecord oldRecord = records.put(provider, r);
+ UpdateRecord r = new UpdateRecord(provider, minTime, minDistance, receiver, callingUid);
+ UpdateRecord oldRecord = receiver.mUpdateRecords.put(provider, r);
if (oldRecord != null) {
oldRecord.disposeLocked();
}
+ if (newUid) {
+ impl.addListener(callingUid);
+ }
+
boolean isProviderEnabled = isAllowedBySettingsLocked(provider);
if (isProviderEnabled) {
long minTimeForProvider = getMinTimeLocked(provider);
impl.setMinTime(minTimeForProvider);
impl.enableLocationTracking(true);
- updateWakelockStatusLocked(mScreenOn);
-
- if (provider.equals(LocationManager.GPS_PROVIDER)) {
- if (mGpsNavigating) {
- updateReportedGpsLocked();
- }
- }
+ updateWakelockStatusLocked();
} else {
try {
// Notify the listener that updates are currently disabled
@@ -1017,8 +975,8 @@
public void removeUpdates(ILocationListener listener) {
try {
- synchronized (mLocationListeners) {
- removeUpdatesLocked(new Receiver(listener, Binder.getCallingUid()));
+ synchronized (mLock) {
+ removeUpdatesLocked(getReceiver(listener));
}
} catch (SecurityException se) {
throw se;
@@ -1029,8 +987,8 @@
public void removeUpdatesPI(PendingIntent intent) {
try {
- synchronized (mLocationListeners) {
- removeUpdatesLocked(new Receiver(intent, Binder.getCallingUid()));
+ synchronized (mLock) {
+ removeUpdatesLocked(getReceiver(intent));
}
} catch (SecurityException se) {
throw se;
@@ -1048,23 +1006,21 @@
final int callingUid = Binder.getCallingUid();
long identity = Binder.clearCallingIdentity();
try {
- int idx = mListeners.indexOf(receiver);
- if (idx >= 0) {
- Receiver myReceiver = mListeners.remove(idx);
- if (myReceiver.isListener()) {
- myReceiver.getListener().asBinder().unlinkToDeath(myReceiver, 0);
- }
+ if (mReceivers.remove(receiver.mKey) != null && receiver.isListener()) {
+ receiver.getListener().asBinder().unlinkToDeath(receiver, 0);
}
// Record which providers were associated with this listener
HashSet<String> providers = new HashSet<String>();
- HashMap<String,UpdateRecord> oldRecords = mLocationListeners.get(receiver);
+ HashMap<String,UpdateRecord> oldRecords = receiver.mUpdateRecords;
if (oldRecords != null) {
// Call dispose() on the obsolete update records.
for (UpdateRecord record : oldRecords.values()) {
- if (record.mProvider.equals(LocationManager.NETWORK_PROVIDER)) {
- if (mNetworkLocationProvider != null) {
- mNetworkLocationProvider.removeListener(record.mPackages);
+ if (!providerHasListener(record.mProvider, callingUid, receiver)) {
+ LocationProviderImpl impl =
+ LocationProviderImpl.getProvider(record.mProvider);
+ if (impl != null) {
+ impl.removeListener(callingUid);
}
}
record.disposeLocked();
@@ -1072,10 +1028,6 @@
// Accumulate providers
providers.addAll(oldRecords.keySet());
}
-
- mLocationListeners.remove(receiver);
- mLastFixBroadcast.remove(receiver);
- mLastStatusBroadcast.remove(receiver);
// See if the providers associated with this listener have any
// other listeners; if one does, inform it of the new smallest minTime
@@ -1099,14 +1051,10 @@
} else {
p.enableLocationTracking(false);
}
-
- if (p == mGpsLocationProvider && mGpsNavigating) {
- updateReportedGpsLocked();
- }
}
}
- updateWakelockStatusLocked(mScreenOn);
+ updateWakelockStatusLocked();
} finally {
Binder.restoreCallingIdentity(identity);
}
@@ -1131,7 +1079,7 @@
}
public void removeGpsStatusListener(IGpsStatusListener listener) {
- synchronized (mLocationListeners) {
+ synchronized (mLock) {
mGpsLocationProvider.removeGpsStatusListener(listener);
}
}
@@ -1145,7 +1093,7 @@
throw new SecurityException("Requires ACCESS_LOCATION_EXTRA_COMMANDS permission");
}
- synchronized (mLocationListeners) {
+ synchronized (mLock) {
LocationProviderImpl impl = LocationProviderImpl.getProvider(provider);
if (provider == null) {
return false;
@@ -1326,7 +1274,7 @@
public void addProximityAlert(double latitude, double longitude,
float radius, long expiration, PendingIntent intent) {
try {
- synchronized (mLocationListeners) {
+ synchronized (mLock) {
addProximityAlertLocked(latitude, longitude, radius, expiration, intent);
}
} catch (SecurityException se) {
@@ -1359,7 +1307,7 @@
mProximityAlerts.put(intent, alert);
if (mProximityListener == null) {
- mProximityListener = new Receiver(new ProximityListener(), -1);
+ mProximityListener = new Receiver(new ProximityListener());
LocationProvider provider = LocationProviderImpl.getProvider(
LocationManager.GPS_PROVIDER);
@@ -1372,14 +1320,12 @@
if (provider != null) {
requestLocationUpdatesLocked(provider.getName(), 1000L, 1.0f, mProximityListener);
}
- } else if (mGpsNavigating) {
- updateReportedGpsLocked();
}
}
public void removeProximityAlert(PendingIntent intent) {
try {
- synchronized (mLocationListeners) {
+ synchronized (mLock) {
removeProximityAlertLocked(intent);
}
} catch (SecurityException se) {
@@ -1398,8 +1344,6 @@
if (mProximityAlerts.size() == 0) {
removeUpdatesLocked(mProximityListener);
mProximityListener = null;
- } else if (mGpsNavigating) {
- updateReportedGpsLocked();
}
}
@@ -1410,7 +1354,7 @@
*/
public Bundle getProviderInfo(String provider) {
try {
- synchronized (mLocationListeners) {
+ synchronized (mLock) {
return _getProviderInfoLocked(provider);
}
} catch (SecurityException se) {
@@ -1445,7 +1389,7 @@
public boolean isProviderEnabled(String provider) {
try {
- synchronized (mLocationListeners) {
+ synchronized (mLock) {
return _isProviderEnabledLocked(provider);
}
} catch (SecurityException se) {
@@ -1474,7 +1418,7 @@
public Location getLastKnownLocation(String provider) {
try {
- synchronized (mLocationListeners) {
+ synchronized (mLock) {
return _getLastKnownLocationLocked(provider);
}
} catch (SecurityException se) {
@@ -1574,16 +1518,11 @@
UpdateRecord r = records.get(i);
Receiver receiver = r.mReceiver;
- HashMap<String,Location> map = mLastFixBroadcast.get(receiver);
- if (map == null) {
- map = new HashMap<String,Location>();
- mLastFixBroadcast.put(receiver, map);
- }
- Location lastLoc = map.get(provider);
+ Location lastLoc = r.mLastFixBroadcast;
if ((lastLoc == null) || shouldBroadcastSafe(location, lastLoc, r)) {
if (lastLoc == null) {
lastLoc = new Location(location);
- map.put(provider, lastLoc);
+ r.mLastFixBroadcast = lastLoc;
} else {
lastLoc.set(location);
}
@@ -1596,19 +1535,11 @@
}
}
- // Broadcast status message
- HashMap<String,Long> statusMap = mLastStatusBroadcast.get(receiver);
- if (statusMap == null) {
- statusMap = new HashMap<String,Long>();
- mLastStatusBroadcast.put(receiver, statusMap);
- }
- long prevStatusUpdateTime =
- (statusMap.get(provider) != null) ? statusMap.get(provider) : 0;
-
+ long prevStatusUpdateTime = r.mLastStatusBroadcast;
if ((newStatusUpdateTime > prevStatusUpdateTime) &&
(prevStatusUpdateTime != 0 || status != LocationProvider.AVAILABLE)) {
- statusMap.put(provider, newStatusUpdateTime);
+ r.mLastStatusBroadcast = newStatusUpdateTime;
if (!receiver.callStatusChangedLocked(provider, status, extras)) {
Log.w(TAG, "RemoteException calling onStatusChanged on " + receiver);
if (deadReceivers == null) {
@@ -1636,23 +1567,29 @@
if (msg.what == MESSAGE_LOCATION_CHANGED) {
// log("LocationWorkerHandler: MESSAGE_LOCATION_CHANGED!");
- synchronized (mLocationListeners) {
+ synchronized (mLock) {
Location location = (Location) msg.obj;
+
+ if (mCollector != null &&
+ LocationManager.GPS_PROVIDER.equals(location.getProvider())) {
+ try {
+ mCollector.updateLocation(location);
+ } catch (RemoteException e) {
+ Log.w(TAG, "mCollector.updateLocation failed");
+ }
+ }
+
String provider = location.getProvider();
if (!isAllowedBySettingsLocked(provider)) {
return;
}
- // Process the location fix if the screen is on or we're holding a wakelock
- if (mScreenOn || (mWakeLockAcquireTime != 0)) {
- handleLocationChangedLocked(location);
- }
+ handleLocationChangedLocked(location);
if ((mWakeLockAcquireTime != 0) &&
(SystemClock.elapsedRealtime() - mWakeLockAcquireTime
> MAX_TIME_FOR_WAKE_LOCK)) {
- removeMessages(MESSAGE_ACQUIRE_WAKE_LOCK);
removeMessages(MESSAGE_RELEASE_WAKE_LOCK);
log("LocationWorkerHandler: Exceeded max time for wake lock");
@@ -1662,7 +1599,6 @@
} else if (mWakeLockAcquireTime != 0 &&
mWakeLockGpsReceived && mWakeLockNetworkReceived) {
- removeMessages(MESSAGE_ACQUIRE_WAKE_LOCK);
removeMessages(MESSAGE_RELEASE_WAKE_LOCK);
log("LocationWorkerHandler: Locations received.");
@@ -1671,18 +1607,12 @@
sendMessageDelayed(m, TIME_AFTER_WAKE_LOCK);
}
}
-
- } else if (msg.what == MESSAGE_ACQUIRE_WAKE_LOCK) {
- log("LocationWorkerHandler: Acquire");
- synchronized (mLocationListeners) {
- acquireWakeLockLocked();
- }
} else if (msg.what == MESSAGE_RELEASE_WAKE_LOCK) {
log("LocationWorkerHandler: Release");
// Update wakelock status so the next alarm is set before releasing wakelock
- synchronized (mLocationListeners) {
- updateWakelockStatusLocked(mScreenOn);
+ synchronized (mLock) {
+ updateWakelockStatusLocked();
releaseWakeLockLocked();
}
}
@@ -1698,30 +1628,17 @@
String action = intent.getAction();
if (action.equals(ALARM_INTENT)) {
- synchronized (mLocationListeners) {
+ synchronized (mLock) {
log("PowerStateBroadcastReceiver: Alarm received");
- mLocationHandler.removeMessages(MESSAGE_ACQUIRE_WAKE_LOCK);
// Have to do this immediately, rather than posting a
// message, so we execute our code while the system
// is holding a wake lock until the alarm broadcast
// is finished.
acquireWakeLockLocked();
}
-
- } else if (action.equals(Intent.ACTION_SCREEN_OFF)) {
- log("PowerStateBroadcastReceiver: Screen off");
- synchronized (mLocationListeners) {
- updateWakelockStatusLocked(false);
- }
-
- } else if (action.equals(Intent.ACTION_SCREEN_ON)) {
- log("PowerStateBroadcastReceiver: Screen on");
- synchronized (mLocationListeners) {
- updateWakelockStatusLocked(true);
- }
} else if (action.equals(Intent.ACTION_PACKAGE_REMOVED)
|| action.equals(Intent.ACTION_PACKAGE_RESTARTED)) {
- synchronized (mLocationListeners) {
+ synchronized (mLock) {
int uid = intent.getIntExtra(Intent.EXTRA_UID, -1);
if (uid >= 0) {
ArrayList<Receiver> removedRecs = null;
@@ -1779,7 +1696,7 @@
}
// Notify location providers of current network state
- synchronized (mLocationListeners) {
+ synchronized (mLock) {
List<LocationProviderImpl> providers = LocationProviderImpl.getProviders();
for (LocationProviderImpl provider : providers) {
if (provider.requiresNetwork()) {
@@ -1792,13 +1709,8 @@
final boolean enabled = intent.getBooleanExtra(GpsLocationProvider.EXTRA_ENABLED,
false);
- synchronized (mLocationListeners) {
- if (enabled) {
- updateReportedGpsLocked();
- mGpsNavigating = true;
- } else {
- reportStopGpsLocked();
- mGpsNavigating = false;
+ synchronized (mLock) {
+ if (!enabled) {
// When GPS is disabled, we are OK to release wake-lock
mWakeLockGpsReceived = true;
}
@@ -1810,8 +1722,8 @@
// Wake locks
- private void updateWakelockStatusLocked(boolean screenOn) {
- log("updateWakelockStatus(): " + screenOn);
+ private void updateWakelockStatusLocked() {
+ log("updateWakelockStatus()");
long callerId = Binder.clearCallingIdentity();
@@ -1826,16 +1738,8 @@
if (mGpsLocationProvider != null && mGpsLocationProvider.isLocationTracking()) {
needsLock = true;
minTime = Math.min(mGpsLocationProvider.getMinTime(), minTime);
- if (screenOn) {
- startGpsLocked();
- } else if (mScreenOn && !screenOn) {
- // We just turned the screen off so stop navigating
- stopGpsLocked();
- }
}
- mScreenOn = screenOn;
-
PendingIntent sender =
PendingIntent.getBroadcast(mContext, 0, new Intent(ALARM_INTENT), 0);
@@ -1843,7 +1747,7 @@
log("Cancelling existing alarm");
mAlarmManager.cancel(sender);
- if (needsLock && !mScreenOn) {
+ if (needsLock) {
long now = SystemClock.elapsedRealtime();
mAlarmManager.set(
AlarmManager.ELAPSED_REALTIME_WAKEUP, now + minTime, sender);
@@ -1854,7 +1758,6 @@
mAlarmInterval = -1;
// Clear out existing wakelocks
- mLocationHandler.removeMessages(MESSAGE_ACQUIRE_WAKE_LOCK);
mLocationHandler.removeMessages(MESSAGE_RELEASE_WAKE_LOCK);
releaseWakeLockLocked();
}
@@ -1897,131 +1800,11 @@
mWakeLockAcquireTime = SystemClock.elapsedRealtime();
log("Acquired wakelock");
- // Start the gps provider
- startGpsLocked();
-
- // Acquire cell lock
- if (mCellWakeLockAcquired) {
- // Lock is already acquired
- } else if (!mWakeLockNetworkReceived) {
- mTelephonyManager.enableLocationUpdates();
- mCellWakeLockAcquired = true;
- } else {
- mCellWakeLockAcquired = false;
- }
-
- // Notify NetworkLocationProvider
if (mNetworkLocationProvider != null) {
- mNetworkLocationProvider.updateCellLockStatus(mCellWakeLockAcquired);
+ mNetworkLocationProvider.wakeLockAcquired();
}
-
- // Acquire wifi lock
- WifiManager.WifiLock wifiLock = getWifiWakelockLocked();
- if (wifiLock != null) {
- if (mWifiWakeLockAcquired) {
- // Lock is already acquired
- } else if (mWifiManager.isWifiEnabled() && !mWakeLockNetworkReceived) {
- wifiLock.acquire();
- mWifiWakeLockAcquired = true;
- } else {
- mWifiWakeLockAcquired = false;
- Log.w(TAG, "acquireWakeLock(): Unable to get WiFi lock");
- }
- }
- }
-
- private boolean reportGpsUidLocked(int curSeq, int nextSeq, int uid) {
- int seq = mReportedGpsUids.get(uid, -1);
- if (seq == curSeq) {
- // Already reported; propagate to next sequence.
- mReportedGpsUids.put(uid, nextSeq);
- return true;
- } else if (seq != nextSeq) {
- try {
- // New UID; report it.
- mBatteryStats.noteStartGps(uid);
- mReportedGpsUids.put(uid, nextSeq);
- return true;
- } catch (RemoteException e) {
- }
- }
- return false;
- }
-
- private void updateReportedGpsLocked() {
- if (mGpsLocationProvider == null) {
- return;
- }
-
- final String name = mGpsLocationProvider.getName();
- final int curSeq = mReportedGpsSeq;
- final int nextSeq = (curSeq+1) >= 0 ? (curSeq+1) : 0;
- mReportedGpsSeq = nextSeq;
-
- ArrayList<UpdateRecord> urs = mRecordsByProvider.get(name);
- int num = 0;
- final int N = urs.size();
- for (int i=0; i<N; i++) {
- UpdateRecord ur = urs.get(i);
- if (ur.mReceiver == mProximityListener) {
- // We don't want the system to take the blame for this one.
- continue;
- }
- if (reportGpsUidLocked(curSeq, nextSeq, ur.mUid)) {
- num++;
- }
- }
-
- for (ProximityAlert pe : mProximityAlerts.values()) {
- if (reportGpsUidLocked(curSeq, nextSeq, pe.mUid)) {
- num++;
- }
- }
-
- if (num != mReportedGpsUids.size()) {
- // The number of uids is processed is different than the
- // array; report any that are no longer active.
- for (int i=mReportedGpsUids.size()-1; i>=0; i--) {
- if (mReportedGpsUids.valueAt(i) != nextSeq) {
- try {
- mBatteryStats.noteStopGps(mReportedGpsUids.keyAt(i));
- } catch (RemoteException e) {
- }
- mReportedGpsUids.removeAt(i);
- }
- }
- }
- }
-
- private void reportStopGpsLocked() {
- int curSeq = mReportedGpsSeq;
- for (int i=mReportedGpsUids.size()-1; i>=0; i--) {
- if (mReportedGpsUids.valueAt(i) == curSeq) {
- try {
- mBatteryStats.noteStopGps(mReportedGpsUids.keyAt(i));
- } catch (RemoteException e) {
- }
- }
- }
- curSeq++;
- if (curSeq < 0) curSeq = 0;
- mReportedGpsSeq = curSeq;
- mReportedGpsUids.clear();
- }
-
- private void startGpsLocked() {
- boolean gpsActive = (mGpsLocationProvider != null)
- && mGpsLocationProvider.isLocationTracking();
- if (gpsActive) {
- mGpsLocationProvider.startNavigating();
- }
- }
-
- private void stopGpsLocked() {
- boolean gpsActive = mGpsLocationProvider != null
- && mGpsLocationProvider.isLocationTracking();
- if (gpsActive) {
- mGpsLocationProvider.stopNavigating();
+ if (mGpsLocationProvider != null) {
+ mGpsLocationProvider.wakeLockAcquired();
}
}
@@ -2036,29 +1819,11 @@
}
private void releaseWakeLockXLocked() {
- // Release wifi lock
- WifiManager.WifiLock wifiLock = getWifiWakelockLocked();
- if (wifiLock != null) {
- if (mWifiWakeLockAcquired) {
- wifiLock.release();
- mWifiWakeLockAcquired = false;
- }
- }
-
- if (!mScreenOn) {
- // Stop the gps
- stopGpsLocked();
- }
-
- // Release cell lock
- if (mCellWakeLockAcquired) {
- mTelephonyManager.disableLocationUpdates();
- mCellWakeLockAcquired = false;
- }
-
- // Notify NetworkLocationProvider
if (mNetworkLocationProvider != null) {
- mNetworkLocationProvider.updateCellLockStatus(mCellWakeLockAcquired);
+ mNetworkLocationProvider.wakeLockReleased();
+ }
+ if (mGpsLocationProvider != null) {
+ mGpsLocationProvider.wakeLockReleased();
}
// Release wake lock
@@ -2074,30 +1839,34 @@
// Geocoder
public String getFromLocation(double latitude, double longitude, int maxResults,
- String language, String country, String variant, String appName, List<Address> addrs) {
- synchronized (mLocationListeners) {
- if (mNetworkLocationProvider != null) {
- return mNetworkLocationProvider.getFromLocation(latitude, longitude, maxResults,
- language, country, variant, appName, addrs);
- } else {
- return null;
+ String language, String country, String variant, String appName, List<Address> addrs) {
+ if (mGeocodeProvider != null) {
+ try {
+ return mGeocodeProvider.getFromLocation(latitude, longitude, maxResults, language, country,
+ variant, appName, addrs);
+ } catch (RemoteException e) {
+ Log.e(TAG, "getFromLocation failed", e);
}
}
+ return null;
}
+
public String getFromLocationName(String locationName,
- double lowerLeftLatitude, double lowerLeftLongitude,
- double upperRightLatitude, double upperRightLongitude, int maxResults,
- String language, String country, String variant, String appName, List<Address> addrs) {
- synchronized (mLocationListeners) {
- if (mNetworkLocationProvider != null) {
- return mNetworkLocationProvider.getFromLocationName(locationName, lowerLeftLatitude,
- lowerLeftLongitude, upperRightLatitude, upperRightLongitude, maxResults,
- language, country, variant, appName, addrs);
- } else {
- return null;
+ double lowerLeftLatitude, double lowerLeftLongitude,
+ double upperRightLatitude, double upperRightLongitude, int maxResults,
+ String language, String country, String variant, String appName, List<Address> addrs) {
+
+ if (mGeocodeProvider != null) {
+ try {
+ return mGeocodeProvider.getFromLocationName(locationName, lowerLeftLatitude,
+ lowerLeftLongitude, upperRightLatitude, upperRightLongitude,
+ maxResults, language, country, variant, appName, addrs);
+ } catch (RemoteException e) {
+ Log.e(TAG, "getFromLocationName failed", e);
}
}
+ return null;
}
// Mock Providers
@@ -2120,7 +1889,7 @@
boolean supportsSpeed, boolean supportsBearing, int powerRequirement, int accuracy) {
checkMockPermissionsSafe();
- synchronized (mLocationListeners) {
+ synchronized (mLock) {
MockProvider provider = new MockProvider(name, this,
requiresNetwork, requiresSatellite,
requiresCell, hasMonetaryCost, supportsAltitude,
@@ -2136,7 +1905,7 @@
public void removeTestProvider(String provider) {
checkMockPermissionsSafe();
- synchronized (mLocationListeners) {
+ synchronized (mLock) {
MockProvider mockProvider = mMockProviders.get(provider);
if (mockProvider == null) {
throw new IllegalArgumentException("Provider \"" + provider + "\" unknown");
@@ -2149,7 +1918,7 @@
public void setTestProviderLocation(String provider, Location loc) {
checkMockPermissionsSafe();
- synchronized (mLocationListeners) {
+ synchronized (mLock) {
MockProvider mockProvider = mMockProviders.get(provider);
if (mockProvider == null) {
throw new IllegalArgumentException("Provider \"" + provider + "\" unknown");
@@ -2160,7 +1929,7 @@
public void clearTestProviderLocation(String provider) {
checkMockPermissionsSafe();
- synchronized (mLocationListeners) {
+ synchronized (mLock) {
MockProvider mockProvider = mMockProviders.get(provider);
if (mockProvider == null) {
throw new IllegalArgumentException("Provider \"" + provider + "\" unknown");
@@ -2171,7 +1940,7 @@
public void setTestProviderEnabled(String provider, boolean enabled) {
checkMockPermissionsSafe();
- synchronized (mLocationListeners) {
+ synchronized (mLock) {
MockProvider mockProvider = mMockProviders.get(provider);
if (mockProvider == null) {
throw new IllegalArgumentException("Provider \"" + provider + "\" unknown");
@@ -2191,7 +1960,7 @@
public void clearTestProviderEnabled(String provider) {
checkMockPermissionsSafe();
- synchronized (mLocationListeners) {
+ synchronized (mLock) {
MockProvider mockProvider = mMockProviders.get(provider);
if (mockProvider == null) {
throw new IllegalArgumentException("Provider \"" + provider + "\" unknown");
@@ -2204,7 +1973,7 @@
public void setTestProviderStatus(String provider, int status, Bundle extras, long updateTime) {
checkMockPermissionsSafe();
- synchronized (mLocationListeners) {
+ synchronized (mLock) {
MockProvider mockProvider = mMockProviders.get(provider);
if (mockProvider == null) {
throw new IllegalArgumentException("Provider \"" + provider + "\" unknown");
@@ -2215,7 +1984,7 @@
public void clearTestProviderStatus(String provider) {
checkMockPermissionsSafe();
- synchronized (mLocationListeners) {
+ synchronized (mLock) {
MockProvider mockProvider = mMockProviders.get(provider);
if (mockProvider == null) {
throw new IllegalArgumentException("Provider \"" + provider + "\" unknown");
@@ -2239,52 +2008,29 @@
return;
}
- synchronized (mLocationListeners) {
+ synchronized (mLock) {
pw.println("Current Location Manager state:");
pw.println(" sProvidersLoaded=" + sProvidersLoaded);
pw.println(" mGpsLocationProvider=" + mGpsLocationProvider);
- pw.println(" mGpsNavigating=" + mGpsNavigating);
pw.println(" mNetworkLocationProvider=" + mNetworkLocationProvider);
pw.println(" mCollector=" + mCollector);
pw.println(" mAlarmInterval=" + mAlarmInterval
- + " mScreenOn=" + mScreenOn
+ " mWakeLockAcquireTime=" + mWakeLockAcquireTime);
pw.println(" mWakeLockGpsReceived=" + mWakeLockGpsReceived
+ " mWakeLockNetworkReceived=" + mWakeLockNetworkReceived);
- pw.println(" mWifiWakeLockAcquired=" + mWifiWakeLockAcquired
- + " mCellWakeLockAcquired=" + mCellWakeLockAcquired);
pw.println(" Listeners:");
- int N = mListeners.size();
+ int N = mReceivers.size();
for (int i=0; i<N; i++) {
- pw.println(" " + mListeners.get(i));
+ pw.println(" " + mReceivers.get(i));
}
pw.println(" Location Listeners:");
- for (Map.Entry<Receiver, HashMap<String,UpdateRecord>> i
- : mLocationListeners.entrySet()) {
- pw.println(" " + i.getKey() + ":");
- for (Map.Entry<String,UpdateRecord> j : i.getValue().entrySet()) {
+ for (Receiver i : mReceivers.values()) {
+ pw.println(" " + i + ":");
+ for (Map.Entry<String,UpdateRecord> j : i.mUpdateRecords.entrySet()) {
pw.println(" " + j.getKey() + ":");
j.getValue().dump(pw, " ");
}
}
- pw.println(" Last Fix Broadcasts:");
- for (Map.Entry<Receiver, HashMap<String,Location>> i
- : mLastFixBroadcast.entrySet()) {
- pw.println(" " + i.getKey() + ":");
- for (Map.Entry<String,Location> j : i.getValue().entrySet()) {
- pw.println(" " + j.getKey() + ":");
- j.getValue().dump(new PrintWriterPrinter(pw), " ");
- }
- }
- pw.println(" Last Status Broadcasts:");
- for (Map.Entry<Receiver, HashMap<String,Long>> i
- : mLastStatusBroadcast.entrySet()) {
- pw.println(" " + i.getKey() + ":");
- for (Map.Entry<String,Long> j : i.getValue().entrySet()) {
- pw.println(" " + j.getKey() + " -> 0x"
- + Long.toHexString(j.getValue()));
- }
- }
pw.println(" Records by Provider:");
for (Map.Entry<String, ArrayList<UpdateRecord>> i
: mRecordsByProvider.entrySet()) {
@@ -2336,12 +2082,6 @@
i.getValue().dump(pw, " ");
}
}
- pw.println(" Reported GPS UIDs @ seq " + mReportedGpsSeq + ":");
- N = mReportedGpsUids.size();
- for (int i=0; i<N; i++) {
- pw.println(" UID " + mReportedGpsUids.keyAt(i)
- + " seq=" + mReportedGpsUids.valueAt(i));
- }
}
}
}
diff --git a/services/java/com/android/server/WifiService.java b/services/java/com/android/server/WifiService.java
index 54e77f0..8850c31 100644
--- a/services/java/com/android/server/WifiService.java
+++ b/services/java/com/android/server/WifiService.java
@@ -165,7 +165,6 @@
* Character buffer used to parse scan results (optimization)
*/
private static final int SCAN_RESULT_BUFFER_SIZE = 512;
- private char[] mScanResultBuffer;
private boolean mNeedReconfig;
/*
@@ -204,8 +203,6 @@
}
};
- mScanResultBuffer = new char [SCAN_RESULT_BUFFER_SIZE];
-
HandlerThread wifiThread = new HandlerThread("WifiService");
wifiThread.start();
mWifiHandler = new WifiHandler(wifiThread.getLooper());
@@ -1217,61 +1214,13 @@
lineBeg = lineEnd + 1;
continue;
}
- int lineLen = lineEnd - lineBeg;
- if (0 < lineLen && lineLen <= SCAN_RESULT_BUFFER_SIZE) {
- int scanResultLevel = 0;
- /*
- * At most one thread should have access to the buffer at a time!
- */
- synchronized(mScanResultBuffer) {
- boolean parsingScanResultLevel = false;
- for (int i = lineBeg; i < lineEnd; ++i) {
- char ch = reply.charAt(i);
- /*
- * Assume that the signal level starts with a '-'
- */
- if (ch == '-') {
- /*
- * Skip whatever instances of '-' we may have
- * after we parse the signal level
- */
- parsingScanResultLevel = (scanResultLevel == 0);
- } else if (parsingScanResultLevel) {
- int digit = Character.digit(ch, 10);
- if (0 <= digit) {
- scanResultLevel =
- 10 * scanResultLevel + digit;
- /*
- * Replace the signal level number in
- * the string with 0's for caching
- */
- ch = '0';
- } else {
- /*
- * Reset the flag if we meet a non-digit
- * character
- */
- parsingScanResultLevel = false;
- }
- }
- mScanResultBuffer[i - lineBeg] = ch;
- }
- if (scanResultLevel != 0) {
- ScanResult scanResult = parseScanResult(
- new String(mScanResultBuffer, 0, lineLen));
- if (scanResult != null) {
- scanResult.level = -scanResultLevel;
- scanList.add(scanResult);
- }
- } else if (DBG) {
- Log.w(TAG,
- "ScanResult.level=0: misformatted scan result?");
- }
- }
- } else if (0 < lineLen) {
- if (DBG) {
- Log.w(TAG, "Scan result line is too long: " +
- (lineEnd - lineBeg) + ", skipping the line!");
+ if (lineEnd > lineBeg) {
+ String line = reply.substring(lineBeg, lineEnd);
+ ScanResult scanResult = parseScanResult(line);
+ if (scanResult != null) {
+ scanList.add(scanResult);
+ } else if (DBG) {
+ Log.w(TAG, "misformatted scan result for: " + line);
}
}
lineBeg = lineEnd + 1;
@@ -1294,21 +1243,29 @@
* must synchronized here!
*/
synchronized (mScanResultCache) {
- scanResult = mScanResultCache.get(line);
- if (scanResult == null) {
- String[] result = scanResultPattern.split(line);
- if (3 <= result.length && result.length <= 5) {
- // bssid | frequency | level | flags | ssid
- int frequency;
- int level;
- try {
- frequency = Integer.parseInt(result[1]);
- level = Integer.parseInt(result[2]);
- } catch (NumberFormatException e) {
- frequency = 0;
- level = 0;
- }
+ String[] result = scanResultPattern.split(line);
+ if (3 <= result.length && result.length <= 5) {
+ String bssid = result[0];
+ // bssid | frequency | level | flags | ssid
+ int frequency;
+ int level;
+ try {
+ frequency = Integer.parseInt(result[1]);
+ level = Integer.parseInt(result[2]);
+ /* some implementations avoid negative values by adding 256
+ * so we need to adjust for that here.
+ */
+ if (level > 0) level -= 256;
+ } catch (NumberFormatException e) {
+ frequency = 0;
+ level = 0;
+ }
+ // bssid is the hash key
+ scanResult = mScanResultCache.get(bssid);
+ if (scanResult != null) {
+ scanResult.level = level;
+ } else {
/*
* The formatting of the results returned by
* wpa_supplicant is intended to make the fields
@@ -1341,13 +1298,13 @@
if (0 < ssid.trim().length()) {
scanResult =
new ScanResult(
- ssid, result[0], flags, level, frequency);
- mScanResultCache.put(line, scanResult);
+ ssid, bssid, flags, level, frequency);
+ mScanResultCache.put(bssid, scanResult);
}
- } else {
- Log.w(TAG, "Misformatted scan result text with " +
- result.length + " fields: " + line);
}
+ } else {
+ Log.w(TAG, "Misformatted scan result text with " +
+ result.length + " fields: " + line);
}
}
}
diff --git a/services/java/com/android/server/WindowManagerService.java b/services/java/com/android/server/WindowManagerService.java
index 0b1ddc8..b0fcb1c 100644
--- a/services/java/com/android/server/WindowManagerService.java
+++ b/services/java/com/android/server/WindowManagerService.java
@@ -77,7 +77,6 @@
import android.os.SystemProperties;
import android.os.TokenWatcher;
import android.provider.Settings;
-import android.util.Config;
import android.util.EventLog;
import android.util.Log;
import android.util.SparseIntArray;
@@ -137,7 +136,7 @@
static final boolean PROFILE_ORIENTATION = false;
static final boolean BLUR = true;
- static final boolean localLOGV = DEBUG ? Config.LOGD : Config.LOGV;
+ static final boolean localLOGV = DEBUG;
static final int LOG_WM_NO_SURFACE_MEMORY = 31000;
@@ -2023,7 +2022,7 @@
wtoken.appFullscreen = fullscreen;
wtoken.requestedOrientation = requestedOrientation;
mAppTokens.add(addPos, wtoken);
- if (Config.LOGV) Log.v(TAG, "Adding new app token: " + wtoken);
+ if (localLOGV) Log.v(TAG, "Adding new app token: " + wtoken);
mTokenMap.put(token.asBinder(), wtoken);
mTokenList.add(wtoken);
@@ -4801,14 +4800,11 @@
mPaused = true;
} else {
if (mLastWin == null) {
- if (Config.LOGI) Log.i(
- TAG, "Key dispatching not paused: no last window.");
+ Log.i(TAG, "Key dispatching not paused: no last window.");
} else if (mFinished) {
- if (Config.LOGI) Log.i(
- TAG, "Key dispatching not paused: finished last key.");
+ Log.i(TAG, "Key dispatching not paused: finished last key.");
} else {
- if (Config.LOGI) Log.i(
- TAG, "Key dispatching not paused: window in higher layer.");
+ Log.i(TAG, "Key dispatching not paused: window in higher layer.");
}
}
*/
@@ -7423,7 +7419,7 @@
private boolean mInLayout = false;
private final void performLayoutAndPlaceSurfacesLocked() {
if (mInLayout) {
- if (Config.DEBUG) {
+ if (DEBUG) {
throw new RuntimeException("Recursive call!");
}
Log.w(TAG, "performLayoutAndPlaceSurfacesLocked called while in layout");
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index d676c00..a3c23d3 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -682,6 +682,11 @@
HashMap<String, IBinder> mAppBindArgs;
/**
+ * Temporary to avoid allocations. Protected by main lock.
+ */
+ final StringBuilder mStringBuilder = new StringBuilder(256);
+
+ /**
* Used to control how we initialize the service.
*/
boolean mStartRunning = false;
@@ -778,6 +783,8 @@
long mLastCpuTime = 0;
long mLastWriteTime = 0;
+ long mInitialStartTime = 0;
+
/**
* Set to true after the system has finished booting.
*/
@@ -1270,7 +1277,7 @@
mBatteryStatsService.getActiveStatistics().writeLocked();
mUsageStatsService = new UsageStatsService( new File(
- systemDir, "usagestats.bin").toString());
+ systemDir, "usagestats").toString());
mConfiguration.makeDefault();
mProcessStats.init();
@@ -1635,6 +1642,11 @@
if (r.startTime == 0) {
r.startTime = SystemClock.uptimeMillis();
+ if (mInitialStartTime == 0) {
+ mInitialStartTime = r.startTime;
+ }
+ } else if (mInitialStartTime == 0) {
+ mInitialStartTime = SystemClock.uptimeMillis();
}
if (app != null && app.thread != null) {
@@ -1785,7 +1797,8 @@
Watchdog.getInstance().processStarted(app, app.processName, pid);
}
- StringBuilder buf = new StringBuilder(128);
+ StringBuilder buf = mStringBuilder;
+ buf.setLength(0);
buf.append("Start proc ");
buf.append(app.processName);
buf.append(" for ");
@@ -2813,7 +2826,6 @@
HistoryRecord r = new HistoryRecord(this, callerApp, callingUid,
intent, resolvedType, aInfo, mConfiguration,
resultRecord, resultWho, requestCode, componentSpecified);
- r.startTime = SystemClock.uptimeMillis();
HistoryRecord notTop = (launchFlags&Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP)
!= 0 ? r : null;
@@ -4095,7 +4107,8 @@
}
}
- StringBuilder info = new StringBuilder();
+ StringBuilder info = mStringBuilder;
+ info.setLength(0);
info.append("ANR (application not responding) in process: ");
info.append(app.processName);
if (annotation != null) {
@@ -4517,7 +4530,7 @@
}
} else if (mStartingProcesses.size() > 0) {
app = mStartingProcesses.remove(0);
- app.pid = pid;
+ app.setPid(pid);
} else {
app = null;
}
@@ -7877,24 +7890,24 @@
return;
}
pw.println("Activities in Current Activity Manager State:");
- dumpHistoryList(pw, mHistory, " ", "History");
+ dumpHistoryList(pw, mHistory, " ", "History", true);
pw.println(" ");
pw.println(" Running activities (most recent first):");
- dumpHistoryList(pw, mLRUActivities, " ", "Running");
+ dumpHistoryList(pw, mLRUActivities, " ", "Running", false);
if (mWaitingVisibleActivities.size() > 0) {
pw.println(" ");
pw.println(" Activities waiting for another to become visible:");
- dumpHistoryList(pw, mWaitingVisibleActivities, " ", "Waiting");
+ dumpHistoryList(pw, mWaitingVisibleActivities, " ", "Waiting", false);
}
if (mStoppingActivities.size() > 0) {
pw.println(" ");
pw.println(" Activities waiting to stop:");
- dumpHistoryList(pw, mStoppingActivities, " ", "Stopping");
+ dumpHistoryList(pw, mStoppingActivities, " ", "Stopping", false);
}
if (mFinishingActivities.size() > 0) {
pw.println(" ");
pw.println(" Activities waiting to finish:");
- dumpHistoryList(pw, mFinishingActivities, " ", "Finishing");
+ dumpHistoryList(pw, mFinishingActivities, " ", "Finishing", false);
}
pw.println(" ");
@@ -7931,8 +7944,8 @@
needSep = true;
}
ProcessRecord r = procs.valueAt(ia);
- pw.println((r.persistent ? " *PERSISTENT* Process [" : " Process [")
- + r.processName + "] UID " + procs.keyAt(ia));
+ pw.print(r.persistent ? " *PERSISTENT* Process [" : " Process [");
+ pw.print(r.processName); pw.print("] UID "); pw.println(procs.keyAt(ia));
r.dump(pw, " ");
if (r.persistent) {
numPers++;
@@ -8360,16 +8373,29 @@
}
private static final void dumpHistoryList(PrintWriter pw, List list,
- String prefix, String label) {
+ String prefix, String label, boolean complete) {
TaskRecord lastTask = null;
for (int i=list.size()-1; i>=0; i--) {
HistoryRecord r = (HistoryRecord)list.get(i);
if (lastTask != r.task) {
lastTask = r.task;
- lastTask.dump(pw, prefix + " ");
+ if (complete || !r.inHistory) {
+ lastTask.dump(pw, prefix + " ");
+ } else {
+ pw.print(prefix);
+ pw.print(" ");
+ pw.println(lastTask);
+ }
}
- pw.println(prefix + " " + label + " #" + i + ":");
- r.dump(pw, prefix + " ");
+ if (complete || !r.inHistory) {
+ pw.print(prefix); pw.print(" "); pw.print(label);
+ pw.print(" #"); pw.print(i); pw.println(":");
+ r.dump(pw, prefix + " ");
+ } else {
+ pw.print(prefix); pw.print(" "); pw.print(label);
+ pw.print(" #"); pw.print(i); pw.print(": ");
+ pw.println(r);
+ }
}
}
@@ -8401,7 +8427,7 @@
private static final void dumpApplicationMemoryUsage(FileDescriptor fd,
PrintWriter pw, List list, String prefix, String[] args) {
- final boolean isCheckinRequest = scanArgs(args, "-c");
+ final boolean isCheckinRequest = scanArgs(args, "--checkin");
long uptime = SystemClock.uptimeMillis();
long realtime = SystemClock.elapsedRealtime();
@@ -8738,7 +8764,7 @@
mPidsSelfLocked.remove(app.pid);
mHandler.removeMessages(PROC_START_TIMEOUT_MSG, app);
}
- app.pid = 0;
+ app.setPid(0);
}
}
diff --git a/services/java/com/android/server/am/BatteryStatsService.java b/services/java/com/android/server/am/BatteryStatsService.java
index c5907af..e265f43 100644
--- a/services/java/com/android/server/am/BatteryStatsService.java
+++ b/services/java/com/android/server/am/BatteryStatsService.java
@@ -295,7 +295,7 @@
boolean isCheckin = false;
if (args != null) {
for (String arg : args) {
- if ("-c".equals(arg)) {
+ if ("--checkin".equals(arg)) {
isCheckin = true;
break;
}
diff --git a/services/java/com/android/server/am/ConnectionRecord.java b/services/java/com/android/server/am/ConnectionRecord.java
index 41a783f..b4c7df1 100644
--- a/services/java/com/android/server/am/ConnectionRecord.java
+++ b/services/java/com/android/server/am/ConnectionRecord.java
@@ -28,7 +28,8 @@
final HistoryRecord activity; // If non-null, the owning activity.
final IServiceConnection conn; // The client connection.
final int flags; // Binding options.
-
+ String stringName; // Caching of toString.
+
void dump(PrintWriter pw, String prefix) {
pw.println(prefix + this);
pw.println(prefix + "binding=" + binding);
@@ -46,9 +47,17 @@
}
public String toString() {
- return "ConnectionRecord{"
- + Integer.toHexString(System.identityHashCode(this))
- + " " + binding.service.shortName
- + ":@" + Integer.toHexString(System.identityHashCode(conn.asBinder())) + "}";
+ if (stringName != null) {
+ return stringName;
+ }
+ StringBuilder sb = new StringBuilder(128);
+ sb.append("ConnectionRecord{");
+ sb.append(Integer.toHexString(System.identityHashCode(this)));
+ sb.append(' ');
+ sb.append(binding.service.shortName);
+ sb.append(":@");
+ sb.append(Integer.toHexString(System.identityHashCode(conn.asBinder())));
+ sb.append('}');
+ return stringName = sb.toString();
}
}
diff --git a/services/java/com/android/server/am/ContentProviderRecord.java b/services/java/com/android/server/am/ContentProviderRecord.java
index 9f37c14..2b9e006 100644
--- a/services/java/com/android/server/am/ContentProviderRecord.java
+++ b/services/java/com/android/server/am/ContentProviderRecord.java
@@ -32,7 +32,8 @@
int externals; // number of non-framework processes supported by this provider
ProcessRecord app; // if non-null, hosting application
ProcessRecord launchingApp; // if non-null, waiting for this app to be launched.
-
+ String stringName;
+
public ContentProviderRecord(ProviderInfo _info, ApplicationInfo ai) {
super(_info);
uid = ai.uid;
@@ -69,8 +70,15 @@
}
public String toString() {
- return "ContentProviderRecord{"
- + Integer.toHexString(System.identityHashCode(this))
- + " " + info.name + "}";
+ if (stringName != null) {
+ return stringName;
+ }
+ StringBuilder sb = new StringBuilder(128);
+ sb.append("ContentProviderRecord{");
+ sb.append(Integer.toHexString(System.identityHashCode(this)));
+ sb.append(' ');
+ sb.append(info.name);
+ sb.append('}');
+ return stringName = sb.toString();
}
}
diff --git a/services/java/com/android/server/am/HistoryRecord.java b/services/java/com/android/server/am/HistoryRecord.java
index 0f62471..a2fd62b 100644
--- a/services/java/com/android/server/am/HistoryRecord.java
+++ b/services/java/com/android/server/am/HistoryRecord.java
@@ -100,46 +100,74 @@
boolean hasBeenLaunched;// has this activity ever been launched?
boolean frozenBeforeDestroy;// has been frozen but not yet destroyed.
+ String stringName; // for caching of toString().
+
void dump(PrintWriter pw, String prefix) {
- pw.println(prefix + this);
- pw.println(prefix + "packageName=" + packageName
- + " processName=" + processName);
- pw.println(prefix + "launchedFromUid=" + launchedFromUid
- + " app=" + app);
- pw.println(prefix + intent);
- pw.println(prefix + "frontOfTask=" + frontOfTask + " task=" + task);
- pw.println(prefix + "taskAffinity=" + taskAffinity);
- pw.println(prefix + "realActivity=" + realActivity);
- pw.println(prefix + "dir=" + baseDir + " res=" + resDir + " data=" + dataDir);
- pw.println(prefix + "labelRes=0x" + Integer.toHexString(labelRes)
- + " icon=0x" + Integer.toHexString(icon)
- + " theme=0x" + Integer.toHexString(theme));
- pw.println(prefix + "stateNotNeeded=" + stateNotNeeded
- + " componentSpecified=" + componentSpecified
- + " isHomeActivity=" + isHomeActivity);
- pw.println(prefix + "configuration=" + configuration);
- pw.println(prefix + "resultTo=" + resultTo
- + " resultWho=" + resultWho + " resultCode=" + requestCode);
- pw.println(prefix + "results=" + results);
- pw.println(prefix + "pendingResults=" + pendingResults);
- pw.println(prefix + "readUriPermissions=" + readUriPermissions);
- pw.println(prefix + "writeUriPermissions=" + writeUriPermissions);
- pw.println(prefix + "launchFailed=" + launchFailed
- + " haveState=" + haveState + " icicle=" + icicle);
- pw.println(prefix + "state=" + state
- + " stopped=" + stopped + " finishing=" + finishing);
- pw.println(prefix + "keysPaused=" + keysPaused
- + " inHistory=" + inHistory + " persistent=" + persistent
- + " launchMode=" + launchMode);
- pw.println(prefix + "fullscreen=" + fullscreen
- + " visible=" + visible
- + " frozenBeforeDestroy=" + frozenBeforeDestroy
- + " thumbnailNeeded=" + thumbnailNeeded + " idle=" + idle);
- pw.println(prefix + "waitingVisible=" + waitingVisible
- + " nowVisible=" + nowVisible);
- pw.println(prefix + "configDestroy=" + configDestroy
- + " configChangeFlags=" + Integer.toHexString(configChangeFlags));
- pw.println(prefix + "connections=" + connections);
+ pw.print(prefix); pw.println(this);
+ pw.print(prefix); pw.print("packageName="); pw.print(packageName);
+ pw.print(" processName="); pw.println(processName);
+ pw.print(prefix); pw.print("launchedFromUid="); pw.print(launchedFromUid);
+ pw.print(" app="); pw.println(app);
+ pw.print(prefix); pw.println(intent);
+ pw.print(prefix); pw.print("frontOfTask="); pw.print(frontOfTask);
+ pw.print(" task="); pw.println(task);
+ pw.print(prefix); pw.print("taskAffinity="); pw.println(taskAffinity);
+ pw.print(prefix); pw.print("realActivity="); pw.println(realActivity);
+ pw.print(prefix); pw.print("dir="); pw.print(baseDir);
+ pw.print(" res="); pw.print(resDir);
+ pw.print(" data="); pw.println(dataDir);
+ pw.print(prefix); pw.print("labelRes=0x");
+ pw.print(Integer.toHexString(labelRes));
+ pw.print(" icon=0x"); pw.print(Integer.toHexString(icon));
+ pw.print(" theme=0x"); pw.println(Integer.toHexString(theme));
+ pw.print(prefix); pw.print("stateNotNeeded="); pw.print(stateNotNeeded);
+ pw.print(" componentSpecified="); pw.print(componentSpecified);
+ pw.print(" isHomeActivity="); pw.println(isHomeActivity);
+ pw.print(prefix); pw.print("configuration="); pw.println(configuration);
+ if (resultTo != null || resultWho != null) {
+ pw.print(prefix); pw.print("resultTo="); pw.print(resultTo);
+ pw.print(" resultWho="); pw.print(resultWho);
+ pw.print(" resultCode="); pw.println(requestCode);
+ }
+ if (results != null) {
+ pw.print(prefix); pw.print("results="); pw.println(results);
+ }
+ if (pendingResults != null) {
+ pw.print(prefix); pw.print("pendingResults="); pw.println(pendingResults);
+ }
+ if (readUriPermissions != null) {
+ pw.print(prefix); pw.print("readUriPermissions="); pw.println(readUriPermissions);
+ }
+ if (writeUriPermissions != null) {
+ pw.print(prefix); pw.print("writeUriPermissions="); pw.println(writeUriPermissions);
+ }
+ pw.print(prefix); pw.print("launchFailed="); pw.print(launchFailed);
+ pw.print(" haveState="); pw.print(haveState);
+ pw.print(" icicle="); pw.println(icicle);
+ pw.print(prefix); pw.print("state="); pw.print(state);
+ pw.print(" stopped="); pw.print(stopped);
+ pw.print(" finishing="); pw.println(finishing);
+ pw.print(prefix); pw.print("keysPaused="); pw.print(keysPaused);
+ pw.print(" inHistory="); pw.print(inHistory);
+ pw.print(" persistent="); pw.print(persistent);
+ pw.print(" launchMode="); pw.println(launchMode);
+ pw.print(prefix); pw.print("fullscreen="); pw.print(fullscreen);
+ pw.print(" visible="); pw.print(visible);
+ pw.print(" frozenBeforeDestroy="); pw.print(frozenBeforeDestroy);
+ pw.print(" thumbnailNeeded="); pw.print(thumbnailNeeded);
+ pw.print(" idle="); pw.println(idle);
+ if (waitingVisible || nowVisible) {
+ pw.print(prefix); pw.print("waitingVisible="); pw.print(waitingVisible);
+ pw.print(" nowVisible="); pw.println(nowVisible);
+ }
+ if (configDestroy || configChangeFlags != 0) {
+ pw.print(prefix); pw.print("configDestroy="); pw.print(configDestroy);
+ pw.print(" configChangeFlags=");
+ pw.println(Integer.toHexString(configChangeFlags));
+ }
+ if (connections != null) {
+ pw.print(prefix); pw.print("connections="); pw.println(connections);
+ }
}
HistoryRecord(ActivityManagerService _service, ProcessRecord _caller,
@@ -335,15 +363,31 @@
public void windowsVisible() {
synchronized(service) {
- if (ActivityManagerService.SHOW_ACTIVITY_START_TIME
- && startTime != 0) {
- long time = SystemClock.uptimeMillis() - startTime;
- EventLog.writeEvent(ActivityManagerService.LOG_ACTIVITY_LAUNCH_TIME,
- System.identityHashCode(this), shortComponentName, time);
- Log.i(ActivityManagerService.TAG, "Displayed activity "
- + shortComponentName
- + ": " + time + " ms");
+ if (startTime != 0) {
+ final long curTime = SystemClock.uptimeMillis();
+ final long thisTime = curTime - startTime;
+ final long totalTime = service.mInitialStartTime != 0
+ ? (curTime - service.mInitialStartTime) : thisTime;
+ if (ActivityManagerService.SHOW_ACTIVITY_START_TIME) {
+ EventLog.writeEvent(ActivityManagerService.LOG_ACTIVITY_LAUNCH_TIME,
+ System.identityHashCode(this), shortComponentName,
+ thisTime, totalTime);
+ StringBuilder sb = service.mStringBuilder;
+ sb.setLength(0);
+ sb.append("Displayed activity ");
+ sb.append(shortComponentName);
+ sb.append(": ");
+ sb.append(thisTime);
+ sb.append(" ms (total ");
+ sb.append(totalTime);
+ sb.append(" ms)");
+ Log.i(ActivityManagerService.TAG, sb.toString());
+ }
+ if (totalTime > 0) {
+ service.mUsageStatsService.noteLaunchTime(realActivity, (int)totalTime);
+ }
startTime = 0;
+ service.mInitialStartTime = 0;
}
if (ActivityManagerService.DEBUG_SWITCH) Log.v(
ActivityManagerService.TAG, "windowsVisible(): " + this);
@@ -453,8 +497,15 @@
public String toString() {
- return "HistoryRecord{"
- + Integer.toHexString(System.identityHashCode(this))
- + " " + intent.getComponent().toShortString() + "}";
+ if (stringName != null) {
+ return stringName;
+ }
+ StringBuilder sb = new StringBuilder(128);
+ sb.append("HistoryRecord{");
+ sb.append(Integer.toHexString(System.identityHashCode(this)));
+ sb.append(' ');
+ sb.append(intent.getComponent().toShortString());
+ sb.append('}');
+ return stringName = sb.toString();
}
}
diff --git a/services/java/com/android/server/am/ProcessRecord.java b/services/java/com/android/server/am/ProcessRecord.java
index a1320df..d2667e7 100644
--- a/services/java/com/android/server/am/ProcessRecord.java
+++ b/services/java/com/android/server/am/ProcessRecord.java
@@ -98,44 +98,82 @@
boolean waitedForDebugger; // has process show wait for debugger dialog?
Dialog waitDialog; // current wait for debugger dialog
+ String stringName; // caching of toString() result.
+
// These reports are generated & stored when an app gets into an error condition.
// They will be "null" when all is OK.
ActivityManager.ProcessErrorStateInfo crashingReport;
ActivityManager.ProcessErrorStateInfo notRespondingReport;
void dump(PrintWriter pw, String prefix) {
- pw.println(prefix + this);
- pw.println(prefix + "class=" + info.className);
- pw.println(prefix+"manageSpaceActivityName="+info.manageSpaceActivityName);
- pw.println(prefix + "dir=" + info.sourceDir + " publicDir=" + info.publicSourceDir
- + " data=" + info.dataDir);
- pw.println(prefix + "packageList=" + pkgList);
- pw.println(prefix + "instrumentationClass=" + instrumentationClass
- + " instrumentationProfileFile=" + instrumentationProfileFile);
- pw.println(prefix + "instrumentationArguments=" + instrumentationArguments);
- pw.println(prefix + "thread=" + thread + " curReceiver=" + curReceiver);
- pw.println(prefix + "pid=" + pid + " starting=" + starting
- + " lastPss=" + lastPss);
- pw.println(prefix + "maxAdj=" + maxAdj + " hiddenAdj=" + hiddenAdj
- + " curRawAdj=" + curRawAdj + " setRawAdj=" + setRawAdj
- + " curAdj=" + curAdj + " setAdj=" + setAdj);
- pw.println(prefix + "isForeground=" + isForeground
- + " setIsForeground=" + setIsForeground
- + " foregroundServices=" + foregroundServices
- + " forcingToForeground=" + forcingToForeground);
- pw.println(prefix + "persistent=" + persistent + " removed=" + removed
- + " persistentActivities=" + persistentActivities);
- pw.println(prefix + "debugging=" + debugging
- + " crashing=" + crashing + " " + crashDialog
- + " notResponding=" + notResponding + " " + anrDialog
- + " bad=" + bad);
- pw.println(prefix + "activities=" + activities);
- pw.println(prefix + "services=" + services);
- pw.println(prefix + "executingServices=" + executingServices);
- pw.println(prefix + "connections=" + connections);
- pw.println(prefix + "pubProviders=" + pubProviders);
- pw.println(prefix + "conProviders=" + conProviders);
- pw.println(prefix + "receivers=" + receivers);
+ pw.print(prefix); pw.println(this);
+ if (info.className != null) {
+ pw.print(prefix); pw.print("class="); pw.println(info.className);
+ }
+ if (info.manageSpaceActivityName != null) {
+ pw.print(prefix); pw.print("manageSpaceActivityName=");
+ pw.println(info.manageSpaceActivityName);
+ }
+ pw.print(prefix); pw.print("dir="); pw.print(info.sourceDir);
+ pw.print(" publicDir="); pw.print(info.publicSourceDir);
+ pw.print(" data="); pw.println(info.dataDir);
+ pw.print(prefix); pw.print("packageList="); pw.println(pkgList);
+ if (instrumentationClass != null || instrumentationProfileFile != null
+ || instrumentationArguments != null) {
+ pw.print(prefix); pw.print("instrumentationClass=");
+ pw.print(instrumentationClass);
+ pw.print(" instrumentationProfileFile=");
+ pw.println(instrumentationProfileFile);
+ pw.print(prefix); pw.print("instrumentationArguments=");
+ pw.println(instrumentationArguments);
+ }
+ pw.print(prefix); pw.print("thread="); pw.print(thread);
+ pw.print(" curReceiver="); pw.println(curReceiver);
+ pw.print(prefix); pw.print("pid="); pw.print(pid); pw.print(" starting=");
+ pw.print(starting); pw.print(" lastPss="); pw.println(lastPss);
+ pw.print(prefix); pw.print("oom: max="); pw.print(maxAdj);
+ pw.print(" hidden="); pw.print(hiddenAdj);
+ pw.print(" curRaw="); pw.print(curRawAdj);
+ pw.print(" setRaw="); pw.print(setRawAdj);
+ pw.print(" cur="); pw.print(curAdj);
+ pw.print(" set="); pw.println(setAdj);
+ pw.print(prefix); pw.print("isForeground="); pw.print(isForeground);
+ pw.print(" setIsForeground="); pw.print(setIsForeground);
+ pw.print(" foregroundServices="); pw.print(foregroundServices);
+ pw.print(" forcingToForeground="); pw.println(forcingToForeground);
+ pw.print(prefix); pw.print("persistent="); pw.print(persistent);
+ pw.print(" removed="); pw.print(removed);
+ pw.print(" persistentActivities="); pw.println(persistentActivities);
+ if (debugging || crashing || crashDialog != null || notResponding
+ || anrDialog != null || bad) {
+ pw.print(prefix); pw.print("debugging="); pw.print(debugging);
+ pw.print(" crashing="); pw.print(crashing);
+ pw.print(" "); pw.print(crashDialog);
+ pw.print(" notResponding="); pw.print(notResponding);
+ pw.print(" " ); pw.print(anrDialog);
+ pw.print(" bad="); pw.println(bad);
+ }
+ if (activities.size() > 0) {
+ pw.print(prefix); pw.print("activities="); pw.println(activities);
+ }
+ if (services.size() > 0) {
+ pw.print(prefix); pw.print("services="); pw.println(services);
+ }
+ if (executingServices.size() > 0) {
+ pw.print(prefix); pw.print("executingServices="); pw.println(executingServices);
+ }
+ if (connections.size() > 0) {
+ pw.print(prefix); pw.print("connections="); pw.println(connections);
+ }
+ if (pubProviders.size() > 0) {
+ pw.print(prefix); pw.print("pubProviders="); pw.println(pubProviders);
+ }
+ if (conProviders.size() > 0) {
+ pw.print(prefix); pw.print("conProviders="); pw.println(conProviders);
+ }
+ if (receivers.size() > 0) {
+ pw.print(prefix); pw.print("receivers="); pw.println(receivers);
+ }
}
ProcessRecord(BatteryStatsImpl.Uid.Proc _batteryStats, IApplicationThread _thread,
@@ -154,6 +192,11 @@
persistentActivities = 0;
}
+ public void setPid(int _pid) {
+ pid = _pid;
+ stringName = null;
+ }
+
/**
* This method returns true if any of the activities within the process record are interesting
* to the user. See HistoryRecord.isInterestingToUserLocked()
@@ -188,9 +231,20 @@
}
public String toString() {
- return "ProcessRecord{"
- + Integer.toHexString(System.identityHashCode(this))
- + " " + pid + ":" + processName + "/" + info.uid + "}";
+ if (stringName != null) {
+ return stringName;
+ }
+ StringBuilder sb = new StringBuilder(128);
+ sb.append("ProcessRecord{");
+ sb.append(Integer.toHexString(System.identityHashCode(this)));
+ sb.append(' ');
+ sb.append(pid);
+ sb.append(':');
+ sb.append(processName);
+ sb.append('/');
+ sb.append(info.uid);
+ sb.append('}');
+ return stringName = sb.toString();
}
/*
diff --git a/services/java/com/android/server/am/ReceiverList.java b/services/java/com/android/server/am/ReceiverList.java
index 6ac527b..b8bf30c 100644
--- a/services/java/com/android/server/am/ReceiverList.java
+++ b/services/java/com/android/server/am/ReceiverList.java
@@ -39,6 +39,8 @@
BroadcastRecord curBroadcast = null;
boolean linkedToDeath = false;
+ String stringName;
+
ReceiverList(ActivityManagerService _owner, ProcessRecord _app,
int _pid, int _uid, IIntentReceiver _receiver) {
owner = _owner;
@@ -82,11 +84,21 @@
}
public String toString() {
- return "ReceiverList{"
- + Integer.toHexString(System.identityHashCode(this))
- + " " + pid + " " + (app != null ? app.processName : "(unknown name)")
- + "/" + uid + " client "
- + Integer.toHexString(System.identityHashCode(receiver.asBinder()))
- + "}";
+ if (stringName != null) {
+ return stringName;
+ }
+ StringBuilder sb = new StringBuilder(128);
+ sb.append("ReceiverList{");
+ sb.append(Integer.toHexString(System.identityHashCode(this)));
+ sb.append(' ');
+ sb.append(pid);
+ sb.append(' ');
+ sb.append((app != null ? app.processName : "(unknown name)"));
+ sb.append('/');
+ sb.append(uid);
+ sb.append(" client ");
+ sb.append(Integer.toHexString(System.identityHashCode(receiver.asBinder())));
+ sb.append('}');
+ return stringName = sb.toString();
}
}
diff --git a/services/java/com/android/server/am/ServiceRecord.java b/services/java/com/android/server/am/ServiceRecord.java
index 4b90600..a8fc761 100644
--- a/services/java/com/android/server/am/ServiceRecord.java
+++ b/services/java/com/android/server/am/ServiceRecord.java
@@ -77,6 +77,8 @@
long restartTime; // time of last restart.
long nextRestartTime; // time when restartDelay will expire.
+ String stringName; // caching of toString
+
void dump(PrintWriter pw, String prefix) {
pw.println(prefix + this);
pw.println(prefix + "intent=" + intent.getIntent());
@@ -159,8 +161,15 @@
}
public String toString() {
- return "ServiceRecord{"
- + Integer.toHexString(System.identityHashCode(this))
- + " " + shortName + "}";
+ if (stringName != null) {
+ return stringName;
+ }
+ StringBuilder sb = new StringBuilder(128);
+ sb.append("ServiceRecord{");
+ sb.append(Integer.toHexString(System.identityHashCode(this)));
+ sb.append(' ');
+ sb.append(shortName);
+ sb.append('}');
+ return stringName = sb.toString();
}
}
diff --git a/services/java/com/android/server/am/UsageStatsService.java b/services/java/com/android/server/am/UsageStatsService.java
index 3922f39..b6f9158 100755
--- a/services/java/com/android/server/am/UsageStatsService.java
+++ b/services/java/com/android/server/am/UsageStatsService.java
@@ -37,11 +37,11 @@
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
-import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.TimeZone;
/**
* This service collects the statistics associated with usage
@@ -53,6 +53,23 @@
public static final String SERVICE_NAME = "usagestats";
private static final boolean localLOGV = false;
private static final String TAG = "UsageStats";
+
+ // Current on-disk Parcel version
+ private static final int VERSION = 1004;
+
+ private static final int CHECKIN_VERSION = 3;
+
+ private static final String FILE_PREFIX = "usage-";
+
+ private static final int FILE_WRITE_INTERVAL = 30*60*1000; //ms
+
+ private static final int MAX_NUM_FILES = 5;
+
+ private static final int NUM_LAUNCH_TIME_BINS = 10;
+ private static final int[] LAUNCH_TIME_BINS = {
+ 250, 500, 750, 1000, 1500, 2000, 3000, 4000, 5000
+ };
+
static IUsageStats sService;
private Context mContext;
// structure used to maintain statistics since the last checkin.
@@ -66,16 +83,48 @@
// Order of locks is mFileLock followed by mStatsLock to avoid deadlocks
private String mResumedPkg;
private File mFile;
+ private String mFileLeaf;
//private File mBackupFile;
- private long mLastWriteRealTime;
- private int _FILE_WRITE_INTERVAL = 30*60*1000; //ms
- private static final String _PREFIX_DELIMIT=".";
- private String mFilePrefix;
+ private long mLastWriteElapsedTime;
+ private File mDir;
private Calendar mCal;
- private static final int _MAX_NUM_FILES = 10;
- private long mLastTime;
+ private int mLastWriteDay;
+
+ static class TimeStats {
+ int[] times = new int[NUM_LAUNCH_TIME_BINS];
+
+ TimeStats() {
+ }
+
+ void add(int val) {
+ final int[] bins = LAUNCH_TIME_BINS;
+ for (int i=0; i<NUM_LAUNCH_TIME_BINS-1; i++) {
+ if (val < bins[i]) {
+ times[i]++;
+ return;
+ }
+ }
+ times[NUM_LAUNCH_TIME_BINS-1]++;
+ }
+
+ TimeStats(Parcel in) {
+ final int[] localTimes = times;
+ for (int i=0; i<NUM_LAUNCH_TIME_BINS; i++) {
+ localTimes[i] = in.readInt();
+ }
+ }
+
+ void writeToParcel(Parcel out) {
+ final int[] localTimes = times;
+ for (int i=0; i<NUM_LAUNCH_TIME_BINS; i++) {
+ out.writeInt(localTimes[i]);
+ }
+ }
+ }
private class PkgUsageStatsExtended {
+ final HashMap<String, TimeStats> mLaunchTimes
+ = new HashMap<String, TimeStats>();
int mLaunchCount;
long mUsageTime;
long mPausedTime;
@@ -85,44 +134,106 @@
mLaunchCount = 0;
mUsageTime = 0;
}
+
+ PkgUsageStatsExtended(Parcel in) {
+ mLaunchCount = in.readInt();
+ mUsageTime = in.readLong();
+ if (localLOGV) Log.v(TAG, "Launch count: " + mLaunchCount
+ + ", Usage time:" + mUsageTime);
+
+ final int N = in.readInt();
+ if (localLOGV) Log.v(TAG, "Reading comps: " + N);
+ for (int i=0; i<N; i++) {
+ String comp = in.readString();
+ if (localLOGV) Log.v(TAG, "Component: " + comp);
+ TimeStats times = new TimeStats(in);
+ mLaunchTimes.put(comp, times);
+ }
+ }
+
void updateResume() {
mLaunchCount ++;
mResumedTime = SystemClock.elapsedRealtime();
}
+
void updatePause() {
mPausedTime = SystemClock.elapsedRealtime();
mUsageTime += (mPausedTime - mResumedTime);
}
+
+ void addLaunchTime(String comp, int millis) {
+ TimeStats times = mLaunchTimes.get(comp);
+ if (times == null) {
+ times = new TimeStats();
+ mLaunchTimes.put(comp, times);
+ }
+ times.add(millis);
+ }
+
+ void writeToParcel(Parcel out) {
+ out.writeInt(mLaunchCount);
+ out.writeLong(mUsageTime);
+ final int N = mLaunchTimes.size();
+ out.writeInt(N);
+ if (N > 0) {
+ for (Map.Entry<String, TimeStats> ent : mLaunchTimes.entrySet()) {
+ out.writeString(ent.getKey());
+ TimeStats times = ent.getValue();
+ times.writeToParcel(out);
+ }
+ }
+ }
+
void clear() {
+ mLaunchTimes.clear();
mLaunchCount = 0;
mUsageTime = 0;
}
}
- UsageStatsService(String fileName) {
+ UsageStatsService(String dir) {
mStats = new HashMap<String, PkgUsageStatsExtended>();
mStatsLock = new Object();
mFileLock = new Object();
- mFilePrefix = fileName;
- mCal = Calendar.getInstance();
+ mDir = new File(dir);
+ mCal = Calendar.getInstance(TimeZone.getTimeZone("GMT+0"));
+
+ mDir.mkdir();
+
+ // Remove any old usage files from previous versions.
+ File parentDir = mDir.getParentFile();
+ String fList[] = parentDir.list();
+ if (fList != null) {
+ String prefix = mDir.getName() + ".";
+ int i = fList.length;
+ while (i > 0) {
+ i--;
+ if (fList[i].startsWith(prefix)) {
+ Log.i(TAG, "Deleting old usage file: " + fList[i]);
+ (new File(parentDir, fList[i])).delete();
+ }
+ }
+ }
+
// Update current stats which are binned by date
- String uFileName = getCurrentDateStr(mFilePrefix);
- mFile = new File(uFileName);
+ mFileLeaf = getCurrentDateStr(FILE_PREFIX);
+ mFile = new File(mDir, mFileLeaf);
readStatsFromFile();
- mLastWriteRealTime = SystemClock.elapsedRealtime();
- mLastTime = new Date().getTime();
+ mLastWriteElapsedTime = SystemClock.elapsedRealtime();
+ // mCal was set by getCurrentDateStr(), want to use that same time.
+ mLastWriteDay = mCal.get(Calendar.DAY_OF_YEAR);
}
/*
* Utility method to convert date into string.
*/
private String getCurrentDateStr(String prefix) {
- mCal.setTime(new Date());
+ mCal.setTimeInMillis(System.currentTimeMillis());
StringBuilder sb = new StringBuilder();
if (prefix != null) {
sb.append(prefix);
- sb.append(".");
}
+ sb.append(mCal.get(Calendar.YEAR));
int mm = mCal.get(Calendar.MONTH) - Calendar.JANUARY +1;
if (mm < 10) {
sb.append("0");
@@ -133,7 +244,6 @@
sb.append("0");
}
sb.append(dd);
- sb.append(mCal.get(Calendar.YEAR));
return sb.toString();
}
@@ -166,11 +276,20 @@
private void readStatsFLOCK(File file) throws IOException {
Parcel in = getParcelForFile(file);
- while (in.dataAvail() > 0) {
+ int vers = in.readInt();
+ if (vers != VERSION) {
+ Log.w(TAG, "Usage stats version changed; dropping");
+ return;
+ }
+ int N = in.readInt();
+ while (N > 0) {
+ N--;
String pkgName = in.readString();
- PkgUsageStatsExtended pus = new PkgUsageStatsExtended();
- pus.mLaunchCount = in.readInt();
- pus.mUsageTime = in.readLong();
+ if (pkgName == null) {
+ break;
+ }
+ if (localLOGV) Log.v(TAG, "Reading package #" + N + ": " + pkgName);
+ PkgUsageStatsExtended pus = new PkgUsageStatsExtended(in);
synchronized (mStatsLock) {
mStats.put(pkgName, pus);
}
@@ -178,27 +297,18 @@
}
private ArrayList<String> getUsageStatsFileListFLOCK() {
- File dir = getUsageFilesDir();
- if (dir == null) {
- Log.w(TAG, "Couldnt find writable directory for usage stats file");
- return null;
- }
// Check if there are too many files in the system and delete older files
- String fList[] = dir.list();
+ String fList[] = mDir.list();
if (fList == null) {
return null;
}
- File pre = new File(mFilePrefix);
- String filePrefix = pre.getName();
- // file name followed by dot
- int prefixLen = filePrefix.length()+1;
ArrayList<String> fileList = new ArrayList<String>();
for (String file : fList) {
- int index = file.indexOf(filePrefix);
- if (index == -1) {
+ if (!file.startsWith(FILE_PREFIX)) {
continue;
}
if (file.endsWith(".bak")) {
+ (new File(mDir, file)).delete();
continue;
}
fileList.add(file);
@@ -206,20 +316,7 @@
return fileList;
}
- private File getUsageFilesDir() {
- if (mFilePrefix == null) {
- return null;
- }
- File pre = new File(mFilePrefix);
- return new File(pre.getParent());
- }
-
private void checkFileLimitFLOCK() {
- File dir = getUsageFilesDir();
- if (dir == null) {
- Log.w(TAG, "Couldnt find writable directory for usage stats file");
- return;
- }
// Get all usage stats output files
ArrayList<String> fileList = getUsageStatsFileListFLOCK();
if (fileList == null) {
@@ -227,49 +324,54 @@
return;
}
int count = fileList.size();
- if (count <= _MAX_NUM_FILES) {
+ if (count <= MAX_NUM_FILES) {
return;
}
// Sort files
Collections.sort(fileList);
- count -= _MAX_NUM_FILES;
+ count -= MAX_NUM_FILES;
// Delete older files
for (int i = 0; i < count; i++) {
String fileName = fileList.get(i);
- File file = new File(dir, fileName);
- Log.i(TAG, "Deleting file : "+fileName);
+ File file = new File(mDir, fileName);
+ Log.i(TAG, "Deleting usage file : " + fileName);
file.delete();
}
}
- private void writeStatsToFile() {
+ private void writeStatsToFile(boolean force) {
synchronized (mFileLock) {
- long currTime = new Date().getTime();
- boolean dayChanged = ((currTime - mLastTime) >= (24*60*60*1000));
- long currRealTime = SystemClock.elapsedRealtime();
- if (((currRealTime-mLastWriteRealTime) < _FILE_WRITE_INTERVAL) &&
- (!dayChanged)) {
- // wait till the next update
- return;
+ mCal.setTimeInMillis(System.currentTimeMillis());
+ final int curDay = mCal.get(Calendar.DAY_OF_YEAR);
+ // Determine if the day changed... note that this will be wrong
+ // if the year has changed but we are in the same day of year...
+ // we can probably live with this.
+ final boolean dayChanged = curDay != mLastWriteDay;
+ long currElapsedTime = SystemClock.elapsedRealtime();
+ if (!force) {
+ if (((currElapsedTime-mLastWriteElapsedTime) < FILE_WRITE_INTERVAL) &&
+ (!dayChanged)) {
+ // wait till the next update
+ return;
+ }
}
// Get the most recent file
- String todayStr = getCurrentDateStr(mFilePrefix);
+ mFileLeaf = getCurrentDateStr(FILE_PREFIX);
// Copy current file to back up
File backupFile = new File(mFile.getPath() + ".bak");
mFile.renameTo(backupFile);
try {
- checkFileLimitFLOCK();
- mFile.createNewFile();
// Write mStats to file
writeStatsFLOCK();
- mLastWriteRealTime = currRealTime;
- mLastTime = currTime;
+ mLastWriteElapsedTime = currElapsedTime;
if (dayChanged) {
+ mLastWriteDay = curDay;
// clear stats
synchronized (mStats) {
mStats.clear();
}
- mFile = new File(todayStr);
+ mFile = new File(mDir, mFileLeaf);
+ checkFileLimitFLOCK();
}
// Delete the backup file
if (backupFile != null) {
@@ -278,6 +380,7 @@
} catch (IOException e) {
Log.w(TAG, "Failed writing stats to file:" + mFile);
if (backupFile != null) {
+ mFile.delete();
backupFile.renameTo(mFile);
}
}
@@ -286,22 +389,26 @@
private void writeStatsFLOCK() throws IOException {
FileOutputStream stream = new FileOutputStream(mFile);
- Parcel out = Parcel.obtain();
- writeStatsToParcelFLOCK(out);
- stream.write(out.marshall());
- out.recycle();
- stream.flush();
- stream.close();
+ try {
+ Parcel out = Parcel.obtain();
+ writeStatsToParcelFLOCK(out);
+ stream.write(out.marshall());
+ out.recycle();
+ stream.flush();
+ } finally {
+ stream.close();
+ }
}
private void writeStatsToParcelFLOCK(Parcel out) {
synchronized (mStatsLock) {
+ out.writeInt(VERSION);
Set<String> keys = mStats.keySet();
+ out.writeInt(keys.size());
for (String key : keys) {
PkgUsageStatsExtended pus = mStats.get(key);
out.writeString(key);
- out.writeInt(pus.mLaunchCount);
- out.writeLong(pus.mUsageTime);
+ pus.writeToParcel(out);
}
}
}
@@ -355,6 +462,10 @@
return;
}
if (localLOGV) Log.i(TAG, "paused component:"+pkgName);
+
+ // Persist current data to file if needed.
+ writeStatsToFile(false);
+
synchronized (mStatsLock) {
PkgUsageStatsExtended pus = mStats.get(pkgName);
if (pus == null) {
@@ -364,8 +475,25 @@
}
pus.updatePause();
}
- // Persist data to file
- writeStatsToFile();
+ }
+
+ public void noteLaunchTime(ComponentName componentName, int millis) {
+ enforceCallingPermission();
+ String pkgName;
+ if ((componentName == null) ||
+ ((pkgName = componentName.getPackageName()) == null)) {
+ return;
+ }
+
+ // Persist current data to file if needed.
+ writeStatsToFile(false);
+
+ synchronized (mStatsLock) {
+ PkgUsageStatsExtended pus = mStats.get(pkgName);
+ if (pus != null) {
+ pus.addLaunchTime(componentName.getClassName(), millis);
+ }
+ }
}
public void enforceCallingPermission() {
@@ -432,27 +560,25 @@
}
}
- private void collectDumpInfoFLOCK(PrintWriter pw, String[] args) {
+ private void collectDumpInfoFLOCK(PrintWriter pw, boolean isCompactOutput,
+ boolean deleteAfterPrint) {
List<String> fileList = getUsageStatsFileListFLOCK();
if (fileList == null) {
return;
}
- final boolean isCheckinRequest = scanArgs(args, "-c");
Collections.sort(fileList);
- File usageFile = new File(mFilePrefix);
- String dirName = usageFile.getParent();
- File dir = new File(dirName);
- String filePrefix = usageFile.getName();
- // file name followed by dot
- int prefixLen = filePrefix.length()+1;
- String todayStr = getCurrentDateStr(null);
for (String file : fileList) {
- File dFile = new File(dir, file);
- String dateStr = file.substring(prefixLen);
+ if (deleteAfterPrint && file.equalsIgnoreCase(mFileLeaf)) {
+ // In this mode we don't print the current day's stats, since
+ // they are incomplete.
+ continue;
+ }
+ File dFile = new File(mDir, file);
+ String dateStr = file.substring(FILE_PREFIX.length());
try {
Parcel in = getParcelForFile(dFile);
- collectDumpInfoFromParcelFLOCK(in, pw, dateStr, isCheckinRequest);
- if (isCheckinRequest && !todayStr.equalsIgnoreCase(dateStr)) {
+ collectDumpInfoFromParcelFLOCK(in, pw, dateStr, isCompactOutput);
+ if (deleteAfterPrint) {
// Delete old file after collecting info only for checkin requests
dFile.delete();
}
@@ -466,40 +592,101 @@
}
private void collectDumpInfoFromParcelFLOCK(Parcel in, PrintWriter pw,
- String date, boolean isCheckinRequest) {
- StringBuilder sb = new StringBuilder();
- sb.append("Date:");
- sb.append(date);
- boolean first = true;
- while (in.dataAvail() > 0) {
- String pkgName = in.readString();
- int launchCount = in.readInt();
- long usageTime = in.readLong();
- if (isCheckinRequest) {
- if (!first) {
- sb.append(",");
- }
- sb.append(pkgName);
- sb.append(",");
- sb.append(launchCount);
- sb.append(",");
- sb.append(usageTime);
- sb.append("ms");
- } else {
- if (first) {
- sb.append("\n");
- }
- sb.append("pkg=");
- sb.append(pkgName);
- sb.append(", launchCount=");
- sb.append(launchCount);
- sb.append(", usageTime=");
- sb.append(usageTime);
- sb.append(" ms\n");
- }
- first = false;
+ String date, boolean isCompactOutput) {
+ StringBuilder sb = new StringBuilder(512);
+ if (isCompactOutput) {
+ sb.append("D:");
+ sb.append(CHECKIN_VERSION);
+ sb.append(',');
+ } else {
+ sb.append("Date: ");
}
- pw.write(sb.toString());
+
+ sb.append(date);
+
+ int vers = in.readInt();
+ if (vers != VERSION) {
+ sb.append(" (old data version)");
+ pw.println(sb.toString());
+ return;
+ }
+
+ pw.println(sb.toString());
+ int N = in.readInt();
+
+ while (N > 0) {
+ N--;
+ String pkgName = in.readString();
+ if (pkgName == null) {
+ break;
+ }
+ sb.setLength(0);
+ PkgUsageStatsExtended pus = new PkgUsageStatsExtended(in);
+ if (isCompactOutput) {
+ sb.append("P:");
+ sb.append(pkgName);
+ sb.append(",");
+ sb.append(pus.mLaunchCount);
+ sb.append(",");
+ sb.append(pus.mUsageTime);
+ sb.append('\n');
+ final int NC = pus.mLaunchTimes.size();
+ if (NC > 0) {
+ for (Map.Entry<String, TimeStats> ent : pus.mLaunchTimes.entrySet()) {
+ sb.append("A:");
+ sb.append(ent.getKey());
+ TimeStats times = ent.getValue();
+ for (int i=0; i<NUM_LAUNCH_TIME_BINS; i++) {
+ sb.append(",");
+ sb.append(times.times[i]);
+ }
+ sb.append('\n');
+ }
+ }
+
+ } else {
+ sb.append(" ");
+ sb.append(pkgName);
+ sb.append(": ");
+ sb.append(pus.mLaunchCount);
+ sb.append(" times, ");
+ sb.append(pus.mUsageTime);
+ sb.append(" ms");
+ sb.append('\n');
+ final int NC = pus.mLaunchTimes.size();
+ if (NC > 0) {
+ for (Map.Entry<String, TimeStats> ent : pus.mLaunchTimes.entrySet()) {
+ sb.append(" ");
+ sb.append(ent.getKey());
+ TimeStats times = ent.getValue();
+ int lastBin = 0;
+ boolean first = true;
+ for (int i=0; i<NUM_LAUNCH_TIME_BINS-1; i++) {
+ if (times.times[i] != 0) {
+ sb.append(first ? ": " : ", ");
+ sb.append(lastBin);
+ sb.append('-');
+ sb.append(LAUNCH_TIME_BINS[i]);
+ sb.append('=');
+ sb.append(times.times[i]);
+ first = false;
+ }
+ lastBin = LAUNCH_TIME_BINS[i];
+ }
+ if (times.times[NUM_LAUNCH_TIME_BINS-1] != 0) {
+ sb.append(first ? ": " : ", ");
+ sb.append(">=");
+ sb.append(lastBin);
+ sb.append('=');
+ sb.append(times.times[NUM_LAUNCH_TIME_BINS-1]);
+ }
+ sb.append('\n');
+ }
+ }
+ }
+
+ pw.write(sb.toString());
+ }
}
/**
@@ -524,8 +711,19 @@
* The data persisted to file is parsed and the stats are computed.
*/
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+ final boolean isCheckinRequest = scanArgs(args, "--checkin");
+ final boolean isCompactOutput = isCheckinRequest || scanArgs(args, "-c");
+ final boolean deleteAfterPrint = isCheckinRequest || scanArgs(args, "-d");
+
+ // Make sure the current stats are written to the file. This
+ // doesn't need to be done if we are deleting files after printing,
+ // since it that case we won't print the current stats.
+ if (!deleteAfterPrint) {
+ writeStatsToFile(true);
+ }
+
synchronized (mFileLock) {
- collectDumpInfoFLOCK(pw, args);
+ collectDumpInfoFLOCK(pw, isCompactOutput, deleteAfterPrint);
}
}
diff --git a/telephony/java/com/android/internal/telephony/Phone.java b/telephony/java/com/android/internal/telephony/Phone.java
index ed90d32..3f210ca 100644
--- a/telephony/java/com/android/internal/telephony/Phone.java
+++ b/telephony/java/com/android/internal/telephony/Phone.java
@@ -113,9 +113,12 @@
static final String APN_TYPE_DEFAULT = "default";
/** APN type for MMS traffic */
static final String APN_TYPE_MMS = "mms";
+ /** APN type for SUPL assisted GPS */
+ static final String APN_TYPE_SUPL = "supl";
// "Features" accessible through the connectivity manager
static final String FEATURE_ENABLE_MMS = "enableMMS";
+ static final String FEATURE_ENABLE_SUPL = "enableSUPL";
/**
* Return codes for <code>enableApnType()</code>
@@ -170,7 +173,7 @@
int NT_MODE_EVDO_NO_CDMA = 6; /* EvDo only */
int NT_MODE_GLOBAL = 7; /* GSM/WCDMA, CDMA, and EvDo (auto mode, according to PRL)
AVAILABLE Application Settings menu*/
- int PREFERRED_NT_MODE = NT_MODE_GLOBAL;
+ int PREFERRED_NT_MODE = NT_MODE_GSM_ONLY;
// Used for CDMA roaming mode
diff --git a/telephony/java/com/android/internal/telephony/PhoneFactory.java b/telephony/java/com/android/internal/telephony/PhoneFactory.java
index 3db0499..86e2f04 100644
--- a/telephony/java/com/android/internal/telephony/PhoneFactory.java
+++ b/telephony/java/com/android/internal/telephony/PhoneFactory.java
@@ -108,26 +108,23 @@
sCommandsInterface = new RIL(context, networkMode, cdmaSubscription);
switch(networkMode) {
+ case RILConstants.NETWORK_MODE_CDMA:
+ case RILConstants.NETWORK_MODE_CDMA_NO_EVDO:
+ case RILConstants.NETWORK_MODE_EVDO_NO_CDMA:
+ case RILConstants.NETWORK_MODE_GLOBAL:
+ sProxyPhone = new PhoneProxy(new CDMAPhone(context,
+ sCommandsInterface, sPhoneNotifier));
+ Log.i(LOG_TAG, "Creating CDMAPhone");
+ break;
case RILConstants.NETWORK_MODE_WCDMA_PREF:
case RILConstants.NETWORK_MODE_GSM_ONLY:
case RILConstants.NETWORK_MODE_WCDMA_ONLY:
case RILConstants.NETWORK_MODE_GSM_UMTS:
+ default:
sProxyPhone = new PhoneProxy(new GSMPhone(context,
sCommandsInterface, sPhoneNotifier));
Log.i(LOG_TAG, "Creating GSMPhone");
break;
- case RILConstants.NETWORK_MODE_CDMA:
- case RILConstants.NETWORK_MODE_CDMA_NO_EVDO:
- case RILConstants.NETWORK_MODE_EVDO_NO_CDMA:
- sProxyPhone = new PhoneProxy(new CDMAPhone(context,
- sCommandsInterface, sPhoneNotifier));
- Log.i(LOG_TAG, "Creating CDMAPhone");
- break;
- case RILConstants.NETWORK_MODE_GLOBAL:
- default:
- sProxyPhone = new PhoneProxy(new CDMAPhone(context,
- sCommandsInterface, sPhoneNotifier));
- Log.i(LOG_TAG, "Creating CDMAPhone");
}
sMadeDefaults = true;
}
@@ -160,5 +157,3 @@
}
}
}
-
-
diff --git a/telephony/java/com/android/internal/telephony/RIL.java b/telephony/java/com/android/internal/telephony/RIL.java
index f5d3b32..636a223 100644
--- a/telephony/java/com/android/internal/telephony/RIL.java
+++ b/telephony/java/com/android/internal/telephony/RIL.java
@@ -565,22 +565,18 @@
mNetworkMode = networkMode;
//At startup mPhoneType is first set from networkMode
switch(networkMode) {
+ case RILConstants.NETWORK_MODE_CDMA:
+ case RILConstants.NETWORK_MODE_CDMA_NO_EVDO:
+ case RILConstants.NETWORK_MODE_EVDO_NO_CDMA:
+ case RILConstants.NETWORK_MODE_GLOBAL:
+ mPhoneType = RILConstants.CDMA_PHONE;
+ break;
case RILConstants.NETWORK_MODE_WCDMA_PREF:
case RILConstants.NETWORK_MODE_GSM_ONLY:
case RILConstants.NETWORK_MODE_WCDMA_ONLY:
case RILConstants.NETWORK_MODE_GSM_UMTS:
- mPhoneType = RILConstants.GSM_PHONE;
- break;
- case RILConstants.NETWORK_MODE_CDMA:
- case RILConstants.NETWORK_MODE_CDMA_NO_EVDO:
- case RILConstants.NETWORK_MODE_EVDO_NO_CDMA:
- mPhoneType = RILConstants.CDMA_PHONE;
- break;
- case RILConstants.NETWORK_MODE_GLOBAL:
- mPhoneType = RILConstants.CDMA_PHONE;
- break;
default:
- mPhoneType = RILConstants.CDMA_PHONE;
+ mPhoneType = RILConstants.GSM_PHONE;
}
PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
diff --git a/telephony/java/com/android/internal/telephony/RILConstants.java b/telephony/java/com/android/internal/telephony/RILConstants.java
index 028aad7..9c63627 100644
--- a/telephony/java/com/android/internal/telephony/RILConstants.java
+++ b/telephony/java/com/android/internal/telephony/RILConstants.java
@@ -51,7 +51,7 @@
int NETWORK_MODE_EVDO_NO_CDMA = 6; /* EvDo only */
int NETWORK_MODE_GLOBAL = 7; /* GSM/WCDMA, CDMA, and EvDo (auto mode, according to PRL)
AVAILABLE Application Settings menu*/
- int PREFERRED_NETWORK_MODE = NETWORK_MODE_GLOBAL;
+ int PREFERRED_NETWORK_MODE = NETWORK_MODE_GSM_ONLY;
/* CDMA subscription source. See ril.h RIL_REQUEST_CDMA_SET_SUBSCRIPTION */
int SUBSCRIPTION_FROM_RUIM = 0; /* CDMA subscription from RUIM when available */
diff --git a/telephony/java/com/android/internal/telephony/ServiceStateTracker.java b/telephony/java/com/android/internal/telephony/ServiceStateTracker.java
index a4bf0dd..28a9968 100644
--- a/telephony/java/com/android/internal/telephony/ServiceStateTracker.java
+++ b/telephony/java/com/android/internal/telephony/ServiceStateTracker.java
@@ -114,7 +114,6 @@
// Event Log Tags
protected static final int EVENT_LOG_CGREG_FAIL = 50107;
- protected static final int EVENT_DATA_STATE_RADIO_OFF = 50108;
//***** Time Zones
protected static final String TIMEZONE_PROPERTY = "persist.sys.timezone";
@@ -241,4 +240,3 @@
pollingContext = new int[1];
}
}
-
diff --git a/telephony/java/com/android/internal/telephony/SmsMessageBase.java b/telephony/java/com/android/internal/telephony/SmsMessageBase.java
index 7c32451..1aad38d 100644
--- a/telephony/java/com/android/internal/telephony/SmsMessageBase.java
+++ b/telephony/java/com/android/internal/telephony/SmsMessageBase.java
@@ -20,20 +20,7 @@
import com.android.internal.telephony.SmsHeader;
import java.util.Arrays;
-import static android.telephony.SmsMessage.ENCODING_7BIT;
-import static android.telephony.SmsMessage.ENCODING_16BIT;
-import static android.telephony.SmsMessage.MAX_USER_DATA_BYTES;
-import static android.telephony.SmsMessage.MAX_USER_DATA_BYTES_WITH_HEADER;
-import static android.telephony.SmsMessage.MAX_USER_DATA_SEPTETS;
-import static android.telephony.SmsMessage.MAX_USER_DATA_SEPTETS_WITH_HEADER;
import static android.telephony.SmsMessage.MessageClass;
-import static com.android.internal.telephony.SmsAddress.TON_ABBREVIATED;
-import static com.android.internal.telephony.SmsAddress.TON_ALPHANUMERIC;
-import static com.android.internal.telephony.SmsAddress.TON_INTERNATIONAL;
-import static com.android.internal.telephony.SmsAddress.TON_NATIONAL;
-import static com.android.internal.telephony.SmsAddress.TON_NETWORK;
-import static com.android.internal.telephony.SmsAddress.TON_SUBSCRIBER;
-import static com.android.internal.telephony.SmsAddress.TON_UNKNOWN;
/**
* Base class declaring the specific methods and members for SmsMessage.
@@ -385,4 +372,3 @@
}
}
-
diff --git a/telephony/java/com/android/internal/telephony/TelephonyEventLog.java b/telephony/java/com/android/internal/telephony/TelephonyEventLog.java
index 1ef3c6c..97f9d7d 100644
--- a/telephony/java/com/android/internal/telephony/TelephonyEventLog.java
+++ b/telephony/java/com/android/internal/telephony/TelephonyEventLog.java
@@ -28,6 +28,6 @@
public static final int EVENT_LOG_RADIO_PDP_SETUP_FAIL = 50105;
public static final int EVENT_LOG_CALL_DROP = 50106;
public static final int EVENT_LOG_CGREG_FAIL = 50107;
- public static final int EVENT_DATA_STATE_RADIO_OFF = 50108;
+ public static final int EVENT_LOG_DATA_STATE_RADIO_OFF = 50108;
public static final int EVENT_LOG_PDP_NETWORK_DROP = 50109;
}
diff --git a/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java b/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java
old mode 100644
new mode 100755
index c139619..8ffb7ec
--- a/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java
@@ -475,6 +475,11 @@
// we report data connected
ret = DataState.CONNECTED;
+ } else if (mSST == null) {
+ // Radio Technology Change is ongoning, dispose() and removeReferences() have
+ // already been called
+
+ ret = DataState.DISCONNECTED;
} else if (mSST.getCurrentCdmaDataConnectionState()
== ServiceState.RADIO_TECHNOLOGY_UNKNOWN) {
// If we're out of service, open TCP sockets may still work
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
index ed617ef..e0a84ab 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
@@ -228,6 +228,9 @@
Log.d(LOG_TAG, "Request to enableApnType("+type+")");
if (TextUtils.equals(type, Phone.APN_TYPE_MMS)) {
return Phone.APN_ALREADY_ACTIVE;
+ } else if (TextUtils.equals(type, Phone.APN_TYPE_SUPL)) {
+ Log.w(LOG_TAG, "Phone.APN_TYPE_SUPL not enabled for CDMA");
+ return Phone.APN_REQUEST_FAILED;
} else {
return Phone.APN_REQUEST_FAILED;
}
@@ -822,7 +825,6 @@
private void destroyAllDataConnectionList() {
if(dataConnectionList != null) {
- CdmaDataConnection pdp;
dataConnectionList.removeAll(dataConnectionList);
}
}
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
index ca40e76..6f344b9 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
@@ -388,7 +388,7 @@
EventLog.List val = new EventLog.List(
dcTracker.getStateInString(),
(dcTracker.getAnyDataEnabled() ? 1 : 0) );
- EventLog.writeEvent(TelephonyEventLog.EVENT_DATA_STATE_RADIO_OFF, val);
+ EventLog.writeEvent(TelephonyEventLog.EVENT_LOG_DATA_STATE_RADIO_OFF, val);
}
dcTracker.cleanConnectionBeforeRadioOff();
diff --git a/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java b/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java
index e4b474a..2f26bdc 100644
--- a/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java
+++ b/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java
@@ -27,7 +27,6 @@
import com.android.internal.telephony.SmsMessageBase;
import com.android.internal.telephony.cdma.sms.BearerData;
import com.android.internal.telephony.cdma.sms.CdmaSmsAddress;
-import com.android.internal.telephony.cdma.sms.SmsDataCoding;
import com.android.internal.telephony.cdma.sms.SmsEnvelope;
import com.android.internal.telephony.cdma.sms.UserData;
@@ -50,23 +49,6 @@
import static android.telephony.SmsMessage.MAX_USER_DATA_SEPTETS;
import static android.telephony.SmsMessage.MAX_USER_DATA_SEPTETS_WITH_HEADER;
import static android.telephony.SmsMessage.MessageClass;
-import static com.android.internal.telephony.cdma.sms.BearerData.ERROR_NONE;
-import static com.android.internal.telephony.cdma.sms.BearerData.ERROR_TEMPORARY;
-import static com.android.internal.telephony.cdma.sms.BearerData.ERROR_PERMANENT;
-import static com.android.internal.telephony.cdma.sms.BearerData.MESSAGE_TYPE_DELIVER;
-import static com.android.internal.telephony.cdma.sms.BearerData.MESSAGE_TYPE_SUBMIT;
-import static com.android.internal.telephony.cdma.sms.BearerData.MESSAGE_TYPE_CANCELLATION;
-import static com.android.internal.telephony.cdma.sms.BearerData.MESSAGE_TYPE_DELIVERY_ACK;
-import static com.android.internal.telephony.cdma.sms.BearerData.MESSAGE_TYPE_USER_ACK;
-import static com.android.internal.telephony.cdma.sms.BearerData.MESSAGE_TYPE_READ_ACK;
-import static com.android.internal.telephony.cdma.sms.CdmaSmsAddress.SMS_ADDRESS_MAX;
-import static com.android.internal.telephony.cdma.sms.CdmaSmsAddress.SMS_SUBADDRESS_MAX;
-import static com.android.internal.telephony.cdma.sms.SmsEnvelope.SMS_BEARER_DATA_MAX;
-import static com.android.internal.telephony.cdma.sms.UserData.UD_ENCODING_7BIT_ASCII;
-import static com.android.internal.telephony.cdma.sms.UserData.UD_ENCODING_GSM_7BIT_ALPHABET;
-import static com.android.internal.telephony.cdma.sms.UserData.UD_ENCODING_IA5;
-import static com.android.internal.telephony.cdma.sms.UserData.UD_ENCODING_OCTET;
-import static com.android.internal.telephony.cdma.sms.UserData.UD_ENCODING_UNICODE_16;
/**
* A Short Message Service message.
@@ -186,7 +168,7 @@
// ignore subaddress
p.readInt(); //p_cur->sSubAddress.subaddressType
- p.readByte(); //p_cur->sSubAddress.odd
+ p.readInt(); //p_cur->sSubAddress.odd
count = p.readByte(); //p_cur->sSubAddress.number_of_digits
//p_cur->sSubAddress.digits[digitCount] :
for (int index=0; index < count; index++) {
@@ -309,15 +291,15 @@
int septetCount = GsmAlphabet.countGsmSeptets(message, true);
// User Data (and length)
- uData.userData = message.getBytes();
+ uData.payload = message.getBytes();
- if (uData.userData.length > MAX_USER_DATA_SEPTETS) {
+ if (uData.payload.length > MAX_USER_DATA_SEPTETS) {
// Message too long
return null;
}
// desired TP-Data-Coding-Scheme
- uData.userDataEncoding = UserData.UD_ENCODING_GSM_7BIT_ALPHABET;
+ uData.msgEncoding = UserData.ENCODING_GSM_7BIT_ALPHABET;
// paddingBits not needed for UD_ENCODING_GSM_7BIT_ALPHABET
@@ -341,15 +323,15 @@
return null;
}
- uData.userData = textPart;
+ uData.payload = textPart;
- if (uData.userData.length > MAX_USER_DATA_BYTES) {
+ if (uData.payload.length > MAX_USER_DATA_BYTES) {
// Message too long
return null;
}
// TP-Data-Coding-Scheme
- uData.userDataEncoding = UserData.UD_ENCODING_UNICODE_16;
+ uData.msgEncoding = UserData.ENCODING_UNICODE_16;
// sms header
if(headerData != null) {
@@ -425,8 +407,8 @@
// TP-Data-Coding-Scheme
// No class, 8 bit data
- uData.userDataEncoding = UserData.UD_ENCODING_OCTET;
- uData.userData = data;
+ uData.msgEncoding = UserData.ENCODING_OCTET;
+ uData.payload = data;
byte[] msgData = sms.getEnvelope(destinationAddress, statusReportRequested, uData,
true, true);
@@ -619,21 +601,21 @@
* Parses a SMS message from its BearerData stream. (mobile-terminated only)
*/
protected void parseSms() {
- mBearerData = SmsDataCoding.decodeCdmaSms(mEnvelope.bearerData);
- messageRef = mBearerData.messageID;
+ mBearerData = BearerData.decode(mEnvelope.bearerData);
+ messageRef = mBearerData.messageId;
// TP-Message-Type-Indicator
// (See 3GPP2 C.S0015-B, v2, 4.5.1)
int messageType = mBearerData.messageType;
switch (messageType) {
- case MESSAGE_TYPE_USER_ACK:
- case MESSAGE_TYPE_READ_ACK:
- case MESSAGE_TYPE_DELIVER:
+ case BearerData.MESSAGE_TYPE_USER_ACK:
+ case BearerData.MESSAGE_TYPE_READ_ACK:
+ case BearerData.MESSAGE_TYPE_DELIVER:
// Deliver (mobile-terminated only)
parseSmsDeliver();
break;
- case MESSAGE_TYPE_DELIVERY_ACK:
+ case BearerData.MESSAGE_TYPE_DELIVERY_ACK:
parseSmsDeliveryAck();
break;
@@ -699,22 +681,22 @@
return;
}
- encodingType = uData.userDataEncoding;
+ encodingType = uData.msgEncoding;
// insert DCS-decoding here when type is supported by ril-library
- userData = uData.userData;
+ userData = uData.payload;
userDataHeader = uData.userDataHeader;
switch (encodingType) {
- case UD_ENCODING_GSM_7BIT_ALPHABET:
- case UD_ENCODING_UNICODE_16:
+ case UserData.ENCODING_GSM_7BIT_ALPHABET:
+ case UserData.ENCODING_UNICODE_16:
// user data was already decoded by wmsts-library
messageBody = new String(userData);
break;
// data and unsupported encodings:
- case UD_ENCODING_OCTET:
+ case UserData.ENCODING_OCTET:
default:
messageBody = null;
break;
@@ -771,7 +753,7 @@
if (useNewId) {
setNextMessageId();
}
- mBearerData.messageID = nextMessageId;
+ mBearerData.messageId = nextMessageId;
// Set the reply options (See C.S0015-B, v2.0, 4.5.11)
if(statusReportRequested) {
@@ -795,7 +777,7 @@
// ** encode BearerData **
byte[] encodedBearerData = null;
try {
- encodedBearerData = SmsDataCoding.encodeCdmaSms(mBearerData);
+ encodedBearerData = BearerData.encode(mBearerData);
} catch (Exception e) {
Log.e(LOG_TAG, "doGetSubmitPdu: EncodeCdmaSMS function in JNI interface failed: "
+ e.getMessage());
diff --git a/telephony/java/com/android/internal/telephony/cdma/sms/BearerData.java b/telephony/java/com/android/internal/telephony/cdma/sms/BearerData.java
index fec9529..8e67387 100644
--- a/telephony/java/com/android/internal/telephony/cdma/sms/BearerData.java
+++ b/telephony/java/com/android/internal/telephony/cdma/sms/BearerData.java
@@ -16,7 +16,52 @@
package com.android.internal.telephony.cdma.sms;
+import android.util.Log;
+
+import com.android.internal.telephony.GsmAlphabet;
+import com.android.internal.telephony.SmsHeader;
+import com.android.internal.telephony.cdma.sms.UserData;
+
+import com.android.internal.util.HexDump;
+import com.android.internal.util.BitwiseInputStream;
+import com.android.internal.util.BitwiseOutputStream;
+
+/**
+ * XXX
+ *
+ *
+ */
public final class BearerData{
+ private final static String LOG_TAG = "SMS";
+
+ /**
+ * Bearer Data Subparameter Indentifiers
+ * (See 3GPP2 C.S0015-B, v2.0, table 4.5-1)
+ */
+ private final static byte SUBPARAM_MESSAGE_IDENTIFIER = 0x00;
+ private final static byte SUBPARAM_USER_DATA = 0x01;
+ private final static byte SUBPARAM_USER_REPONSE_CODE = 0x02;
+ private final static byte SUBPARAM_MESSAGE_CENTER_TIME_STAMP = 0x03;
+ //private final static byte SUBPARAM_VALIDITY_PERIOD_ABSOLUTE = 0x04;
+ //private final static byte SUBPARAM_VALIDITY_PERIOD_RELATIVE = 0x05;
+ //private final static byte SUBPARAM_DEFERRED_DELIVERY_TIME_ABSOLUTE = 0x06;
+ //private final static byte SUBPARAM_DEFERRED_DELIVERY_TIME_RELATIVE = 0x07;
+ //private final static byte SUBPARAM_PRIORITY_INDICATOR = 0x08;
+ //private final static byte SUBPARAM_PRIVACY_INDICATOR = 0x09;
+ private final static byte SUBPARAM_REPLY_OPTION = 0x0A;
+ private final static byte SUBPARAM_NUMBER_OF_MESSAGES = 0x0B;
+ //private final static byte SUBPARAM_ALERT_ON_MESSAGE_DELIVERY = 0x0C;
+ //private final static byte SUBPARAM_LANGUAGE_INDICATOR = 0x0D;
+ private final static byte SUBPARAM_CALLBACK_NUMBER = 0x0E;
+ //private final static byte SUBPARAM_MESSAGE_DISPLAY_MODE = 0x0F;
+ //private final static byte SUBPARAM_MULTIPLE_ENCODING_USER_DATA = 0x10;
+ //private final static byte SUBPARAM_MESSAGE_DEPOSIT_INDEX = 0x11;
+ //private final static byte SUBPARAM_SERVICE_CATEGORY_PROGRAM_DATA = 0x12;
+ //private final static byte SUBPARAM_SERVICE_CATEGORY_PROGRAM_RESULTS = 0x13;
+ private final static byte SUBPARAM_MESSAGE_STATUS = 0x14;
+ //private final static byte SUBPARAM_TP_FAILURE_CAUSE = 0x15;
+ //private final static byte SUBPARAM_ENHANCED_VMN = 0x16;
+ //private final static byte SUBPARAM_ENHANCED_VMN_ACK = 0x17;
// For completeness the following fields are listed, though not used yet.
/**
@@ -94,9 +139,6 @@
public static final int ERROR_UNDEFINED = 0xFF;
public static final int STATUS_UNDEFINED = 0xFF;
- /** Bit-mask indicating used fields for SmsDataCoding */
- public int mask;
-
/**
* 4-bit value indicating the message type in accordance to
* table 4.5.1-1
@@ -109,7 +151,7 @@
* (Special rules apply for WAP-messages.)
* (See 3GPP2 C.S0015-B, v2, 4.5.1)
*/
- public int messageID;
+ public int messageId;
/**
* 1-bit value that indicates whether a User Data Header is present.
@@ -188,5 +230,440 @@
*/
public int messageStatus = STATUS_UNDEFINED;
-}
+ private static class CodingException extends Exception {
+ public CodingException(String s) {
+ super(s);
+ }
+ }
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ builder.append("BearerData:\n");
+ builder.append(" messageType: " + messageType + "\n");
+ builder.append(" messageId: " + (int)messageId + "\n");
+ builder.append(" hasUserDataHeader: " + hasUserDataHeader + "\n");
+ builder.append(" timeStamp: " + timeStamp + "\n");
+ builder.append(" userAckReq: " + userAckReq + "\n");
+ builder.append(" deliveryAckReq: " + deliveryAckReq + "\n");
+ builder.append(" readAckReq: " + readAckReq + "\n");
+ builder.append(" reportReq: " + reportReq + "\n");
+ builder.append(" numberOfMessages: " + numberOfMessages + "\n");
+ builder.append(" callbackNumber: " + callbackNumber + "\n");
+ builder.append(" displayMode: " + displayMode + "\n");
+ builder.append(" errorClass: " + errorClass + "\n");
+ builder.append(" messageStatus: " + messageStatus + "\n");
+ builder.append(" userData: " + userData + "\n");
+ return builder.toString();
+ }
+
+ private static void encodeMessageId(BearerData bData, BitwiseOutputStream outStream)
+ throws BitwiseOutputStream.AccessException
+ {
+ outStream.write(8, 3);
+ outStream.write(4, bData.messageType);
+ outStream.write(8, bData.messageId >> 8);
+ outStream.write(8, bData.messageId);
+ outStream.write(1, bData.hasUserDataHeader ? 1 : 0);
+ outStream.skip(3);
+ }
+
+ private static void encodeUserData(BearerData bData, BitwiseOutputStream outStream)
+ throws BitwiseOutputStream.AccessException
+ {
+ int dataBits = (bData.userData.payload.length * 8) - bData.userData.paddingBits;
+ byte[] headerData = null;
+ if (bData.hasUserDataHeader) {
+ headerData = bData.userData.userDataHeader.toByteArray();
+ dataBits += headerData.length * 8;
+ }
+ int paramBits = dataBits + 13;
+ if ((bData.userData.msgEncoding == UserData.ENCODING_IS91_EXTENDED_PROTOCOL) ||
+ (bData.userData.msgEncoding == UserData.ENCODING_GSM_DCS)) {
+ paramBits += 8;
+ }
+ int paramBytes = (paramBits / 8) + ((paramBits % 8) > 0 ? 1 : 0);
+ int paddingBits = (paramBytes * 8) - paramBits;
+ outStream.write(8, paramBytes);
+ outStream.write(5, bData.userData.msgEncoding);
+ if ((bData.userData.msgEncoding == UserData.ENCODING_IS91_EXTENDED_PROTOCOL) ||
+ (bData.userData.msgEncoding == UserData.ENCODING_GSM_DCS)) {
+ outStream.write(8, bData.userData.msgType);
+ }
+ outStream.write(8, bData.userData.numFields);
+ if (headerData != null) outStream.writeByteArray(headerData.length * 8, headerData);
+ outStream.writeByteArray(dataBits, bData.userData.payload);
+ if (paddingBits > 0) outStream.write(paddingBits, 0);
+ }
+
+ private static void encodeReplyOption(BearerData bData, BitwiseOutputStream outStream)
+ throws BitwiseOutputStream.AccessException
+ {
+ outStream.write(8, 1);
+ outStream.write(1, bData.userAckReq ? 1 : 0);
+ outStream.write(1, bData.deliveryAckReq ? 1 : 0);
+ outStream.write(1, bData.readAckReq ? 1 : 0);
+ outStream.write(1, bData.reportReq ? 1 : 0);
+ outStream.write(4, 0);
+ }
+
+ private static byte[] encodeDtmfSmsAddress(String address) {
+ int digits = address.length();
+ int dataBits = digits * 4;
+ int dataBytes = (dataBits / 8);
+ dataBytes += (dataBits % 8) > 0 ? 1 : 0;
+ byte[] rawData = new byte[dataBytes];
+ for (int i = 0; i < digits; i++) {
+ char c = address.charAt(i);
+ int val = 0;
+ if ((c >= '1') && (c <= '9')) val = c - '0';
+ else if (c == '0') val = 10;
+ else if (c == '*') val = 11;
+ else if (c == '#') val = 12;
+ else return null;
+ rawData[i / 2] |= val << (4 - ((i % 2) * 4));
+ }
+ return rawData;
+ }
+
+ private static void encodeCdmaSmsAddress(CdmaSmsAddress addr) throws CodingException {
+ if (addr.digitMode == CdmaSmsAddress.DIGIT_MODE_8BIT_CHAR) {
+ try {
+ addr.origBytes = addr.address.getBytes("US-ASCII");
+ } catch (java.io.UnsupportedEncodingException ex) {
+ throw new CodingException("invalid SMS address, cannot convert to ASCII");
+ }
+ } else {
+ addr.origBytes = encodeDtmfSmsAddress(addr.address);
+ }
+ }
+
+ private static void encodeCallbackNumber(BearerData bData, BitwiseOutputStream outStream)
+ throws BitwiseOutputStream.AccessException, CodingException
+ {
+ CdmaSmsAddress addr = bData.callbackNumber;
+ encodeCdmaSmsAddress(addr);
+ int paramBits = 9;
+ int dataBits = 0;
+ if (addr.digitMode == CdmaSmsAddress.DIGIT_MODE_8BIT_CHAR) {
+ paramBits += 7;
+ dataBits = addr.numberOfDigits * 8;
+ } else {
+ dataBits = addr.numberOfDigits * 4;
+ }
+ paramBits += dataBits;
+ int paramBytes = (paramBits / 8) + ((paramBits % 8) > 0 ? 1 : 0);
+ int paddingBits = (paramBytes * 8) - paramBits;
+ outStream.write(8, paramBytes);
+ outStream.write(1, addr.digitMode);
+ if (addr.digitMode == CdmaSmsAddress.DIGIT_MODE_8BIT_CHAR) {
+ outStream.write(3, addr.ton);
+ outStream.write(4, addr.numberPlan);
+ }
+ outStream.write(8, addr.numberOfDigits);
+ outStream.writeByteArray(dataBits, addr.origBytes);
+ if (paddingBits > 0) outStream.write(paddingBits, 0);
+ }
+
+ private static void encodeMsgStatus(BearerData bData, BitwiseOutputStream outStream)
+ throws BitwiseOutputStream.AccessException
+ {
+ outStream.write(8, 1);
+ outStream.write(2, bData.errorClass);
+ outStream.write(6, bData.messageStatus);
+ }
+
+ private static void encodeMsgCount(BearerData bData, BitwiseOutputStream outStream)
+ throws BitwiseOutputStream.AccessException
+ {
+ outStream.write(8, 1);
+ outStream.write(8, bData.numberOfMessages);
+ }
+
+ private static void encodeMsgCenterTimeStamp(BearerData bData, BitwiseOutputStream outStream)
+ throws BitwiseOutputStream.AccessException
+ {
+ outStream.write(8, 6);
+ outStream.writeByteArray(6 * 8, bData.timeStamp);
+ }
+
+ /**
+ * Create serialized representation for BearerData object.
+ * (See 3GPP2 C.R1001-F, v1.0, section 4.5 for layout details)
+ *
+ * @param bearerData an instance of BearerData.
+ *
+ * @return data byta array of raw encoded SMS bearer data.
+ */
+ public static byte[] encode(BearerData bData) {
+ try {
+ BitwiseOutputStream outStream = new BitwiseOutputStream(200);
+ outStream.write(8, SUBPARAM_MESSAGE_IDENTIFIER);
+ encodeMessageId(bData, outStream);
+ if (bData.userData != null) {
+ outStream.write(8, SUBPARAM_USER_DATA);
+ encodeUserData(bData, outStream);
+ }
+ if (bData.callbackNumber != null) {
+ outStream.write(8, SUBPARAM_CALLBACK_NUMBER);
+ encodeCallbackNumber(bData, outStream);
+ }
+ if (bData.userAckReq || bData.deliveryAckReq || bData.readAckReq || bData.reportReq) {
+ outStream.write(8, SUBPARAM_REPLY_OPTION);
+ encodeReplyOption(bData, outStream);
+ }
+ if (bData.numberOfMessages != 0) {
+ outStream.write(8, SUBPARAM_NUMBER_OF_MESSAGES);
+ encodeMsgCount(bData, outStream);
+ }
+ if (bData.timeStamp != null) {
+ outStream.write(8, SUBPARAM_MESSAGE_CENTER_TIME_STAMP);
+ encodeMsgCenterTimeStamp(bData, outStream);
+ }
+ return outStream.toByteArray();
+ } catch (BitwiseOutputStream.AccessException ex) {
+ Log.e(LOG_TAG, "BearerData encode failed: " + ex);
+ } catch (CodingException ex) {
+ Log.e(LOG_TAG, "BearerData encode failed: " + ex);
+ }
+ return null;
+ }
+
+ private static void decodeMessageId(BearerData bData, BitwiseInputStream inStream)
+ throws BitwiseInputStream.AccessException, CodingException
+ {
+ if (inStream.read(8) != 3) {
+ throw new CodingException("MESSAGE_IDENTIFIER subparam size incorrect");
+ }
+ bData.messageType = inStream.read(4);
+ bData.messageId = inStream.read(8) << 8;
+ bData.messageId |= inStream.read(8);
+ bData.hasUserDataHeader = (inStream.read(1) == 1);
+ inStream.skip(3);
+ }
+
+ private static void decodeUserData(BearerData bData, BitwiseInputStream inStream)
+ throws BitwiseInputStream.AccessException
+ {
+ byte paramBytes = inStream.read(8);
+ bData.userData = new UserData();
+ bData.userData.msgEncoding = inStream.read(5);
+ bData.userData.msgType = 0;
+ int consumedBits = 5;
+ if ((bData.userData.msgEncoding == UserData.ENCODING_IS91_EXTENDED_PROTOCOL) ||
+ (bData.userData.msgEncoding == UserData.ENCODING_GSM_DCS)) {
+ bData.userData.msgType = inStream.read(8);
+ consumedBits += 8;
+ }
+ bData.userData.numFields = inStream.read(8);
+ consumedBits += 8;
+ int dataBits = (paramBytes * 8) - consumedBits;
+ bData.userData.payload = inStream.readByteArray(dataBits);
+ }
+
+ private static String decodePayloadStr(byte[] data, int offset, int numFields, String format)
+ throws CodingException
+ {
+ try {
+ return new String(data, offset, numFields, format);
+ } catch (java.io.UnsupportedEncodingException ex) {
+ throw new CodingException("invalid ASCII user data code");
+ }
+ }
+
+ private static void decodeUserDataPayload(UserData userData, boolean hasUserDataHeader)
+ throws CodingException
+ {
+ int offset = 0;
+ if (hasUserDataHeader) {
+ int UdhLen = userData.payload[0];
+ byte[] headerData = new byte[UdhLen];
+ System.arraycopy(userData.payload, 1, headerData, 0, UdhLen);
+ userData.userDataHeader = SmsHeader.parse(headerData);
+ }
+ switch (userData.msgEncoding) {
+ case UserData.ENCODING_GSM_7BIT_ALPHABET:
+ userData.payloadStr = GsmAlphabet.gsm7BitPackedToString(userData.payload,
+ offset, userData.numFields);
+ break;
+ case UserData.ENCODING_7BIT_ASCII:
+ userData.payloadStr = decodePayloadStr(userData.payload, offset,
+ userData.numFields, "US-ASCII");
+ break;
+ case UserData.ENCODING_UNICODE_16:
+ userData.payloadStr = decodePayloadStr(userData.payload, offset,
+ userData.numFields * 2, "UTF-16");
+ break;
+ default:
+ throw new CodingException("unsupported user data encoding ("
+ + userData.msgEncoding + ")");
+ }
+ }
+
+ private static void decodeReplyOption(BearerData bData, BitwiseInputStream inStream)
+ throws BitwiseInputStream.AccessException, CodingException
+ {
+ byte paramBytes = inStream.read(8);
+ if (paramBytes != 1) {
+ throw new CodingException("REPLY_OPTION subparam size incorrect");
+ }
+ bData.userAckReq = (inStream.read(1) == 1);
+ bData.deliveryAckReq = (inStream.read(1) == 1);
+ bData.readAckReq = (inStream.read(1) == 1);
+ bData.reportReq = (inStream.read(1) == 1);
+ inStream.skip(4);
+ }
+
+ private static void decodeMsgCount(BearerData bData, BitwiseInputStream inStream)
+ throws BitwiseInputStream.AccessException, CodingException
+ {
+ if (inStream.read(8) != 1) {
+ throw new CodingException("NUMBER_OF_MESSAGES subparam size incorrect");
+ }
+ bData.numberOfMessages = inStream.read(8);
+ }
+
+ private static String decodeDtmfSmsAddress(byte[] rawData, int numFields)
+ throws CodingException
+ {
+ /* DTMF 4-bit digit encoding, defined in at
+ * 3GPP2 C.S005-D, v2.0, table 2.7.1.3.2.4-4 */
+ StringBuffer strBuf = new StringBuffer(numFields);
+ for (int i = 0; i < numFields; i++) {
+ int val = 0x0F & (rawData[i / 2] >>> (4 - ((i % 2) * 4)));
+ if ((val >= 1) && (val <= 9)) strBuf.append(Integer.toString(val, 10));
+ else if (val == 10) strBuf.append('0');
+ else if (val == 11) strBuf.append('*');
+ else if (val == 12) strBuf.append('#');
+ else throw new CodingException("invalid SMS address DTMF code (" + val + ")");
+ }
+ return strBuf.toString();
+ }
+
+ private static void decodeSmsAddress(CdmaSmsAddress addr) throws CodingException {
+ if (addr.digitMode == CdmaSmsAddress.DIGIT_MODE_8BIT_CHAR) {
+ try {
+ /* As specified in 3GPP2 C.S0015-B, v2, 4.5.15 -- actually
+ * just 7-bit ASCII encoding, with the MSB being zero. */
+ addr.address = new String(addr.origBytes, 0, addr.origBytes.length, "US-ASCII");
+ } catch (java.io.UnsupportedEncodingException ex) {
+ throw new CodingException("invalid SMS address ASCII code");
+ }
+ } else {
+ addr.address = decodeDtmfSmsAddress(addr.origBytes, addr.numberOfDigits);
+ }
+ }
+
+ private static void decodeCallbackNumber(BearerData bData, BitwiseInputStream inStream)
+ throws BitwiseInputStream.AccessException, CodingException
+ {
+ byte paramBytes = inStream.read(8);
+ CdmaSmsAddress addr = new CdmaSmsAddress();
+ addr.digitMode = inStream.read(1);
+ byte fieldBits = 4;
+ byte consumedBits = 1;
+ if (addr.digitMode == CdmaSmsAddress.DIGIT_MODE_8BIT_CHAR) {
+ addr.ton = inStream.read(3);
+ addr.numberPlan = inStream.read(4);
+ fieldBits = 8;
+ consumedBits += 7;
+ }
+ addr.numberOfDigits = inStream.read(8);
+ consumedBits += 8;
+ int remainingBits = (paramBytes * 8) - consumedBits;
+ int dataBits = addr.numberOfDigits * fieldBits;
+ int paddingBits = remainingBits - dataBits;
+ if (remainingBits < dataBits) {
+ throw new CodingException("CALLBACK_NUMBER subparam encoding size error (" +
+ "remainingBits " + remainingBits + ", dataBits " +
+ dataBits + ", paddingBits " + paddingBits + ")");
+ }
+ addr.origBytes = inStream.readByteArray(dataBits);
+ inStream.skip(paddingBits);
+ decodeSmsAddress(addr);
+ bData.callbackNumber = addr;
+ }
+
+ private static void decodeMsgStatus(BearerData bData, BitwiseInputStream inStream)
+ throws BitwiseInputStream.AccessException, CodingException
+ {
+ if (inStream.read(8) != 1) {
+ throw new CodingException("MESSAGE_STATUS subparam size incorrect");
+ }
+ bData.errorClass = inStream.read(2);
+ bData.messageStatus = inStream.read(6);
+ }
+
+ private static void decodeMsgCenterTimeStamp(BearerData bData,
+ BitwiseInputStream inStream)
+ throws BitwiseInputStream.AccessException, CodingException
+ {
+ if (inStream.read(8) != 6) {
+ throw new CodingException("MESSAGE_CENTER_TIME_STAMP subparam size incorrect");
+ }
+ bData.timeStamp = inStream.readByteArray(6 * 8);
+ }
+
+ /**
+ * Create BearerData object from serialized representation.
+ * (See 3GPP2 C.R1001-F, v1.0, section 4.5 for layout details)
+ *
+ * @param smsData byte array of raw encoded SMS bearer data.
+ *
+ * @return an instance of BearerData.
+ */
+ public static BearerData decode(byte[] smsData) {
+ try {
+ BitwiseInputStream inStream = new BitwiseInputStream(smsData);
+ BearerData bData = new BearerData();
+ int foundSubparamMask = 0;
+ while (inStream.available() > 0) {
+ int subparamId = inStream.read(8);
+ int subparamIdBit = 1 << subparamId;
+ if ((foundSubparamMask & subparamIdBit) != 0) {
+ throw new CodingException("illegal duplicate subparameter (" +
+ subparamId + ")");
+ }
+ foundSubparamMask |= subparamIdBit;
+ switch (subparamId) {
+ case SUBPARAM_MESSAGE_IDENTIFIER:
+ decodeMessageId(bData, inStream);
+ break;
+ case SUBPARAM_USER_DATA:
+ decodeUserData(bData, inStream);
+ break;
+ case SUBPARAM_REPLY_OPTION:
+ decodeReplyOption(bData, inStream);
+ break;
+ case SUBPARAM_NUMBER_OF_MESSAGES:
+ decodeMsgCount(bData, inStream);
+ break;
+ case SUBPARAM_CALLBACK_NUMBER:
+ decodeCallbackNumber(bData, inStream);
+ break;
+ case SUBPARAM_MESSAGE_STATUS:
+ decodeMsgStatus(bData, inStream);
+ break;
+ case SUBPARAM_MESSAGE_CENTER_TIME_STAMP:
+ decodeMsgCenterTimeStamp(bData, inStream);
+ break;
+ default:
+ throw new CodingException("unsupported bearer data subparameter ("
+ + subparamId + ")");
+ }
+ }
+ if ((foundSubparamMask & (1 << SUBPARAM_MESSAGE_IDENTIFIER)) == 0) {
+ throw new CodingException("missing MESSAGE_IDENTIFIER subparam");
+ }
+ if (bData.userData != null) {
+ decodeUserDataPayload(bData.userData, bData.hasUserDataHeader);
+ }
+ return bData;
+ } catch (BitwiseInputStream.AccessException ex) {
+ Log.e(LOG_TAG, "BearerData decode failed: " + ex);
+ } catch (CodingException ex) {
+ Log.e(LOG_TAG, "BearerData decode failed: " + ex);
+ }
+ return null;
+ }
+}
diff --git a/telephony/java/com/android/internal/telephony/cdma/sms/CdmaSmsAddress.java b/telephony/java/com/android/internal/telephony/cdma/sms/CdmaSmsAddress.java
index 1643cab..440debb 100644
--- a/telephony/java/com/android/internal/telephony/cdma/sms/CdmaSmsAddress.java
+++ b/telephony/java/com/android/internal/telephony/cdma/sms/CdmaSmsAddress.java
@@ -17,6 +17,7 @@
package com.android.internal.telephony.cdma.sms;
import com.android.internal.telephony.SmsAddress;
+import com.android.internal.util.HexDump;
public class CdmaSmsAddress extends SmsAddress {
/**
@@ -95,4 +96,18 @@
public CdmaSmsAddress(){
}
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ builder.append("CdmaSmsAddress:\n");
+ builder.append(" digitMode: " + digitMode + "\n");
+ builder.append(" numberMode: " + numberMode + "\n");
+ builder.append(" numberPlan: " + numberPlan + "\n");
+ builder.append(" numberOfDigits: " + numberOfDigits + "\n");
+ builder.append(" ton: " + ton + "\n");
+ builder.append(" address: " + address + "\n");
+ builder.append(" origBytes: " + HexDump.toHexString(origBytes) + "\n");
+ return builder.toString();
+ }
+
}
diff --git a/telephony/java/com/android/internal/telephony/cdma/sms/SmsDataCoding.java b/telephony/java/com/android/internal/telephony/cdma/sms/SmsDataCoding.java
deleted file mode 100644
index 6ba7463..0000000
--- a/telephony/java/com/android/internal/telephony/cdma/sms/SmsDataCoding.java
+++ /dev/null
@@ -1,371 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.telephony.cdma.sms;
-
-import com.android.internal.telephony.SmsHeader;
-
-/*
- * The SMSDataCoding class encodes and decodes CDMA SMS messages.
- */
-public class SmsDataCoding {
- private final static String TAG = "CDMA_SMS_JNI";
-
- private final static int CDMA_SMS_WMS_MASK_BD_NULL = 0x00000000;
- private final static int CDMA_SMS_WMS_MASK_BD_MSG_ID = 0x00000001;
- private final static int CDMA_SMS_WMS_MASK_BD_USER_DATA = 0x00000002;
-// private final static int CDMA_SMS_WMS_MASK_BD_USER_RESP = 0x00000004;
- private final static int CDMA_SMS_WMS_MASK_BD_MC_TIME = 0x00000008;
-// private final static int CDMA_SMS_WMS_MASK_BD_VALID_ABS = 0x00000010;
-// private final static int CDMA_SMS_WMS_MASK_BD_VALID_REL = 0x00000020;
-// private final static int CDMA_SMS_WMS_MASK_BD_DEFER_ABS = 0x00000040;
-// private final static int CDMA_SMS_WMS_MASK_BD_DEFER_REL = 0x00000080;
-// private final static int CDMA_SMS_WMS_MASK_BD_PRIORITY = 0x00000100;
-// private final static int CDMA_SMS_WMS_MASK_BD_PRIVACY = 0x00000200;
-// private final static int CDMA_SMS_WMS_MASK_BD_REPLY_OPTION = 0x00000400;
- private final static int CDMA_SMS_WMS_MASK_BD_NUM_OF_MSGS = 0x00000800;
-// private final static int CDMA_SMS_WMS_MASK_BD_ALERT = 0x00001000;
-// private final static int CDMA_SMS_WMS_MASK_BD_LANGUAGE = 0x00002000;
- private final static int CDMA_SMS_WMS_MASK_BD_CALLBACK = 0x00004000;
- private final static int CDMA_SMS_WMS_MASK_BD_DISPLAY_MODE = 0x00008000;
-// private final static int CDMA_SMS_WMS_MASK_BD_SCPT_DATA = 0x00010000;
-// private final static int CDMA_SMS_WMS_MASK_BD_SCPT_RESULT = 0x00020000;
-// private final static int CDMA_SMS_WMS_MASK_BD_DEPOSIT_INDEX = 0x00040000;
-// private final static int CDMA_SMS_WMS_MASK_BD_DELIVERY_STATUS = 0x00080000;
-// private final static int CDMA_SMS_WMS_MASK_BD_IP_ADDRESS = 0x10000000;
-// private final static int CDMA_SMS_WMS_MASK_BD_RSN_NO_NOTIFY = 0x20000000;
-// private final static int CDMA_SMS_WMS_MASK_BD_OTHER = 0x40000000;
-
- /**
- * Successful operation.
- */
- private static final int JNI_CDMA_SMS_SUCCESS = 0;
-
- /**
- * General failure.
- */
- private static final int JNI_CDMA_SMS_FAILURE = 1;
-
- /**
- * Data length is out of length.
- */
- private static final int JNI_CDMA_SMS_DATA_LEN_OUT_OF_RANGE = 2;
-
- /**
- * Class name unknown.
- */
- private static final int JNI_CDMA_SMS_CLASS_UNKNOWN = 3;
-
- /**
- * Field ID unknown.
- */
- private static final int JNI_CDMA_SMS_FIELD_ID_UNKNOWN = 4;
-
- /**
- * Memory allocation failed.
- */
- private static final int JNI_CDMA_SMS_OUT_OF_MEMORY = 5;
-
- /**
- * Encode SMS.
- *
- * @param bearerData an instance of BearerData.
- *
- * @return the encoded SMS as byte[].
- */
- public static byte[] encodeCdmaSms(BearerData bearerData) {
- byte[] encodedSms;
-
- if( nativeCdmaSmsConstructClientBD() == JNI_CDMA_SMS_FAILURE){
- return null;
- }
-
- // check bearer data and generate bit mask
- generateBearerDataBitMask(bearerData);
- encodedSms = startEncoding(bearerData);
-
- if( nativeCdmaSmsDestructClientBD() == JNI_CDMA_SMS_FAILURE){
- return null;
- }
- return encodedSms;
- }
-
- /**
- * Decode SMS.
- *
- * @param SmsData the encoded SMS.
- *
- * @return an instance of BearerData.
- */
- public static BearerData decodeCdmaSms(byte[] SmsData) {
- BearerData bearerData;
-
- if( nativeCdmaSmsConstructClientBD() == JNI_CDMA_SMS_FAILURE){
- return null;
- }
-
- bearerData = startDecoding(SmsData);
-
- if( nativeCdmaSmsDestructClientBD() == JNI_CDMA_SMS_FAILURE){
- return null;
- }
- return bearerData;
- }
-
- private static void generateBearerDataBitMask(BearerData bearerData) {
- // initial
- bearerData.mask = CDMA_SMS_WMS_MASK_BD_NULL;
-
- // check message type
- if (bearerData.messageType != 0){
- bearerData.mask |= CDMA_SMS_WMS_MASK_BD_MSG_ID;
- }
-
- // check mUserData
- if (bearerData.userData != null){
- bearerData.mask |= CDMA_SMS_WMS_MASK_BD_USER_DATA;
- }
-
- // check mTimeStamp
- if (bearerData.timeStamp != null){
- bearerData.mask |= CDMA_SMS_WMS_MASK_BD_MC_TIME;
- }
-
- // check mNumberOfMessages
- if (bearerData.numberOfMessages > 0){
- bearerData.mask |= CDMA_SMS_WMS_MASK_BD_NUM_OF_MSGS;
- }
-
- // check mCallbackNumber
- if(bearerData.callbackNumber != null){
- bearerData.mask |= CDMA_SMS_WMS_MASK_BD_CALLBACK;
- }
-
- // check DisplayMode
- if(bearerData.displayMode == BearerData.DISPLAY_DEFAULT ||
- bearerData.displayMode == BearerData.DISPLAY_IMMEDIATE ||
- bearerData.displayMode == BearerData.DISPLAY_USER){
- bearerData.mask |= CDMA_SMS_WMS_MASK_BD_DISPLAY_MODE;
- }
- }
-
- private static byte[] startEncoding(BearerData bearerData) {
- int m_id;
- byte[] m_data;
- int dataLength;
- byte[] encodedSms;
- int nbrOfHeaders = 0;
-
- if( nativeCdmaSmsSetBearerDataPrimitives(bearerData) == JNI_CDMA_SMS_FAILURE){
- return null;
- }
-
- if ((bearerData.mask & CDMA_SMS_WMS_MASK_BD_USER_DATA) == CDMA_SMS_WMS_MASK_BD_USER_DATA){
- if( nativeCdmaSmsSetUserData(bearerData.userData) == JNI_CDMA_SMS_FAILURE){
- return null;
- }
-
- if (bearerData.userData.userDataHeader != null){
- nbrOfHeaders = bearerData.userData.userDataHeader.nbrOfHeaders;
- }
-
- for (int i = 0; i < nbrOfHeaders; i++) {
- m_id = bearerData.userData.userDataHeader.getElements().get(i).getID();
- m_data = bearerData.userData.userDataHeader.getElements().get(i).getData();
- dataLength = m_data.length;
- if( nativeCdmaSmsSetUserDataHeader(m_id, m_data, dataLength, i)
- == JNI_CDMA_SMS_FAILURE){
- return null;
- }
- }
- }
-
- if ((bearerData.mask & CDMA_SMS_WMS_MASK_BD_CALLBACK) == CDMA_SMS_WMS_MASK_BD_CALLBACK) {
- if( nativeCdmaSmsSetSmsAddress(bearerData.callbackNumber) == JNI_CDMA_SMS_FAILURE){
- return null;
- }
- }
-
- /* call native method to encode SMS */
- encodedSms = nativeCdmaSmsEncodeSms();
-
- return encodedSms;
- }
-
- private static BearerData startDecoding(byte[] SmsData) {
- BearerData bData = new BearerData();
- byte[] udhData;
-
- /* call native method to decode SMS */
- if( nativeCdmaSmsDecodeSms(SmsData) == JNI_CDMA_SMS_FAILURE){
- return null;
- }
-
- if( nativeCdmaSmsGetBearerDataPrimitives(bData) == JNI_CDMA_SMS_FAILURE){
- return null;
- }
-
- if ((bData.mask & CDMA_SMS_WMS_MASK_BD_USER_DATA) == CDMA_SMS_WMS_MASK_BD_USER_DATA) {
- bData.userData = new UserData();
- if( nativeCdmaSmsGetUserData(bData.userData) == JNI_CDMA_SMS_FAILURE){
- return null;
- }
-
- udhData = nativeCdmaSmsGetUserDataHeader();
- if (udhData != null) {
- bData.userData.userDataHeader = SmsHeader.parse(udhData);
- }
- }
-
- if ((bData.mask & CDMA_SMS_WMS_MASK_BD_CALLBACK) == CDMA_SMS_WMS_MASK_BD_CALLBACK) {
- bData.callbackNumber = new CdmaSmsAddress();
- if( nativeCdmaSmsGetSmsAddress(bData.callbackNumber) == JNI_CDMA_SMS_FAILURE){
- return null;
- }
- }
-
- return bData;
- }
-
- // native methods
-
- /**
- * native method: Allocate memory for clientBD structure
- *
- * @return #JNI_CDMA_SMS_SUCCESS if succeed.
- * #JNI_CDMA_SMS_FAILURE if fail.
- */
- private static native int nativeCdmaSmsConstructClientBD();
-
- /**
- * native method: Free memory used for clientBD structure
- *
- * @return #JNI_CDMA_SMS_SUCCESS if succeed.
- * #JNI_CDMA_SMS_FAILURE if fail.
- */
- private static native int nativeCdmaSmsDestructClientBD();
-
- /**
- * native method: fill clientBD structure with bearerData primitives
- *
- * @param bearerData an instance of BearerData.
- *
- * @return #JNI_CDMA_SMS_SUCCESS if succeed.
- * #JNI_CDMA_SMS_FAILURE if fail.
- */
- private static native int nativeCdmaSmsSetBearerDataPrimitives(BearerData bearerData);
-
- /**
- * native method: fill bearerData primitives with clientBD variables
- *
- * @param bearerData an instance of BearerData.
- *
- * @return #JNI_CDMA_SMS_SUCCESS if succeed.
- * #JNI_CDMA_SMS_FAILURE if fail.
- */
- private static native int nativeCdmaSmsGetBearerDataPrimitives(BearerData bearerData);
-
- /**
- * native method: fill clientBD.user_data with UserData primitives
- *
- * @param userData an instance of UserData.
- *
- * @return #JNI_CDMA_SMS_SUCCESS if succeed.
- * #JNI_CDMA_SMS_FAILURE if fail.
- */
- private static native int nativeCdmaSmsSetUserData(UserData userData);
-
- /**
- * native method: fill UserData primitives with clientBD.user_data
- *
- * @param userData an instance of UserData.
- *
- * @return #JNI_CDMA_SMS_SUCCESS if succeed.
- * #JNI_CDMA_SMS_FAILURE if fail.
- */
- private static native int nativeCdmaSmsGetUserData(UserData userData);
-
- /**
- * native method: fill clientBD.user_data.headers with UserDataHeader primitives
- *
- * @param ID ID of element.
- * @param data element data.
- * @param dataLength data length
- * @param index index of element
- *
- * @return #JNI_CDMA_SMS_SUCCESS if succeed.
- * #JNI_CDMA_SMS_FAILURE if fail.
- */
- private static native int nativeCdmaSmsSetUserDataHeader(
- int ID, byte[] data, int dataLength, int index);
-
- /**
- * native method: fill UserDataHeader primitives with clientBD.user_data.headers
- *
- * @return user data headers
- */
- private static native byte[] nativeCdmaSmsGetUserDataHeader();
-
- /**
- * native method: fill clientBD.callback with SmsAddress primitives
- *
- * @param smsAddr an instance of SmsAddress.
- *
- * @return #JNI_CDMA_SMS_SUCCESS if succeed.
- * #JNI_CDMA_SMS_FAILURE if fail.
- */
- private static native int nativeCdmaSmsSetSmsAddress(CdmaSmsAddress smsAddr);
-
- /**
- * native method: fill SmsAddress primitives with clientBD.callback
- *
- * @param smsAddr an instance of SmsAddress.
- *
- * @return #JNI_CDMA_SMS_SUCCESS if succeed.
- * #JNI_CDMA_SMS_FAILURE if fail.
- */
- private static native int nativeCdmaSmsGetSmsAddress(CdmaSmsAddress smsAddr);
-
- /**
- * native method: call encoding functions and get encoded SMS
- *
- * @return the encoded SMS
- */
- private static native byte[] nativeCdmaSmsEncodeSms();
-
- /**
- * native method: call decode functions
- *
- * @param encodedSMS encoded SMS.
- *
- * @return #JNI_CDMA_SMS_SUCCESS if succeed.
- * #JNI_CDMA_SMS_FAILURE if fail.
- */
- private static native int nativeCdmaSmsDecodeSms(byte[] encodedSMS);
-
- /**
- * Load the shared library to link the native methods.
- */
- static {
- try {
- System.loadLibrary("cdma_sms_jni");
- }
- catch (UnsatisfiedLinkError ule) {
- System.err.println("WARNING: Could not load cdma_sms_jni.so");
- }
- }
-}
-
diff --git a/telephony/java/com/android/internal/telephony/cdma/sms/UserData.java b/telephony/java/com/android/internal/telephony/cdma/sms/UserData.java
index e761469..bd6fbb4 100644
--- a/telephony/java/com/android/internal/telephony/cdma/sms/UserData.java
+++ b/telephony/java/com/android/internal/telephony/cdma/sms/UserData.java
@@ -17,24 +17,25 @@
package com.android.internal.telephony.cdma.sms;
import com.android.internal.telephony.SmsHeader;
+import com.android.internal.util.HexDump;
public class UserData{
/**
- * Supported user data encoding types
+ * User data encoding types
* (See 3GPP2 C.R1001-F, v1.0, table 9.1-1)
*/
- public static final int UD_ENCODING_OCTET = 0x00;
- //public static final int UD_ENCODING_EXTENDED_PROTOCOL = 0x01;
- public static final int UD_ENCODING_7BIT_ASCII = 0x02;
- public static final int UD_ENCODING_IA5 = 0x03;
- public static final int UD_ENCODING_UNICODE_16 = 0x04;
- //public static final int UD_ENCODING_SHIFT_JIS = 0x05;
- //public static final int UD_ENCODING_KOREAN = 0x06;
- //public static final int UD_ENCODING_LATIN_HEBREW = 0x07;
- //public static final int UD_ENCODING_LATIN = 0x08;
- public static final int UD_ENCODING_GSM_7BIT_ALPHABET = 0x09;
- //public static final int UD_ENCODING_GSM_DCS = 0x0A;
+ public static final int ENCODING_OCTET = 0x00;
+ public static final int ENCODING_IS91_EXTENDED_PROTOCOL = 0x01;
+ public static final int ENCODING_7BIT_ASCII = 0x02;
+ //public static final int ENCODING_IA5 = 0x03;
+ public static final int ENCODING_UNICODE_16 = 0x04;
+ //public static final int ENCODING_SHIFT_JIS = 0x05;
+ //public static final int ENCODING_KOREAN = 0x06;
+ //public static final int ENCODING_LATIN_HEBREW = 0x07;
+ //public static final int ENCODING_LATIN = 0x08;
+ public static final int ENCODING_GSM_7BIT_ALPHABET = 0x09;
+ public static final int ENCODING_GSM_DCS = 0x0A;
/**
* Contains the data header of the user data
@@ -44,20 +45,37 @@
/**
* Contains the data encoding type for the SMS message
*/
- public int userDataEncoding;
+ public int msgEncoding;
- // needed when encoding is IS91 or DCS (not supported yet):
- //public int messageType;
+ // XXX needed when encoding is IS91 or DCS (not supported yet):
+ public int msgType;
/**
* Number of invalid bits in the last byte of data.
*/
public int paddingBits;
+ public int numFields;
+
/**
* Contains the user data of a SMS message
* (See 3GPP2 C.S0015-B, v2, 4.5.2)
*/
- public byte[] userData;
+ public byte[] payload;
+ public String payloadStr;
+
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ builder.append("UserData:\n");
+ builder.append(" msgEncoding: " + msgEncoding + "\n");
+ builder.append(" msgType: " + msgType + "\n");
+ builder.append(" paddingBits: " + paddingBits + "\n");
+ builder.append(" numFields: " + (int)numFields + "\n");
+ builder.append(" userDataHeader: " + userDataHeader + "\n");
+ builder.append(" payload: " + HexDump.toHexString(payload));
+ builder.append(" payloadStr: " + payloadStr);
+ return builder.toString();
+ }
}
diff --git a/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java b/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java
old mode 100644
new mode 100755
index d1ae997..a2d3c5e
--- a/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java
@@ -316,6 +316,11 @@
// we report data connected
ret = DataState.CONNECTED;
+ } else if (mSST == null) {
+ // Radio Technology Change is ongoning, dispose() and removeReferences() have
+ // already been called
+
+ ret = DataState.DISCONNECTED;
} else if (mSST.getCurrentGprsState()
!= ServiceState.STATE_IN_SERVICE) {
// If we're out of service, open TCP sockets may still work
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
index e2da7cb..b889704 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
@@ -131,7 +131,8 @@
private static int APN_DEFAULT_ID = 0;
private static int APN_MMS_ID = 1;
- private static int APN_NUM_TYPES = 2;
+ private static int APN_SUPL_ID = 2;
+ private static int APN_NUM_TYPES = 3;
private boolean[] dataEnabled = new boolean[APN_NUM_TYPES];
@@ -153,13 +154,6 @@
private static final String INTENT_RECONNECT_ALARM = "com.android.internal.telephony.gprs-reconnect";
private static final String INTENT_RECONNECT_ALARM_EXTRA_REASON = "reason";
- //***** Tag IDs for EventLog
- private static final int EVENT_LOG_RADIO_RESET_COUNTDOWN_TRIGGERED = 50101;
- private static final int EVENT_LOG_RADIO_RESET = 50102;
- private static final int EVENT_LOG_PDP_RESET = 50103;
- private static final int EVENT_LOG_REREGISTER_NETWORK = 50104;
- private static final int EVENT_LOG_RADIO_PDP_SETUP_FAIL = 50105;
-
static final Uri PREFERAPN_URI = Uri.parse("content://telephony/carriers/preferapn");
static final String APN_ID = "apn_id";
private boolean canSetPreferApn = false;
@@ -322,8 +316,8 @@
/**
* Ensure that we are connected to an APN of the specified type.
- * @param type the APN type (currently the only valid value
- * is {@link Phone#APN_TYPE_MMS})
+ * @param type the APN type (currently the only valid values
+ * are {@link Phone#APN_TYPE_MMS} and {@link Phone#APN_TYPE_SUPL})
* @return the result of the operation. Success is indicated by
* a return value of either {@code Phone.APN_ALREADY_ACTIVE} or
* {@code Phone.APN_REQUEST_STARTED}. In the latter case, a broadcast
@@ -331,9 +325,11 @@
* the APN has been established.
*/
protected int enableApnType(String type) {
- if (!TextUtils.equals(type, Phone.APN_TYPE_MMS)) {
+ if (!TextUtils.equals(type, Phone.APN_TYPE_MMS) &&
+ !TextUtils.equals(type, Phone.APN_TYPE_SUPL)) {
return Phone.APN_REQUEST_FAILED;
}
+
// If already active, return
Log.d(LOG_TAG, "enableApnType("+type+")");
if (isApnTypeActive(type)) {
@@ -366,12 +362,15 @@
* The APN of the specified type is no longer needed. Ensure that if
* use of the default APN has not been explicitly disabled, we are connected
* to the default APN.
- * @param type the APN type. The only valid value currently is {@link Phone#APN_TYPE_MMS}.
+ * @param type the APN type. The only valid values are currently
+ * {@link Phone#APN_TYPE_MMS} and {@link Phone#APN_TYPE_SUPL}.
* @return
*/
protected int disableApnType(String type) {
Log.d(LOG_TAG, "disableApnType("+type+")");
- if (TextUtils.equals(type, Phone.APN_TYPE_MMS)) {
+ if ((TextUtils.equals(type, Phone.APN_TYPE_MMS) ||
+ TextUtils.equals(type, Phone.APN_TYPE_SUPL))
+ && isEnabled(type)) {
removeMessages(EVENT_RESTORE_DEFAULT_APN);
setEnabled(type, false);
if (isApnTypeActive(Phone.APN_TYPE_DEFAULT)) {
@@ -439,6 +438,8 @@
return dataEnabled[APN_DEFAULT_ID];
} else if (TextUtils.equals(apnType, Phone.APN_TYPE_MMS)) {
return dataEnabled[APN_MMS_ID];
+ } else if (TextUtils.equals(apnType, Phone.APN_TYPE_SUPL)) {
+ return dataEnabled[APN_SUPL_ID];
} else {
return false;
}
@@ -450,9 +451,12 @@
dataEnabled[APN_DEFAULT_ID] = enable;
} else if (TextUtils.equals(apnType, Phone.APN_TYPE_MMS)) {
dataEnabled[APN_MMS_ID] = enable;
+ } else if (TextUtils.equals(apnType, Phone.APN_TYPE_SUPL)) {
+ dataEnabled[APN_SUPL_ID] = enable;
}
Log.d(LOG_TAG, "dataEnabled[DEFAULT_APN]=" + dataEnabled[APN_DEFAULT_ID] +
- " dataEnabled[MMS_APN]=" + dataEnabled[APN_MMS_ID]);
+ " dataEnabled[MMS_APN]=" + dataEnabled[APN_MMS_ID] +
+ " dataEnabled[SUPL_APN]=" + dataEnabled[APN_SUPL_ID]);
}
/**
@@ -476,13 +480,14 @@
return trySetupData(Phone.REASON_DATA_ENABLED);
} else if (!enable) {
setEnabled(Phone.APN_TYPE_DEFAULT, false);
- // Don't tear down if there is an active APN and it handles MMS.
+ // Don't tear down if there is an active APN and it handles MMS or SUPL.
// TODO: This isn't very general.
- if (!isApnTypeActive(Phone.APN_TYPE_MMS) || !isEnabled(Phone.APN_TYPE_MMS)) {
- cleanUpConnection(true, Phone.REASON_DATA_DISABLED);
- return true;
+ if ((isApnTypeActive(Phone.APN_TYPE_MMS) && isEnabled(Phone.APN_TYPE_MMS)) ||
+ (isApnTypeActive(Phone.APN_TYPE_SUPL) && isEnabled(Phone.APN_TYPE_SUPL))) {
+ return false;
}
- return false;
+ cleanUpConnection(true, Phone.REASON_DATA_DISABLED);
+ return true;
} else {
// isEnabled && enable
return true;
@@ -513,7 +518,7 @@
* {@code true} otherwise.
*/
public boolean getAnyDataEnabled() {
- return dataEnabled[APN_DEFAULT_ID] || dataEnabled[APN_MMS_ID];
+ return dataEnabled[APN_DEFAULT_ID] || dataEnabled[APN_MMS_ID] || dataEnabled[APN_SUPL_ID];
}
/**
@@ -1316,7 +1321,7 @@
* rather an app that inadvertantly fails to reset to the
* default APN, or that dies before doing so.
*/
- if (dataEnabled[APN_MMS_ID]) {
+ if (dataEnabled[APN_MMS_ID] || dataEnabled[APN_SUPL_ID]) {
removeMessages(EVENT_RESTORE_DEFAULT_APN);
sendMessageDelayed(obtainMessage(EVENT_RESTORE_DEFAULT_APN),
getRestoreDefaultApnDelay());
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
index 8ecf245..9ab1002 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
@@ -539,7 +539,7 @@
EventLog.List val = new EventLog.List(
dcTracker.getStateInString(),
(dcTracker.getAnyDataEnabled() ? 1 : 0) );
- EventLog.writeEvent(TelephonyEventLog.EVENT_DATA_STATE_RADIO_OFF, val);
+ EventLog.writeEvent(TelephonyEventLog.EVENT_LOG_DATA_STATE_RADIO_OFF, val);
}
dcTracker.cleanConnectionBeforeRadioOff();
diff --git a/telephony/java/com/android/internal/telephony/gsm/SIMRecords.java b/telephony/java/com/android/internal/telephony/gsm/SIMRecords.java
index 09a17f5..f9015d9 100644
--- a/telephony/java/com/android/internal/telephony/gsm/SIMRecords.java
+++ b/telephony/java/com/android/internal/telephony/gsm/SIMRecords.java
@@ -1099,14 +1099,9 @@
// Note: Data may include trailing FF's. That's OK; message
// should still parse correctly.
- byte[] nba = new byte[n - 1];
- System.arraycopy(ba, 1, nba, 0, n - 1);
-
- String pdu = IccUtils.bytesToHexString(nba);
- // XXX first line is bogus
- SmsMessage message = SmsMessage.newFromCMT(
- new String[] { "", pdu });
-
+ byte[] pdu = new byte[n - 1];
+ System.arraycopy(ba, 1, pdu, 0, n - 1);
+ SmsMessage message = SmsMessage.createFromPdu(pdu);
((GSMPhone) phone).mSMS.dispatchMessage(message);
}
@@ -1130,14 +1125,9 @@
// Note: Data may include trailing FF's. That's OK; message
// should still parse correctly.
- byte[] nba = new byte[n - 1];
- System.arraycopy(ba, 1, nba, 0, n - 1);
-
- String pdu = IccUtils.bytesToHexString(nba);
- // XXX first line is bogus
- SmsMessage message = SmsMessage.newFromCMT(
- new String[] { "", pdu });
-
+ byte[] pdu = new byte[n - 1];
+ System.arraycopy(ba, 1, pdu, 0, n - 1);
+ SmsMessage message = SmsMessage.createFromPdu(pdu);
((GSMPhone) phone).mSMS.dispatchMessage(message);
@@ -1499,6 +1489,3 @@
}
}
-
-
-
diff --git a/telephony/jni/cdmasms/Android.mk b/telephony/jni/cdmasms/Android.mk
deleted file mode 100644
index b0c96b4..0000000
--- a/telephony/jni/cdmasms/Android.mk
+++ /dev/null
@@ -1,24 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES:= \
- cdma_sms_jni.cpp
-
-LOCAL_SHARED_LIBRARIES := \
- libcutils \
- libutils \
- libandroid_runtime \
- libnativehelper
-
-LOCAL_MODULE:= libcdma_sms_jni
-
-LOCAL_C_INCLUDES += \
- $(JNI_H_INCLUDE) \
- hardware/ril/include/telephony
-
-LOCAL_C_INCLUDES += hardware/ril/reference-cdma-sms
-LOCAL_SHARED_LIBRARIES += libreference-cdma-sms
-LOCAL_CFLAGS += -DREFERENCE_CDMA_SMS
-
-LOCAL_PRELINK_MODULE := false
-include $(BUILD_SHARED_LIBRARY)
diff --git a/telephony/jni/cdmasms/cdma_sms_jni.cpp b/telephony/jni/cdmasms/cdma_sms_jni.cpp
deleted file mode 100644
index 2a8e825..0000000
--- a/telephony/jni/cdmasms/cdma_sms_jni.cpp
+++ /dev/null
@@ -1,1300 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * @file cdma_sms_jni.cpp
- *
- * This file implement the Java Native Interface
- * for encoding and decoding of SMS
- */
-
-
-#include <nativehelper/jni.h>
-#include <nativehelper/JNIHelp.h>
-#include <android_runtime/AndroidRuntime.h>
-#include <cdma_sms_jni.h>
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif //__cplusplus
-
-#include <reference-cdma-sms.h>
-
-#ifdef __cplusplus
-}
-#endif //__cplusplus
-
-#undef LOG_TAG
-#define LOG_TAG "CDMA"
-#include <utils/Log.h>
-
-static RIL_CDMA_SMS_ClientBd *clientBdData = NULL;
-
-
-static jint getObjectIntField(JNIEnv * env, jobject obj, const char *name, jint * value)
-{
- jclass clazz;
- jfieldID field;
-
-#ifdef DBG_LOG_LEVEL_B
- LOGD("getObjectIntField():");
-#endif
-
- clazz = env->GetObjectClass(obj);
- if (NULL == clazz) {
- jniThrowException(env, "java/lang/Exception", NULL);
- return JNI_FAILURE;
- }
-
- field = env->GetFieldID(clazz, name, "I");
- env->DeleteLocalRef(clazz);
-
- if (NULL == field) {
- jniThrowException(env, "java/lang/NoSuchFieldException", name);
- return JNI_FAILURE;
- }
-
- *value = env->GetIntField(obj, field);
-
-#ifdef DBG_LOG_LEVEL_B
- LOGD(" %s = %d\n", name, *value);
-#endif
-
- return JNI_SUCCESS;
-}
-
-static jint setObjectIntField(JNIEnv * env, jobject obj, const char *name, jint value)
-{
- jclass clazz;
- jfieldID field;
-
-#ifdef DBG_LOG_LEVEL_B
- LOGD("setObjectIntField(): %s = %d\n", name, value);
-#endif
-
- clazz = env->GetObjectClass(obj);
- if (NULL == clazz) {
- jniThrowException(env, "java/lang/Exception", NULL);
- return JNI_FAILURE;
- }
-
- field = env->GetFieldID(clazz, name, "I");
- env->DeleteLocalRef(clazz);
-
- if (NULL == field) {
- jniThrowException(env, "java/lang/NoSuchFieldException", name);
- return JNI_FAILURE;
- }
-
- env->SetIntField(obj, field, value);
-
- return JNI_SUCCESS;
-}
-
-static jint getObjectByteField(JNIEnv * env, jobject obj, const char *name, jbyte * value)
-{
- jclass clazz;
- jfieldID field;
-
-#ifdef DBG_LOG_LEVEL_B
- LOGD("getObjectByteField():");
-#endif
-
- clazz = env->GetObjectClass(obj);
- if (NULL == clazz) {
- jniThrowException(env, "java/lang/Exception", NULL);
- return JNI_FAILURE;
- }
-
- field = env->GetFieldID(clazz, name, "B");
- env->DeleteLocalRef(clazz);
-
- if (NULL == field) {
- jniThrowException(env, "java/lang/NoSuchFieldException", name);
- return JNI_FAILURE;
- }
-
- *value = env->GetByteField(obj, field);
-
-#ifdef DBG_LOG_LEVEL_B
- LOGD(" %s = %02x\n", name, *value);
-#endif
-
- return JNI_SUCCESS;
-}
-
-static jint setObjectByteField(JNIEnv * env, jobject obj, const char *name, jbyte value)
-{
- jclass clazz;
- jfieldID field;
-#ifdef DBG_LOG_LEVEL_B
- LOGD("setObjectByteField(): %s = 0x%02x\n", name, value);
-#endif
-
- clazz = env->GetObjectClass(obj);
- if (NULL == clazz) {
- jniThrowException(env, "java/lang/Exception", NULL);
- return JNI_FAILURE;
- }
-
- field = env->GetFieldID(clazz, name, "B");
- env->DeleteLocalRef(clazz);
-
- if (NULL == field) {
- jniThrowException(env, "java/lang/NoSuchFieldException", name);
- return JNI_FAILURE;
- }
-
- env->SetByteField(obj, field, value);
-
- return JNI_SUCCESS;
-}
-
-static jint getObjectBooleanField(JNIEnv * env, jobject obj, const char *name, jboolean * value)
-{
- jclass clazz;
- jfieldID field;
-
-#ifdef DBG_LOG_LEVEL_B
- LOGD("getObjectBooleanField():");
-#endif
-
- clazz = env->GetObjectClass(obj);
- if (NULL == clazz) {
- jniThrowException(env, "java/lang/Exception", NULL);
- return JNI_FAILURE;
- }
-
- field = env->GetFieldID(clazz, name, "Z");
- env->DeleteLocalRef(clazz);
-
- if (NULL == field) {
- jniThrowException(env, "java/lang/NoSuchFieldException", name);
- return JNI_FAILURE;
- }
-
- *value = env->GetBooleanField(obj, field);
-
-#ifdef DBG_LOG_LEVEL_B
- LOGD(" %s = %d\n", name, *value);
-#endif
-
- return JNI_SUCCESS;
-}
-
-static jint setObjectBooleanField(JNIEnv * env, jobject obj, const char *name, jboolean value)
-{
- jclass clazz;
- jfieldID field;
-
-#ifdef DBG_LOG_LEVEL_B
- LOGD("setObjectBooleanField(): %s = %d\n", name, value);
-#endif
-
- clazz = env->GetObjectClass(obj);
- if (NULL == clazz) {
- jniThrowException(env, "java/lang/Exception", NULL);
- return JNI_FAILURE;
- }
-
- field = env->GetFieldID(clazz, name, "Z");
- env->DeleteLocalRef(clazz);
-
- if (NULL == field) {
- jniThrowException(env, "java/lang/NoSuchFieldException", name);
- return JNI_FAILURE;
- }
-
- env->SetBooleanField(obj, field, value);
-
- return JNI_SUCCESS;
-}
-
-static jint getObjectByteArrayField(JNIEnv * env, jobject obj, const char *name, jbyte* arrData, int* length)
-{
- jclass clazz;
- jfieldID field;
- jbyte * data_buf;
-
-#ifdef DBG_LOG_LEVEL_B
- LOGD("getObjectByteArrayField(): %s\n", name);
-#endif
-
- clazz = env->GetObjectClass(obj);
- if (NULL == clazz) {
- jniThrowException(env, "java/lang/Exception", NULL);
- return JNI_FAILURE;
- }
-
- field = env->GetFieldID(clazz, name, "[B");
- env->DeleteLocalRef(clazz);
-
- if (NULL == field) {
- jniThrowException(env, "java/lang/NoSuchFieldException", name);
- return JNI_FAILURE;
- }
-
- jbyteArray buffer = (jbyteArray)(env->GetObjectField(obj, field));
- if (buffer != NULL) {
- int len = env->GetArrayLength(buffer);
- data_buf = env->GetByteArrayElements(buffer, NULL);
- for (int i=0; i<len; i++) {
- *arrData++ = data_buf[i];
-#ifdef DBG_LOG_LEVEL_B
- LOGD(" [%d] = 0x%02x\n", i, data_buf[i]);
-#endif
- }
- *length = len;
- } else {
- jniThrowException(env, "java/lang/NullPointerException", NULL);
- return JNI_FAILURE;
- }
-
- return JNI_SUCCESS;
-}
-
-static jint setObjectByteArrayField(JNIEnv * env, jobject obj, const char *name, jbyte* arrData, int length)
-{
- jclass clazz;
- jfieldID field;
- jbyte* byte_buf;
-
-#ifdef DBG_LOG_LEVEL_B
- LOGD("setObjectByteArrayField(): %s\n", name);
-#endif
-
- clazz = env->GetObjectClass(obj);
- if (NULL == clazz) {
- jniThrowException(env, "java/lang/Exception", NULL);
- return JNI_FAILURE;
- }
-
- field = env->GetFieldID(clazz, name, "[B");
- env->DeleteLocalRef(clazz);
-
- if (NULL == field) {
- jniThrowException(env, "java/lang/NoSuchFieldException", name);
- return JNI_FAILURE;
- }
-
- jbyteArray buffer = (jbyteArray)(env->GetObjectField(obj, field));
- if (buffer == NULL) {
-#ifdef DBG_LOG_LEVEL_B
- LOGD("setObjectByteArrayField(): %s = null\n", name);
-#endif
- buffer = env->NewByteArray(length);
- env->SetObjectField(obj, field, buffer);
- }
-
- if (buffer != NULL) {
-#ifdef DBG_LOG_LEVEL_B
- for (int i=0; i<length; i++) {
- LOGD(" [%d] = 0x%02x\n", i, arrData[i]);
- }
-#endif
- env->SetByteArrayRegion(buffer, 0, length, arrData);
- } else {
- jniThrowException(env, "java/lang/NullPointerException", NULL);
- return JNI_FAILURE;
- }
-
- return JNI_SUCCESS;
-}
-
-
-/* native interface */
-JNIEXPORT jint JNICALL
-Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsConstructClientBD
- (JNIEnv * env, jobject obj)
-{
-#ifdef DBG_LOG_LEVEL_B
- LOGD("nativeCdmaSmsConstructClientBD()...\n");
-#endif
-
- clientBdData = (RIL_CDMA_SMS_ClientBd *)malloc(sizeof(RIL_CDMA_SMS_ClientBd));
- if (NULL == clientBdData) {
- jniThrowException(env, "java/lang/OutOfMemoryError", "clientBdData memory allocation failed");
- return JNI_FAILURE;
- }
- memset(clientBdData, 0, sizeof(RIL_CDMA_SMS_ClientBd));
- return JNI_SUCCESS;
-}
-
-
-/* native interface */
-JNIEXPORT jint JNICALL
-Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsDestructClientBD
- (JNIEnv * env, jobject obj)
-{
-#ifdef DBG_LOG_LEVEL_B
- LOGD("nativeCdmaSmsDestructClientBD()...\n");
-#endif
-
- if (clientBdData == NULL) {
- jniThrowException(env, "java/lang/NullPointerException", "clientBdData is null");
- return JNI_FAILURE;
- }
- free(clientBdData);
- return JNI_SUCCESS;
-}
-
-
-/* native interface */
-JNIEXPORT jint JNICALL
-Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsSetBearerDataPrimitives
- (JNIEnv * env, jobject obj, jobject bearerData)
-{
- jbyteArray mc_time = NULL;
- jbyte mctime_buffer[6];
- int length;
- jint intData;
- jbyte byteData;
- jboolean booleanData;
-
-#ifdef DBG_LOG_LEVEL_B
- LOGD("nativeCdmaSmsSetBearerDataPrimitives()...\n");
-#endif
-
- // mask
- if (getObjectIntField(env, bearerData, "mask", &intData) != JNI_SUCCESS)
- return JNI_FAILURE;
- clientBdData->mask = intData;
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->mask = 0x%x\n", clientBdData->mask);
-#endif
-
- // message_id.type
- if (getObjectByteField(env, bearerData, "messageType", &byteData) != JNI_SUCCESS)
- return JNI_FAILURE;
- clientBdData->message_id.type = (RIL_CDMA_SMS_BdMessageType)(byteData);
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->message_id.type = 0x%02x\n", clientBdData->message_id.type);
-#endif
-
- // message_id.id_number
- if ((clientBdData->mask & WMS_MASK_BD_MSG_ID) == WMS_MASK_BD_MSG_ID) {
- if (getObjectIntField(env, bearerData, "messageID", &intData) != JNI_SUCCESS)
- return JNI_FAILURE;
- clientBdData->message_id.id_number = (RIL_CDMA_SMS_MessageNumber)(intData);
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->message_id.id_number = %d\n", clientBdData->message_id.id_number);
-#endif
- }
-
- // message_id.udh_present
- if (getObjectBooleanField(env, bearerData, "hasUserDataHeader", &booleanData) != JNI_SUCCESS)
- return JNI_FAILURE;
- clientBdData->message_id.udh_present = (unsigned char)(booleanData);
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->message_id.udh_present = %d\n", clientBdData->message_id.udh_present);
-#endif
-
- // user_response
- // TODO
-
- // mc_time
- if ((clientBdData->mask & WMS_MASK_BD_MC_TIME) == WMS_MASK_BD_MC_TIME) {
- if (getObjectByteArrayField(env, bearerData, "timeStamp", mctime_buffer, &length) != JNI_SUCCESS)
- return JNI_FAILURE;
- if (mctime_buffer != NULL) {
- clientBdData->mc_time.year = mctime_buffer[0];
- clientBdData->mc_time.month = mctime_buffer[1];
- clientBdData->mc_time.day = mctime_buffer[2];
- clientBdData->mc_time.hour = mctime_buffer[3];
- clientBdData->mc_time.minute = mctime_buffer[4];
- clientBdData->mc_time.second = mctime_buffer[5];
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->mc_time.year = %d\n", clientBdData->mc_time.year);
- LOGD("clientBdData->mc_time.month = %d\n", clientBdData->mc_time.month);
- LOGD("clientBdData->mc_time.day = %d\n", clientBdData->mc_time.day);
- LOGD("clientBdData->mc_time.hour = %d\n", clientBdData->mc_time.hour);
- LOGD("clientBdData->mc_time.minute = %d\n", clientBdData->mc_time.minute);
- LOGD("clientBdData->mc_time.second = %d\n", clientBdData->mc_time.second);
-#endif
- }
- }
-
- // clientBdData->mc_time.timezone
- // TODO
-
- // validity_absolute;
- // TODO
-
- // validity_relative;
- // TODO
-
- // deferred_absolute
- // TODO
-
- // deferred_relative;
- // TODO
-
- // priority
- // TODO
-
- // privacy
- // TODO
-
- if ((clientBdData->mask & WMS_MASK_BD_REPLY_OPTION) == WMS_MASK_BD_REPLY_OPTION) {
- // reply_option.user_ack_requested
- if (getObjectBooleanField(env, bearerData, "userAckReq", &booleanData) != JNI_SUCCESS)
- return JNI_FAILURE;
- clientBdData->reply_option.user_ack_requested = (unsigned char)(booleanData);
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->reply_option.user_ack_requested = %d\n", clientBdData->reply_option.user_ack_requested);
-#endif
- // reply_option.user_ack_requested
- if (getObjectBooleanField(env, bearerData, "deliveryAckReq", &booleanData) != JNI_SUCCESS)
- return JNI_FAILURE;
- clientBdData->reply_option.delivery_ack_requested = (unsigned char)(booleanData);
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->reply_option.delivery_ack_requested = %d\n", clientBdData->reply_option.delivery_ack_requested);
-#endif
- // reply_option.user_ack_requested
- if (getObjectBooleanField(env, bearerData, "readAckReq", &booleanData) != JNI_SUCCESS)
- return JNI_FAILURE;
- clientBdData->reply_option.read_ack_requested = (unsigned char)(booleanData);
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->reply_option.read_ack_requested = %d\n", clientBdData->reply_option.read_ack_requested);
-#endif
- }
-
- // num_messages
- if ((clientBdData->mask & WMS_MASK_BD_NUM_OF_MSGS) == WMS_MASK_BD_NUM_OF_MSGS) {
- if (getObjectIntField(env, bearerData, "numberOfMessages", &intData) != JNI_SUCCESS)
- return JNI_FAILURE;
- clientBdData->num_messages = (unsigned char)(intData);
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->num_messages = %d\n", clientBdData->num_messages);
-#endif
- }
-
- // alert_mode
- // TODO
-
- // language
- // TODO
-
- // display_mode
- if ((clientBdData->mask & WMS_MASK_BD_DISPLAY_MODE) == WMS_MASK_BD_DISPLAY_MODE) {
- if (getObjectByteField(env, bearerData, "displayMode", &byteData) != JNI_SUCCESS)
- return JNI_FAILURE;
- clientBdData->display_mode = (RIL_CDMA_SMS_DisplayMode)(byteData);
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->display_mode = 0x%02x\n", clientBdData->display_mode);
-#endif
- }
-
- // delivery_status
- if ((clientBdData->mask & WMS_MASK_BD_DELIVERY_STATUS) == WMS_MASK_BD_DELIVERY_STATUS) {
- // delivery_status.error_class
- if (getObjectIntField(env, bearerData, "errorClass", &intData) != JNI_SUCCESS)
- return JNI_FAILURE;
- clientBdData->delivery_status.error_class = (RIL_CDMA_SMS_ErrorClass)(intData);
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->delivery_status.error_class = %d\n", clientBdData->delivery_status.error_class);
-#endif
- // delivery_status.status
- if (getObjectIntField(env, bearerData, "messageStatus", &intData) != JNI_SUCCESS)
- return JNI_FAILURE;
- clientBdData->delivery_status.status = (RIL_CDMA_SMS_DeliveryStatusE)(intData);
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->delivery_status.status = %d\n", clientBdData->delivery_status.status);
-#endif
- }
-
- // deposit_index
- // TODO
-
- // ip_address
- // TODO
-
- // rsn_no_notify
- // TODO
-
- // other
- // TODO
-
- return JNI_SUCCESS;
-}
-
-
-/* native interface */
-JNIEXPORT jint JNICALL
-Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsGetBearerDataPrimitives
- (JNIEnv * env, jobject obj, jobject bearerData)
-{
- jclass BearerDataClass;
- jfieldID field;
- jbyte mctime_buffer[6];
- jbyteArray addr_array;
- int length;
-
-#ifdef DBG_LOG_LEVEL_B
- LOGD("nativeCdmaSmsGetBearerDataPrimitives()...\n");
-#endif
-
- // mask
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->mask = 0x%x\n", clientBdData->mask);
-#endif
- if (setObjectIntField(env, bearerData, "mask", clientBdData->mask) != JNI_SUCCESS)
- return JNI_FAILURE;
-
- // message_id.type
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->message_id.type = 0x%02x\n", clientBdData->message_id.type);
-#endif
- if (setObjectByteField(env, bearerData, "messageType", (jbyte)clientBdData->message_id.type) != JNI_SUCCESS)
- return JNI_FAILURE;
-
- // message_id.id_number
- if ((clientBdData->mask & WMS_MASK_BD_MSG_ID) == WMS_MASK_BD_MSG_ID) {
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->message_id.id_number = %d\n", clientBdData->message_id.id_number);
-#endif
- if (setObjectIntField(env, bearerData, "messageID", clientBdData->message_id.id_number) != JNI_SUCCESS)
- return JNI_FAILURE;
- }
-
- // message_id.udh_present
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->message_id.udh_present = %d\n", clientBdData->message_id.udh_present);
-#endif
- if (setObjectBooleanField(env, bearerData, "hasUserDataHeader", (jboolean)clientBdData->message_id.udh_present) != JNI_SUCCESS)
- return JNI_FAILURE;
-
- // user_response
- // TODO
-
- // mc_time
- if ((clientBdData->mask & WMS_MASK_BD_MC_TIME) == WMS_MASK_BD_MC_TIME) {
- jclass clazz= env->GetObjectClass(bearerData);
- if (NULL == clazz)
- return JNI_FAILURE;
- jfieldID field = env->GetFieldID(clazz, "timeStamp", "[B");
- env->DeleteLocalRef(clazz);
-
- addr_array = env->NewByteArray((jsize)6);
- env->SetObjectField(bearerData, field, addr_array);
-
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->mc_time.year = %d\n", clientBdData->mc_time.year);
- LOGD("clientBdData->mc_time.month = %d\n", clientBdData->mc_time.month);
- LOGD("clientBdData->mc_time.day = %d\n", clientBdData->mc_time.day);
- LOGD("clientBdData->mc_time.hour = %d\n", clientBdData->mc_time.hour);
- LOGD("clientBdData->mc_time.minute = %d\n", clientBdData->mc_time.minute);
- LOGD("clientBdData->mc_time.second = %d\n", clientBdData->mc_time.second);
-#endif
- mctime_buffer[0] = clientBdData->mc_time.year;
- mctime_buffer[1] = clientBdData->mc_time.month;
- mctime_buffer[2] = clientBdData->mc_time.day;
- mctime_buffer[3] = clientBdData->mc_time.hour;
- mctime_buffer[4] = clientBdData->mc_time.minute;
- mctime_buffer[5] = clientBdData->mc_time.second;
- length = sizeof(mctime_buffer) / sizeof(jbyte);
- if (setObjectByteArrayField(env, bearerData, "timeStamp", mctime_buffer, length) != JNI_SUCCESS)
- return JNI_FAILURE;
- }
-
- // clientBdData->mc_time.timezone
- // TODO
-
- // validity_absolute;
- // TODO
-
- // validity_relative;
- // TODO
-
- // deferred_absolute
- // TODO
-
- // deferred_relative;
- // TODO
-
- // priority
- // TODO
-
- // privacy
- // TODO
-
- if ((clientBdData->mask & WMS_MASK_BD_REPLY_OPTION) == WMS_MASK_BD_REPLY_OPTION) {
- // reply_option.user_ack_requested
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->reply_option.user_ack_requested = %d\n", clientBdData->reply_option.user_ack_requested);
-#endif
- if (setObjectBooleanField(env, bearerData, "userAckReq", (jboolean)clientBdData->reply_option.user_ack_requested) != JNI_SUCCESS)
- return JNI_FAILURE;
-
- // reply_option.user_ack_requested
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->reply_option.delivery_ack_requested = %d\n", clientBdData->reply_option.delivery_ack_requested);
-#endif
- if (setObjectBooleanField(env, bearerData, "deliveryAckReq", (jboolean)clientBdData->reply_option.delivery_ack_requested) != JNI_SUCCESS)
- return JNI_FAILURE;
-
- // reply_option.user_ack_requested
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->reply_option.read_ack_requested = %d\n", clientBdData->reply_option.read_ack_requested);
-#endif
- if (setObjectBooleanField(env, bearerData, "readAckReq", (jboolean)clientBdData->reply_option.read_ack_requested) != JNI_SUCCESS)
- return JNI_FAILURE;
- }
-
- // num_messages
- if ((clientBdData->mask & WMS_MASK_BD_NUM_OF_MSGS) == WMS_MASK_BD_NUM_OF_MSGS) {
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->num_messages = %d\n", clientBdData->num_messages);
-#endif
- if (setObjectIntField(env, bearerData, "numberOfMessages", (int)clientBdData->num_messages) != JNI_SUCCESS)
- return JNI_FAILURE;
- }
-
- // alert_mode
- // TODO
-
- // language
- // TODO
-
- // display_mode
- if ((clientBdData->mask & WMS_MASK_BD_DISPLAY_MODE) == WMS_MASK_BD_DISPLAY_MODE) {
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->display_mode = 0x%02x\n", clientBdData->display_mode);
-#endif
- if (setObjectByteField(env, bearerData, "displayMode", (jbyte)clientBdData->display_mode) != JNI_SUCCESS)
- return JNI_FAILURE;
- }
-
- // delivery_status
- if ((clientBdData->mask & WMS_MASK_BD_DELIVERY_STATUS) == WMS_MASK_BD_DELIVERY_STATUS) {
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->delivery_status.error_class = %d\n", clientBdData->delivery_status.error_class);
-#endif
- // delivery_status.error_class
- if (setObjectIntField(env, bearerData, "errorClass", (int)clientBdData->delivery_status.error_class) != JNI_SUCCESS)
- return JNI_FAILURE;
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->delivery_status.status = %d\n", clientBdData->delivery_status.status);
-#endif
- // delivery_status.status
- if (setObjectIntField(env, bearerData, "messageStatus", (int)clientBdData->delivery_status.status) != JNI_SUCCESS)
- return JNI_FAILURE;
- }
-
- // deposit_index
- // TODO
-
- // ip_address
- // TODO
-
- // rsn_no_notify
- // TODO
-
- // other
- // TODO
-
- return JNI_SUCCESS;
-}
-
-
-/* native interface */
-JNIEXPORT jint JNICALL
-Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsSetUserData
- (JNIEnv * env, jobject obj, jobject userData)
-{
- jclass UserDataClass;
- jfieldID field;
- jbyteArray arrData = NULL;
- jbyte data_buf[RIL_CDMA_SMS_USER_DATA_MAX];
- int length;
- jint intData;
- jbyte byteData;
- jboolean booleanData;
-
-#ifdef DBG_LOG_LEVEL_B
- LOGD("nativeCdmaSmsSetUserData()...\n");
-#endif
-
- // set num_headers to 0 here, increment later
- clientBdData->user_data.num_headers = 0;
-
- // user_data.encoding
- if (getObjectIntField(env, userData, "userDataEncoding", &intData) != JNI_SUCCESS)
- return JNI_FAILURE;
- clientBdData->user_data.encoding = (RIL_CDMA_SMS_UserDataEncoding)(intData);
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->user_data.encoding = %d\n", clientBdData->user_data.encoding);
-#endif
-
- // is91ep_type
- // TODO
-
- // user_data.padding_bits
- if (getObjectIntField(env, userData, "paddingBits", &intData) != JNI_SUCCESS)
- return JNI_FAILURE;
- clientBdData->user_data.padding_bits = (unsigned char)(intData);
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->user_data.padding_bits = %d\n", clientBdData->user_data.padding_bits);
-#endif
-
- // user_data.data
- if (getObjectByteArrayField(env, userData, "userData", data_buf, &length) != JNI_SUCCESS )
- return JNI_FAILURE;
- for (int i = 0; i < length; i++) {
- clientBdData->user_data.data[i] = data_buf[i];
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->user_data.data[%d] = 0x%02x\n", i, clientBdData->user_data.data[i]);
-#endif
- }
-
- // user_data.data_len
- // TODO
-
- // number_of_digits
- clientBdData->user_data.number_of_digits = (unsigned char)(length);
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->user_data.number_of_digits = %d\n", clientBdData->user_data.number_of_digits);
-#endif
-
- return JNI_SUCCESS;
-}
-
-
-/* native interface */
-JNIEXPORT jint JNICALL
-Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsGetUserData
- (JNIEnv * env, jobject obj, jobject userData)
-{
- jclass UserDataClass;
- jfieldID field;
- jbyte *data_buf;
- int length;
-
-#ifdef DBG_LOG_LEVEL_B
- LOGD("nativeCdmaSmsGetUserData()...\n");
-#endif
-
- // user_data.num_headers
-// if (setObjectIntField(env, userData, "mNumberOfHeaders", (int)clientBdData->user_data.num_headers) != JNI_SUCCESS)
-// return JNI_FAILURE;
-
- // user_data.encoding
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->user_data.encoding = %d\n", clientBdData->user_data.encoding);
-#endif
- if (setObjectIntField(env, userData, "userDataEncoding", clientBdData->user_data.encoding) != JNI_SUCCESS)
- return JNI_FAILURE;
-
- // is91ep_type
- // TODO
-
- // user_data.data_len
-// if (setObjectIntField(env, userData, "mDataLength", (int)clientBdData->user_data.data_len) != JNI_SUCCESS)
-// return JNI_FAILURE;
-
- // user_data.padding_bits
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->user_data.padding_bits = %d\n", clientBdData->user_data.padding_bits);
-#endif
- if (setObjectIntField(env, userData, "paddingBits", (int)clientBdData->user_data.padding_bits) != JNI_SUCCESS)
- return JNI_FAILURE;
-
- // user_data.data
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->user_data.data_len = %d\n", clientBdData->user_data.data_len);
-#endif
- length = clientBdData->user_data.data_len;
-#ifdef DBG_LOG_LEVEL_A
- for (int i = 0; i < length; i++) {
- LOGD("clientBdData->user_data.data[%d] = 0x%02x\n", i, clientBdData->user_data.data[i]);
- }
-#endif
- data_buf = (jbyte*)clientBdData->user_data.data;
- if (setObjectByteArrayField(env, userData, "userData", data_buf, length) != JNI_SUCCESS)
- return JNI_FAILURE;
-
- // number_of_digits
- // TODO
-
- return JNI_SUCCESS;
-}
-
-
-/* native interface */
-JNIEXPORT jint JNICALL Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsSetUserDataHeader
- (JNIEnv * env, jobject obj, jint ID, jbyteArray data, jint length, jint index)
-{
- jbyte data_buf[length];
-
-#ifdef DBG_LOG_LEVEL_B
- LOGD("nativeCdmaSmsSetUserDataHeader()...\n");
-#endif
-
- env->GetByteArrayRegion(data, 0, length, data_buf);
-
- // user_data.headers[index].header_id
- clientBdData->user_data.headers[index].header_id = (RIL_CDMA_SMS_UdhId)(ID);
-
- // user_data.headers[index].u
- // TODO: add support for all udh id's
- switch(clientBdData->user_data.headers[index].header_id)
- {
- case RIL_CDMA_SMS_UDH_CONCAT_8:
- clientBdData->user_data.headers[index].u.concat_8.msg_ref = data_buf[0];
- clientBdData->user_data.headers[index].u.concat_8.total_sm = data_buf[1];
- clientBdData->user_data.headers[index].u.concat_8.seq_num = data_buf[2];
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->user_data.headers[%d].u.concat_8.msg_ref = 0x%02x\n", index, clientBdData->user_data.headers[index].u.concat_8.msg_ref);
- LOGD("clientBdData->user_data.headers[%d].u.concat_8.total_sm = 0x%02x\n", index, clientBdData->user_data.headers[index].u.concat_8.total_sm);
- LOGD("clientBdData->user_data.headers[%d].u.concat_8.seq_num = 0x%02x\n", index, clientBdData->user_data.headers[index].u.concat_8.seq_num);
-#endif
- break;
- case RIL_CDMA_SMS_UDH_SPECIAL_SM:
- clientBdData->user_data.headers[index].u.special_sm.msg_waiting = (RIL_CDMA_SMS_GWMsgWaiting)(
- (data_buf[0] << 23) | (data_buf[1] << 15) |
- (data_buf[2] << 7) | data_buf[3]);
- clientBdData->user_data.headers[index].u.special_sm.msg_waiting_kind = (RIL_CDMA_SMS_GWMsgWaitingKind)(
- (data_buf[4] << 23) | (data_buf[5] << 15) |
- (data_buf[6] << 7) | data_buf[7]);
- clientBdData->user_data.headers[index].u.special_sm.message_count = data_buf[8];
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->user_data.headers[%d].u.special_sm.msg_waiting = 0x%04x\n", index, clientBdData->user_data.headers[index].u.special_sm.msg_waiting);
- LOGD("clientBdData->user_data.headers[%d].u.special_sm.msg_waiting_kind = 0x%04x\n", index, clientBdData->user_data.headers[index].u.special_sm.msg_waiting_kind);
- LOGD("clientBdData->user_data.headers[%d].u.special_sm.message_count = 0x%02x\n", index, clientBdData->user_data.headers[index].u.special_sm.message_count);
-#endif
- break;
- case RIL_CDMA_SMS_UDH_PORT_8:
- clientBdData->user_data.headers[index].u.wap_8.dest_port = data_buf[0];
- clientBdData->user_data.headers[index].u.wap_8.orig_port = data_buf[1];
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->user_data.headers[%d].u.wap_8.dest_port = 0x%02x\n", index, clientBdData->user_data.headers[index].u.wap_8.dest_port);
- LOGD("clientBdData->user_data.headers[%d].u.wap_8.orig_port = 0x%02x\n", index, clientBdData->user_data.headers[index].u.wap_8.orig_port);
-#endif
- break;
- case RIL_CDMA_SMS_UDH_PORT_16:
- clientBdData->user_data.headers[index].u.wap_16.dest_port = (data_buf[0] << 7) | data_buf[1]; // unsigned short
- clientBdData->user_data.headers[index].u.wap_16.orig_port = (data_buf[2] << 7) | data_buf[3]; // unsigned short
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->user_data.headers[%d].u.wap_16.dest_port = 0x%04x\n", index, clientBdData->user_data.headers[index].u.wap_16.dest_port);
- LOGD("clientBdData->user_data.headers[%d].u.wap_16.orig_port = 0x%04x\n", index, clientBdData->user_data.headers[index].u.wap_16.orig_port);
-#endif
- break;
- case RIL_CDMA_SMS_UDH_CONCAT_16:
- clientBdData->user_data.headers[index].u.concat_16.msg_ref = (data_buf[0] << 7) | data_buf[1]; // unsigned short
- clientBdData->user_data.headers[index].u.concat_16.total_sm = data_buf[2];
- clientBdData->user_data.headers[index].u.concat_16.seq_num = data_buf[3];
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->user_data.headers[%d].u.concat_16.msg_ref = 0x%04x\n", index, clientBdData->user_data.headers[index].u.concat_16.msg_ref);
- LOGD("clientBdData->user_data.headers[%d].u.concat_16.total_sm = 0x%04x\n", index, clientBdData->user_data.headers[index].u.concat_16.total_sm);
- LOGD("clientBdData->user_data.headers[%d].u.concat_16.seq_num = 0x%04x\n", index, clientBdData->user_data.headers[index].u.concat_16.seq_num);
-#endif
- break;
- default:
- break;
- }
-
- // increment num_of_headers
- clientBdData->user_data.num_headers++;
-
- return JNI_SUCCESS;
-}
-
-
-/* native interface */
-JNIEXPORT jbyteArray JNICALL
-Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsGetUserDataHeader
- (JNIEnv * env, jobject obj)
-{
- jbyteArray arrData = NULL;
- jbyte data_buf[sizeof(clientBdData->user_data.headers)];
- int length = 0;
-
-#ifdef DBG_LOG_LEVEL_B
- LOGD("nativeCdmaSmsGetUserDataHeader()...\n");
-#endif
-
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->user_data.num_headers = %d, size = %d\n", clientBdData->user_data.num_headers, sizeof(clientBdData->user_data.headers));
-#endif
-
- for (int index = 0; index < clientBdData->user_data.num_headers; index++) {
- // user_data.headers[index].header_id
- data_buf[length++] = (jbyte)clientBdData->user_data.headers[index].header_id;
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->user_data.headers[%d].header_id = %d", index, clientBdData->user_data.headers[index].header_id);
-#endif
-
- // user_data.headers[index].u
- // TODO: add support for all udh id's
- switch(clientBdData->user_data.headers[index].header_id)
- {
- case RIL_CDMA_SMS_UDH_CONCAT_8:
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->user_data.headers[%d].u.concat_8.msg_ref = 0x%02x\n", index, clientBdData->user_data.headers[index].u.concat_8.msg_ref);
- LOGD("clientBdData->user_data.headers[%d].u.concat_8.total_sm = 0x%02x\n", index, clientBdData->user_data.headers[index].u.concat_8.total_sm);
- LOGD("clientBdData->user_data.headers[%d].u.concat_8.seq_num = 0x%02x\n", index, clientBdData->user_data.headers[index].u.concat_8.seq_num);
-#endif
- data_buf[length++] = 3;
- data_buf[length++] = clientBdData->user_data.headers[index].u.concat_8.msg_ref;
- data_buf[length++] = clientBdData->user_data.headers[index].u.concat_8.total_sm;
- data_buf[length++] = clientBdData->user_data.headers[index].u.concat_8.seq_num;
- break;
- case RIL_CDMA_SMS_UDH_SPECIAL_SM:
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->user_data.headers[%d].u.special_sm.msg_waiting = 0x%04x\n", index, clientBdData->user_data.headers[index].u.special_sm.msg_waiting);
- LOGD("clientBdData->user_data.headers[%d].u.special_sm.msg_waiting_kind = 0x%04x\n", index, clientBdData->user_data.headers[index].u.special_sm.msg_waiting_kind);
- LOGD("clientBdData->user_data.headers[%d].u.special_sm.message_count = 0x%02x\n", index, clientBdData->user_data.headers[index].u.special_sm.message_count);
-#endif
- data_buf[length++] = 9;
- data_buf[length++] = (clientBdData->user_data.headers[index].u.special_sm.msg_waiting & 0xFF000000) >> 23; // int
- data_buf[length++] = (clientBdData->user_data.headers[index].u.special_sm.msg_waiting & 0x00FF0000) >> 15;
- data_buf[length++] = (clientBdData->user_data.headers[index].u.special_sm.msg_waiting & 0x0000FF00) >> 7;
- data_buf[length++] = clientBdData->user_data.headers[index].u.special_sm.msg_waiting & 0x000000FF;
- data_buf[length++] = (clientBdData->user_data.headers[index].u.special_sm.msg_waiting_kind & 0xFF000000) >> 23; // int
- data_buf[length++] = (clientBdData->user_data.headers[index].u.special_sm.msg_waiting_kind & 0x00FF0000) >> 15;
- data_buf[length++] = (clientBdData->user_data.headers[index].u.special_sm.msg_waiting_kind & 0x0000FF00) >> 7;
- data_buf[length++] = clientBdData->user_data.headers[index].u.special_sm.msg_waiting_kind & 0x000000FF;
- data_buf[length++] = clientBdData->user_data.headers[index].u.special_sm.message_count;
- break;
- case RIL_CDMA_SMS_UDH_PORT_8:
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->user_data.headers[%d].u.wap_8.dest_port = 0x%02x\n", index, clientBdData->user_data.headers[index].u.wap_8.dest_port);
- LOGD("clientBdData->user_data.headers[%d].u.wap_8.orig_port = 0x%02x\n", index, clientBdData->user_data.headers[index].u.wap_8.orig_port);
-#endif
- data_buf[length++] = 2;
- data_buf[length++] = clientBdData->user_data.headers[index].u.wap_8.dest_port;
- data_buf[length++] = clientBdData->user_data.headers[index].u.wap_8.orig_port;
- break;
- case RIL_CDMA_SMS_UDH_PORT_16:
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->user_data.headers[%d].u.wap_16.dest_port = 0x%04x\n", index, clientBdData->user_data.headers[index].u.wap_16.dest_port);
- LOGD("clientBdData->user_data.headers[%d].u.wap_16.orig_port = 0x%04x\n", index, clientBdData->user_data.headers[index].u.wap_16.orig_port);
-#endif
- data_buf[length++] = 4;
- data_buf[length++] = (clientBdData->user_data.headers[index].u.wap_16.dest_port & 0xFF00) >> 7; // unsigned short
- data_buf[length++] = clientBdData->user_data.headers[index].u.wap_16.dest_port & 0x00FF;
- data_buf[length++] = (clientBdData->user_data.headers[index].u.wap_16.orig_port & 0xFF00) >> 7; // unsigned short
- data_buf[length++] = clientBdData->user_data.headers[index].u.wap_16.orig_port & 0x00FF;
- break;
- case RIL_CDMA_SMS_UDH_CONCAT_16:
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->user_data.headers[%d].u.concat_16.msg_ref = 0x%04x\n", index, clientBdData->user_data.headers[index].u.concat_16.msg_ref);
- LOGD("clientBdData->user_data.headers[%d].u.concat_16.total_sm = 0x%04x\n", index, clientBdData->user_data.headers[index].u.concat_16.total_sm);
- LOGD("clientBdData->user_data.headers[%d].u.concat_16.seq_num = 0x%04x\n", index, clientBdData->user_data.headers[index].u.concat_16.seq_num);
-#endif
- data_buf[length++] = 4;
- data_buf[length++] = (clientBdData->user_data.headers[index].u.concat_16.msg_ref & 0xFF00) >> 7; // unsigned short
- data_buf[length++] = clientBdData->user_data.headers[index].u.concat_16.msg_ref & 0x00FF;
- data_buf[length++] = clientBdData->user_data.headers[index].u.concat_16.total_sm;
- data_buf[length++] = clientBdData->user_data.headers[index].u.concat_16.seq_num;
- break;
- default:
- break;
- }
- }
-
- if (length != 0) {
- arrData = env->NewByteArray((jsize)length);
- env->SetByteArrayRegion(arrData, 0, length, data_buf);
- }
-
- return arrData;
-}
-
-
-/* native interface */
-JNIEXPORT jint JNICALL
-Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsSetSmsAddress
- (JNIEnv * env, jobject obj, jobject smsAddress)
-{
- jclass SmsAddressClass;
- jfieldID field;
- jbyteArray arrData = NULL;
- jbyte byte_buf[RIL_CDMA_SMS_ADDRESS_MAX];
- int length;
- jint intData;
- jbyte byteData;
- jboolean booleanData;
-
-#ifdef DBG_LOG_LEVEL_B
- LOGD("nativeCdmaSmsSetSmsAddress()...\n");
-#endif
-
- // callback.digit_mode
- if (getObjectByteField(env, smsAddress, "digitMode", &byteData) != JNI_SUCCESS)
- return JNI_FAILURE;
- clientBdData->callback.digit_mode = (RIL_CDMA_SMS_DigitMode)(byteData);
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->callback.digit_mode = 0x%02x\n", clientBdData->callback.digit_mode);
-#endif
-
- // callback.number_mode
- if (getObjectByteField(env, smsAddress, "numberMode", &byteData) != JNI_SUCCESS)
- return JNI_FAILURE;
- clientBdData->callback.number_mode = (RIL_CDMA_SMS_NumberMode)(byteData);
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->callback.number_mode = 0x%02x\n", clientBdData->callback.number_mode);
-#endif
-
- // callback.number_type
- if (getObjectIntField(env, smsAddress, "ton", &intData) != JNI_SUCCESS)
- return JNI_FAILURE;
- clientBdData->callback.number_type = (RIL_CDMA_SMS_NumberType)(intData);
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->callback.number_type = %d\n", clientBdData->callback.number_type);
-#endif
-
- // callback.number_plan
- if (getObjectByteField(env, smsAddress, "numberPlan", &byteData) != JNI_SUCCESS)
- return JNI_FAILURE;
- clientBdData->callback.number_plan = (RIL_CDMA_SMS_NumberPlan)(byteData);
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->callback.number_plan = 0x%02x\n", clientBdData->callback.number_plan);
-#endif
-
- // callback.number_of_digits
- if (getObjectByteField(env, smsAddress, "numberOfDigits", &byteData) != JNI_SUCCESS)
- return JNI_FAILURE;
- clientBdData->callback.number_of_digits = byteData;
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->callback.number_of_digits = %d\n",clientBdData->callback.number_of_digits);
-#endif
-
- // callback.digits
- if (getObjectByteArrayField(env, smsAddress, "origBytes", byte_buf, &length) != JNI_SUCCESS)
- return JNI_FAILURE;
- for (int i = 0; i < clientBdData->callback.number_of_digits; i++) {
- clientBdData->callback.digits[i] = byte_buf[i];
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->callback.digits[%d] = 0x%02x\n", i, clientBdData->callback.digits[i]);
-#endif
- }
-
- return JNI_SUCCESS;
-}
-
-
-/* native interface */
-JNIEXPORT jint JNICALL
-Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsGetSmsAddress
- (JNIEnv * env, jobject obj, jobject smsAddress)
-{
- jclass SmsAddressClass;
- jfieldID field;
- jbyteArray arrData = NULL;
- jbyte *byte_buf;
- int length;
-
-#ifdef DBG_LOG_LEVEL_B
- LOGD("nativeCdmaSmsGetSmsAddress()...\n");
-#endif
-
- // callback.digit_mode
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->callback.digit_mode = 0x%02x\n", clientBdData->callback.digit_mode);
-#endif
- if (setObjectByteField(env, smsAddress, "digitMode", (jbyte)clientBdData->callback.digit_mode) != JNI_SUCCESS)
- return JNI_FAILURE;
-
- // callback.number_mode
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->callback.number_mode = 0x%02x\n", clientBdData->callback.number_mode);
-#endif
- if (setObjectByteField(env, smsAddress, "numberMode", (jbyte)clientBdData->callback.number_mode) != JNI_SUCCESS)
- return JNI_FAILURE;
-
- // callback.number_type
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->callback.number_type = %d\n", clientBdData->callback.number_type);
-#endif
- if (setObjectIntField(env, smsAddress, "ton", (jint)clientBdData->callback.number_type) != JNI_SUCCESS)
- return JNI_FAILURE;
-
- // callback.number_plan
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->callback.number_plan = 0x%02x\n", clientBdData->callback.number_plan);
-#endif
- if (setObjectByteField(env, smsAddress, "numberPlan", (jbyte)clientBdData->callback.number_plan) != JNI_SUCCESS)
- return JNI_FAILURE;
-
- // callback.number_of_digits
-#ifdef DBG_LOG_LEVEL_A
- LOGD("clientBdData->callback.number_of_digits = %d\n", clientBdData->callback.number_of_digits);
-#endif
- if (setObjectByteField(env, smsAddress, "numberOfDigits", (jbyte)clientBdData->callback.number_of_digits) != JNI_SUCCESS)
- return JNI_FAILURE;
-
- // callback.digits
- byte_buf = (jbyte*)clientBdData->callback.digits;
- length = clientBdData->callback.number_of_digits;
-#ifdef DBG_LOG_LEVEL_A
- for (int i = 0; i < length; i++) {
- LOGD("clientBdData->callback.digits[%d] = 0x%02x\n", i, clientBdData->callback.digits[i]);
- }
-#endif
-
- if (setObjectByteArrayField(env, smsAddress, "origBytes", byte_buf, length) != JNI_SUCCESS)
- return JNI_FAILURE;
-
- return JNI_SUCCESS;
-}
-
-
-/* native interface */
-JNIEXPORT jbyteArray JNICALL
-Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsEncodeSms
- (JNIEnv * env, jobject obj)
-{
- RIL_CDMA_Encoded_SMS *encoded_sms = (RIL_CDMA_Encoded_SMS *)malloc(sizeof(RIL_CDMA_Encoded_SMS));
- jbyte* data_buf;
- jint result = JNI_SUCCESS;
- jbyteArray encodedSMS;
-
-#ifdef DBG_LOG_LEVEL_B
- LOGD("nativeCdmaSmsEncodeSms(): entry\n");
-#endif
-
- if (NULL == encoded_sms) {
- jniThrowException(env, "java/lang/NullPointerException", "encoded_sms is null");
- return NULL;
- }
- memset(encoded_sms, 0, sizeof(RIL_CDMA_Encoded_SMS));
-
- // call CDMA SMS encode function
- if(wmsts_ril_cdma_encode_sms(clientBdData, encoded_sms) != RIL_E_SUCCESS) {
- jniThrowException(env, "java/lang/Exception", "CDMA SMS Encoding failed");
- return NULL;
- }
-
-#ifdef DBG_LOG_LEVEL_A
- LOGD(" EncodeSMS: length = %i\n", encoded_sms->length);
-#endif
- encodedSMS = env->NewByteArray((jsize)encoded_sms->length);
- env->SetByteArrayRegion(encodedSMS, 0, encoded_sms->length, (jbyte*)encoded_sms->data);
- free(encoded_sms);
-
- return encodedSMS;
-}
-
-
-/* native interface */
-JNIEXPORT jint JNICALL
-Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsDecodeSms
- (JNIEnv * env, jobject obj, jbyteArray encodedSMS)
-{
- RIL_CDMA_Encoded_SMS *encoded_sms = (RIL_CDMA_Encoded_SMS *)malloc(sizeof(RIL_CDMA_Encoded_SMS));
- jbyte* data_buf;
- jint result = JNI_SUCCESS;
- jsize length;
-
-#ifdef DBG_LOG_LEVEL_B
- LOGD("nativeCdmaSmsDecodeSms(): entry\n");
-#endif
-
- if (NULL == encoded_sms) {
- jniThrowException(env, "java/lang/NullPointerException", "encoded_sms is null");
- return JNI_FAILURE;
- }
- memset(encoded_sms, 0, sizeof(RIL_CDMA_Encoded_SMS));
-
- length = env->GetArrayLength(encodedSMS);
- if (length < 0 || length > 255) {
- jniThrowException(env, "java/lang/ArrayIndexOutOfBounds", "wrong encoded SMS data length");
- return JNI_FAILURE;
- }
- encoded_sms->length = length;
-#ifdef DBG_LOG_LEVEL_A
- LOGD(" DecodeSMS: arrayLength = %d\n", encoded_sms->length);
-#endif
- data_buf = env->GetByteArrayElements(encodedSMS, NULL);
- encoded_sms->data = (unsigned char*)data_buf;
- env->ReleaseByteArrayElements(encodedSMS, data_buf, 0);
-
- // call CDMA SMS decode function
- if(wmsts_ril_cdma_decode_sms(encoded_sms, clientBdData) != RIL_E_SUCCESS) {
- jniThrowException(env, "java/lang/Exception", "CDMA SMS Decoding failed");
- result = JNI_FAILURE;
- }
-
- free(encoded_sms);
-
- return result;
-}
-
-
-// ---------------------------------------------------------------------------
-
-static const char *classPathName = "com/android/internal/telephony/cdma/sms/SmsDataCoding";
-
-static JNINativeMethod methods[] = {
- /* name, signature, funcPtr */
- {"nativeCdmaSmsConstructClientBD", "()I",
- (void*)Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsConstructClientBD },
- {"nativeCdmaSmsDestructClientBD", "()I",
- (void*)Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsDestructClientBD },
- {"nativeCdmaSmsSetBearerDataPrimitives", "(Lcom/android/internal/telephony/cdma/sms/BearerData;)I",
- (void*)Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsSetBearerDataPrimitives },
- {"nativeCdmaSmsGetBearerDataPrimitives", "(Lcom/android/internal/telephony/cdma/sms/BearerData;)I",
- (void*)Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsGetBearerDataPrimitives },
- {"nativeCdmaSmsSetUserData", "(Lcom/android/internal/telephony/cdma/sms/UserData;)I",
- (void*)Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsSetUserData },
- {"nativeCdmaSmsGetUserData", "(Lcom/android/internal/telephony/cdma/sms/UserData;)I",
- (void*)Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsGetUserData },
- {"nativeCdmaSmsSetUserDataHeader", "(I[BII)I",
- (void*)Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsSetUserDataHeader },
- {"nativeCdmaSmsGetUserDataHeader", "()[B",
- (void*)Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsGetUserDataHeader },
- {"nativeCdmaSmsSetSmsAddress", "(Lcom/android/internal/telephony/cdma/sms/CdmaSmsAddress;)I",
- (void*)Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsSetSmsAddress },
- {"nativeCdmaSmsGetSmsAddress", "(Lcom/android/internal/telephony/cdma/sms/CdmaSmsAddress;)I",
- (void*)Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsGetSmsAddress },
- {"nativeCdmaSmsEncodeSms", "()[B",
- (void*)Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsEncodeSms },
- {"nativeCdmaSmsDecodeSms", "([B)I",
- (void*)Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsDecodeSms },
-};
-
-int register_android_cdma_sms_methods(JNIEnv *_env)
-{
- return android::AndroidRuntime::registerNativeMethods(
- _env, classPathName, methods, NELEM(methods));
-}
-
-// ---------------------------------------------------------------------------
-
-jint JNI_OnLoad(JavaVM* vm, void* reserved)
-{
- JNIEnv* env = NULL;
- jint result = -1;
-
- if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
- LOGE("ERROR: GetEnv failed\n");
- goto bail;
- }
- assert(env != NULL);
-
- if (register_android_cdma_sms_methods(env) < 0) {
- LOGE("ERROR: CDMA SMS native registration failed\n");
- goto bail;
- }
-
- /* success -- return valid version number */
- result = JNI_VERSION_1_4;
-
-bail:
- return result;
-}
diff --git a/telephony/jni/cdmasms/cdma_sms_jni.h b/telephony/jni/cdmasms/cdma_sms_jni.h
deleted file mode 100644
index 253c006..0000000
--- a/telephony/jni/cdmasms/cdma_sms_jni.h
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class com_android_internal_telephony_cdma_sms_SmsDataCoding */
-
-#ifndef _Included_com_android_internal_telephony_cdma_sms_SmsDataCoding
-#define _Included_com_android_internal_telephony_cdma_sms_SmsDataCoding
-#ifdef __cplusplus
-extern "C" {
-#endif
-#undef com_android_internal_telephony_cdma_sms_SmsDataCoding_CDMA_SMS_WMS_MASK_BD_NULL
-#define com_android_internal_telephony_cdma_sms_SmsDataCoding_CDMA_SMS_WMS_MASK_BD_NULL 0L
-#undef com_android_internal_telephony_cdma_sms_SmsDataCoding_CDMA_SMS_WMS_MASK_BD_MSG_ID
-#define com_android_internal_telephony_cdma_sms_SmsDataCoding_CDMA_SMS_WMS_MASK_BD_MSG_ID 1L
-#undef com_android_internal_telephony_cdma_sms_SmsDataCoding_CDMA_SMS_WMS_MASK_BD_USER_DATA
-#define com_android_internal_telephony_cdma_sms_SmsDataCoding_CDMA_SMS_WMS_MASK_BD_USER_DATA 2L
-#undef com_android_internal_telephony_cdma_sms_SmsDataCoding_CDMA_SMS_WMS_MASK_BD_MC_TIME
-#define com_android_internal_telephony_cdma_sms_SmsDataCoding_CDMA_SMS_WMS_MASK_BD_MC_TIME 8L
-#undef com_android_internal_telephony_cdma_sms_SmsDataCoding_CDMA_SMS_WMS_MASK_BD_NUM_OF_MSGS
-#define com_android_internal_telephony_cdma_sms_SmsDataCoding_CDMA_SMS_WMS_MASK_BD_NUM_OF_MSGS 2048L
-#undef com_android_internal_telephony_cdma_sms_SmsDataCoding_CDMA_SMS_WMS_MASK_BD_CALLBACK
-#define com_android_internal_telephony_cdma_sms_SmsDataCoding_CDMA_SMS_WMS_MASK_BD_CALLBACK 16384L
-#undef com_android_internal_telephony_cdma_sms_SmsDataCoding_CDMA_SMS_WMS_MASK_BD_DISPLAY_MODE
-#define com_android_internal_telephony_cdma_sms_SmsDataCoding_CDMA_SMS_WMS_MASK_BD_DISPLAY_MODE 32768L
-#undef com_android_internal_telephony_cdma_sms_SmsDataCoding_JNI_CDMA_SMS_SUCCESS
-#define com_android_internal_telephony_cdma_sms_SmsDataCoding_JNI_CDMA_SMS_SUCCESS 0L
-#undef com_android_internal_telephony_cdma_sms_SmsDataCoding_JNI_CDMA_SMS_FAILURE
-#define com_android_internal_telephony_cdma_sms_SmsDataCoding_JNI_CDMA_SMS_FAILURE 1L
-#undef com_android_internal_telephony_cdma_sms_SmsDataCoding_JNI_CDMA_SMS_DATA_LEN_OUT_OF_RANGE
-#define com_android_internal_telephony_cdma_sms_SmsDataCoding_JNI_CDMA_SMS_DATA_LEN_OUT_OF_RANGE 2L
-#undef com_android_internal_telephony_cdma_sms_SmsDataCoding_JNI_CDMA_SMS_CLASS_UNKNOWN
-#define com_android_internal_telephony_cdma_sms_SmsDataCoding_JNI_CDMA_SMS_CLASS_UNKNOWN 3L
-#undef com_android_internal_telephony_cdma_sms_SmsDataCoding_JNI_CDMA_SMS_FIELD_ID_UNKNOWN
-#define com_android_internal_telephony_cdma_sms_SmsDataCoding_JNI_CDMA_SMS_FIELD_ID_UNKNOWN 4L
-#undef com_android_internal_telephony_cdma_sms_SmsDataCoding_JNI_CDMA_SMS_OUT_OF_MEMORY
-#define com_android_internal_telephony_cdma_sms_SmsDataCoding_JNI_CDMA_SMS_OUT_OF_MEMORY 5L
-/*
- * Class: com_android_internal_telephony_cdma_sms_SmsDataCoding
- * Method: nativeCdmaSmsConstructClientBD
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsConstructClientBD
- (JNIEnv *, jobject);
-
-/*
- * Class: com_android_internal_telephony_cdma_sms_SmsDataCoding
- * Method: nativeCdmaSmsDestructClientBD
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsDestructClientBD
- (JNIEnv *, jobject);
-
-/*
- * Class: com_android_internal_telephony_cdma_sms_SmsDataCoding
- * Method: nativeCdmaSmsSetBearerDataPrimitives
- * Signature: (Lcom/android/internal/telephony/cdma/sms/BearerData;)I
- */
-JNIEXPORT jint JNICALL Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsSetBearerDataPrimitives
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: com_android_internal_telephony_cdma_sms_SmsDataCoding
- * Method: nativeCdmaSmsGetBearerDataPrimitives
- * Signature: (Lcom/android/internal/telephony/cdma/sms/BearerData;)I
- */
-JNIEXPORT jint JNICALL Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsGetBearerDataPrimitives
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: com_android_internal_telephony_cdma_sms_SmsDataCoding
- * Method: nativeCdmaSmsSetUserData
- * Signature: (Lcom/android/internal/telephony/cdma/sms/UserData;)I
- */
-JNIEXPORT jint JNICALL Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsSetUserData
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: com_android_internal_telephony_cdma_sms_SmsDataCoding
- * Method: nativeCdmaSmsGetUserData
- * Signature: (Lcom/android/internal/telephony/cdma/sms/UserData;)I
- */
-JNIEXPORT jint JNICALL Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsGetUserData
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: com_android_internal_telephony_cdma_sms_SmsDataCoding
- * Method: nativeCdmaSmsSetUserDataHeader
- * Signature: (I[BII)I
- */
-JNIEXPORT jint JNICALL Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsSetUserDataHeader
- (JNIEnv *, jobject, jint, jbyteArray, jint, jint);
-
-/*
- * Class: com_android_internal_telephony_cdma_sms_SmsDataCoding
- * Method: nativeCdmaSmsGetUserDataHeader
- * Signature: ()[B
- */
-JNIEXPORT jbyteArray JNICALL Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsGetUserDataHeader
- (JNIEnv *, jobject);
-
-/*
- * Class: com_android_internal_telephony_cdma_sms_SmsDataCoding
- * Method: nativeCdmaSmsSetSmsAddress
- * Signature: (Lcom/android/internal/telephony/cdma/sms/CdmaSmsAddress;)I
- */
-JNIEXPORT jint JNICALL Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsSetSmsAddress
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: com_android_internal_telephony_cdma_sms_SmsDataCoding
- * Method: nativeCdmaSmsGetSmsAddress
- * Signature: (Lcom/android/internal/telephony/cdma/sms/CdmaSmsAddress;)I
- */
-JNIEXPORT jint JNICALL Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsGetSmsAddress
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: com_android_internal_telephony_cdma_sms_SmsDataCoding
- * Method: nativeCdmaSmsEncodeSms
- * Signature: ()[B
- */
-JNIEXPORT jbyteArray JNICALL Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsEncodeSms
- (JNIEnv *, jobject);
-
-/*
- * Class: com_android_internal_telephony_cdma_sms_SmsDataCoding
- * Method: nativeCdmaSmsDecodeSms
- * Signature: ([B)I
- */
-JNIEXPORT jint JNICALL Java_com_android_internal_telephony_cdma_sms_SmsDataCoding_nativeCdmaSmsDecodeSms
- (JNIEnv *, jobject, jbyteArray);
-
-/**
- * CDMA SMS return value defines
- */
-#define JNI_SUCCESS \
-com_android_internal_telephony_cdma_sms_SmsDataCoding_JNI_CDMA_SMS_SUCCESS /**< Successful operation */
-#define JNI_FAILURE \
-com_android_internal_telephony_cdma_sms_SmsDataCoding_JNI_CDMA_SMS_FAILURE /**< General failure */
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/tests/AndroidTests/src/com/android/unit_tests/BitwiseStreamsTest.java b/tests/AndroidTests/src/com/android/unit_tests/BitwiseStreamsTest.java
new file mode 100644
index 0000000..a935247
--- /dev/null
+++ b/tests/AndroidTests/src/com/android/unit_tests/BitwiseStreamsTest.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright (C) 2006 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.unit_tests;
+
+import com.android.internal.util.BitwiseInputStream;
+import com.android.internal.util.BitwiseOutputStream;
+import com.android.internal.util.HexDump;
+
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import android.util.Log;
+
+public class BitwiseStreamsTest extends AndroidTestCase {
+ private final static String LOG_TAG = "BitwiseStreamsTest";
+
+ @SmallTest
+ public void testOne() throws Exception {
+ int offset = 3;
+ byte[] inBuf = HexDump.hexStringToByteArray("FFDD");
+ BitwiseOutputStream outStream = new BitwiseOutputStream(30);
+ outStream.skip(offset);
+ for (int i = 0; i < inBuf.length; i++) outStream.write(8, inBuf[i]);
+ byte[] outBuf = outStream.toByteArray();
+ BitwiseInputStream inStream = new BitwiseInputStream(outBuf);
+ byte[] inBufDup = new byte[inBuf.length];
+ inStream.skip(offset);
+ for (int i = 0; i < inBufDup.length; i++) inBufDup[i] = inStream.read(8);
+ assertEquals(HexDump.toHexString(inBuf), HexDump.toHexString(inBufDup));
+ }
+
+ @SmallTest
+ public void testTwo() throws Exception {
+ int offset = 3;
+ byte[] inBuf = HexDump.hexStringToByteArray("11d4f29c0e9ad3c36e72584e064d9b53");
+ BitwiseOutputStream outStream = new BitwiseOutputStream(30);
+ outStream.skip(offset);
+ for (int i = 0; i < inBuf.length; i++) outStream.write(8, inBuf[i]);
+ BitwiseInputStream inStream = new BitwiseInputStream(outStream.toByteArray());
+ inStream.skip(offset);
+ byte[] inBufDup = new byte[inBuf.length];
+ for (int i = 0; i < inBufDup.length; i++) inBufDup[i] = inStream.read(8);
+ assertEquals(HexDump.toHexString(inBuf), HexDump.toHexString(inBufDup));
+ }
+
+ @SmallTest
+ public void testThree() throws Exception {
+ int offset = 4;
+ byte[] inBuf = HexDump.hexStringToByteArray("00031040900112488ea794e0");
+ BitwiseOutputStream outStream = new BitwiseOutputStream(30);
+ outStream.skip(offset);
+ for (int i = 0; i < inBuf.length; i++) outStream.write(8, inBuf[i]);
+ BitwiseInputStream inStream = new BitwiseInputStream(outStream.toByteArray());
+ inStream.skip(offset);
+ byte[] inBufDup = new byte[inBuf.length];
+ for (int i = 0; i < inBufDup.length; i++) inBufDup[i] = inStream.read(8);
+ assertEquals(HexDump.toHexString(inBuf), HexDump.toHexString(inBufDup));
+ }
+
+ @SmallTest
+ public void testFour() throws Exception {
+ int offset = 7;
+ byte[] inBuf = HexDump.hexStringToByteArray("00031040900112488ea794e0");
+ BitwiseOutputStream outStream = new BitwiseOutputStream(30);
+ outStream.skip(offset);
+ for (int i = 0; i < inBuf.length; i++) {
+ outStream.write(5, inBuf[i] >>> 3);
+ outStream.write(3, inBuf[i] & 0x07);
+ }
+ BitwiseInputStream inStream = new BitwiseInputStream(outStream.toByteArray());
+ inStream.skip(offset);
+ byte[] inBufDup = new byte[inBuf.length];
+ for (int i = 0; i < inBufDup.length; i++) inBufDup[i] = inStream.read(8);
+ assertEquals(HexDump.toHexString(inBuf), HexDump.toHexString(inBufDup));
+ }
+
+ @SmallTest
+ public void testFive() throws Exception {
+ int num_runs = 10;
+ long start = android.os.SystemClock.elapsedRealtime();
+ for (int run = 0; run < num_runs; run++) {
+ int offset = run % 8;
+ byte[] inBuf = HexDump.hexStringToByteArray("00031040900112488ea794e0");
+ BitwiseOutputStream outStream = new BitwiseOutputStream(30);
+ outStream.skip(offset);
+ for (int i = 0; i < inBuf.length; i++) {
+ outStream.write(5, inBuf[i] >>> 3);
+ outStream.write(3, inBuf[i] & 0x07);
+ }
+ BitwiseInputStream inStream = new BitwiseInputStream(outStream.toByteArray());
+ inStream.skip(offset);
+ byte[] inBufDup = new byte[inBuf.length];
+ for (int i = 0; i < inBufDup.length; i++) inBufDup[i] = inStream.read(8);
+ assertEquals(HexDump.toHexString(inBuf), HexDump.toHexString(inBufDup));
+ }
+ long end = android.os.SystemClock.elapsedRealtime();
+ Log.d(LOG_TAG, "repeated encode-decode took " + (end - start) + " ms");
+ }
+}
diff --git a/tests/AndroidTests/src/com/android/unit_tests/CdmaSmsTest.java b/tests/AndroidTests/src/com/android/unit_tests/CdmaSmsTest.java
new file mode 100644
index 0000000..723512c
--- /dev/null
+++ b/tests/AndroidTests/src/com/android/unit_tests/CdmaSmsTest.java
@@ -0,0 +1,273 @@
+/*
+ * Copyright (C) 2006 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.unit_tests;
+
+import com.android.internal.telephony.GsmAlphabet;
+import com.android.internal.telephony.SmsHeader;
+import com.android.internal.telephony.cdma.sms.BearerData;
+import com.android.internal.telephony.cdma.sms.UserData;
+import com.android.internal.telephony.cdma.sms.CdmaSmsAddress;
+import com.android.internal.util.BitwiseInputStream;
+import com.android.internal.util.BitwiseOutputStream;
+import com.android.internal.util.HexDump;
+
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import java.util.Iterator;
+
+import android.util.Log;
+
+public class CdmaSmsTest extends AndroidTestCase {
+ private final static String LOG_TAG = "Cdma_Sms_Test";
+
+ private static UserData makeUserData(String msg) {
+ UserData userData = new UserData();
+ byte[] payload;
+ try {
+ payload = GsmAlphabet.stringToGsm7BitPacked(msg);
+ userData.payload = new byte[payload.length - 1];
+ for (int i = 0; i < userData.payload.length; i++) userData.payload[i] = payload[i + 1];
+ userData.numFields = payload[0];
+ userData.paddingBits = (userData.payload.length * 8) - (userData.numFields * 7);
+ userData.paddingBits = 0; // XXX this is better, wtf?
+ userData.msgEncoding = UserData.ENCODING_GSM_7BIT_ALPHABET;
+ } catch (com.android.internal.telephony.EncodeException ex) {
+ assertEquals(1, 0);
+ }
+ return userData;
+ }
+
+ @SmallTest
+ public void testStandardSms() throws Exception {
+ String pdu = "00031040900112488ea794e074d69e1b7392c270326cde9e98";
+ BearerData bearerData = BearerData.decode(HexDump.hexStringToByteArray(pdu));
+ assertEquals("Test standard SMS", bearerData.userData.payloadStr);
+ }
+
+ @SmallTest
+ public void testStandardSmsFeedback() throws Exception {
+ BearerData bearerData = new BearerData();
+ bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
+ bearerData.messageId = 0;
+ bearerData.hasUserDataHeader = false;
+ String payloadStr = "Test standard SMS";
+ bearerData.userData = makeUserData(payloadStr);
+ byte []encodedSms = BearerData.encode(bearerData);
+ BearerData revBearerData = BearerData.decode(encodedSms);
+ assertEquals(BearerData.MESSAGE_TYPE_DELIVER, revBearerData.messageType);
+ assertEquals(0, revBearerData.messageId);
+ assertEquals(false, revBearerData.hasUserDataHeader);
+ assertEquals(UserData.ENCODING_GSM_7BIT_ALPHABET, revBearerData.userData.msgEncoding);
+ assertEquals(payloadStr.length(), revBearerData.userData.numFields);
+ assertEquals(payloadStr, revBearerData.userData.payloadStr);
+ }
+
+ @SmallTest
+ public void testAltUserDataFeedback() throws Exception {
+ try {
+ BearerData bearerData = new BearerData();
+ bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
+ bearerData.messageId = 0;
+ bearerData.hasUserDataHeader = false;
+ UserData userData = new UserData();
+ String str1 = "test ascii user data encoding";
+ userData.payload = str1.getBytes("US-ASCII");
+ userData.numFields = str1.length();
+ userData.paddingBits = 0;
+ userData.msgEncoding = UserData.ENCODING_7BIT_ASCII;
+ bearerData.userData = userData;
+ byte []encodedSms = BearerData.encode(bearerData);
+ BearerData revBearerData = BearerData.decode(encodedSms);
+ assertEquals(str1, revBearerData.userData.payloadStr);
+ String str2 = "\u0160u\u1E5B\u0301r\u1ECFg\uD835\uDC1At\u00E9\u4E002\u3042";
+ userData.payload = str2.getBytes("UTF-16");
+ userData.numFields = str2.length() + 1;
+ userData.msgEncoding = UserData.ENCODING_UNICODE_16;
+ encodedSms = BearerData.encode(bearerData);
+ revBearerData = BearerData.decode(encodedSms);
+ assertEquals(str2, revBearerData.userData.payloadStr);
+ } catch (java.io.UnsupportedEncodingException ex) {
+ throw new RuntimeException("user data encoding error");
+ }
+ }
+
+ @SmallTest
+ public void testReplyOption() throws Exception {
+ String pdu1 = "0003104090011648b6a794e0705476bf77bceae934fe5f6d94d87450080a0180";
+ BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1));
+ assertEquals("Test Acknowledgement 1", bd1.userData.payloadStr);
+ assertEquals(true, bd1.userAckReq);
+ assertEquals(false, bd1.deliveryAckReq);
+ assertEquals(false, bd1.readAckReq);
+ assertEquals(false, bd1.reportReq);
+ String pdu2 = "0003104090011648b6a794e0705476bf77bceae934fe5f6d94d87490080a0140";
+ BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2));
+ assertEquals("Test Acknowledgement 2", bd2.userData.payloadStr);
+ assertEquals(false, bd2.userAckReq);
+ assertEquals(true, bd2.deliveryAckReq);
+ assertEquals(false, bd2.readAckReq);
+ assertEquals(false, bd2.reportReq);
+ String pdu3 = "0003104090011648b6a794e0705476bf77bceae934fe5f6d94d874d0080a0120";
+ BearerData bd3 = BearerData.decode(HexDump.hexStringToByteArray(pdu3));
+ assertEquals("Test Acknowledgement 3", bd3.userData.payloadStr);
+ assertEquals(false, bd3.userAckReq);
+ assertEquals(false, bd3.deliveryAckReq);
+ assertEquals(true, bd3.readAckReq);
+ assertEquals(false, bd3.reportReq);
+ String pdu4 = "0003104090011648b6a794e0705476bf77bceae934fe5f6d94d87510080a0110";
+ BearerData bd4 = BearerData.decode(HexDump.hexStringToByteArray(pdu4));
+ assertEquals("Test Acknowledgement 4", bd4.userData.payloadStr);
+ assertEquals(false, bd4.userAckReq);
+ assertEquals(false, bd4.deliveryAckReq);
+ assertEquals(false, bd4.readAckReq);
+ assertEquals(true, bd4.reportReq);
+ }
+
+ @SmallTest
+ public void testReplyOptionFeedback() throws Exception {
+ BearerData bearerData = new BearerData();
+ bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
+ bearerData.messageId = 0;
+ bearerData.hasUserDataHeader = false;
+ bearerData.userData = makeUserData("test reply option");
+ bearerData.userAckReq = true;
+ byte []encodedSms = BearerData.encode(bearerData);
+ BearerData revBearerData = BearerData.decode(encodedSms);
+ assertEquals(true, revBearerData.userAckReq);
+ assertEquals(false, revBearerData.deliveryAckReq);
+ assertEquals(false, revBearerData.readAckReq);
+ assertEquals(false, revBearerData.reportReq);
+ bearerData.userAckReq = false;
+ bearerData.deliveryAckReq = true;
+ encodedSms = BearerData.encode(bearerData);
+ revBearerData = BearerData.decode(encodedSms);
+ assertEquals(false, revBearerData.userAckReq);
+ assertEquals(true, revBearerData.deliveryAckReq);
+ assertEquals(false, revBearerData.readAckReq);
+ assertEquals(false, revBearerData.reportReq);
+ bearerData.deliveryAckReq = false;
+ bearerData.readAckReq = true;
+ encodedSms = BearerData.encode(bearerData);
+ revBearerData = BearerData.decode(encodedSms);
+ assertEquals(false, revBearerData.userAckReq);
+ assertEquals(false, revBearerData.deliveryAckReq);
+ assertEquals(true, revBearerData.readAckReq);
+ assertEquals(false, revBearerData.reportReq);
+ bearerData.readAckReq = false;
+ bearerData.reportReq = true;
+ encodedSms = BearerData.encode(bearerData);
+ revBearerData = BearerData.decode(encodedSms);
+ assertEquals(false, revBearerData.userAckReq);
+ assertEquals(false, revBearerData.deliveryAckReq);
+ assertEquals(false, revBearerData.readAckReq);
+ assertEquals(true, revBearerData.reportReq);
+ }
+
+ @SmallTest
+ public void testNumberOfMessages() throws Exception {
+ String pdu1 = "000310409001124896a794e07595f69f199540ea759a0dc8e00b0163";
+ BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1));
+ assertEquals("Test Voice mail 99", bd1.userData.payloadStr);
+ assertEquals(99, bd1.numberOfMessages);
+ String pdu2 = "00031040900113489ea794e07595f69f199540ea759a0988c0600b0164";
+ BearerData bd2 = BearerData.decode(HexDump.hexStringToByteArray(pdu2));
+ assertEquals("Test Voice mail 100", bd2.userData.payloadStr);
+ assertEquals(100, bd2.numberOfMessages);
+ }
+
+ @SmallTest
+ public void testNumberOfMessagesFeedback() throws Exception {
+ BearerData bearerData = new BearerData();
+ bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
+ bearerData.messageId = 0;
+ bearerData.hasUserDataHeader = false;
+ bearerData.userData = makeUserData("test message count");
+ bearerData.numberOfMessages = 27;
+ byte []encodedSms = BearerData.encode(bearerData);
+ BearerData revBearerData = BearerData.decode(encodedSms);
+ assertEquals(bearerData.numberOfMessages, revBearerData.numberOfMessages);
+ }
+
+ @SmallTest
+ public void testCallbackNum() throws Exception {
+ String pdu1 = "00031040900112488ea794e070d436cb638bc5e035ce2f97900e06910431323334";
+ BearerData bd1 = BearerData.decode(HexDump.hexStringToByteArray(pdu1));
+ assertEquals("Test Callback nbr", bd1.userData.payloadStr);
+ assertEquals(CdmaSmsAddress.DIGIT_MODE_8BIT_CHAR, bd1.callbackNumber.digitMode);
+ assertEquals(CdmaSmsAddress.TON_INTERNATIONAL_OR_IP, bd1.callbackNumber.ton);
+ assertEquals(CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK, bd1.callbackNumber.numberMode);
+ assertEquals(CdmaSmsAddress.NUMBERING_PLAN_ISDN_TELEPHONY, bd1.callbackNumber.numberPlan);
+ assertEquals("1234", bd1.callbackNumber.address);
+ }
+
+ @SmallTest
+ public void testCallbackNumFeedback() throws Exception {
+ BearerData bearerData = new BearerData();
+ bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
+ bearerData.messageId = 0;
+ bearerData.hasUserDataHeader = false;
+ bearerData.userData = makeUserData("test callback number");
+ CdmaSmsAddress addr = new CdmaSmsAddress();
+ addr.digitMode = CdmaSmsAddress.DIGIT_MODE_8BIT_CHAR;
+ addr.ton = CdmaSmsAddress.TON_NATIONAL_OR_EMAIL;
+ addr.numberMode = CdmaSmsAddress.NUMBER_MODE_NOT_DATA_NETWORK;
+ addr.numberPlan = CdmaSmsAddress.NUMBERING_PLAN_UNKNOWN;
+ addr.address = "8005551212";
+ addr.numberOfDigits = (byte)addr.address.length();
+ bearerData.callbackNumber = addr;
+ byte []encodedSms = BearerData.encode(bearerData);
+ BearerData revBearerData = BearerData.decode(encodedSms);
+ CdmaSmsAddress revAddr = revBearerData.callbackNumber;
+ assertEquals(addr.digitMode, revAddr.digitMode);
+ assertEquals(addr.ton, revAddr.ton);
+ assertEquals(addr.numberMode, revAddr.numberMode);
+ assertEquals(addr.numberPlan, revAddr.numberPlan);
+ assertEquals(addr.numberOfDigits, revAddr.numberOfDigits);
+ assertEquals(addr.address, revAddr.address);
+ addr.address = "8*55#1012";
+ addr.numberOfDigits = (byte)addr.address.length();
+ addr.digitMode = CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF;
+ encodedSms = BearerData.encode(bearerData);
+ revBearerData = BearerData.decode(encodedSms);
+ revAddr = revBearerData.callbackNumber;
+ assertEquals(addr.digitMode, revAddr.digitMode);
+ assertEquals(addr.numberOfDigits, revAddr.numberOfDigits);
+ assertEquals(addr.address, revAddr.address);
+ }
+
+ @SmallTest
+ public void testMsgCenterTimeStampFeedback() throws Exception {
+ BearerData bearerData = new BearerData();
+ bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
+ bearerData.messageId = 0;
+ bearerData.hasUserDataHeader = false;
+ bearerData.userData = makeUserData("test message center timestamp");
+ bearerData.timeStamp = HexDump.hexStringToByteArray("112233445566");
+ byte []encodedSms = BearerData.encode(bearerData);
+ BearerData revBearerData = BearerData.decode(encodedSms);
+ assertEquals(HexDump.toHexString(bearerData.timeStamp),
+ HexDump.toHexString(revBearerData.timeStamp));
+ }
+
+ // XXX test messageId
+
+ // String pdu1 = "0003104090010d4866a794e07055965b91d040300c0100"; sid 12
+ // String pdu1 = "0003104090011748bea794e0731436ef3bd7c2e0352eef27a1c263fe58080d0101"; sid 13
+ // Log.d(LOG_TAG, "revBearerData -- " + revBearerData);
+
+}
diff --git a/tests/sketch/Android.mk b/tests/sketch/Android.mk
new file mode 100644
index 0000000..814e370
--- /dev/null
+++ b/tests/sketch/Android.mk
@@ -0,0 +1,8 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(call all-subdir-java-files)
+
+LOCAL_PACKAGE_NAME := Sketch
+
+include $(BUILD_PACKAGE)
diff --git a/tests/sketch/AndroidManifest.xml b/tests/sketch/AndroidManifest.xml
new file mode 100755
index 0000000..c44b54e
--- /dev/null
+++ b/tests/sketch/AndroidManifest.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2008 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.gesture"
+ android:versionCode="1"
+ android:versionName="1.0.0">
+ <application android:icon="@drawable/icon" android:label="@string/app_name">
+ <activity android:name="com.android.gesture.example.GestureEntryDemo"
+ android:label="@string/app_name">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ <activity android:name="com.android.gesture.example.GestureLibViewer"/>
+ </application>
+</manifest>
diff --git a/tests/sketch/res/drawable/icon.png b/tests/sketch/res/drawable/icon.png
new file mode 100755
index 0000000..75024841
--- /dev/null
+++ b/tests/sketch/res/drawable/icon.png
Binary files differ
diff --git a/tests/sketch/res/layout/demo.xml b/tests/sketch/res/layout/demo.xml
new file mode 100755
index 0000000..e516229
--- /dev/null
+++ b/tests/sketch/res/layout/demo.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2008 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content">
+ <Spinner
+ android:id="@+id/spinner"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:drawSelectorOnTop="true"
+ android:prompt="@string/recognition_result"/>
+
+ <com.android.gesture.GesturePad
+ android:id="@+id/drawingpad"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"/>
+
+</LinearLayout>
diff --git a/tests/sketch/res/layout/gestureviewer.xml b/tests/sketch/res/layout/gestureviewer.xml
new file mode 100755
index 0000000..5302d34
--- /dev/null
+++ b/tests/sketch/res/layout/gestureviewer.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2008 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content">
+
+ <Spinner
+ android:id="@+id/spinner"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:drawSelectorOnTop="true"
+ android:prompt="@string/recognition_result"/>
+
+ <com.android.gesture.GesturePad
+ android:id="@+id/drawingpad"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"/>
+
+ <LinearLayout
+ android:orientation="horizontal"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content">
+ <Button
+ android:id="@+id/previous"
+ android:text="@string/previous"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"/>
+ <Button
+ android:id="@+id/remove"
+ android:text="@string/remove"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"/>
+ <Button
+ android:id="@+id/next"
+ android:text="@string/next"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"/>
+ </LinearLayout>
+
+</LinearLayout>
diff --git a/tests/sketch/res/layout/newgesture_dialog.xml b/tests/sketch/res/layout/newgesture_dialog.xml
new file mode 100755
index 0000000..6e45d81
--- /dev/null
+++ b/tests/sketch/res/layout/newgesture_dialog.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2008 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <EditText
+ android:id="@+id/gesturename_edit"
+ android:layout_height="wrap_content"
+ android:layout_width="fill_parent"
+ android:layout_marginLeft="20dip"
+ android:layout_marginRight="20dip"
+ android:scrollHorizontally="true"
+ android:autoText="false"
+ android:capitalize="none"
+ android:gravity="fill_horizontal"
+ android:textAppearance="?android:attr/textAppearanceMedium" />
+
+</LinearLayout>
diff --git a/tests/sketch/res/values/strings.xml b/tests/sketch/res/values/strings.xml
new file mode 100755
index 0000000..4c6aa20
--- /dev/null
+++ b/tests/sketch/res/values/strings.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2008 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<resources>
+ <string name="app_name">Gesture Demo</string>
+ <string name="recognition_result">Recognition Result</string>
+ <string name="clear">Clear</string>
+ <string name="newgesture">Add</string>
+ <string name="viewgesture">View</string>
+ <string name="newgesture_dialog_ok">OK</string>
+ <string name="newgesture_dialog_cancel">Cancel</string>
+ <string name="newgesture_text_entry">Gesture Name</string>
+ <string name="previous">Previous</string>
+ <string name="remove">Remove</string>
+ <string name="next">Next</string>
+</resources>
diff --git a/tests/sketch/src/com/android/gesture/Gesture.java b/tests/sketch/src/com/android/gesture/Gesture.java
new file mode 100755
index 0000000..29c07ad
--- /dev/null
+++ b/tests/sketch/src/com/android/gesture/Gesture.java
@@ -0,0 +1,361 @@
+/*
+ * Copyright (C) 2008-2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.gesture;
+
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Matrix;
+import android.graphics.Paint;
+import android.graphics.Path;
+import android.graphics.PointF;
+import android.graphics.RectF;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import com.android.gesture.recognizer.RecognitionUtil;
+
+import org.xmlpull.v1.XmlSerializer;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.StringTokenizer;
+
+/**
+ * A single stroke gesture.
+ */
+
+public class Gesture implements Parcelable {
+
+ private RectF mBBX;
+ private float mLength = 0;
+ private int mColor;
+ private float mWidth;
+ private ArrayList<PointF> mPtsBuffer = new ArrayList<PointF>();
+ private long mTimestamp = 0;
+ private long mID;
+
+ private static final long systemStartupTime = System.currentTimeMillis();
+ private static int instanceCount = 0;
+
+ public Gesture() {
+ mID = systemStartupTime + instanceCount++;
+ }
+
+ public void setColor(int c) {
+ mColor = c;
+ }
+
+ public void setStrokeWidth(float w) {
+ mWidth = w;
+ }
+
+ public int getColor() {
+ return mColor;
+ }
+
+ public float getStrokeWidth() {
+ return mWidth;
+ }
+
+ public ArrayList<PointF> getPoints() {
+ return this.mPtsBuffer;
+ }
+
+ public int numOfPoints() {
+ return this.mPtsBuffer.size();
+ }
+
+ public void addPoint(float x, float y) {
+ mPtsBuffer.add(new PointF(x, y));
+ if (mBBX == null) {
+ mBBX = new RectF();
+ mBBX.top = y;
+ mBBX.left = x;
+ mBBX.right = x;
+ mBBX.bottom = y;
+ mLength = 0;
+ }
+ else {
+ PointF lst = mPtsBuffer.get(mPtsBuffer.size()-2);
+ mLength += Math.sqrt(Math.pow(x-lst.x, 2)+Math.pow(y-lst.y, 2));
+ mBBX.union(x, y);
+ }
+ mTimestamp = System.currentTimeMillis();
+ }
+
+ /**
+ * @return the length of the gesture
+ */
+ public float getLength() {
+ return this.mLength;
+ }
+
+ public RectF getBBX() {
+ return mBBX;
+ }
+
+ public void setID(long id) {
+ mID = id;
+ }
+
+ public long getID() {
+ return mID;
+ }
+
+ public long getTimeStamp() {
+ return mTimestamp;
+ }
+
+ public void setTimestamp(long t) {
+ this.mTimestamp = t;
+ }
+
+ /**
+ * draw the gesture
+ * @param canvas
+ */
+ public void draw(Canvas canvas) {
+ Paint paint = new Paint();
+ paint.setAntiAlias(true);
+ paint.setDither(true);
+ paint.setColor(mColor);
+ paint.setStyle(Paint.Style.STROKE);
+ paint.setStrokeJoin(Paint.Join.ROUND);
+ paint.setStrokeCap(Paint.Cap.ROUND);
+ paint.setStrokeWidth(mWidth);
+
+ Path path = null;
+ float mX = 0, mY = 0;
+ Iterator<PointF> it = mPtsBuffer.iterator();
+ while (it.hasNext()) {
+ PointF p = it.next();
+ float x = p.x;
+ float y = p.y;
+ if (path == null) {
+ path = new Path();
+ path.moveTo(x, y);
+ mX = x;
+ mY = y;
+ } else {
+ float dx = Math.abs(x - mX);
+ float dy = Math.abs(y - mY);
+ if (dx >= 3 || dy >= 3) {
+ path.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);
+ mX = x;
+ mY = y;
+ }
+ }
+ }
+
+ canvas.drawPath(path, paint);
+ }
+
+ /**
+ * convert the gesture to a Path
+ * @param width the width of the bounding box of the target path
+ * @param height the height of the bounding box of the target path
+ * @param numSample the num of points needed
+ * @return the path
+ */
+ public Path toPath(float width, float height, int numSample) {
+ float[] pts = RecognitionUtil.resample(this, numSample);
+ RectF rect = this.getBBX();
+ float scale = height / rect.height();
+ Matrix matrix = new Matrix();
+ matrix.setTranslate(-rect.left, -rect.top);
+ Matrix scalem = new Matrix();
+ scalem.setScale(scale, scale);
+ matrix.postConcat(scalem);
+ Matrix translate = new Matrix();
+ matrix.postConcat(translate);
+ matrix.mapPoints(pts);
+
+ Path path = null;
+ float mX = 0, mY = 0;
+ for (int i=0; i<pts.length-1; i+=2) {
+ float x = pts[i];
+ float y = pts[i+1];
+ if (path == null) {
+ path = new Path();
+ path.moveTo(x, y);
+ mX = x;
+ mY = y;
+ } else {
+ float dx = Math.abs(x - mX);
+ float dy = Math.abs(y - mY);
+ if (dx >= 3 || dy >= 3) {
+ path.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);
+ mX = x;
+ mY = y;
+ }
+ }
+ }
+ return path;
+ }
+
+ /**
+ * get a bitmap thumbnail of the gesture with a transparent background
+ * @param w
+ * @param h
+ * @param edge
+ * @param numSample
+ * @param foreground
+ * @return
+ */
+ public Bitmap toBitmap(int w, int h,
+ int edge, int numSample) {
+ RectF bbx = this.getBBX();
+ Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
+ Path path = this.toPath(w - 2 * edge, h - 2 * edge, numSample);
+ Canvas c = new Canvas(bitmap);
+ //c.drawColor(background);
+ c.translate(edge, edge);
+ Paint paint = new Paint();
+ paint.setAntiAlias(true);
+ paint.setDither(true);
+ paint.setColor(mColor);
+ paint.setStyle(Paint.Style.STROKE);
+ paint.setStrokeJoin(Paint.Join.ROUND);
+ paint.setStrokeCap(Paint.Cap.ROUND);
+ paint.setStrokeWidth(2);
+ c.drawPath(path, paint);
+ return bitmap;
+ }
+
+ /**
+ * save the gesture as XML
+ * @param namespace
+ * @param serializer
+ * @throws IOException
+ */
+ public void toXML(String namespace, XmlSerializer serializer) throws IOException {
+ serializer.startTag(namespace, "stroke");
+ serializer.attribute(namespace, "timestamp", Long.toString(mTimestamp));
+ serializer.attribute(namespace, "id", Long.toString(mID));
+ serializer.attribute(namespace, "color", Integer.toString(mColor));
+ serializer.attribute(namespace, "width", Float.toString(mWidth));
+ Iterator it = this.mPtsBuffer.iterator();
+ String pts = "";
+ while (it.hasNext()) {
+ PointF fp = (PointF)it.next();
+ if (pts.length() > 0)
+ pts += ",";
+ pts += fp.x + "," + fp.y;
+ }
+ serializer.text(pts);
+ serializer.endTag(namespace, "stroke");
+ }
+
+
+ public void createFromString(String str) {
+ StringTokenizer st = new StringTokenizer(str, "#");
+
+ String para = st.nextToken();
+ StringTokenizer innerst = new StringTokenizer(para, ",");
+ this.mBBX = new RectF();
+ this.mBBX.left = Float.parseFloat(innerst.nextToken());
+ this.mBBX.top = Float.parseFloat(innerst.nextToken());
+ this.mBBX.right = Float.parseFloat(innerst.nextToken());
+ this.mBBX.bottom = Float.parseFloat(innerst.nextToken());
+
+ para = st.nextToken();
+ innerst = new StringTokenizer(para, ",");
+ while (innerst.hasMoreTokens()) {
+ String s = innerst.nextToken().trim();
+ if (s.length()==0)
+ break;
+ float x = Float.parseFloat(s);
+ float y = Float.parseFloat(innerst.nextToken());
+ this.mPtsBuffer.add(new PointF(x, y));
+ }
+
+ para = st.nextToken();
+ this.mColor = Integer.parseInt(para);
+
+ para = st.nextToken();
+ this.mWidth = Float.parseFloat(para);
+
+ para = st.nextToken();
+ this.mLength = Float.parseFloat(para);
+
+ para = st.nextToken();
+ this.mTimestamp = Long.parseLong(para);
+ }
+
+ @Override
+ public String toString() {
+ String str = "";
+
+ str += "#" + this.mBBX.left + "," + this.mBBX.top + "," +
+ this.mBBX.right + "," + this.mBBX.bottom;
+
+ str += "#";
+ Iterator<PointF> it = this.mPtsBuffer.iterator();
+ while (it.hasNext()) {
+ PointF fp = it.next();
+ str += fp.x + "," + fp.y + ",";
+ }
+
+ str += "#";
+ str += this.mColor;
+
+ str += "#";
+ str += this.mWidth;
+
+ str += "#";
+ str += this.mLength;
+
+ str += "#";
+ str += this.mTimestamp;
+
+ return str;
+ }
+
+ public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
+ public Gesture createFromParcel(Parcel in) {
+ String str = in.readString();
+ Gesture stk = new Gesture();
+ stk.createFromString(str);
+ return stk;
+ }
+
+ public Gesture[] newArray(int size) {
+ return new Gesture[size];
+ }
+ };
+
+ public static Gesture buildFromArray(byte[] bytes) {
+ String str = new String(bytes);
+ Gesture stk = new Gesture();
+ stk.createFromString(str);
+ return stk;
+ }
+
+ public static byte[] saveToArray(Gesture stk) {
+ String str = stk.toString();
+ return str.getBytes();
+ }
+
+ public void writeToParcel(Parcel out, int flags) {
+ out.writeString(this.toString());
+ }
+
+ public int describeContents() {
+ return CONTENTS_FILE_DESCRIPTOR;
+ }
+}
diff --git a/tests/sketch/src/com/android/gesture/GestureLib.java b/tests/sketch/src/com/android/gesture/GestureLib.java
new file mode 100755
index 0000000..d0a25f2
--- /dev/null
+++ b/tests/sketch/src/com/android/gesture/GestureLib.java
@@ -0,0 +1,280 @@
+/*
+ * Copyright (C) 2008-2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.gesture;
+
+import android.util.Log;
+import android.util.Xml;
+import android.util.Xml.Encoding;
+
+import com.android.gesture.recognizer.Classifier;
+import com.android.gesture.recognizer.Instance;
+import com.android.gesture.recognizer.NearestNeighbor;
+import com.android.gesture.recognizer.Prediction;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xmlpull.v1.XmlSerializer;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+public class GestureLib {
+
+ private static final String LOGTAG = "GestureLib";
+ private static String namespace = "ink";
+ private final String datapath;
+ private HashMap<String, ArrayList<Gesture>> name2gestures =
+ new HashMap<String, ArrayList<Gesture>>();
+ private Classifier mClassifier;
+
+ public GestureLib(String path) {
+ datapath = path;
+ mClassifier = new NearestNeighbor();
+ }
+
+ public Classifier getClassifier() {
+ return mClassifier;
+ }
+
+ /**
+ * get all the labels in the library
+ * @return a set of strings
+ */
+ public Set<String> getLabels() {
+ return name2gestures.keySet();
+ }
+
+ public ArrayList<Prediction> recognize(Gesture gesture) {
+ Instance instance = Instance.createInstance(gesture, null);
+ return mClassifier.classify(instance);
+ }
+
+ public void addGesture(String name, Gesture gesture) {
+ Log.v(LOGTAG, "add an example for gesture: " + name);
+ ArrayList<Gesture> gestures = name2gestures.get(name);
+ if (gestures == null) {
+ gestures = new ArrayList<Gesture>();
+ name2gestures.put(name, gestures);
+ }
+ gestures.add(gesture);
+ mClassifier.addInstance(
+ Instance.createInstance(gesture, name));
+ }
+
+ public void removeGesture(String name, Gesture gesture) {
+ ArrayList<Gesture> gestures = name2gestures.get(name);
+ if (gestures == null) {
+ return;
+ }
+
+ gestures.remove(gesture);
+
+ // if there are no more samples, remove the entry automatically
+ if (gestures.isEmpty()) {
+ name2gestures.remove(name);
+ }
+
+ mClassifier.removeInstance(gesture.getID());
+ }
+
+ public ArrayList<Gesture> getGestures(String label) {
+ ArrayList<Gesture> gestures = name2gestures.get(label);
+ if (gestures != null)
+ return (ArrayList<Gesture>)gestures.clone();
+ else
+ return null;
+ }
+
+ public void load() {
+ String filename = datapath
+ + File.separator + "gestures.xml";
+ File f = new File(filename);
+ if (f.exists()) {
+ try {
+ loadInk(filename, null);
+ }
+ catch (SAXException ex) {
+ ex.printStackTrace();
+ } catch (IOException ex) {
+ ex.printStackTrace();
+ }
+ }
+ }
+
+ public void save() {
+ try {
+ compactSave();
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ private void compactSave() throws IOException {
+ File f = new File(datapath);
+ if (f.exists() == false) {
+ f.mkdirs();
+ }
+ String filename = datapath + File.separator + "gestures.xml";
+ Log.v(LOGTAG, "save to " + filename);
+ BufferedOutputStream fos = new BufferedOutputStream(
+ new FileOutputStream(filename));
+
+ PrintWriter writer = new PrintWriter(fos);
+ XmlSerializer serializer = Xml.newSerializer();
+ serializer.setOutput(writer);
+ serializer.startDocument(Encoding.ISO_8859_1.name(), null);
+ serializer.startTag(namespace, "gestures");
+ Iterator<String> it = name2gestures.keySet().iterator();
+ while (it.hasNext()) {
+ String key = it.next();
+ ArrayList<Gesture> gestures = name2gestures.get(key);
+ saveGestures(serializer, key, gestures);
+ }
+
+ serializer.endTag(namespace, "gestures");
+ serializer.endDocument();
+ serializer.flush();
+ writer.close();
+ fos.close();
+ }
+
+ private static void saveGestures(XmlSerializer serializer,
+ String name, ArrayList<Gesture> strokes) throws IOException {
+ serializer.startTag(namespace, "gesture");
+ serializer.startTag(namespace, "name");
+ serializer.text(name);
+ serializer.endTag(namespace, "name");
+ Iterator<Gesture> it = strokes.iterator();
+ while (it.hasNext()) {
+ Gesture stk = it.next();
+ stk.toXML(namespace, serializer);
+ }
+ serializer.endTag(namespace, "gesture");
+ }
+
+ private void loadInk(String filename, String label) throws SAXException, IOException {
+ Log.v(LOGTAG, "load from " + filename);
+ BufferedInputStream in = new BufferedInputStream(
+ new FileInputStream(filename));
+ Xml.parse(in, Encoding.ISO_8859_1, new CompactInkHandler());
+ in.close();
+ }
+
+ class CompactInkHandler implements ContentHandler {
+
+ Gesture currentGesture = null;
+ StringBuffer buffer = null;
+ String gestureName;
+ ArrayList<Gesture> gestures;
+
+ CompactInkHandler() {
+ }
+
+ // Receive notification of character data.
+ public void characters(char[] ch, int start, int length) {
+ buffer.append(ch, start, length);
+ }
+
+ //Receive notification of the end of a document.
+ public void endDocument() {
+ }
+
+ // Receive notification of the end of an element.
+ public void endElement(String uri, String localName, String qName) {
+ if (localName.equals("gesture")) {
+ name2gestures.put(gestureName, gestures);
+ gestures = null;
+ } else if (localName.equals("name")) {
+ gestureName = buffer.toString();
+ } else if (localName.equals("stroke")) {
+ StringTokenizer tokenizer = new StringTokenizer(buffer.toString(), ",");
+ while (tokenizer.hasMoreTokens()) {
+ String str = tokenizer.nextToken();
+ float x = Float.parseFloat(str);
+ str = tokenizer.nextToken();
+ float y = Float.parseFloat(str);
+ try
+ {
+ currentGesture.addPoint(x, y);
+ }
+ catch(Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+ gestures.add(currentGesture);
+ mClassifier.addInstance(
+ Instance.createInstance(currentGesture, gestureName));
+ currentGesture = null;
+ }
+ }
+
+ // End the scope of a prefix-URI mapping.
+ public void endPrefixMapping(String prefix) {
+ }
+
+ //Receive notification of ignorable whitespace in element content.
+ public void ignorableWhitespace(char[] ch, int start, int length) {
+ }
+
+ //Receive notification of a processing instruction.
+ public void processingInstruction(String target, String data) {
+ }
+
+ // Receive an object for locating the origin of SAX document events.
+ public void setDocumentLocator(Locator locator) {
+ }
+
+ // Receive notification of a skipped entity.
+ public void skippedEntity(String name) {
+ }
+
+ // Receive notification of the beginning of a document.
+ public void startDocument() {
+ }
+
+ // Receive notification of the beginning of an element.
+ public void startElement(String uri, String localName, String qName, Attributes atts) {
+ if (localName.equals("gesture")) {
+ gestures = new ArrayList<Gesture>();
+ } else if (localName.equals("name")) {
+ buffer = new StringBuffer();
+ } else if (localName.equals("stroke")) {
+ currentGesture = new Gesture();
+ currentGesture.setTimestamp(Long.parseLong(atts.getValue(namespace, "timestamp")));
+ currentGesture.setColor(Integer.parseInt(atts.getValue(namespace, "color")));
+ currentGesture.setStrokeWidth(Float.parseFloat(atts.getValue(namespace, "width")));
+ buffer = new StringBuffer();
+ }
+ }
+
+ public void startPrefixMapping(String prefix, String uri) {
+ }
+ }
+}
diff --git a/tests/sketch/src/com/android/gesture/GestureListener.java b/tests/sketch/src/com/android/gesture/GestureListener.java
new file mode 100755
index 0000000..ebb4149
--- /dev/null
+++ b/tests/sketch/src/com/android/gesture/GestureListener.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2008-2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.gesture;
+
+import android.view.MotionEvent;
+
+public interface GestureListener {
+ public void onStartGesture(GesturePad pad, MotionEvent event);
+ public void onGesture(GesturePad pad, MotionEvent event);
+ public void onFinishGesture(GesturePad pad, MotionEvent event);
+}
diff --git a/tests/sketch/src/com/android/gesture/GesturePad.java b/tests/sketch/src/com/android/gesture/GesturePad.java
new file mode 100755
index 0000000..45a09e6
--- /dev/null
+++ b/tests/sketch/src/com/android/gesture/GesturePad.java
@@ -0,0 +1,371 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.gesture;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Matrix;
+import android.graphics.Paint;
+import android.graphics.Path;
+import android.graphics.PointF;
+import android.os.Handler;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.View;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+/**
+ * A view for rendering and processing gestures
+ */
+
+public class GesturePad extends View {
+
+ public static final float TOUCH_TOLERANCE = 4;
+ public static final int default_foreground = Color.argb(255, 255, 255, 0);
+ private int background = Color.argb(0, 0, 0, 0);
+ private int foreground = default_foreground;
+ private int uncertain_foreground = Color.argb(55, 255, 255, 0);
+ private Bitmap mBitmap;
+ private Canvas mCanvas;
+ private Path mPath;
+ private Paint mBitmapPaint;
+ private Paint mPaint;
+ private Paint mDebugPaint;
+ private float mX, mY;
+ private boolean mEnableInput = true;
+ private boolean mEnableRendering = true;
+ private boolean mCacheGesture = true;
+ private Gesture mCurrentGesture = null;
+ ArrayList<GestureListener> mGestureListeners = new ArrayList<GestureListener>();
+
+ private boolean mShouldFadingOut = true;
+ private boolean mIsFadingOut = false;
+ private float mFadingAlpha = 1;
+
+ private boolean reconstruct = false;
+
+ private ArrayList<Path> debug = new ArrayList<Path>();
+ private Handler mHandler = new Handler();
+
+ private Runnable mFadingOut = new Runnable() {
+ public void run() {
+ mFadingAlpha -= 0.03f;
+ if (mFadingAlpha <= 0) {
+ mIsFadingOut = false;
+ mPath.reset();
+ } else {
+ mHandler.postDelayed(this, 100);
+ }
+ invalidate();
+ }
+ };
+
+ public GesturePad(Context context) {
+ super(context);
+ init();
+ }
+
+ public GesturePad(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ init();
+ }
+
+ public boolean isEnableRendering() {
+ return this.mEnableRendering;
+ }
+
+ public Gesture getCurrentGesture() {
+ return mCurrentGesture;
+ }
+
+ public Paint getPaint() {
+ return mPaint;
+ }
+
+ public void setColor(int c) {
+ this.foreground = c;
+ }
+
+ public void setFadingAlpha(float f) {
+ mFadingAlpha = f;
+ }
+
+ public void setCurrentGesture(Gesture stk) {
+ this.mCurrentGesture = stk;
+ reconstruct = true;
+ }
+
+ private void init() {
+ mDebugPaint = new Paint();
+ mDebugPaint.setColor(Color.WHITE);
+ mDebugPaint.setStrokeWidth(4);
+ mDebugPaint.setAntiAlias(true);
+ mDebugPaint.setStyle(Paint.Style.STROKE);
+
+ mPaint = new Paint();
+ mPaint.setAntiAlias(true);
+ mPaint.setDither(true);
+ mPaint.setColor(foreground);
+ mPaint.setStyle(Paint.Style.STROKE);
+ mPaint.setStrokeJoin(Paint.Join.ROUND);
+ mPaint.setStrokeCap(Paint.Cap.ROUND);
+ mPaint.setStrokeWidth(12);
+
+ mBitmapPaint = new Paint(Paint.DITHER_FLAG);
+ mPath = new Path();
+
+ reconstruct = false;
+ }
+
+ public void cacheGesture(boolean b) {
+ mCacheGesture = b;
+ }
+
+ public void enableRendering(boolean b) {
+ mEnableRendering = b;
+ }
+
+
+ @Override
+ protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+ // TODO Auto-generated method stub
+ super.onSizeChanged(w, h, oldw, oldh);
+
+ if (w <=0 || h <=0)
+ return;
+
+ int width = w>oldw? w : oldw;
+ int height = h>oldh? h : oldh;
+ Bitmap newBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
+ mCanvas = new Canvas(newBitmap);
+
+ if (mBitmap != null) {
+ mCanvas.drawColor(background);
+ mCanvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
+ mCanvas.drawPath(mPath, mPaint);
+ }
+
+ mBitmap = newBitmap;
+ }
+
+ public void addGestureListener(GestureListener l) {
+ this.mGestureListeners.add(l);
+ }
+
+ public void removeGestureListener(GestureListener l) {
+ this.mGestureListeners.remove(l);
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ canvas.drawColor(background);
+
+ if (mCacheGesture)
+ canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
+
+ if (mIsFadingOut) {
+ int color = foreground;
+ int alpha = (int)(Color.alpha(color) * mFadingAlpha);
+ mPaint.setColor(Color.argb(alpha,
+ Color.red(color),
+ Color.green(color),
+ Color.blue(color)));
+ } else if (mEnableRendering == false) {
+ mPaint.setColor(uncertain_foreground);
+ } else {
+ mPaint.setColor(foreground);
+ }
+
+ if (reconstruct) {
+
+ if (this.mCurrentGesture != null) {
+ float xedge = 30;
+ float yedge = 30;
+ float w = this.getWidth() - 2 * xedge;
+ float h = this.getHeight() - 2 * yedge;
+ float sx = w / this.mCurrentGesture.getBBX().width();
+ float sy = h / mCurrentGesture.getBBX().height();
+ float scale = sx>sy?sy:sx;
+ convertFromStroke(mCurrentGesture);
+ Matrix matrix = new Matrix();
+ matrix.preTranslate(-mCurrentGesture.getBBX().centerX(), -mCurrentGesture.getBBX().centerY());
+ matrix.postScale(scale, scale);
+ matrix.postTranslate(this.getWidth()/2, this.getHeight()/2);
+ this.mPath.transform(matrix);
+ } else {
+ mPath.reset();
+ }
+
+ reconstruct = false;
+ }
+
+ canvas.drawPath(mPath, mPaint);
+
+ Iterator<Path> it = debug.iterator();
+ while (it.hasNext()) {
+ Path path = it.next();
+ canvas.drawPath(path, mDebugPaint);
+ }
+ }
+
+ public void clearDebugPath() {
+ debug.clear();
+ }
+
+ public void addDebugPath(Path path) {
+ debug.add(path);
+ }
+
+ public void addDebugPath(ArrayList<Path> paths) {
+ debug.addAll(paths);
+ }
+
+ public void clear() {
+ mPath = new Path();
+ this.mCurrentGesture = null;
+ mCanvas.drawColor(background);
+ this.invalidate();
+ }
+
+ private void convertFromStroke(Gesture stk) {
+ mPath = null;
+ Iterator it = stk.getPoints().iterator();
+ while (it.hasNext()) {
+ PointF p = (PointF) it.next();
+ if (mPath == null) {
+ mPath = new Path();
+ mPath.moveTo(p.x, p.y);
+ mX = p.x;
+ mY = p.y;
+ } else {
+ float dx = Math.abs(p.x - mX);
+ float dy = Math.abs(p.y - mY);
+ if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
+ mPath.quadTo(mX, mY, (p.x + mX)/2, (p.y + mY)/2);
+ mX = p.x;
+ mY = p.y;
+ }
+ }
+ }
+ mPath.lineTo(mX, mY);
+ }
+
+ public void setEnableInput(boolean b) {
+ mEnableInput = b;
+ }
+
+ public boolean isEnableInput() {
+ return mEnableInput;
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent event) {
+
+ if(mEnableInput == false)
+ return true;
+
+ switch (event.getAction()) {
+ case MotionEvent.ACTION_DOWN:
+ touch_start(event);
+ invalidate();
+ break;
+ case MotionEvent.ACTION_MOVE:
+ touch_move(event);
+ invalidate();
+ break;
+ case MotionEvent.ACTION_UP:
+ touch_up(event);
+ invalidate();
+ break;
+ }
+ return true;
+ }
+
+ private void touch_start(MotionEvent event) {
+ mIsFadingOut = false;
+ mHandler.removeCallbacks(mFadingOut);
+
+ float x = event.getX();
+ float y = event.getY();
+
+ mCurrentGesture = new Gesture();
+ mCurrentGesture.addPoint(x, y);
+
+ mPath.reset();
+ mPath.moveTo(x, y);
+ mX = x;
+ mY = y;
+
+ Iterator<GestureListener> it = mGestureListeners.iterator();
+ while (it.hasNext()) {
+ it.next().onStartGesture(this, event);
+ }
+ }
+
+ private void touch_move(MotionEvent event) {
+ float x = event.getX();
+ float y = event.getY();
+
+ float dx = Math.abs(x - mX);
+ float dy = Math.abs(y - mY);
+ if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
+ mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);
+ mX = x;
+ mY = y;
+ }
+
+ mCurrentGesture.addPoint(x, y);
+
+ Iterator<GestureListener> it = mGestureListeners.iterator();
+ while (it.hasNext()) {
+ it.next().onGesture(this, event);
+ }
+ }
+
+ public void setFadingOut(boolean b) {
+ mShouldFadingOut = b;
+ mIsFadingOut = false;
+ }
+
+ public boolean shouldFadingOut() {
+ return mShouldFadingOut;
+ }
+
+ private void touch_up(MotionEvent event) {
+ mPath.lineTo(mX, mY);
+
+ if (mCacheGesture)
+ mCanvas.drawPath(mPath, mPaint);
+
+ // kill this so we don't double draw
+ if (shouldFadingOut()) {
+ mFadingAlpha = 1;
+ mIsFadingOut = true;
+ mHandler.removeCallbacks(mFadingOut);
+ mHandler.postDelayed(mFadingOut, 100);
+ }
+
+ Iterator<GestureListener> it = mGestureListeners.iterator();
+ while (it.hasNext()) {
+ it.next().onFinishGesture(this, event);
+ }
+ }
+
+}
diff --git a/tests/sketch/src/com/android/gesture/example/GestureEntryDemo.java b/tests/sketch/src/com/android/gesture/example/GestureEntryDemo.java
new file mode 100755
index 0000000..8fee21a
--- /dev/null
+++ b/tests/sketch/src/com/android/gesture/example/GestureEntryDemo.java
@@ -0,0 +1,220 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.gesture.example;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.MotionEvent;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.EditText;
+import android.widget.Spinner;
+import android.widget.AdapterView.OnItemSelectedListener;
+
+import com.android.gesture.Gesture;
+import com.android.gesture.GestureLib;
+import com.android.gesture.GestureListener;
+import com.android.gesture.GesturePad;
+import com.android.gesture.R;
+import com.android.gesture.recognizer.Prediction;
+
+import java.util.ArrayList;
+
+/**
+ * The demo shows how to construct a gesture-based user interface on Android.
+ */
+
+public class GestureEntryDemo extends Activity {
+
+ private static final int DIALOG_NEW_ENTRY = 1;
+ private static final int NEW_ID = Menu.FIRST;
+ private static final int VIEW_ID = Menu.FIRST + 1;
+
+ GesturePad mView;
+ Spinner mResult;
+ GestureLib mRecognizer;
+ boolean mChangedByRecognizer = false;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.demo);
+
+ // init the recognizer
+ mRecognizer = new GestureLib("/sdcard/gestureentry");
+ mRecognizer.load();
+
+ // create the spinner for showing the recognition results
+ // the spinner also allows a user to correct a prediction
+ mResult = (Spinner) findViewById(R.id.spinner);
+ mResult.setOnItemSelectedListener(new OnItemSelectedListener() {
+
+ public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
+ // TODO Auto-generated method stub
+ // correct the recognition result by adding the new example
+ if (mChangedByRecognizer == false) {
+ mRecognizer.addGesture(parent.getSelectedItem().toString(),
+ mView.getCurrentGesture());
+ } else {
+ mChangedByRecognizer = false;
+ }
+ }
+
+ public void onNothingSelected(AdapterView<?> parent) {
+ // TODO Auto-generated method stub
+
+ }
+
+ });
+
+ // create the area for drawing a gesture
+ mView = (GesturePad)this.findViewById(R.id.drawingpad);
+ mView.cacheGesture(false);
+ mView.setFadingOut(false);
+ mView.addGestureListener(new GestureListener() {
+ public void onFinishGesture(GesturePad patch, MotionEvent event) {
+ // TODO Auto-generated method stub
+ recognize(patch.getCurrentGesture());
+ }
+ public void onGesture(GesturePad patch, MotionEvent event) {
+ // TODO Auto-generated method stub
+
+ }
+ public void onStartGesture(GesturePad patch, MotionEvent event) {
+ // TODO Auto-generated method stub
+
+ }
+ });
+
+
+ if (savedInstanceState != null) {
+ mView.setCurrentGesture(
+ (Gesture)savedInstanceState.getParcelable("gesture"));
+ }
+ }
+
+ @Override
+ protected Dialog onCreateDialog(int id) {
+ // create the dialog for adding a new entry
+ LayoutInflater factory = LayoutInflater.from(this);
+ final View textEntryView =
+ factory.inflate(R.layout.newgesture_dialog, null);
+ return new AlertDialog.Builder(GestureEntryDemo.this)
+ .setTitle(R.string.newgesture_text_entry)
+ .setView(textEntryView)
+ .setPositiveButton(R.string.newgesture_dialog_ok,
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int whichButton) {
+ /* User clicked OK so do some stuff */
+ EditText edittext =
+ (EditText)((AlertDialog)dialog).findViewById(R.id.gesturename_edit);
+ String text = edittext.getText().toString().trim();
+ if (text.length() > 0) {
+ mRecognizer.addGesture(text, mView.getCurrentGesture());
+ }
+ }
+ })
+ .setNegativeButton(R.string.newgesture_dialog_cancel,
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int whichButton) {
+ /* User clicked cancel so do some stuff */
+ }
+ })
+ .create();
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ // TODO Auto-generated method stub
+ super.onCreateOptionsMenu(menu);
+ menu.add(0, NEW_ID, 0, R.string.newgesture)
+ .setShortcut('0', 'n')
+ .setIcon(android.R.drawable.ic_menu_add);
+ menu.add(0, VIEW_ID, 0, R.string.viewgesture)
+ .setShortcut('1', 'v')
+ .setIcon(android.R.drawable.ic_menu_view);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ // Handle all of the possible menu actions.
+ switch (item.getItemId()) {
+ case NEW_ID:
+ // if there has been a gesture on the canvas
+ if (mView.getCurrentGesture() != null) {
+ showDialog(DIALOG_NEW_ENTRY);
+ }
+ break;
+
+ case VIEW_ID:
+ startActivityForResult(
+ new Intent(this, GestureLibViewer.class), VIEW_ID);
+ break;
+ }
+
+ return super.onOptionsItemSelected(item);
+ }
+
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ mRecognizer.load();
+ mView.clear();
+ }
+
+ @Override
+ protected void onPause() {
+ // TODO Auto-generated method stub
+ super.onPause();
+ mRecognizer.save();
+ }
+
+
+ @Override
+ protected void onPrepareDialog(int id, Dialog dialog) {
+ // TODO Auto-generated method stub
+ super.onPrepareDialog(id, dialog);
+ }
+
+ @Override
+ protected void onSaveInstanceState(Bundle outState) {
+ // TODO Auto-generated method stub
+ super.onSaveInstanceState(outState);
+ outState.putParcelable("gesture", mView.getCurrentGesture());
+ mRecognizer.save();
+ }
+
+ public void recognize(Gesture ink) {
+ mChangedByRecognizer = true;
+ ArrayList<Prediction> predictions = mRecognizer.recognize(ink);
+ ArrayAdapter adapter = new ArrayAdapter(this,
+ android.R.layout.simple_spinner_item, predictions);
+ adapter.setDropDownViewResource(
+ android.R.layout.simple_spinner_dropdown_item);
+ mResult.setAdapter(adapter);
+ }
+
+}
diff --git a/tests/sketch/src/com/android/gesture/example/GestureLibViewer.java b/tests/sketch/src/com/android/gesture/example/GestureLibViewer.java
new file mode 100755
index 0000000..7ae7fc5
--- /dev/null
+++ b/tests/sketch/src/com/android/gesture/example/GestureLibViewer.java
@@ -0,0 +1,257 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.gesture.example;
+
+import android.app.Activity;
+import android.graphics.Matrix;
+import android.graphics.Path;
+import android.os.Bundle;
+import android.view.KeyEvent;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.Button;
+import android.widget.Spinner;
+import android.widget.AdapterView.OnItemSelectedListener;
+
+import com.android.gesture.Gesture;
+import com.android.gesture.GestureLib;
+import com.android.gesture.GesturePad;
+import com.android.gesture.R;
+import com.android.gesture.recognizer.Instance;
+
+import java.util.ArrayList;
+import java.util.Collections;
+
+/**
+ * GestureLibViewer is for viewing existing gestures and
+ * removing unwanted gestures.
+ */
+
+public class GestureLibViewer extends Activity {
+
+ GesturePad mView;
+ Spinner mResult;
+ GestureLib mRecognizer;
+ ArrayList<Gesture> mSamples;
+ int mCurrentGestureIndex;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.gestureviewer);
+
+ // create the area for drawing a glyph
+ mView = (GesturePad)this.findViewById(R.id.drawingpad);
+ mView.cacheGesture(false);
+ mView.setFadingOut(false);
+ mView.setEnableInput(false);
+
+ // init the recognizer
+ mRecognizer = new GestureLib("/sdcard/gestureentry");
+ mRecognizer.load();
+
+ mResult = (Spinner) findViewById(R.id.spinner);
+ ArrayList<String> list = new ArrayList<String>();
+ list.addAll(mRecognizer.getLabels());
+ Collections.sort(list);
+ ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
+ android.R.layout.simple_spinner_item,
+ list);
+ adapter.setDropDownViewResource(
+ android.R.layout.simple_spinner_dropdown_item);
+ mResult.setAdapter(adapter);
+ mSamples = mRecognizer.getGestures(list.get(0));
+ if (mSamples.isEmpty() == false) {
+ mCurrentGestureIndex = 0;
+ Gesture gesture = mSamples.get(mCurrentGestureIndex);
+ mView.setCurrentGesture(gesture);
+ mView.clearDebugPath();
+ mView.addDebugPath(
+ toPath(mRecognizer.getClassifier().getInstance(gesture.getID())));
+ }
+
+ mResult.setOnItemSelectedListener(new OnItemSelectedListener() {
+ public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
+ // TODO Auto-generated method stub
+ mSamples = mRecognizer.getGestures(
+ (String)mResult.getSelectedItem());
+ if (mSamples.isEmpty() == false) {
+ mCurrentGestureIndex = 0;
+ Gesture gesture = mSamples.get(mCurrentGestureIndex);
+ mView.setCurrentGesture(gesture);
+ mView.clearDebugPath();
+ mView.addDebugPath(
+ toPath(mRecognizer.getClassifier().getInstance(gesture.getID())));
+ }
+ mView.invalidate();
+ }
+
+ public void onNothingSelected(AdapterView<?> parent) {
+ // TODO Auto-generated method stub
+
+ }
+
+ });
+
+ Button remove = (Button)this.findViewById(R.id.remove);
+ remove.setOnClickListener(new OnClickListener() {
+ public void onClick(View v) {
+ // TODO Auto-generated method stub
+ if (mSamples.isEmpty())
+ return;
+
+ String name = (String)mResult.getSelectedItem();
+ Gesture gesture = mSamples.get(mCurrentGestureIndex);
+ mRecognizer.removeGesture(name, gesture);
+
+ mSamples = mRecognizer.getGestures(name);
+
+ if (mSamples == null) {
+ // delete the entire entry
+ mCurrentGestureIndex = 0;
+ ArrayList<String> list = new ArrayList<String>();
+ list.addAll(mRecognizer.getLabels());
+ Collections.sort(list);
+ ArrayAdapter<String> adapter = new ArrayAdapter<String>(
+ GestureLibViewer.this,
+ android.R.layout.simple_spinner_item,
+ list);
+ adapter.setDropDownViewResource(
+ android.R.layout.simple_spinner_dropdown_item);
+ mResult.setAdapter(adapter);
+ } else {
+ if (mCurrentGestureIndex > mSamples.size()-1) {
+ mCurrentGestureIndex--;
+ }
+ gesture = mSamples.get(mCurrentGestureIndex);
+ mView.setCurrentGesture(gesture);
+ mView.clearDebugPath();
+ mView.addDebugPath(
+ toPath(mRecognizer.getClassifier().getInstance(gesture.getID())));
+ mView.invalidate();
+ }
+ }
+ });
+
+ Button next = (Button)this.findViewById(R.id.next);
+ next.setOnClickListener(new OnClickListener() {
+ public void onClick(View v) {
+ // TODO Auto-generated method stub
+ if (mCurrentGestureIndex >= mSamples.size()-1)
+ return;
+
+ mCurrentGestureIndex++;
+ Gesture gesture = mSamples.get(mCurrentGestureIndex);
+ mView.setCurrentGesture(gesture);
+ mView.clearDebugPath();
+ mView.addDebugPath(
+ toPath(mRecognizer.getClassifier().getInstance(gesture.getID())));
+ mView.invalidate();
+ }
+ });
+
+ Button previous = (Button)this.findViewById(R.id.previous);
+ previous.setOnClickListener(new OnClickListener() {
+ public void onClick(View v) {
+ // TODO Auto-generated method stub
+ if (mCurrentGestureIndex >= 1 &&
+ mSamples.isEmpty() == false) {
+ mCurrentGestureIndex--;
+ Gesture gesture = mSamples.get(mCurrentGestureIndex);
+ mView.setCurrentGesture(gesture);
+ mView.clearDebugPath();
+ mView.addDebugPath(
+ toPath(mRecognizer.getClassifier().getInstance(gesture.getID())));
+ mView.invalidate();
+ }
+ }
+ });
+ }
+
+ public static ArrayList<Path> toPath(Instance instance) {
+ ArrayList<Path> paths = new ArrayList();
+ Path path = null;
+ float minx = 0, miny = 0;
+ float mX = 0, mY = 0;
+ for (int i=0; i<instance.vector.length; i+=2) {
+ float x = instance.vector[i];
+ float y = instance.vector[i+1];
+ if (x < minx)
+ minx = x;
+ if (y < miny)
+ miny = y;
+ if (path == null) {
+ path = new Path();
+ path.moveTo(x, y);
+ mX = x;
+ mY = y;
+ } else {
+ float dx = Math.abs(x - mX);
+ float dy = Math.abs(y - mY);
+ if (dx >= 3 || dy >= 3) {
+ path.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);
+ mX = x;
+ mY = y;
+ }
+ }
+ }
+ Matrix matrix = new Matrix();
+ matrix.setTranslate(-minx + 10, -miny + 10);
+ path.transform(matrix);
+ paths.add(path);
+
+ path = new Path();
+ path.moveTo(instance.vector[0]-5, instance.vector[1]-5);
+ path.lineTo(instance.vector[0]-5, instance.vector[1]+5);
+ path.lineTo(instance.vector[0]+5, instance.vector[1]+5);
+ path.lineTo(instance.vector[0]+5, instance.vector[1]-5);
+ path.close();
+ path.transform(matrix);
+ paths.add(path);
+
+ return paths;
+ }
+
+ @Override
+ public boolean onKeyUp(int keyCode, KeyEvent event) {
+ // TODO Auto-generated method stub
+ if (keyCode == KeyEvent.KEYCODE_BACK) {
+ mRecognizer.save();
+ this.setResult(RESULT_OK);
+ finish();
+ return true;
+ }
+ else
+ return false;
+ }
+
+ @Override
+ protected void onPause() {
+ // TODO Auto-generated method stub
+ super.onPause();
+ mRecognizer.save();
+ }
+
+ @Override
+ protected void onSaveInstanceState(Bundle outState) {
+ // TODO Auto-generated method stub
+ super.onSaveInstanceState(outState);
+ mRecognizer.save();
+ }
+}
diff --git a/tests/sketch/src/com/android/gesture/recognizer/Classifier.java b/tests/sketch/src/com/android/gesture/recognizer/Classifier.java
new file mode 100755
index 0000000..584e0a5
--- /dev/null
+++ b/tests/sketch/src/com/android/gesture/recognizer/Classifier.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.gesture.recognizer;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+/**
+ * The abstract class of Classifier
+ */
+public abstract class Classifier {
+
+ HashMap<Long, Instance> mInstances = new HashMap<Long, Instance>();
+
+ public void addInstance(Instance instance) {
+ mInstances.put(instance.id, instance);
+ }
+
+ public Instance getInstance(long id) {
+ return mInstances.get(id);
+ }
+
+ public void removeInstance(long id) {
+ mInstances.remove(id);
+ }
+
+ public abstract ArrayList<Prediction> classify(Instance instance);
+}
diff --git a/tests/sketch/src/com/android/gesture/recognizer/Instance.java b/tests/sketch/src/com/android/gesture/recognizer/Instance.java
new file mode 100755
index 0000000..2eaa1c2
--- /dev/null
+++ b/tests/sketch/src/com/android/gesture/recognizer/Instance.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+package com.android.gesture.recognizer;
+
+import android.graphics.PointF;
+
+import com.android.gesture.Gesture;
+
+/**
+ * An instance represents a sample if the label is available or a query if
+ * the label is null.
+ */
+public class Instance {
+
+ private final static float[] targetOrientations = {
+ 0, 45, 90, 135, 180, -0, -45, -90, -135, -180
+ };
+
+ // the feature vector
+ public final float[] vector;
+ // the label can be null
+ public final String label;
+ // the length of the vector
+ public final float length;
+ // the id of the instance
+ public final long id;
+
+ Instance(long d, float[] v, String l) {
+ id = d;
+ vector = v;
+ label = l;
+ float sum = 0;
+ for (int i = 0; i < vector.length; i++) {
+ sum += vector[i] * vector[i];
+ }
+ length = (float)Math.sqrt(sum);
+ }
+
+ public static Instance createInstance(Gesture gesture, String label) {
+ float[] pts = RecognitionUtil.resample(gesture, 64);
+ PointF center = RecognitionUtil.computeCentroid(pts);
+ float inductiveOrientation = (float)Math.atan2(pts[1] - center.y,
+ pts[0] - center.x);
+ inductiveOrientation *= 180 / Math.PI;
+
+ float minDeviation = Float.MAX_VALUE;
+ for (int i=0; i<targetOrientations.length; i++) {
+ float delta = targetOrientations[i] - inductiveOrientation;
+ if (Math.abs(delta) < Math.abs(minDeviation)) {
+ minDeviation = delta;
+ }
+ }
+
+ android.graphics.Matrix m = new android.graphics.Matrix();
+ m.setTranslate(-center.x, -center.y);
+ android.graphics.Matrix rotation = new android.graphics.Matrix();
+ rotation.setRotate(minDeviation);
+ m.postConcat(rotation);
+ m.mapPoints(pts);
+
+ return new Instance(gesture.getID(), pts, label);
+ }
+}
diff --git a/tests/sketch/src/com/android/gesture/recognizer/NearestNeighbor.java b/tests/sketch/src/com/android/gesture/recognizer/NearestNeighbor.java
new file mode 100755
index 0000000..cb8a9d3
--- /dev/null
+++ b/tests/sketch/src/com/android/gesture/recognizer/NearestNeighbor.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.gesture.recognizer;
+
+import android.util.Log;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.TreeMap;
+
+public class NearestNeighbor extends Classifier {
+
+ private static final String LOGTAG = "NearestNeighbor";
+ private static final double variance = 0.25; // std = 0.5
+
+ public ArrayList<Prediction> classify(Instance instance) {
+
+ ArrayList<Prediction> list = new ArrayList<Prediction>();
+ Iterator<Instance> it = mInstances.values().iterator();
+ Log.v(LOGTAG, mInstances.size() + " instances found");
+ TreeMap<String, Double> label2score = new TreeMap<String, Double>();
+ while (it.hasNext()) {
+ Instance sample = it.next();
+ double dis = RecognitionUtil.cosineDistance(sample, instance);
+ double weight = Math.exp(-dis*dis/(2 * variance));
+ Log.v(LOGTAG, sample.label + " = " + dis + " weight = " + weight);
+ Double score = label2score.get(sample.label);
+ if (score == null) {
+ score = weight;
+ }
+ else {
+ score += weight;
+ }
+ label2score.put(sample.label, score);
+ }
+
+ double sum = 0;
+ Iterator it2 = label2score.keySet().iterator();
+ while (it2.hasNext()) {
+ String name = (String)it2.next();
+ double score = label2score.get(name);
+ sum += score;
+ list.add(new Prediction(name, score));
+ }
+
+ it2 = list.iterator();
+ while (it2.hasNext()) {
+ Prediction name = (Prediction)it2.next();
+ name.score /= sum;
+ }
+
+
+ Collections.sort(list, new Comparator<Prediction>() {
+ public int compare(Prediction object1, Prediction object2) {
+ // TODO Auto-generated method stub
+ double score1 = object1.score;
+ double score2 = object2.score;
+ if (score1 > score2)
+ return -1;
+ else if (score1 < score2)
+ return 1;
+ else
+ return 0;
+ }
+ });
+
+ it2 = list.iterator();
+ while (it2.hasNext()) {
+ Prediction name = (Prediction)it2.next();
+ Log.v(LOGTAG, "prediction [" + name.label + " = " + name.score + "]");
+ }
+
+ return list;
+ }
+}
diff --git a/tests/sketch/src/com/android/gesture/recognizer/Prediction.java b/tests/sketch/src/com/android/gesture/recognizer/Prediction.java
new file mode 100755
index 0000000..c318754
--- /dev/null
+++ b/tests/sketch/src/com/android/gesture/recognizer/Prediction.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.gesture.recognizer;
+
+/**
+ *
+ * A recognition result that includes the label and its score
+ */
+public class Prediction {
+ public final String label;
+ public double score;
+
+ public Prediction(String l, double s) {
+ label = l;
+ score = s;
+ }
+
+ @Override
+ public String toString() {
+ return label;
+ }
+}
diff --git a/tests/sketch/src/com/android/gesture/recognizer/RecognitionUtil.java b/tests/sketch/src/com/android/gesture/recognizer/RecognitionUtil.java
new file mode 100755
index 0000000..9146b95
--- /dev/null
+++ b/tests/sketch/src/com/android/gesture/recognizer/RecognitionUtil.java
@@ -0,0 +1,190 @@
+/*
+ * Copyright (C) 2008-2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.gesture.recognizer;
+
+import android.graphics.PointF;
+
+import com.android.gesture.Gesture;
+
+import java.util.Iterator;
+
+/**
+ *
+ * Utilities for recognition.
+ */
+
+public class RecognitionUtil {
+
+ /**
+ * Re-sample a list of points to a given number
+ * @param stk
+ * @param num
+ * @return
+ */
+ public static float[] resample(Gesture gesture, int num) {
+ final float increment = gesture.getLength()/(num - 1);
+ float[] newstk = new float[num*2];
+ float distanceSoFar = 0;
+ Iterator<PointF> it = gesture.getPoints().iterator();
+ PointF lstPoint = it.next();
+ int index = 0;
+ PointF currentPoint = null;
+ try
+ {
+ newstk[index] = lstPoint.x;
+ index++;
+ newstk[index] = lstPoint.y;
+ index++;
+ while (it.hasNext()) {
+ if (currentPoint == null)
+ currentPoint = it.next();
+ float deltaX = currentPoint.x - lstPoint.x;
+ float deltaY = currentPoint.y - lstPoint.y;
+ float distance = (float)Math.sqrt(deltaX*deltaX+deltaY*deltaY);
+ if (distanceSoFar+distance >= increment) {
+ float ratio = (increment - distanceSoFar) / distance;
+ float nx = lstPoint.x + ratio * deltaX;
+ float ny = lstPoint.y + ratio * deltaY;
+ newstk[index] = nx;
+ index++;
+ newstk[index] = ny;
+ index++;
+ lstPoint = new PointF(nx, ny);
+ distanceSoFar = 0;
+ }
+ else {
+ lstPoint = currentPoint;
+ currentPoint = null;
+ distanceSoFar += distance;
+ }
+ }
+ }
+ catch(Exception ex) {
+ ex.printStackTrace();
+ }
+
+ for(int i = index; i < newstk.length -1; i+=2) {
+ newstk[i] = lstPoint.x;
+ newstk[i+1] = lstPoint.y;
+ }
+ return newstk;
+ }
+
+ /**
+ * Calculate the centroid of a list of points
+ * @param points
+ * @return the centroid
+ */
+ public static PointF computeCentroid(float[] points) {
+ float centerX = 0;
+ float centerY = 0;
+ for(int i=0; i<points.length; i++)
+ {
+ centerX += points[i];
+ i++;
+ centerY += points[i];
+ }
+ centerX = 2 * centerX/points.length;
+ centerY = 2 * centerY/points.length;
+ return new PointF(centerX, centerY);
+ }
+
+ /**
+ * calculate the variance-covariance matrix, treat each point as a sample
+ * @param points
+ * @return
+ */
+ public static double[][] computeCoVariance(float[] points) {
+ double[][] array = new double[2][2];
+ array[0][0] = 0;
+ array[0][1] = 0;
+ array[1][0] = 0;
+ array[1][1] = 0;
+ for(int i=0; i<points.length; i++)
+ {
+ float x = points[i];
+ i++;
+ float y = points[i];
+ array[0][0] += x * x;
+ array[0][1] += x * y;
+ array[1][0] = array[0][1];
+ array[1][1] += y * y;
+ }
+ array[0][0] /= (points.length/2);
+ array[0][1] /= (points.length/2);
+ array[1][0] /= (points.length/2);
+ array[1][1] /= (points.length/2);
+
+ return array;
+ }
+
+
+ public static float computeTotalLength(float[] points) {
+ float sum = 0;
+ for (int i=0; i<points.length - 4; i+=2) {
+ float dx = points[i+2] - points[i];
+ float dy = points[i+3] - points[i+1];
+ sum += Math.sqrt(dx*dx + dy*dy);
+ }
+ return sum;
+ }
+
+ public static double computeStraightness(float[] points) {
+ float totalLen = computeTotalLength(points);
+ float dx = points[2] - points[0];
+ float dy = points[3] - points[1];
+ return Math.sqrt(dx*dx + dy*dy) / totalLen;
+ }
+
+ public static double computeStraightness(float[] points, float totalLen) {
+ float dx = points[2] - points[0];
+ float dy = points[3] - points[1];
+ return Math.sqrt(dx*dx + dy*dy) / totalLen;
+ }
+
+ public static double averageEuclidDistance(float[] stk1, float[] stk2) {
+ double distance = 0;
+ for (int i = 0; i < stk1.length; i += 2) {
+ distance += PointF.length(stk1[i] - stk2[i], stk1[i+1] - stk2[i+1]);
+ }
+ return distance/stk1.length;
+ }
+
+ public static double squaredEuclidDistance(float[] stk1, float[] stk2) {
+ double squaredDistance = 0;
+ for (int i = 0; i < stk1.length; i++) {
+ float difference = stk1[i] - stk2[i];
+ squaredDistance += difference * difference;
+ }
+ return squaredDistance/stk1.length;
+ }
+
+ /**
+ * Calculate the cosine distance between two instances
+ * @param in1
+ * @param in2
+ * @return the angle between 0 and Math.PI
+ */
+ public static double cosineDistance(Instance in1, Instance in2) {
+ float sum = 0;
+ for (int i = 0; i < in1.vector.length; i++) {
+ sum += in1.vector[i] * in2.vector[i];
+ }
+ return Math.acos(sum / (in1.length * in2.length));
+ }
+
+}