Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 427f585f authored by Jack Palevich's avatar Jack Palevich
Browse files

Add an Android-specific static OpenGL ES 1.1 Java API.

This change adds four new public classes that expose a static OpenGL ES 1.1 API:

	android.opengl.GLES10
	android.opengl.GLES10Ext
	android.opengl.GLES11
	android.opengl.GLES11Ext

Benefits:

 + The static API is slightly faster (1% to 4%) than the existing Interface based JSR239 API.
 + The static API is similar to the C API, which should make it easier to import C-based
   example code.
 + The static API provides a clear path for adding new OpenGL ES 1.1 extensions
   and OpenGL ES 2.0 APIs, neither of which currently have a JSR standard.

Example:

  import static android.opengl.GLES10.*;

  ...

  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

Note that it is possible to mix-and-match calls to both the static and JSR239 APIs.
This works because neither API maintains state. They both call through to the same underlying
C OpenGL ES APIs.

Implementation details:

This change enhances the "glgen" "gen" script to generate both the original JSR239 and
new static OpenGL ES APIs. The contents of the generated JSR239 classes remained the same as before,
so there is no need to check in new versions of the generated JSR239 classes.

As part of this work the gen script was updated to be somewhat more robust, and to
work with git instead of perforce. The script prints out commands to git add the generated files,
but leaves it up to the script runner to actually execute those commands.
parent f6aed036
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
generated
out
+63 −77
Original line number Diff line number Diff line
#!/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 JniCodeEmitter.java JType.java Jsr239CodeEmitter.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}
@@ -23,13 +25,34 @@ if [ $JAVAC_RESULT -ne 0 ]; then
    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
@@ -37,80 +60,43 @@ cp out/com_google_android_gles_jni_GLImpl.cpp generated/C
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
# compareGenerated destDir generatedDir file
compareGenerated() {
    if cmp -s $1/$3 $2/$3 ; then
        echo "#    " $3 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
        if [ $SAID_PLEASE == "0" ] ; then
            echo Please evaluate the following commands:
            echo
            SAID_PLEASE=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
        echo "    " cp $2/$3 $1
        echo "    " git add $1/$3
        KEEP_GENERATED=1
    fi
}

# 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
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

# 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
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

# 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
+106 −0
Original line number Diff line number Diff line
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 )
+1 −0
Original line number Diff line number Diff line
GLbitfield glQueryMatrixxOES ( GLfixed *mantissa, GLint *exponent )
+44 −0
Original line number Diff line number Diff line
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 )
Loading