Merge "Fix possible NPE" into jb-mr2-dev
diff --git a/api/current.txt b/api/current.txt
index d1be295..6719066 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -2306,28 +2306,23 @@
package android.animation {
- public abstract interface Animatable {
- method public abstract long getDuration();
- method public abstract android.animation.TimeInterpolator getInterpolator();
- method public abstract long getStartDelay();
- method public abstract android.animation.Animatable setDuration(long);
- method public abstract void setInterpolator(android.animation.TimeInterpolator);
- method public abstract void setStartDelay(long);
- }
-
- public abstract class Animator implements android.animation.Animatable java.lang.Cloneable {
+ public abstract class Animator implements java.lang.Cloneable {
ctor public Animator();
method public void addListener(android.animation.Animator.AnimatorListener);
method public void cancel();
method public android.animation.Animator clone();
method public void end();
+ method public abstract long getDuration();
method public android.animation.TimeInterpolator getInterpolator();
method public java.util.ArrayList<android.animation.Animator.AnimatorListener> getListeners();
+ method public abstract long getStartDelay();
method public abstract boolean isRunning();
method public boolean isStarted();
method public void removeAllListeners();
method public void removeListener(android.animation.Animator.AnimatorListener);
method public abstract android.animation.Animator setDuration(long);
+ method public abstract void setInterpolator(android.animation.TimeInterpolator);
+ method public abstract void setStartDelay(long);
method public void setTarget(java.lang.Object);
method public void setupEndValues();
method public void setupStartValues();
@@ -5618,7 +5613,6 @@
method public abstract java.lang.String[] fileList();
method public abstract android.content.Context getApplicationContext();
method public abstract android.content.pm.ApplicationInfo getApplicationInfo();
- method public java.util.List<android.content.RestrictionEntry> getApplicationRestrictions();
method public abstract android.content.res.AssetManager getAssets();
method public abstract java.io.File getCacheDir();
method public abstract java.lang.ClassLoader getClassLoader();
@@ -6205,8 +6199,9 @@
field public static final java.lang.String EXTRA_REFERRER = "android.intent.extra.REFERRER";
field public static final java.lang.String EXTRA_REMOTE_INTENT_TOKEN = "android.intent.extra.remote_intent_token";
field public static final java.lang.String EXTRA_REPLACING = "android.intent.extra.REPLACING";
- field public static final java.lang.String EXTRA_RESTRICTIONS = "android.intent.extra.restrictions";
+ field public static final java.lang.String EXTRA_RESTRICTIONS_BUNDLE = "android.intent.extra.restrictions_bundle";
field public static final java.lang.String EXTRA_RESTRICTIONS_INTENT = "android.intent.extra.restrictions_intent";
+ field public static final java.lang.String EXTRA_RESTRICTIONS_LIST = "android.intent.extra.restrictions_list";
field public static final java.lang.String EXTRA_RETURN_RESULT = "android.intent.extra.RETURN_RESULT";
field public static final java.lang.String EXTRA_SHORTCUT_ICON = "android.intent.extra.shortcut.ICON";
field public static final java.lang.String EXTRA_SHORTCUT_ICON_RESOURCE = "android.intent.extra.shortcut.ICON_RESOURCE";
@@ -15876,7 +15871,7 @@
field public static final int GL_STENCIL_CLEAR_VALUE = 2961; // 0xb91
field public static final int GL_STENCIL_FAIL = 2964; // 0xb94
field public static final int GL_STENCIL_FUNC = 2962; // 0xb92
- field public static final int GL_STENCIL_INDEX = 6401; // 0x1901
+ field public static final deprecated int GL_STENCIL_INDEX = 6401; // 0x1901
field public static final int GL_STENCIL_INDEX8 = 36168; // 0x8d48
field public static final int GL_STENCIL_PASS_DEPTH_FAIL = 2965; // 0xb95
field public static final int GL_STENCIL_PASS_DEPTH_PASS = 2966; // 0xb96
@@ -15959,6 +15954,476 @@
field public static final int GL_ZERO = 0; // 0x0
}
+ public class GLES30 extends android.opengl.GLES20 {
+ ctor public GLES30();
+ method public static void glBeginQuery(int, int);
+ method public static void glBeginTransformFeedback(int);
+ method public static void glBindBufferBase(int, int, int);
+ method public static void glBindBufferRange(int, int, int, int, int);
+ method public static void glBindSampler(int, int);
+ method public static void glBindTransformFeedback(int, int);
+ method public static void glBindVertexArray(int);
+ method public static void glBlitFramebuffer(int, int, int, int, int, int, int, int, int, int);
+ method public static void glClearBufferfi(int, int, float, int);
+ method public static void glClearBufferfv(int, int, float[], int);
+ method public static void glClearBufferfv(int, int, java.nio.FloatBuffer);
+ method public static void glClearBufferiv(int, int, int[], int);
+ method public static void glClearBufferiv(int, int, java.nio.IntBuffer);
+ method public static void glClearBufferuiv(int, int, int[], int);
+ method public static void glClearBufferuiv(int, int, java.nio.IntBuffer);
+ method public static int glClientWaitSync(long, int, long);
+ method public static void glCompressedTexImage3D(int, int, int, int, int, int, int, int, java.nio.Buffer);
+ method public static void glCompressedTexImage3D(int, int, int, int, int, int, int, int, int);
+ method public static void glCompressedTexSubImage3D(int, int, int, int, int, int, int, int, int, int, java.nio.Buffer);
+ method public static void glCompressedTexSubImage3D(int, int, int, int, int, int, int, int, int, int, int);
+ method public static void glCopyBufferSubData(int, int, int, int, int);
+ method public static void glCopyTexSubImage3D(int, int, int, int, int, int, int, int, int);
+ method public static void glDeleteQueries(int, int[], int);
+ method public static void glDeleteQueries(int, java.nio.IntBuffer);
+ method public static void glDeleteSamplers(int, int[], int);
+ method public static void glDeleteSamplers(int, java.nio.IntBuffer);
+ method public static void glDeleteSync(long);
+ method public static void glDeleteTransformFeedbacks(int, int[], int);
+ method public static void glDeleteTransformFeedbacks(int, java.nio.IntBuffer);
+ method public static void glDeleteVertexArrays(int, int[], int);
+ method public static void glDeleteVertexArrays(int, java.nio.IntBuffer);
+ method public static void glDrawArraysInstanced(int, int, int, int);
+ method public static void glDrawBuffers(int, int[], int);
+ method public static void glDrawBuffers(int, java.nio.IntBuffer);
+ method public static void glDrawElementsInstanced(int, int, int, java.nio.Buffer, int);
+ method public static void glDrawElementsInstanced(int, int, int, int, int);
+ method public static void glDrawRangeElements(int, int, int, int, int, java.nio.Buffer);
+ method public static void glDrawRangeElements(int, int, int, int, int, int);
+ method public static void glEndQuery(int);
+ method public static void glEndTransformFeedback();
+ method public static long glFenceSync(int, int);
+ method public static void glFlushMappedBufferRange(int, int, int);
+ method public static void glFramebufferTextureLayer(int, int, int, int, int);
+ method public static void glGenQueries(int, int[], int);
+ method public static void glGenQueries(int, java.nio.IntBuffer);
+ method public static void glGenSamplers(int, int[], int);
+ method public static void glGenSamplers(int, java.nio.IntBuffer);
+ method public static void glGenTransformFeedbacks(int, int[], int);
+ method public static void glGenTransformFeedbacks(int, java.nio.IntBuffer);
+ method public static void glGenVertexArrays(int, int[], int);
+ method public static void glGenVertexArrays(int, java.nio.IntBuffer);
+ method public static void glGetActiveUniformBlockName(int, int, int, int[], int, byte[], int);
+ method public static void glGetActiveUniformBlockName(int, int, java.nio.Buffer, java.nio.Buffer);
+ method public static java.lang.String glGetActiveUniformBlockName(int, int);
+ method public static void glGetActiveUniformBlockiv(int, int, int, int[], int);
+ method public static void glGetActiveUniformBlockiv(int, int, int, java.nio.IntBuffer);
+ method public static void glGetActiveUniformsiv(int, int, int[], int, int, int[], int);
+ method public static void glGetActiveUniformsiv(int, int, java.nio.IntBuffer, int, java.nio.IntBuffer);
+ method public static void glGetBufferParameteri64v(int, int, long[], int);
+ method public static void glGetBufferParameteri64v(int, int, java.nio.LongBuffer);
+ method public static java.nio.Buffer glGetBufferPointerv(int, int);
+ method public static int glGetFragDataLocation(int, java.lang.String);
+ method public static void glGetInteger64i_v(int, int, long[], int);
+ method public static void glGetInteger64i_v(int, int, java.nio.LongBuffer);
+ method public static void glGetInteger64v(int, long[], int);
+ method public static void glGetInteger64v(int, java.nio.LongBuffer);
+ method public static void glGetIntegeri_v(int, int, int[], int);
+ method public static void glGetIntegeri_v(int, int, java.nio.IntBuffer);
+ method public static void glGetInternalformativ(int, int, int, int, int[], int);
+ method public static void glGetInternalformativ(int, int, int, int, java.nio.IntBuffer);
+ method public static void glGetProgramBinary(int, int, int[], int, int[], int, java.nio.Buffer);
+ method public static void glGetProgramBinary(int, int, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.Buffer);
+ method public static void glGetQueryObjectuiv(int, int, int[], int);
+ method public static void glGetQueryObjectuiv(int, int, java.nio.IntBuffer);
+ method public static void glGetQueryiv(int, int, int[], int);
+ method public static void glGetQueryiv(int, int, java.nio.IntBuffer);
+ method public static void glGetSamplerParameterfv(int, int, float[], int);
+ method public static void glGetSamplerParameterfv(int, int, java.nio.FloatBuffer);
+ method public static void glGetSamplerParameteriv(int, int, int[], int);
+ method public static void glGetSamplerParameteriv(int, int, java.nio.IntBuffer);
+ method public static java.lang.String glGetStringi(int, int);
+ method public static void glGetSynciv(long, int, int, int[], int, int[], int);
+ method public static void glGetSynciv(long, int, int, java.nio.IntBuffer, java.nio.IntBuffer);
+ method public static void glGetTransformFeedbackVarying(int, int, int, int[], int, int[], int, int[], int, byte[], int);
+ method public static void glGetTransformFeedbackVarying(int, int, int, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer, byte);
+ method public static java.lang.String glGetTransformFeedbackVarying(int, int, int[], int, int[], int);
+ method public static java.lang.String glGetTransformFeedbackVarying(int, int, java.nio.IntBuffer, java.nio.IntBuffer);
+ method public static int glGetUniformBlockIndex(int, java.lang.String);
+ method public static void glGetUniformIndices(int, java.lang.String[], int[], int);
+ method public static void glGetUniformIndices(int, java.lang.String[], java.nio.IntBuffer);
+ method public static void glGetUniformuiv(int, int, int[], int);
+ method public static void glGetUniformuiv(int, int, java.nio.IntBuffer);
+ method public static void glGetVertexAttribIiv(int, int, int[], int);
+ method public static void glGetVertexAttribIiv(int, int, java.nio.IntBuffer);
+ method public static void glGetVertexAttribIuiv(int, int, int[], int);
+ method public static void glGetVertexAttribIuiv(int, int, java.nio.IntBuffer);
+ method public static void glInvalidateFramebuffer(int, int, int[], int);
+ method public static void glInvalidateFramebuffer(int, int, java.nio.IntBuffer);
+ method public static void glInvalidateSubFramebuffer(int, int, int[], int, int, int, int, int);
+ method public static void glInvalidateSubFramebuffer(int, int, java.nio.IntBuffer, int, int, int, int);
+ method public static boolean glIsQuery(int);
+ method public static boolean glIsSampler(int);
+ method public static boolean glIsSync(long);
+ method public static boolean glIsTransformFeedback(int);
+ method public static boolean glIsVertexArray(int);
+ method public static java.nio.Buffer glMapBufferRange(int, int, int, int);
+ method public static void glPauseTransformFeedback();
+ method public static void glProgramBinary(int, int, java.nio.Buffer, int);
+ method public static void glProgramParameteri(int, int, int);
+ method public static void glReadBuffer(int);
+ method public static void glRenderbufferStorageMultisample(int, int, int, int, int);
+ method public static void glResumeTransformFeedback();
+ method public static void glSamplerParameterf(int, int, float);
+ method public static void glSamplerParameterfv(int, int, float[], int);
+ method public static void glSamplerParameterfv(int, int, java.nio.FloatBuffer);
+ method public static void glSamplerParameteri(int, int, int);
+ method public static void glSamplerParameteriv(int, int, int[], int);
+ method public static void glSamplerParameteriv(int, int, java.nio.IntBuffer);
+ method public static void glTexImage3D(int, int, int, int, int, int, int, int, int, java.nio.Buffer);
+ method public static void glTexImage3D(int, int, int, int, int, int, int, int, int, int);
+ method public static void glTexStorage2D(int, int, int, int, int);
+ method public static void glTexStorage3D(int, int, int, int, int, int);
+ method public static void glTexSubImage3D(int, int, int, int, int, int, int, int, int, int, java.nio.Buffer);
+ method public static void glTexSubImage3D(int, int, int, int, int, int, int, int, int, int, int);
+ method public static void glTransformFeedbackVaryings(int, java.lang.String[], int);
+ method public static void glUniform1ui(int, int);
+ method public static void glUniform1uiv(int, int, int[], int);
+ method public static void glUniform1uiv(int, int, java.nio.IntBuffer);
+ method public static void glUniform2ui(int, int, int);
+ method public static void glUniform2uiv(int, int, int[], int);
+ method public static void glUniform2uiv(int, int, java.nio.IntBuffer);
+ method public static void glUniform3ui(int, int, int, int);
+ method public static void glUniform3uiv(int, int, int[], int);
+ method public static void glUniform3uiv(int, int, java.nio.IntBuffer);
+ method public static void glUniform4ui(int, int, int, int, int);
+ method public static void glUniform4uiv(int, int, int[], int);
+ method public static void glUniform4uiv(int, int, java.nio.IntBuffer);
+ method public static void glUniformBlockBinding(int, int, int);
+ method public static void glUniformMatrix2x3fv(int, int, boolean, float[], int);
+ method public static void glUniformMatrix2x3fv(int, int, boolean, java.nio.FloatBuffer);
+ method public static void glUniformMatrix2x4fv(int, int, boolean, float[], int);
+ method public static void glUniformMatrix2x4fv(int, int, boolean, java.nio.FloatBuffer);
+ method public static void glUniformMatrix3x2fv(int, int, boolean, float[], int);
+ method public static void glUniformMatrix3x2fv(int, int, boolean, java.nio.FloatBuffer);
+ method public static void glUniformMatrix3x4fv(int, int, boolean, float[], int);
+ method public static void glUniformMatrix3x4fv(int, int, boolean, java.nio.FloatBuffer);
+ method public static void glUniformMatrix4x2fv(int, int, boolean, float[], int);
+ method public static void glUniformMatrix4x2fv(int, int, boolean, java.nio.FloatBuffer);
+ method public static void glUniformMatrix4x3fv(int, int, boolean, float[], int);
+ method public static void glUniformMatrix4x3fv(int, int, boolean, java.nio.FloatBuffer);
+ method public static boolean glUnmapBuffer(int);
+ method public static void glVertexAttribDivisor(int, int);
+ method public static void glVertexAttribI4i(int, int, int, int, int);
+ method public static void glVertexAttribI4iv(int, int[], int);
+ method public static void glVertexAttribI4iv(int, java.nio.IntBuffer);
+ method public static void glVertexAttribI4ui(int, int, int, int, int);
+ method public static void glVertexAttribI4uiv(int, int[], int);
+ method public static void glVertexAttribI4uiv(int, java.nio.IntBuffer);
+ method public static void glVertexAttribIPointer(int, int, int, int, java.nio.Buffer);
+ method public static void glVertexAttribIPointer(int, int, int, int, int);
+ method public static void glWaitSync(long, int, long);
+ field public static final int GL_ACTIVE_UNIFORM_BLOCKS = 35382; // 0x8a36
+ field public static final int GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH = 35381; // 0x8a35
+ field public static final int GL_ALREADY_SIGNALED = 37146; // 0x911a
+ field public static final int GL_ANY_SAMPLES_PASSED = 35887; // 0x8c2f
+ field public static final int GL_ANY_SAMPLES_PASSED_CONSERVATIVE = 36202; // 0x8d6a
+ field public static final int GL_BLUE = 6405; // 0x1905
+ field public static final int GL_BUFFER_ACCESS_FLAGS = 37151; // 0x911f
+ field public static final int GL_BUFFER_MAPPED = 35004; // 0x88bc
+ field public static final int GL_BUFFER_MAP_LENGTH = 37152; // 0x9120
+ field public static final int GL_BUFFER_MAP_OFFSET = 37153; // 0x9121
+ field public static final int GL_BUFFER_MAP_POINTER = 35005; // 0x88bd
+ field public static final int GL_COLOR = 6144; // 0x1800
+ field public static final int GL_COLOR_ATTACHMENT1 = 36065; // 0x8ce1
+ field public static final int GL_COLOR_ATTACHMENT10 = 36074; // 0x8cea
+ field public static final int GL_COLOR_ATTACHMENT11 = 36075; // 0x8ceb
+ field public static final int GL_COLOR_ATTACHMENT12 = 36076; // 0x8cec
+ field public static final int GL_COLOR_ATTACHMENT13 = 36077; // 0x8ced
+ field public static final int GL_COLOR_ATTACHMENT14 = 36078; // 0x8cee
+ field public static final int GL_COLOR_ATTACHMENT15 = 36079; // 0x8cef
+ field public static final int GL_COLOR_ATTACHMENT2 = 36066; // 0x8ce2
+ field public static final int GL_COLOR_ATTACHMENT3 = 36067; // 0x8ce3
+ field public static final int GL_COLOR_ATTACHMENT4 = 36068; // 0x8ce4
+ field public static final int GL_COLOR_ATTACHMENT5 = 36069; // 0x8ce5
+ field public static final int GL_COLOR_ATTACHMENT6 = 36070; // 0x8ce6
+ field public static final int GL_COLOR_ATTACHMENT7 = 36071; // 0x8ce7
+ field public static final int GL_COLOR_ATTACHMENT8 = 36072; // 0x8ce8
+ field public static final int GL_COLOR_ATTACHMENT9 = 36073; // 0x8ce9
+ field public static final int GL_COMPARE_REF_TO_TEXTURE = 34894; // 0x884e
+ field public static final int GL_COMPRESSED_R11_EAC = 37488; // 0x9270
+ field public static final int GL_COMPRESSED_RG11_EAC = 37490; // 0x9272
+ field public static final int GL_COMPRESSED_RGB8_ETC2 = 37492; // 0x9274
+ field public static final int GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 37494; // 0x9276
+ field public static final int GL_COMPRESSED_RGBA8_ETC2_EAC = 37496; // 0x9278
+ field public static final int GL_COMPRESSED_SIGNED_R11_EAC = 37489; // 0x9271
+ field public static final int GL_COMPRESSED_SIGNED_RG11_EAC = 37491; // 0x9273
+ field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC = 37497; // 0x9279
+ field public static final int GL_COMPRESSED_SRGB8_ETC2 = 37493; // 0x9275
+ field public static final int GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 37495; // 0x9277
+ field public static final int GL_CONDITION_SATISFIED = 37148; // 0x911c
+ field public static final int GL_COPY_READ_BUFFER = 36662; // 0x8f36
+ field public static final int GL_COPY_READ_BUFFER_BINDING = 36662; // 0x8f36
+ field public static final int GL_COPY_WRITE_BUFFER = 36663; // 0x8f37
+ field public static final int GL_COPY_WRITE_BUFFER_BINDING = 36663; // 0x8f37
+ field public static final int GL_CURRENT_QUERY = 34917; // 0x8865
+ field public static final int GL_DEPTH = 6145; // 0x1801
+ field public static final int GL_DEPTH24_STENCIL8 = 35056; // 0x88f0
+ field public static final int GL_DEPTH32F_STENCIL8 = 36013; // 0x8cad
+ field public static final int GL_DEPTH_COMPONENT24 = 33190; // 0x81a6
+ field public static final int GL_DEPTH_COMPONENT32F = 36012; // 0x8cac
+ field public static final int GL_DEPTH_STENCIL = 34041; // 0x84f9
+ field public static final int GL_DEPTH_STENCIL_ATTACHMENT = 33306; // 0x821a
+ field public static final int GL_DRAW_BUFFER0 = 34853; // 0x8825
+ field public static final int GL_DRAW_BUFFER1 = 34854; // 0x8826
+ field public static final int GL_DRAW_BUFFER10 = 34863; // 0x882f
+ field public static final int GL_DRAW_BUFFER11 = 34864; // 0x8830
+ field public static final int GL_DRAW_BUFFER12 = 34865; // 0x8831
+ field public static final int GL_DRAW_BUFFER13 = 34866; // 0x8832
+ field public static final int GL_DRAW_BUFFER14 = 34867; // 0x8833
+ field public static final int GL_DRAW_BUFFER15 = 34868; // 0x8834
+ field public static final int GL_DRAW_BUFFER2 = 34855; // 0x8827
+ field public static final int GL_DRAW_BUFFER3 = 34856; // 0x8828
+ field public static final int GL_DRAW_BUFFER4 = 34857; // 0x8829
+ field public static final int GL_DRAW_BUFFER5 = 34858; // 0x882a
+ field public static final int GL_DRAW_BUFFER6 = 34859; // 0x882b
+ field public static final int GL_DRAW_BUFFER7 = 34860; // 0x882c
+ field public static final int GL_DRAW_BUFFER8 = 34861; // 0x882d
+ field public static final int GL_DRAW_BUFFER9 = 34862; // 0x882e
+ field public static final int GL_DRAW_FRAMEBUFFER = 36009; // 0x8ca9
+ field public static final int GL_DRAW_FRAMEBUFFER_BINDING = 36006; // 0x8ca6
+ field public static final int GL_DYNAMIC_COPY = 35050; // 0x88ea
+ field public static final int GL_DYNAMIC_READ = 35049; // 0x88e9
+ field public static final int GL_FLOAT_32_UNSIGNED_INT_24_8_REV = 36269; // 0x8dad
+ field public static final int GL_FLOAT_MAT2x3 = 35685; // 0x8b65
+ field public static final int GL_FLOAT_MAT2x4 = 35686; // 0x8b66
+ field public static final int GL_FLOAT_MAT3x2 = 35687; // 0x8b67
+ field public static final int GL_FLOAT_MAT3x4 = 35688; // 0x8b68
+ field public static final int GL_FLOAT_MAT4x2 = 35689; // 0x8b69
+ field public static final int GL_FLOAT_MAT4x3 = 35690; // 0x8b6a
+ field public static final int GL_FRAGMENT_SHADER_DERIVATIVE_HINT = 35723; // 0x8b8b
+ field public static final int GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = 33301; // 0x8215
+ field public static final int GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = 33300; // 0x8214
+ field public static final int GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 33296; // 0x8210
+ field public static final int GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = 33297; // 0x8211
+ field public static final int GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = 33302; // 0x8216
+ field public static final int GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = 33299; // 0x8213
+ field public static final int GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE = 33298; // 0x8212
+ field public static final int GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = 33303; // 0x8217
+ field public static final int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = 36052; // 0x8cd4
+ field public static final int GL_FRAMEBUFFER_DEFAULT = 33304; // 0x8218
+ field public static final int GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 36182; // 0x8d56
+ field public static final int GL_FRAMEBUFFER_UNDEFINED = 33305; // 0x8219
+ field public static final int GL_GREEN = 6404; // 0x1904
+ field public static final int GL_HALF_FLOAT = 5131; // 0x140b
+ field public static final int GL_INTERLEAVED_ATTRIBS = 35980; // 0x8c8c
+ field public static final int GL_INT_2_10_10_10_REV = 36255; // 0x8d9f
+ field public static final int GL_INT_SAMPLER_2D = 36298; // 0x8dca
+ field public static final int GL_INT_SAMPLER_2D_ARRAY = 36303; // 0x8dcf
+ field public static final int GL_INT_SAMPLER_3D = 36299; // 0x8dcb
+ field public static final int GL_INT_SAMPLER_CUBE = 36300; // 0x8dcc
+ field public static final int GL_INVALID_INDEX = -1; // 0xffffffff
+ field public static final int GL_MAJOR_VERSION = 33307; // 0x821b
+ field public static final int GL_MAP_FLUSH_EXPLICIT_BIT = 16; // 0x10
+ field public static final int GL_MAP_INVALIDATE_BUFFER_BIT = 8; // 0x8
+ field public static final int GL_MAP_INVALIDATE_RANGE_BIT = 4; // 0x4
+ field public static final int GL_MAP_READ_BIT = 1; // 0x1
+ field public static final int GL_MAP_UNSYNCHRONIZED_BIT = 32; // 0x20
+ field public static final int GL_MAP_WRITE_BIT = 2; // 0x2
+ field public static final int GL_MAX = 32776; // 0x8008
+ field public static final int GL_MAX_3D_TEXTURE_SIZE = 32883; // 0x8073
+ field public static final int GL_MAX_ARRAY_TEXTURE_LAYERS = 35071; // 0x88ff
+ field public static final int GL_MAX_COLOR_ATTACHMENTS = 36063; // 0x8cdf
+ field public static final int GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = 35379; // 0x8a33
+ field public static final int GL_MAX_COMBINED_UNIFORM_BLOCKS = 35374; // 0x8a2e
+ field public static final int GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = 35377; // 0x8a31
+ field public static final int GL_MAX_DRAW_BUFFERS = 34852; // 0x8824
+ field public static final int GL_MAX_ELEMENTS_INDICES = 33001; // 0x80e9
+ field public static final int GL_MAX_ELEMENTS_VERTICES = 33000; // 0x80e8
+ field public static final int GL_MAX_ELEMENT_INDEX = 36203; // 0x8d6b
+ field public static final int GL_MAX_FRAGMENT_INPUT_COMPONENTS = 37157; // 0x9125
+ field public static final int GL_MAX_FRAGMENT_UNIFORM_BLOCKS = 35373; // 0x8a2d
+ field public static final int GL_MAX_FRAGMENT_UNIFORM_COMPONENTS = 35657; // 0x8b49
+ field public static final int GL_MAX_PROGRAM_TEXEL_OFFSET = 35077; // 0x8905
+ field public static final int GL_MAX_SAMPLES = 36183; // 0x8d57
+ field public static final int GL_MAX_SERVER_WAIT_TIMEOUT = 37137; // 0x9111
+ field public static final int GL_MAX_TEXTURE_LOD_BIAS = 34045; // 0x84fd
+ field public static final int GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 35978; // 0x8c8a
+ field public static final int GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 35979; // 0x8c8b
+ field public static final int GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 35968; // 0x8c80
+ field public static final int GL_MAX_UNIFORM_BLOCK_SIZE = 35376; // 0x8a30
+ field public static final int GL_MAX_UNIFORM_BUFFER_BINDINGS = 35375; // 0x8a2f
+ field public static final int GL_MAX_VARYING_COMPONENTS = 35659; // 0x8b4b
+ field public static final int GL_MAX_VERTEX_OUTPUT_COMPONENTS = 37154; // 0x9122
+ field public static final int GL_MAX_VERTEX_UNIFORM_BLOCKS = 35371; // 0x8a2b
+ field public static final int GL_MAX_VERTEX_UNIFORM_COMPONENTS = 35658; // 0x8b4a
+ field public static final int GL_MIN = 32775; // 0x8007
+ field public static final int GL_MINOR_VERSION = 33308; // 0x821c
+ field public static final int GL_MIN_PROGRAM_TEXEL_OFFSET = 35076; // 0x8904
+ field public static final int GL_NUM_EXTENSIONS = 33309; // 0x821d
+ field public static final int GL_NUM_PROGRAM_BINARY_FORMATS = 34814; // 0x87fe
+ field public static final int GL_NUM_SAMPLE_COUNTS = 37760; // 0x9380
+ field public static final int GL_OBJECT_TYPE = 37138; // 0x9112
+ field public static final int GL_PACK_ROW_LENGTH = 3330; // 0xd02
+ field public static final int GL_PACK_SKIP_PIXELS = 3332; // 0xd04
+ field public static final int GL_PACK_SKIP_ROWS = 3331; // 0xd03
+ field public static final int GL_PIXEL_PACK_BUFFER = 35051; // 0x88eb
+ field public static final int GL_PIXEL_PACK_BUFFER_BINDING = 35053; // 0x88ed
+ field public static final int GL_PIXEL_UNPACK_BUFFER = 35052; // 0x88ec
+ field public static final int GL_PIXEL_UNPACK_BUFFER_BINDING = 35055; // 0x88ef
+ field public static final int GL_PRIMITIVE_RESTART_FIXED_INDEX = 36201; // 0x8d69
+ field public static final int GL_PROGRAM_BINARY_FORMATS = 34815; // 0x87ff
+ field public static final int GL_PROGRAM_BINARY_LENGTH = 34625; // 0x8741
+ field public static final int GL_PROGRAM_BINARY_RETRIEVABLE_HINT = 33367; // 0x8257
+ field public static final int GL_QUERY_RESULT = 34918; // 0x8866
+ field public static final int GL_QUERY_RESULT_AVAILABLE = 34919; // 0x8867
+ field public static final int GL_R11F_G11F_B10F = 35898; // 0x8c3a
+ field public static final int GL_R16F = 33325; // 0x822d
+ field public static final int GL_R16I = 33331; // 0x8233
+ field public static final int GL_R16UI = 33332; // 0x8234
+ field public static final int GL_R32F = 33326; // 0x822e
+ field public static final int GL_R32I = 33333; // 0x8235
+ field public static final int GL_R32UI = 33334; // 0x8236
+ field public static final int GL_R8 = 33321; // 0x8229
+ field public static final int GL_R8I = 33329; // 0x8231
+ field public static final int GL_R8UI = 33330; // 0x8232
+ field public static final int GL_R8_SNORM = 36756; // 0x8f94
+ field public static final int GL_RASTERIZER_DISCARD = 35977; // 0x8c89
+ field public static final int GL_READ_BUFFER = 3074; // 0xc02
+ field public static final int GL_READ_FRAMEBUFFER = 36008; // 0x8ca8
+ field public static final int GL_READ_FRAMEBUFFER_BINDING = 36010; // 0x8caa
+ field public static final int GL_RED = 6403; // 0x1903
+ field public static final int GL_RED_INTEGER = 36244; // 0x8d94
+ field public static final int GL_RENDERBUFFER_SAMPLES = 36011; // 0x8cab
+ field public static final int GL_RG = 33319; // 0x8227
+ field public static final int GL_RG16F = 33327; // 0x822f
+ field public static final int GL_RG16I = 33337; // 0x8239
+ field public static final int GL_RG16UI = 33338; // 0x823a
+ field public static final int GL_RG32F = 33328; // 0x8230
+ field public static final int GL_RG32I = 33339; // 0x823b
+ field public static final int GL_RG32UI = 33340; // 0x823c
+ field public static final int GL_RG8 = 33323; // 0x822b
+ field public static final int GL_RG8I = 33335; // 0x8237
+ field public static final int GL_RG8UI = 33336; // 0x8238
+ field public static final int GL_RG8_SNORM = 36757; // 0x8f95
+ field public static final int GL_RGB10_A2 = 32857; // 0x8059
+ field public static final int GL_RGB10_A2UI = 36975; // 0x906f
+ field public static final int GL_RGB16F = 34843; // 0x881b
+ field public static final int GL_RGB16I = 36233; // 0x8d89
+ field public static final int GL_RGB16UI = 36215; // 0x8d77
+ field public static final int GL_RGB32F = 34837; // 0x8815
+ field public static final int GL_RGB32I = 36227; // 0x8d83
+ field public static final int GL_RGB32UI = 36209; // 0x8d71
+ field public static final int GL_RGB8 = 32849; // 0x8051
+ field public static final int GL_RGB8I = 36239; // 0x8d8f
+ field public static final int GL_RGB8UI = 36221; // 0x8d7d
+ field public static final int GL_RGB8_SNORM = 36758; // 0x8f96
+ field public static final int GL_RGB9_E5 = 35901; // 0x8c3d
+ field public static final int GL_RGBA16F = 34842; // 0x881a
+ field public static final int GL_RGBA16I = 36232; // 0x8d88
+ field public static final int GL_RGBA16UI = 36214; // 0x8d76
+ field public static final int GL_RGBA32F = 34836; // 0x8814
+ field public static final int GL_RGBA32I = 36226; // 0x8d82
+ field public static final int GL_RGBA32UI = 36208; // 0x8d70
+ field public static final int GL_RGBA8 = 32856; // 0x8058
+ field public static final int GL_RGBA8I = 36238; // 0x8d8e
+ field public static final int GL_RGBA8UI = 36220; // 0x8d7c
+ field public static final int GL_RGBA8_SNORM = 36759; // 0x8f97
+ field public static final int GL_RGBA_INTEGER = 36249; // 0x8d99
+ field public static final int GL_RGB_INTEGER = 36248; // 0x8d98
+ field public static final int GL_RG_INTEGER = 33320; // 0x8228
+ field public static final int GL_SAMPLER_2D_ARRAY = 36289; // 0x8dc1
+ field public static final int GL_SAMPLER_2D_ARRAY_SHADOW = 36292; // 0x8dc4
+ field public static final int GL_SAMPLER_2D_SHADOW = 35682; // 0x8b62
+ field public static final int GL_SAMPLER_3D = 35679; // 0x8b5f
+ field public static final int GL_SAMPLER_BINDING = 35097; // 0x8919
+ field public static final int GL_SAMPLER_CUBE_SHADOW = 36293; // 0x8dc5
+ field public static final int GL_SEPARATE_ATTRIBS = 35981; // 0x8c8d
+ field public static final int GL_SIGNALED = 37145; // 0x9119
+ field public static final int GL_SIGNED_NORMALIZED = 36764; // 0x8f9c
+ field public static final int GL_SRGB = 35904; // 0x8c40
+ field public static final int GL_SRGB8 = 35905; // 0x8c41
+ field public static final int GL_SRGB8_ALPHA8 = 35907; // 0x8c43
+ field public static final int GL_STATIC_COPY = 35046; // 0x88e6
+ field public static final int GL_STATIC_READ = 35045; // 0x88e5
+ field public static final int GL_STENCIL = 6146; // 0x1802
+ field public static final int GL_STREAM_COPY = 35042; // 0x88e2
+ field public static final int GL_STREAM_READ = 35041; // 0x88e1
+ field public static final int GL_SYNC_CONDITION = 37139; // 0x9113
+ field public static final int GL_SYNC_FENCE = 37142; // 0x9116
+ field public static final int GL_SYNC_FLAGS = 37141; // 0x9115
+ field public static final int GL_SYNC_FLUSH_COMMANDS_BIT = 1; // 0x1
+ field public static final int GL_SYNC_GPU_COMMANDS_COMPLETE = 37143; // 0x9117
+ field public static final int GL_SYNC_STATUS = 37140; // 0x9114
+ field public static final int GL_TEXTURE_2D_ARRAY = 35866; // 0x8c1a
+ field public static final int GL_TEXTURE_3D = 32879; // 0x806f
+ field public static final int GL_TEXTURE_BASE_LEVEL = 33084; // 0x813c
+ field public static final int GL_TEXTURE_BINDING_2D_ARRAY = 35869; // 0x8c1d
+ field public static final int GL_TEXTURE_BINDING_3D = 32874; // 0x806a
+ field public static final int GL_TEXTURE_COMPARE_FUNC = 34893; // 0x884d
+ field public static final int GL_TEXTURE_COMPARE_MODE = 34892; // 0x884c
+ field public static final int GL_TEXTURE_IMMUTABLE_FORMAT = 37167; // 0x912f
+ field public static final int GL_TEXTURE_IMMUTABLE_LEVELS = 33503; // 0x82df
+ field public static final int GL_TEXTURE_MAX_LEVEL = 33085; // 0x813d
+ field public static final int GL_TEXTURE_MAX_LOD = 33083; // 0x813b
+ field public static final int GL_TEXTURE_MIN_LOD = 33082; // 0x813a
+ field public static final int GL_TEXTURE_SWIZZLE_A = 36421; // 0x8e45
+ field public static final int GL_TEXTURE_SWIZZLE_B = 36420; // 0x8e44
+ field public static final int GL_TEXTURE_SWIZZLE_G = 36419; // 0x8e43
+ field public static final int GL_TEXTURE_SWIZZLE_R = 36418; // 0x8e42
+ field public static final int GL_TEXTURE_WRAP_R = 32882; // 0x8072
+ field public static final int GL_TIMEOUT_EXPIRED = 37147; // 0x911b
+ field public static final long GL_TIMEOUT_IGNORED = -1L; // 0xffffffffffffffffL
+ field public static final int GL_TRANSFORM_FEEDBACK = 36386; // 0x8e22
+ field public static final int GL_TRANSFORM_FEEDBACK_ACTIVE = 36388; // 0x8e24
+ field public static final int GL_TRANSFORM_FEEDBACK_BINDING = 36389; // 0x8e25
+ field public static final int GL_TRANSFORM_FEEDBACK_BUFFER = 35982; // 0x8c8e
+ field public static final int GL_TRANSFORM_FEEDBACK_BUFFER_BINDING = 35983; // 0x8c8f
+ field public static final int GL_TRANSFORM_FEEDBACK_BUFFER_MODE = 35967; // 0x8c7f
+ field public static final int GL_TRANSFORM_FEEDBACK_BUFFER_SIZE = 35973; // 0x8c85
+ field public static final int GL_TRANSFORM_FEEDBACK_BUFFER_START = 35972; // 0x8c84
+ field public static final int GL_TRANSFORM_FEEDBACK_PAUSED = 36387; // 0x8e23
+ field public static final int GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 35976; // 0x8c88
+ field public static final int GL_TRANSFORM_FEEDBACK_VARYINGS = 35971; // 0x8c83
+ field public static final int GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH = 35958; // 0x8c76
+ field public static final int GL_UNIFORM_ARRAY_STRIDE = 35388; // 0x8a3c
+ field public static final int GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS = 35394; // 0x8a42
+ field public static final int GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = 35395; // 0x8a43
+ field public static final int GL_UNIFORM_BLOCK_BINDING = 35391; // 0x8a3f
+ field public static final int GL_UNIFORM_BLOCK_DATA_SIZE = 35392; // 0x8a40
+ field public static final int GL_UNIFORM_BLOCK_INDEX = 35386; // 0x8a3a
+ field public static final int GL_UNIFORM_BLOCK_NAME_LENGTH = 35393; // 0x8a41
+ field public static final int GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = 35398; // 0x8a46
+ field public static final int GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = 35396; // 0x8a44
+ field public static final int GL_UNIFORM_BUFFER = 35345; // 0x8a11
+ field public static final int GL_UNIFORM_BUFFER_BINDING = 35368; // 0x8a28
+ field public static final int GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT = 35380; // 0x8a34
+ field public static final int GL_UNIFORM_BUFFER_SIZE = 35370; // 0x8a2a
+ field public static final int GL_UNIFORM_BUFFER_START = 35369; // 0x8a29
+ field public static final int GL_UNIFORM_IS_ROW_MAJOR = 35390; // 0x8a3e
+ field public static final int GL_UNIFORM_MATRIX_STRIDE = 35389; // 0x8a3d
+ field public static final int GL_UNIFORM_NAME_LENGTH = 35385; // 0x8a39
+ field public static final int GL_UNIFORM_OFFSET = 35387; // 0x8a3b
+ field public static final int GL_UNIFORM_SIZE = 35384; // 0x8a38
+ field public static final int GL_UNIFORM_TYPE = 35383; // 0x8a37
+ field public static final int GL_UNPACK_IMAGE_HEIGHT = 32878; // 0x806e
+ field public static final int GL_UNPACK_ROW_LENGTH = 3314; // 0xcf2
+ field public static final int GL_UNPACK_SKIP_IMAGES = 32877; // 0x806d
+ field public static final int GL_UNPACK_SKIP_PIXELS = 3316; // 0xcf4
+ field public static final int GL_UNPACK_SKIP_ROWS = 3315; // 0xcf3
+ field public static final int GL_UNSIGNALED = 37144; // 0x9118
+ field public static final int GL_UNSIGNED_INT_10F_11F_11F_REV = 35899; // 0x8c3b
+ field public static final int GL_UNSIGNED_INT_24_8 = 34042; // 0x84fa
+ field public static final int GL_UNSIGNED_INT_2_10_10_10_REV = 33640; // 0x8368
+ field public static final int GL_UNSIGNED_INT_5_9_9_9_REV = 35902; // 0x8c3e
+ field public static final int GL_UNSIGNED_INT_SAMPLER_2D = 36306; // 0x8dd2
+ field public static final int GL_UNSIGNED_INT_SAMPLER_2D_ARRAY = 36311; // 0x8dd7
+ field public static final int GL_UNSIGNED_INT_SAMPLER_3D = 36307; // 0x8dd3
+ field public static final int GL_UNSIGNED_INT_SAMPLER_CUBE = 36308; // 0x8dd4
+ field public static final int GL_UNSIGNED_INT_VEC2 = 36294; // 0x8dc6
+ field public static final int GL_UNSIGNED_INT_VEC3 = 36295; // 0x8dc7
+ field public static final int GL_UNSIGNED_INT_VEC4 = 36296; // 0x8dc8
+ field public static final int GL_UNSIGNED_NORMALIZED = 35863; // 0x8c17
+ field public static final int GL_VERTEX_ARRAY_BINDING = 34229; // 0x85b5
+ field public static final int GL_VERTEX_ATTRIB_ARRAY_DIVISOR = 35070; // 0x88fe
+ field public static final int GL_VERTEX_ATTRIB_ARRAY_INTEGER = 35069; // 0x88fd
+ field public static final int GL_WAIT_FAILED = 37149; // 0x911d
+ }
+
public class GLException extends java.lang.RuntimeException {
ctor public GLException(int);
ctor public GLException(int, java.lang.String);
@@ -17086,7 +17551,7 @@
}
public class UserManager {
- method public static synchronized android.os.UserManager get(android.content.Context);
+ method public android.os.Bundle getApplicationRestrictions(java.lang.String);
method public long getSerialNumberForUser(android.os.UserHandle);
method public int getUserCount();
method public android.os.UserHandle getUserForSerialNumber(long);
@@ -29579,7 +30044,6 @@
method public void setRelativeScrollPosition(int, int);
method public deprecated void setRemoteAdapter(int, int, android.content.Intent);
method public void setRemoteAdapter(int, android.content.Intent);
- method public void setRemoteAdapter(int, java.util.ArrayList<android.widget.RemoteViews>, int);
method public void setScrollPosition(int, int);
method public void setShort(int, java.lang.String, short);
method public void setString(int, java.lang.String, java.lang.String);
diff --git a/cmds/app_process/app_main.cpp b/cmds/app_process/app_main.cpp
index 0668be6..90bcb0f 100644
--- a/cmds/app_process/app_main.cpp
+++ b/cmds/app_process/app_main.cpp
@@ -12,6 +12,7 @@
#include <utils/Log.h>
#include <cutils/process_name.h>
#include <cutils/memory.h>
+#include <cutils/trace.h>
#include <android_runtime/AndroidRuntime.h>
#include <sys/personality.h>
@@ -95,6 +96,9 @@
virtual void onZygoteInit()
{
+ // Re-enable tracing now that we're no longer in Zygote.
+ atrace_set_tracing_enabled(true);
+
sp<ProcessState> proc = ProcessState::self();
ALOGV("App process: starting thread pool.\n");
proc->startThreadPool();
diff --git a/core/java/android/animation/Animatable.java b/core/java/android/animation/Animatable.java
deleted file mode 100644
index f9ccb4d..0000000
--- a/core/java/android/animation/Animatable.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (C) 2013 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.animation;
-
-/**
- * This interface is implemented by animation-related classes that expose
- * the ability to set and get duration, startDelay, and interpolators.
- */
-public interface Animatable {
-
- /**
- * The amount of time, in milliseconds, to delay processing the animation
- * after the animation is started. The {@link #setDuration(long)} of the
- * animation will not begin to elapse until after the startDelay has elapsed.
- *
- * @return the number of milliseconds to delay running the animation
- */
- long getStartDelay();
-
- /**
- * The amount of time, in milliseconds, to delay processing the animation
- * after the animation is started. The {@link #setDuration(long)} of the
- * animation will not begin to elapse until after the startDelay has elapsed.
-
- * @param startDelay The amount of the delay, in milliseconds
- */
- void setStartDelay(long startDelay);
-
- /**
- * Sets the length of the animation.
- *
- * @param duration The length of the animation, in milliseconds.
- */
- Animatable setDuration(long duration);
-
- /**
- * Gets the duration of the animation.
- *
- * @return The length of the animation, in milliseconds.
- */
- long getDuration();
-
- /**
- * The time interpolator used in calculating the elapsed fraction of the
- * animation. The interpolator determines whether the animation runs with
- * linear or non-linear motion, such as acceleration and deceleration.
- *
- * @param value the interpolator to be used by this animation
- */
- void setInterpolator(TimeInterpolator value);
-
- /**
- * Returns the timing interpolator that this animation uses.
- *
- * @return The timing interpolator for this animation.
- */
- public TimeInterpolator getInterpolator();
-}
diff --git a/core/java/android/animation/Animator.java b/core/java/android/animation/Animator.java
index da97d72..39eb8d6 100644
--- a/core/java/android/animation/Animator.java
+++ b/core/java/android/animation/Animator.java
@@ -22,21 +22,13 @@
* This is the superclass for classes which provide basic support for animations which can be
* started, ended, and have <code>AnimatorListeners</code> added to them.
*/
-public abstract class Animator implements Cloneable, Animatable {
+public abstract class Animator implements Cloneable {
/**
* The set of listeners to be sent events through the life of an animation.
*/
ArrayList<AnimatorListener> mListeners = null;
- @Override
- public abstract Animator setDuration(long duration);
-
- @Override
- public TimeInterpolator getInterpolator() {
- return null;
- }
-
/**
* Starts this animation. If the animation has a nonzero startDelay, the animation will start
* running after that delay elapses. A non-delayed animation will have its initial
@@ -77,6 +69,55 @@
}
/**
+ * The amount of time, in milliseconds, to delay processing the animation
+ * after {@link #start()} is called.
+ *
+ * @return the number of milliseconds to delay running the animation
+ */
+ public abstract long getStartDelay();
+
+ /**
+ * The amount of time, in milliseconds, to delay processing the animation
+ * after {@link #start()} is called.
+
+ * @param startDelay The amount of the delay, in milliseconds
+ */
+ public abstract void setStartDelay(long startDelay);
+
+ /**
+ * Sets the duration of the animation.
+ *
+ * @param duration The length of the animation, in milliseconds.
+ */
+ public abstract Animator setDuration(long duration);
+
+ /**
+ * Gets the duration of the animation.
+ *
+ * @return The length of the animation, in milliseconds.
+ */
+ public abstract long getDuration();
+
+ /**
+ * The time interpolator used in calculating the elapsed fraction of the
+ * animation. The interpolator determines whether the animation runs with
+ * linear or non-linear motion, such as acceleration and deceleration. The
+ * default value is {@link android.view.animation.AccelerateDecelerateInterpolator}.
+ *
+ * @param value the interpolator to be used by this animation
+ */
+ public abstract void setInterpolator(TimeInterpolator value);
+
+ /**
+ * Returns the timing interpolator that this animation uses.
+ *
+ * @return The timing interpolator for this animation.
+ */
+ public TimeInterpolator getInterpolator() {
+ return null;
+ }
+
+ /**
* Returns whether this Animator is currently running (having been started and gone past any
* initial startDelay period and not yet ended).
*
diff --git a/core/java/android/app/Application.java b/core/java/android/app/Application.java
index 7b07438..0d7f0a7 100644
--- a/core/java/android/app/Application.java
+++ b/core/java/android/app/Application.java
@@ -134,11 +134,6 @@
}
}
- public List<RestrictionEntry> getApplicationRestrictions() {
- return ((UserManager) getSystemService(USER_SERVICE))
- .getApplicationRestrictions(getPackageName(), android.os.Process.myUserHandle());
- }
-
public void registerComponentCallbacks(ComponentCallbacks callback) {
synchronized (mComponentCallbacks) {
mComponentCallbacks.add(callback);
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index 03e241a..5bd28b9 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -293,15 +293,6 @@
public abstract Context getApplicationContext();
/**
- * Returns the list of restrictions for the application, or null if there are no
- * restrictions.
- * @return
- */
- public List<RestrictionEntry> getApplicationRestrictions() {
- return getApplicationContext().getApplicationRestrictions();
- }
-
- /**
* Add a new {@link ComponentCallbacks} to the base application of the
* Context, which will be called at the same times as the ComponentCallbacks
* methods of activities and other components are called. Note that you
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index 97ad7dd..1ab1eb8 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -2417,11 +2417,16 @@
/**
* Broadcast to a specific application to query any supported restrictions to impose
- * on restricted users. The response should contain an extra {@link #EXTRA_RESTRICTIONS},
+ * on restricted users. The broadcast intent contains an extra
+ * {@link #EXTRA_RESTRICTIONS_BUNDLE} with the currently persisted
+ * restrictions as a Bundle of key/value pairs. The value types can be Boolean, String or
+ * String[] depending on the restriction type.<p/>
+ * The response should contain an extra {@link #EXTRA_RESTRICTIONS_LIST},
* which is of type <code>ArrayList<RestrictionEntry></code>. It can also
* contain an extra {@link #EXTRA_RESTRICTIONS_INTENT}, which is of type <code>Intent</code>.
* The activity specified by that intent will be launched for a result which must contain
- * the extra {@link #EXTRA_RESTRICTIONS}. The returned restrictions will be persisted.
+ * the extra {@link #EXTRA_RESTRICTIONS_LIST}. The keys and values of the returned restrictions
+ * will be persisted.
* @see RestrictionEntry
*/
public static final String ACTION_GET_RESTRICTION_ENTRIES =
@@ -3160,7 +3165,8 @@
"android.intent.extra.ALLOW_MULTIPLE";
/**
- * The userHandle carried with broadcast intents related to addition, removal and switching of users
+ * The userHandle carried with broadcast intents related to addition, removal and switching of
+ * users
* - {@link #ACTION_USER_ADDED}, {@link #ACTION_USER_REMOVED} and {@link #ACTION_USER_SWITCHED}.
* @hide
*/
@@ -3169,9 +3175,18 @@
/**
* Extra used in the response from a BroadcastReceiver that handles
- * {@link #ACTION_GET_RESTRICTION_ENTRIES}.
+ * {@link #ACTION_GET_RESTRICTION_ENTRIES}. The type of the extra is
+ * <code>ArrayList<RestrictionEntry></code>.
*/
- public static final String EXTRA_RESTRICTIONS = "android.intent.extra.restrictions";
+ public static final String EXTRA_RESTRICTIONS_LIST = "android.intent.extra.restrictions_list";
+
+ /**
+ * Extra sent in the intent to the BroadcastReceiver that handles
+ * {@link #ACTION_GET_RESTRICTION_ENTRIES}. The type of the extra is a Bundle containing
+ * the restrictions as key/value pairs.
+ */
+ public static final String EXTRA_RESTRICTIONS_BUNDLE =
+ "android.intent.extra.restrictions_bundle";
/**
* Extra used in the response from a BroadcastReceiver that handles
diff --git a/core/java/android/hardware/Sensor.java b/core/java/android/hardware/Sensor.java
index 074f8fe..71a5382 100644
--- a/core/java/android/hardware/Sensor.java
+++ b/core/java/android/hardware/Sensor.java
@@ -188,6 +188,8 @@
// Upon detection of an event, the sensor deactivates itself and then sends a single event.
static int REPORTING_MODE_ONE_SHOT = 3;
+ // TODO(): The following arrays are fragile and error-prone. This needs to be refactored.
+
// Note: This needs to be updated, whenever a new sensor is added.
private static int[] sSensorReportingModes = {
REPORTING_MODE_CONTINUOUS, REPORTING_MODE_CONTINUOUS, REPORTING_MODE_CONTINUOUS,
@@ -201,7 +203,7 @@
// Holds the maximum length of the values array associated with {@link SensorEvent} or
// {@link TriggerEvent} for the Sensor
private static int[] sMaxLengthValuesArray = {
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 3,
6, 4, 6, 1 };
static int getReportingMode(Sensor sensor) {
diff --git a/core/java/android/os/IUserManager.aidl b/core/java/android/os/IUserManager.aidl
index 2e8092a..a11358a 100644
--- a/core/java/android/os/IUserManager.aidl
+++ b/core/java/android/os/IUserManager.aidl
@@ -42,7 +42,8 @@
int getUserHandle(int userSerialNumber);
Bundle getUserRestrictions(int userHandle);
void setUserRestrictions(in Bundle restrictions, int userHandle);
- void setApplicationRestrictions(in String packageName, in List<RestrictionEntry> entries,
+ void setApplicationRestrictions(in String packageName, in Bundle restrictions,
int userHandle);
- List<RestrictionEntry> getApplicationRestrictions(in String packageName, int userHandle);
+ Bundle getApplicationRestrictions(in String packageName);
+ Bundle getApplicationRestrictionsForUser(in String packageName, int userHandle);
}
diff --git a/core/java/android/os/Trace.java b/core/java/android/os/Trace.java
index 617f490..3307a8c 100644
--- a/core/java/android/os/Trace.java
+++ b/core/java/android/os/Trace.java
@@ -79,6 +79,7 @@
private static native void nativeAsyncTraceBegin(long tag, String name, int cookie);
private static native void nativeAsyncTraceEnd(long tag, String name, int cookie);
private static native void nativeSetAppTracingAllowed(boolean allowed);
+ private static native void nativeSetTracingEnabled(boolean allowed);
static {
// We configure two separate change callbacks, one in Trace.cpp and one here. The
@@ -115,10 +116,6 @@
*/
private static long cacheEnabledTags() {
long tags = nativeGetEnabledTags();
- if (tags == TRACE_TAG_NOT_READY) {
- Log.w(TAG, "Unexpected value from nativeGetEnabledTags: " + tags);
- // keep going
- }
sEnabledTags = tags;
return tags;
}
@@ -169,6 +166,22 @@
}
/**
+ * Set whether tracing is enabled in this process. Tracing is disabled shortly after Zygote
+ * initializes and re-enabled after processes fork from Zygote. This is done because Zygote
+ * has no way to be notified about changes to the tracing tags, and if Zygote ever reads and
+ * caches the tracing tags, forked processes will inherit those stale tags.
+ *
+ * @hide
+ */
+ public static void setTracingEnabled(boolean enabled) {
+ nativeSetTracingEnabled(enabled);
+
+ // Setting whether tracing is enabled may change the tags, so we update the cached tags
+ // here.
+ cacheEnabledTags();
+ }
+
+ /**
* Writes a trace message to indicate that a given section of code has
* begun. Must be followed by a call to {@link #traceEnd} using the same
* tag.
diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java
index e580e2b..df065e9 100644
--- a/core/java/android/os/UserManager.java
+++ b/core/java/android/os/UserManager.java
@@ -142,6 +142,7 @@
private static UserManager sInstance = null;
+ /** @hide */
public synchronized static UserManager get(Context context) {
if (sInstance == null) {
sInstance = (UserManager) context.getSystemService(Context.USER_SERVICE);
@@ -578,13 +579,29 @@
return -1;
}
+ /**
+ * Returns a Bundle containing any saved application restrictions for this user, for the
+ * given package name. Only an application with this package name can call this method.
+ * @param packageName the package name of the calling application
+ * @return a Bundle with the restrictions as key/value pairs, or null if there are no
+ * saved restrictions. The values can be of type Boolean, String or String[], depending
+ * on the restriction type, as defined by the application.
+ */
+ public Bundle getApplicationRestrictions(String packageName) {
+ try {
+ return mService.getApplicationRestrictions(packageName);
+ } catch (RemoteException re) {
+ Log.w(TAG, "Could not get application restrictions for package " + packageName);
+ }
+ return null;
+ }
/**
* @hide
*/
- public List<RestrictionEntry> getApplicationRestrictions(String packageName, UserHandle user) {
+ public Bundle getApplicationRestrictions(String packageName, UserHandle user) {
try {
- return mService.getApplicationRestrictions(packageName, user.getIdentifier());
+ return mService.getApplicationRestrictionsForUser(packageName, user.getIdentifier());
} catch (RemoteException re) {
Log.w(TAG, "Could not get application restrictions for user " + user.getIdentifier());
}
@@ -594,10 +611,10 @@
/**
* @hide
*/
- public void setApplicationRestrictions(String packageName, List<RestrictionEntry> entries,
+ public void setApplicationRestrictions(String packageName, Bundle restrictions,
UserHandle user) {
try {
- mService.setApplicationRestrictions(packageName, entries, user.getIdentifier());
+ mService.setApplicationRestrictions(packageName, restrictions, user.getIdentifier());
} catch (RemoteException re) {
Log.w(TAG, "Could not set application restrictions for user " + user.getIdentifier());
}
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 88ee414..3df4e99 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -3260,6 +3260,7 @@
/**
* This preference contains the string that shows for owner info on LockScreen.
* @hide
+ * @deprecated
*/
public static final String LOCK_SCREEN_OWNER_INFO = "lock_screen_owner_info";
@@ -3287,6 +3288,7 @@
/**
* This preference enables showing the owner info on LockScreen.
* @hide
+ * @deprecated
*/
public static final String LOCK_SCREEN_OWNER_INFO_ENABLED =
"lock_screen_owner_info_enabled";
@@ -4102,9 +4104,7 @@
MOUNT_UMS_AUTOSTART,
MOUNT_UMS_PROMPT,
MOUNT_UMS_NOTIFY_ENABLED,
- UI_NIGHT_MODE,
- LOCK_SCREEN_OWNER_INFO,
- LOCK_SCREEN_OWNER_INFO_ENABLED
+ UI_NIGHT_MODE
};
/**
diff --git a/core/java/android/view/Surface.java b/core/java/android/view/Surface.java
index edfef56..4989c3a 100644
--- a/core/java/android/view/Surface.java
+++ b/core/java/android/view/Surface.java
@@ -220,14 +220,14 @@
/**
* Gets a {@link Canvas} for drawing into this surface.
*
- * After drawing into the provided {@link Canvas}, the caller should
+ * After drawing into the provided {@link Canvas}, the caller must
* invoke {@link #unlockCanvasAndPost} to post the new contents to the surface.
*
* @param inOutDirty A rectangle that represents the dirty region that the caller wants
* to redraw. This function may choose to expand the dirty rectangle if for example
* the surface has been resized or if the previous contents of the surface were
- * not available. The caller should redraw the entire dirty region as represented
- * by the contents of the dirty rect upon return from this function.
+ * not available. The caller must redraw the entire dirty region as represented
+ * by the contents of the inOutDirty rectangle upon return from this function.
* The caller may also pass <code>null</code> instead, in the case where the
* entire surface should be redrawn.
* @return A canvas for drawing into the surface.
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index 14fa9cb..793fb5e 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -755,12 +755,36 @@
mHandler.sendMessage(msg);
}
+ /**
+ * Gets a {@link Canvas} for drawing into the SurfaceView's Surface
+ *
+ * After drawing into the provided {@link Canvas}, the caller must
+ * invoke {@link #unlockCanvasAndPost} to post the new contents to the surface.
+ *
+ * The caller must redraw the entire surface.
+ * @return A canvas for drawing into the surface.
+ */
public Canvas lockCanvas() {
return internalLockCanvas(null);
}
- public Canvas lockCanvas(Rect dirty) {
- return internalLockCanvas(dirty);
+ /**
+ * Gets a {@link Canvas} for drawing into the SurfaceView's Surface
+ *
+ * After drawing into the provided {@link Canvas}, the caller must
+ * invoke {@link #unlockCanvasAndPost} to post the new contents to the surface.
+ *
+ * @param inOutDirty A rectangle that represents the dirty region that the caller wants
+ * to redraw. This function may choose to expand the dirty rectangle if for example
+ * the surface has been resized or if the previous contents of the surface were
+ * not available. The caller must redraw the entire dirty region as represented
+ * by the contents of the inOutDirty rectangle upon return from this function.
+ * The caller may also pass <code>null</code> instead, in the case where the
+ * entire surface should be redrawn.
+ * @return A canvas for drawing into the surface.
+ */
+ public Canvas lockCanvas(Rect inOutDirty) {
+ return internalLockCanvas(inOutDirty);
}
private final Canvas internalLockCanvas(Rect dirty) {
@@ -810,6 +834,12 @@
return null;
}
+ /**
+ * Posts the new contents of the {@link Canvas} to the surface and
+ * releases the {@link Canvas}.
+ *
+ * @param canvas The canvas previously obtained from {@link #lockCanvas}.
+ */
public void unlockCanvasAndPost(Canvas canvas) {
mSurface.unlockCanvasAndPost(canvas);
mSurfaceLock.unlock();
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 4fb2431..be26d20 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -13380,18 +13380,32 @@
/**
* Sets a rectangular area on this view to which the view will be clipped
- * it is drawn. Setting the value to null will remove the clip bounds
+ * when it is drawn. Setting the value to null will remove the clip bounds
* and the view will draw normally, using its full bounds.
*
* @param clipBounds The rectangular area, in the local coordinates of
* this view, to which future drawing operations will be clipped.
*/
public void setClipBounds(Rect clipBounds) {
- mClipBounds = clipBounds;
if (clipBounds != null) {
- invalidate(clipBounds);
+ if (clipBounds.equals(mClipBounds)) {
+ return;
+ }
+ if (mClipBounds == null) {
+ invalidate();
+ mClipBounds = new Rect(clipBounds);
+ } else {
+ invalidate(Math.min(mClipBounds.left, clipBounds.left),
+ Math.min(mClipBounds.top, clipBounds.top),
+ Math.max(mClipBounds.right, clipBounds.right),
+ Math.max(mClipBounds.bottom, clipBounds.bottom));
+ mClipBounds.set(clipBounds);
+ }
} else {
- invalidate();
+ if (mClipBounds != null) {
+ invalidate();
+ mClipBounds = null;
+ }
}
}
diff --git a/core/java/android/view/ViewGroupOverlay.java b/core/java/android/view/ViewGroupOverlay.java
index c1b24f2..16afc5d 100644
--- a/core/java/android/view/ViewGroupOverlay.java
+++ b/core/java/android/view/ViewGroupOverlay.java
@@ -47,7 +47,8 @@
* animation effect.</p>
*
* <p>If the view has a parent, the view will be removed from that parent
- * before being added to the overlay. Also, the view will be repositioned
+ * before being added to the overlay. Also, if that parent is attached
+ * in the current view hierarchy, the view will be repositioned
* such that it is in the same relative location inside the activity. For
* example, if the view's current parent lies 100 pixels to the right
* and 200 pixels down from the origin of the overlay's
diff --git a/core/java/android/view/ViewOverlay.java b/core/java/android/view/ViewOverlay.java
index 78e2597..fe5b990 100644
--- a/core/java/android/view/ViewOverlay.java
+++ b/core/java/android/view/ViewOverlay.java
@@ -157,7 +157,8 @@
public void add(View child) {
if (child.getParent() instanceof ViewGroup) {
ViewGroup parent = (ViewGroup) child.getParent();
- if (parent != mHostView) {
+ if (parent != mHostView && parent.getParent() != null &&
+ parent.mAttachInfo != null) {
// Moving to different container; figure out how to position child such that
// it is in the same location on the screen
int[] parentLocation = new int[2];
diff --git a/core/java/android/view/ViewPropertyAnimator.java b/core/java/android/view/ViewPropertyAnimator.java
index 98df064..528eadd 100644
--- a/core/java/android/view/ViewPropertyAnimator.java
+++ b/core/java/android/view/ViewPropertyAnimator.java
@@ -16,7 +16,6 @@
package android.view;
-import android.animation.Animatable;
import android.animation.Animator;
import android.animation.ValueAnimator;
import android.animation.TimeInterpolator;
diff --git a/core/java/android/webkit/WebViewClassic.java b/core/java/android/webkit/WebViewClassic.java
index c7dacf3..a324502 100644
--- a/core/java/android/webkit/WebViewClassic.java
+++ b/core/java/android/webkit/WebViewClassic.java
@@ -2149,7 +2149,8 @@
@Override
public void destroy() {
if (mWebView.getViewRootImpl() != null) {
- Log.e(LOGTAG, "Error: WebView.destroy() called while still attached!");
+ Log.e(LOGTAG, Log.getStackTraceString(
+ new Throwable("Error: WebView.destroy() called while still attached!")));
}
ensureFunctorDetached();
destroyJava();
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index 94dadb4..c72853f 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -2699,6 +2699,15 @@
mLastTouchMode = touchMode;
}
+ @Override
+ public void onRtlPropertiesChanged(int layoutDirection) {
+ super.onRtlPropertiesChanged(layoutDirection);
+
+ if (mFastScroller != null) {
+ mFastScroller.setScrollbarPosition(getVerticalScrollbarPosition());
+ }
+ }
+
/**
* Creates the ContextMenuInfo returned from {@link #getContextMenuInfo()}. This
* methods knows the view, position and ID of the item that received the
diff --git a/core/java/android/widget/FastScroller.java b/core/java/android/widget/FastScroller.java
index d2139af..fc9c000 100644
--- a/core/java/android/widget/FastScroller.java
+++ b/core/java/android/widget/FastScroller.java
@@ -216,8 +216,22 @@
mHandler.removeCallbacks(mScrollFade);
break;
case STATE_EXIT:
- int viewWidth = mList.getWidth();
- mList.invalidate(viewWidth - mThumbW, mThumbY, viewWidth, mThumbY + mThumbH);
+ final int viewWidth = mList.getWidth();
+ final int top = mThumbY;
+ final int bottom = mThumbY + mThumbH;
+ final int left;
+ final int right;
+ switch (mList.getLayoutDirection()) {
+ case View.LAYOUT_DIRECTION_RTL:
+ left = 0;
+ right = mThumbW;
+ break;
+ case View.LAYOUT_DIRECTION_LTR:
+ default:
+ left = viewWidth - mThumbW;
+ right = viewWidth;
+ }
+ mList.invalidate(left, top, right, bottom);
break;
}
mState = state;
@@ -398,10 +412,26 @@
} else if (mState == STATE_EXIT) {
if (alpha == 0) { // Done with exit
setState(STATE_NONE);
- } else if (mTrackDrawable != null) {
- mList.invalidate(viewWidth - mThumbW, 0, viewWidth, mList.getHeight());
} else {
- mList.invalidate(viewWidth - mThumbW, y, viewWidth, y + mThumbH);
+ final int left, right, top, bottom;
+ if (mTrackDrawable != null) {
+ top = 0;
+ bottom = mList.getHeight();
+ } else {
+ top = y;
+ bottom = y + mThumbH;
+ }
+ switch (mList.getLayoutDirection()) {
+ case View.LAYOUT_DIRECTION_RTL:
+ left = 0;
+ right = mThumbW;
+ break;
+ case View.LAYOUT_DIRECTION_LTR:
+ default:
+ left = viewWidth - mThumbW;
+ right = viewWidth;
+ }
+ mList.invalidate(left, top, right, bottom);
}
}
}
diff --git a/core/java/android/widget/GridLayout.java b/core/java/android/widget/GridLayout.java
index 85ed8db..2309001 100644
--- a/core/java/android/widget/GridLayout.java
+++ b/core/java/android/widget/GridLayout.java
@@ -944,15 +944,17 @@
// Measurement
+ // Note: padding has already been removed from the supplied specs
private void measureChildWithMargins2(View child, int parentWidthSpec, int parentHeightSpec,
int childWidth, int childHeight) {
int childWidthSpec = getChildMeasureSpec(parentWidthSpec,
- mPaddingLeft + mPaddingRight + getTotalMargin(child, true), childWidth);
+ getTotalMargin(child, true), childWidth);
int childHeightSpec = getChildMeasureSpec(parentHeightSpec,
- mPaddingTop + mPaddingBottom + getTotalMargin(child, false), childHeight);
+ getTotalMargin(child, false), childHeight);
child.measure(childWidthSpec, childHeightSpec);
}
+ // Note: padding has already been removed from the supplied specs
private void measureChildrenWithMargins(int widthSpec, int heightSpec, boolean firstPass) {
for (int i = 0, N = getChildCount(); i < N; i++) {
View c = getChildAt(i);
@@ -979,6 +981,11 @@
}
}
+ static int adjust(int measureSpec, int delta) {
+ return makeMeasureSpec(
+ MeasureSpec.getSize(measureSpec + delta), MeasureSpec.getMode(measureSpec));
+ }
+
@Override
protected void onMeasure(int widthSpec, int heightSpec) {
consistencyCheck();
@@ -987,29 +994,33 @@
* is likely to have changed. We must invalidate if so. */
invalidateValues();
- measureChildrenWithMargins(widthSpec, heightSpec, true);
+ int hPadding = getPaddingLeft() + getPaddingRight();
+ int vPadding = getPaddingTop() + getPaddingBottom();
- int width, height;
+ int widthSpecSansPadding = adjust( widthSpec, -hPadding);
+ int heightSpecSansPadding = adjust(heightSpec, -vPadding);
+
+ measureChildrenWithMargins(widthSpecSansPadding, heightSpecSansPadding, true);
+
+ int widthSansPadding;
+ int heightSansPadding;
// Use the orientation property to decide which axis should be laid out first.
if (orientation == HORIZONTAL) {
- width = horizontalAxis.getMeasure(widthSpec);
- measureChildrenWithMargins(widthSpec, heightSpec, false);
- height = verticalAxis.getMeasure(heightSpec);
+ widthSansPadding = horizontalAxis.getMeasure(widthSpecSansPadding);
+ measureChildrenWithMargins(widthSpecSansPadding, heightSpecSansPadding, false);
+ heightSansPadding = verticalAxis.getMeasure(heightSpecSansPadding);
} else {
- height = verticalAxis.getMeasure(heightSpec);
- measureChildrenWithMargins(widthSpec, heightSpec, false);
- width = horizontalAxis.getMeasure(widthSpec);
+ heightSansPadding = verticalAxis.getMeasure(heightSpecSansPadding);
+ measureChildrenWithMargins(widthSpecSansPadding, heightSpecSansPadding, false);
+ widthSansPadding = horizontalAxis.getMeasure(widthSpecSansPadding);
}
- int hPadding = getPaddingLeft() + getPaddingRight();
- int vPadding = getPaddingTop() + getPaddingBottom();
-
- int measuredWidth = Math.max(hPadding + width, getSuggestedMinimumWidth());
- int measuredHeight = Math.max(vPadding + height, getSuggestedMinimumHeight());
+ int measuredWidth = Math.max(widthSansPadding + hPadding, getSuggestedMinimumWidth());
+ int measuredHeight = Math.max(heightSansPadding + vPadding, getSuggestedMinimumHeight());
setMeasuredDimension(
- resolveSizeAndState(measuredWidth, widthSpec, 0),
+ resolveSizeAndState(measuredWidth, widthSpec, 0),
resolveSizeAndState(measuredHeight, heightSpec, 0));
}
diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java
index 83e2e79..07e66b7 100644
--- a/core/java/android/widget/RemoteViews.java
+++ b/core/java/android/widget/RemoteViews.java
@@ -2108,6 +2108,8 @@
* RemoteViews. This count cannot change during the life-cycle of a given widget, so this
* parameter should account for the maximum possible number of types that may appear in the
* See {@link Adapter#getViewTypeCount()}.
+ *
+ * @hide
*/
public void setRemoteAdapter(int viewId, ArrayList<RemoteViews> list, int viewTypeCount) {
addAction(new SetRemoteViewsAdapterList(viewId, list, viewTypeCount));
diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java
index 7eddc9c..2184fd2 100644
--- a/core/java/com/android/internal/os/ZygoteInit.java
+++ b/core/java/com/android/internal/os/ZygoteInit.java
@@ -25,6 +25,7 @@
import android.os.Debug;
import android.os.Process;
import android.os.SystemClock;
+import android.os.Trace;
import android.util.EventLog;
import android.util.Log;
@@ -528,6 +529,10 @@
// Do an initial gc to clean up after startup
gc();
+ // Disable tracing so that forked processes do not inherit stale tracing tags from
+ // Zygote.
+ Trace.setTracingEnabled(false);
+
// If requested, start system server directly from Zygote
if (argv.length != 2) {
throw new RuntimeException(argv[0] + USAGE_STRING);
diff --git a/core/java/com/android/internal/util/StateMachine.java b/core/java/com/android/internal/util/StateMachine.java
index dd57ef4..d26f79e 100644
--- a/core/java/com/android/internal/util/StateMachine.java
+++ b/core/java/com/android/internal/util/StateMachine.java
@@ -672,6 +672,9 @@
private static class SmHandler extends Handler {
+ /** true if StateMachine has quit */
+ private boolean mHasQuit = false;
+
/** The debug flag */
private boolean mDbg = false;
@@ -773,29 +776,31 @@
*/
@Override
public final void handleMessage(Message msg) {
- if (mDbg) mSm.log("handleMessage: E msg.what=" + msg.what);
+ if (!mHasQuit) {
+ if (mDbg) mSm.log("handleMessage: E msg.what=" + msg.what);
- /** Save the current message */
- mMsg = msg;
+ /** Save the current message */
+ mMsg = msg;
- /** State that processed the message */
- State msgProcessedState = null;
- if (mIsConstructionCompleted) {
- /** Normal path */
- msgProcessedState = processMsg(msg);
- } else if (!mIsConstructionCompleted && (mMsg.what == SM_INIT_CMD)
- && (mMsg.obj == mSmHandlerObj)) {
- /** Initial one time path. */
- mIsConstructionCompleted = true;
- invokeEnterMethods(0);
- } else {
- throw new RuntimeException("StateMachine.handleMessage: "
- + "The start method not called, received msg: " + msg);
+ /** State that processed the message */
+ State msgProcessedState = null;
+ if (mIsConstructionCompleted) {
+ /** Normal path */
+ msgProcessedState = processMsg(msg);
+ } else if (!mIsConstructionCompleted && (mMsg.what == SM_INIT_CMD)
+ && (mMsg.obj == mSmHandlerObj)) {
+ /** Initial one time path. */
+ mIsConstructionCompleted = true;
+ invokeEnterMethods(0);
+ } else {
+ throw new RuntimeException("StateMachine.handleMessage: "
+ + "The start method not called, received msg: " + msg);
+ }
+ performTransitions(msgProcessedState, msg);
+
+ // We need to check if mSm == null here as we could be quitting.
+ if (mDbg && mSm != null) mSm.log("handleMessage: X");
}
- performTransitions(msgProcessedState, msg);
-
- // We need to check if mSm == null here as we could be quitting.
- if (mDbg && mSm != null) mSm.log("handleMessage: X");
}
/**
@@ -908,6 +913,7 @@
mInitialState = null;
mDestState = null;
mDeferredMessages.clear();
+ mHasQuit = true;
}
/**
diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java
index 555c7c2..d3ead26 100644
--- a/core/java/com/android/internal/widget/LockPatternUtils.java
+++ b/core/java/com/android/internal/widget/LockPatternUtils.java
@@ -140,6 +140,10 @@
public final static String PASSWORD_HISTORY_KEY = "lockscreen.passwordhistory";
+ private static final String LOCK_SCREEN_OWNER_INFO = Settings.Secure.LOCK_SCREEN_OWNER_INFO;
+ private static final String LOCK_SCREEN_OWNER_INFO_ENABLED =
+ Settings.Secure.LOCK_SCREEN_OWNER_INFO_ENABLED;
+
private final Context mContext;
private final ContentResolver mContentResolver;
private DevicePolicyManager mDevicePolicyManager;
@@ -526,6 +530,22 @@
}
}
+ public void setOwnerInfo(String info, int userId) {
+ setString(LOCK_SCREEN_OWNER_INFO, info, userId);
+ }
+
+ public void setOwnerInfoEnabled(boolean enabled) {
+ setBoolean(LOCK_SCREEN_OWNER_INFO_ENABLED, enabled);
+ }
+
+ public String getOwnerInfo(int userId) {
+ return getString(LOCK_SCREEN_OWNER_INFO);
+ }
+
+ public boolean isOwnerInfoEnabled() {
+ return getBoolean(LOCK_SCREEN_OWNER_INFO_ENABLED, false);
+ }
+
/**
* Compute the password quality from the given password string.
*/
diff --git a/core/java/com/android/internal/widget/ScrollingTabContainerView.java b/core/java/com/android/internal/widget/ScrollingTabContainerView.java
index 04931e7..fa29e6e1 100644
--- a/core/java/com/android/internal/widget/ScrollingTabContainerView.java
+++ b/core/java/com/android/internal/widget/ScrollingTabContainerView.java
@@ -31,6 +31,8 @@
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
import android.view.animation.DecelerateInterpolator;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
@@ -381,6 +383,29 @@
}
@Override
+ public void setSelected(boolean selected) {
+ final boolean changed = (isSelected() != selected);
+ super.setSelected(selected);
+ if (changed && selected) {
+ sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED);
+ }
+ }
+
+ @Override
+ public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(event);
+ // This view masquerades as an action bar tab.
+ event.setClassName(ActionBar.Tab.class.getName());
+ }
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(info);
+ // This view masquerades as an action bar tab.
+ info.setClassName(ActionBar.Tab.class.getName());
+ }
+
+ @Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
diff --git a/core/jni/Android.mk b/core/jni/Android.mk
index 3e5586e..efb59ef 100644
--- a/core/jni/Android.mk
+++ b/core/jni/Android.mk
@@ -30,6 +30,7 @@
android_opengl_GLES11.cpp \
android_opengl_GLES11Ext.cpp \
android_opengl_GLES20.cpp \
+ android_opengl_GLES30.cpp \
android_database_CursorWindow.cpp \
android_database_SQLiteCommon.cpp \
android_database_SQLiteConnection.cpp \
diff --git a/core/jni/android/graphics/TextLayoutCache.cpp b/core/jni/android/graphics/TextLayoutCache.cpp
index 1ace23e..17f205d 100644
--- a/core/jni/android/graphics/TextLayoutCache.cpp
+++ b/core/jni/android/graphics/TextLayoutCache.cpp
@@ -339,23 +339,11 @@
}
TextLayoutShaper::TextLayoutShaper() {
- init();
-
mBuffer = hb_buffer_create();
}
-void TextLayoutShaper::init() {
- mDefaultTypeface = SkFontHost::CreateTypeface(NULL, NULL, SkTypeface::kNormal);
-}
-
-void TextLayoutShaper::unrefTypefaces() {
- SkSafeUnref(mDefaultTypeface);
-}
-
TextLayoutShaper::~TextLayoutShaper() {
hb_buffer_destroy(mBuffer);
-
- unrefTypefaces();
}
void TextLayoutShaper::computeValues(TextLayoutValue* value, const SkPaint* paint, const UChar* chars,
@@ -839,23 +827,27 @@
}
if (baseGlyphCount != 0) {
+ SkTypeface::Style style = SkTypeface::kNormal;
+ if (typeface != NULL) {
+ style = typeface->style();
+ }
typeface = typefaceForScript(paint, typeface, hb_buffer_get_script(mBuffer));
if (!typeface) {
baseGlyphCount = 0;
- typeface = mDefaultTypeface;
- SkSafeRef(typeface);
+ typeface = SkFontHost::CreateTypeface(NULL, NULL, style);
#if DEBUG_GLYPHS
ALOGD("Using Default Typeface");
#endif
}
} else {
if (!typeface) {
- typeface = mDefaultTypeface;
+ typeface = SkFontHost::CreateTypeface(NULL, NULL, SkTypeface::kNormal);
#if DEBUG_GLYPHS
- ALOGD("Using Default Typeface");
+ ALOGD("Using Default Typeface (normal style)");
#endif
+ } else {
+ SkSafeRef(typeface);
}
- SkSafeRef(typeface);
}
mShapingPaint.setTypeface(typeface);
@@ -899,8 +891,6 @@
hb_face_destroy(mCachedHBFaces.valueAt(i));
}
mCachedHBFaces.clear();
- unrefTypefaces();
- init();
}
TextLayoutEngine::TextLayoutEngine() {
diff --git a/core/jni/android/graphics/TextLayoutCache.h b/core/jni/android/graphics/TextLayoutCache.h
index f9b9900..5414a11 100644
--- a/core/jni/android/graphics/TextLayoutCache.h
+++ b/core/jni/android/graphics/TextLayoutCache.h
@@ -197,18 +197,10 @@
SkPaint mShapingPaint;
/**
- * Skia default typeface to be returned if we cannot resolve script
- */
- SkTypeface* mDefaultTypeface;
-
- /**
* Cache of Harfbuzz faces
*/
KeyedVector<SkFontID, hb_face_t*> mCachedHBFaces;
- void init();
- void unrefTypefaces();
-
SkTypeface* typefaceForScript(const SkPaint* paint, SkTypeface* typeface,
hb_script_t script);
@@ -228,7 +220,6 @@
hb_face_t* referenceCachedHBFace(SkTypeface* typeface);
bool isComplexScript(hb_script_t script);
-
}; // TextLayoutShaper
/**
diff --git a/core/jni/android_opengl_GLES30.cpp b/core/jni/android_opengl_GLES30.cpp
new file mode 100644
index 0000000..ac294bd
--- /dev/null
+++ b/core/jni/android_opengl_GLES30.cpp
@@ -0,0 +1,5217 @@
+/*
+**
+** Copyright 2013, 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 <GLES3/gl3.h>
+#include <GLES3/gl3ext.h>
+
+#include "jni.h"
+#include "JNIHelp.h"
+#include <android_runtime/AndroidRuntime.h>
+#include <utils/misc.h>
+#include <assert.h>
+
+static int initialized = 0;
+
+static jclass nioAccessClass;
+static jclass bufferClass;
+static jmethodID getBasePointerID;
+static jmethodID getBaseArrayID;
+static jmethodID getBaseArrayOffsetID;
+static jfieldID positionID;
+static jfieldID limitID;
+static jfieldID elementSizeShiftID;
+
+
+/* special calls implemented in Android's GLES wrapper used to more
+ * efficiently bound-check passed arrays */
+extern "C" {
+#ifdef GL_VERSION_ES_CM_1_1
+GL_API void GL_APIENTRY glColorPointerBounds(GLint size, GLenum type, GLsizei stride,
+ const GLvoid *ptr, GLsizei count);
+GL_API void GL_APIENTRY glNormalPointerBounds(GLenum type, GLsizei stride,
+ const GLvoid *pointer, GLsizei count);
+GL_API void GL_APIENTRY glTexCoordPointerBounds(GLint size, GLenum type,
+ GLsizei stride, const GLvoid *pointer, GLsizei count);
+GL_API void GL_APIENTRY glVertexPointerBounds(GLint size, GLenum type,
+ GLsizei stride, const GLvoid *pointer, GLsizei count);
+GL_API void GL_APIENTRY glPointSizePointerOESBounds(GLenum type,
+ GLsizei stride, const GLvoid *pointer, GLsizei count);
+GL_API void GL_APIENTRY glMatrixIndexPointerOESBounds(GLint size, GLenum type,
+ GLsizei stride, const GLvoid *pointer, GLsizei count);
+GL_API void GL_APIENTRY glWeightPointerOESBounds(GLint size, GLenum type,
+ GLsizei stride, const GLvoid *pointer, GLsizei count);
+#endif
+#ifdef GL_ES_VERSION_2_0
+static void glVertexAttribPointerBounds(GLuint indx, GLint size, GLenum type,
+ GLboolean normalized, GLsizei stride, const GLvoid *pointer, GLsizei count) {
+ glVertexAttribPointer(indx, size, type, normalized, stride, pointer);
+}
+#endif
+#ifdef GL_ES_VERSION_3_0
+static void glVertexAttribIPointerBounds(GLuint indx, GLint size, GLenum type,
+ GLsizei stride, const GLvoid *pointer, GLsizei count) {
+ glVertexAttribIPointer(indx, size, type, stride, pointer);
+}
+#endif
+}
+
+/* Cache method IDs each time the class is loaded. */
+
+static void
+nativeClassInit(JNIEnv *_env, jclass glImplClass)
+{
+ 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 *
+getPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining, jint *offset)
+{
+ jint position;
+ jint limit;
+ jint elementSizeShift;
+ jlong pointer;
+
+ 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);
+
+ return NULL;
+}
+
+static void
+releasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit)
+{
+ _env->ReleasePrimitiveArrayCritical(array, data,
+ commit ? 0 : JNI_ABORT);
+}
+
+static void *
+getDirectBufferPointer(JNIEnv *_env, jobject buffer) {
+ char* buf = (char*) _env->GetDirectBufferAddress(buffer);
+ if (buf) {
+ jint position = _env->GetIntField(buffer, positionID);
+ jint elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID);
+ buf += position << elementSizeShift;
+ } else {
+ jniThrowException(_env, "java/lang/IllegalArgumentException",
+ "Must use a native order direct Buffer");
+ }
+ return (void*) buf;
+}
+
+// --------------------------------------------------------------------------
+
+/*
+ * returns the number of values glGet returns for a given pname.
+ *
+ * The code below is written such that pnames requiring only one values
+ * are the default (and are not explicitely tested for). This makes the
+ * checking code much shorter/readable/efficient.
+ *
+ * This means that unknown pnames (e.g.: extensions) will default to 1. If
+ * that unknown pname needs more than 1 value, then the validation check
+ * is incomplete and the app may crash if it passed the wrong number params.
+ */
+static int getNeededCount(GLint pname) {
+ int needed = 1;
+#ifdef GL_ES_VERSION_2_0
+ // GLES 2.x pnames
+ switch (pname) {
+ case GL_ALIASED_LINE_WIDTH_RANGE:
+ case GL_ALIASED_POINT_SIZE_RANGE:
+ needed = 2;
+ break;
+
+ case GL_BLEND_COLOR:
+ case GL_COLOR_CLEAR_VALUE:
+ case GL_COLOR_WRITEMASK:
+ case GL_SCISSOR_BOX:
+ case GL_VIEWPORT:
+ needed = 4;
+ break;
+
+ case GL_COMPRESSED_TEXTURE_FORMATS:
+ glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &needed);
+ break;
+
+ case GL_SHADER_BINARY_FORMATS:
+ glGetIntegerv(GL_NUM_SHADER_BINARY_FORMATS, &needed);
+ break;
+ }
+#endif
+
+#ifdef GL_VERSION_ES_CM_1_1
+ // GLES 1.x pnames
+ switch (pname) {
+ case GL_ALIASED_LINE_WIDTH_RANGE:
+ case GL_ALIASED_POINT_SIZE_RANGE:
+ case GL_DEPTH_RANGE:
+ case GL_SMOOTH_LINE_WIDTH_RANGE:
+ case GL_SMOOTH_POINT_SIZE_RANGE:
+ needed = 2;
+ break;
+
+ case GL_CURRENT_NORMAL:
+ case GL_POINT_DISTANCE_ATTENUATION:
+ needed = 3;
+ break;
+
+ case GL_COLOR_CLEAR_VALUE:
+ case GL_COLOR_WRITEMASK:
+ case GL_CURRENT_COLOR:
+ case GL_CURRENT_TEXTURE_COORDS:
+ case GL_FOG_COLOR:
+ case GL_LIGHT_MODEL_AMBIENT:
+ case GL_SCISSOR_BOX:
+ case GL_VIEWPORT:
+ needed = 4;
+ break;
+
+ case GL_MODELVIEW_MATRIX:
+ case GL_PROJECTION_MATRIX:
+ case GL_TEXTURE_MATRIX:
+ needed = 16;
+ break;
+
+ case GL_COMPRESSED_TEXTURE_FORMATS:
+ glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &needed);
+ break;
+ }
+#endif
+ return needed;
+}
+
+template <typename JTYPEARRAY, typename CTYPE, void GET(GLenum, CTYPE*)>
+static void
+get
+ (JNIEnv *_env, jobject _this, jint pname, JTYPEARRAY params_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType;
+ const char * _exceptionMessage;
+ CTYPE *params_base = (CTYPE *) 0;
+ jint _remaining;
+ CTYPE *params = (CTYPE *) 0;
+ int _needed = 0;
+
+ if (!params_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "params == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ _needed = getNeededCount(pname);
+ // if we didn't find this pname, we just assume the user passed
+ // an array of the right size -- this might happen with extensions
+ // or if we forget an enum here.
+ if (_remaining < _needed) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "length - offset < needed";
+ goto exit;
+ }
+ params_base = (CTYPE *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ GET(
+ (GLenum)pname,
+ (CTYPE *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _exception ? JNI_ABORT: 0);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+
+template <typename CTYPE, void GET(GLenum, CTYPE*)>
+static void
+getarray
+ (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
+ jint _exception = 0;
+ const char * _exceptionType;
+ const char * _exceptionMessage;
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ CTYPE *params = (CTYPE *) 0;
+ int _needed = 0;
+
+ params = (CTYPE *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ _needed = getNeededCount(pname);
+ // if we didn't find this pname, we just assume the user passed
+ // an array of the right size -- this might happen with extensions
+ // or if we forget an enum here.
+ if (_needed>0 && _remaining < _needed) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "remaining() < needed";
+ goto exit;
+ }
+ if (params == NULL) {
+ char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ params = (CTYPE *) (_paramsBase + _bufferOffset);
+ }
+ GET(
+ (GLenum)pname,
+ (CTYPE *)params
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, params, _exception ? JNI_FALSE : JNI_TRUE);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+// --------------------------------------------------------------------------
+/* void glReadBuffer ( GLenum mode ) */
+static void
+android_glReadBuffer__I
+ (JNIEnv *_env, jobject _this, jint mode) {
+ glReadBuffer(
+ (GLenum)mode
+ );
+}
+
+/* void glDrawRangeElements ( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices ) */
+static void
+android_glDrawRangeElements__IIIIILjava_nio_Buffer_2
+ (JNIEnv *_env, jobject _this, jint mode, jint start, jint end, jint count, jint type, jobject indices_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLvoid *indices = (GLvoid *) 0;
+
+ indices = (GLvoid *)getPointer(_env, indices_buf, &_array, &_remaining, &_bufferOffset);
+ if (indices == NULL) {
+ char * _indicesBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ indices = (GLvoid *) (_indicesBase + _bufferOffset);
+ }
+ glDrawRangeElements(
+ (GLenum)mode,
+ (GLuint)start,
+ (GLuint)end,
+ (GLsizei)count,
+ (GLenum)type,
+ (GLvoid *)indices
+ );
+ if (_array) {
+ releasePointer(_env, _array, indices, JNI_FALSE);
+ }
+}
+
+/* void glDrawRangeElements ( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, GLsizei offset ) */
+static void
+android_glDrawRangeElements__IIIIII
+ (JNIEnv *_env, jobject _this, jint mode, jint start, jint end, jint count, jint type, jint offset) {
+ glDrawRangeElements(
+ (GLenum)mode,
+ (GLuint)start,
+ (GLuint)end,
+ (GLsizei)count,
+ (GLenum)type,
+ (GLvoid *)offset
+ );
+}
+
+/* void glTexImage3D ( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels ) */
+static void
+android_glTexImage3D__IIIIIIIIILjava_nio_Buffer_2
+ (JNIEnv *_env, jobject _this, jint target, jint level, jint internalformat, jint width, jint height, jint depth, jint border, jint format, jint type, jobject pixels_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLvoid *pixels = (GLvoid *) 0;
+
+ pixels = (GLvoid *)getPointer(_env, pixels_buf, &_array, &_remaining, &_bufferOffset);
+ if (pixels == NULL) {
+ char * _pixelsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ pixels = (GLvoid *) (_pixelsBase + _bufferOffset);
+ }
+ glTexImage3D(
+ (GLenum)target,
+ (GLint)level,
+ (GLint)internalformat,
+ (GLsizei)width,
+ (GLsizei)height,
+ (GLsizei)depth,
+ (GLint)border,
+ (GLenum)format,
+ (GLenum)type,
+ (GLvoid *)pixels
+ );
+ if (_array) {
+ releasePointer(_env, _array, pixels, JNI_FALSE);
+ }
+}
+
+/* void glTexImage3D ( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, GLsizei offset ) */
+static void
+android_glTexImage3D__IIIIIIIIII
+ (JNIEnv *_env, jobject _this, jint target, jint level, jint internalformat, jint width, jint height, jint depth, jint border, jint format, jint type, jint offset) {
+ glTexImage3D(
+ (GLenum)target,
+ (GLint)level,
+ (GLint)internalformat,
+ (GLsizei)width,
+ (GLsizei)height,
+ (GLsizei)depth,
+ (GLint)border,
+ (GLenum)format,
+ (GLenum)type,
+ (GLvoid *)offset
+ );
+}
+
+/* void glTexSubImage3D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels ) */
+static void
+android_glTexSubImage3D__IIIIIIIIIILjava_nio_Buffer_2
+ (JNIEnv *_env, jobject _this, jint target, jint level, jint xoffset, jint yoffset, jint zoffset, jint width, jint height, jint depth, jint format, jint type, jobject pixels_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLvoid *pixels = (GLvoid *) 0;
+
+ pixels = (GLvoid *)getPointer(_env, pixels_buf, &_array, &_remaining, &_bufferOffset);
+ if (pixels == NULL) {
+ char * _pixelsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ pixels = (GLvoid *) (_pixelsBase + _bufferOffset);
+ }
+ glTexSubImage3D(
+ (GLenum)target,
+ (GLint)level,
+ (GLint)xoffset,
+ (GLint)yoffset,
+ (GLint)zoffset,
+ (GLsizei)width,
+ (GLsizei)height,
+ (GLsizei)depth,
+ (GLenum)format,
+ (GLenum)type,
+ (GLvoid *)pixels
+ );
+ if (_array) {
+ releasePointer(_env, _array, pixels, JNI_FALSE);
+ }
+}
+
+/* void glTexSubImage3D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei offset ) */
+static void
+android_glTexSubImage3D__IIIIIIIIIII
+ (JNIEnv *_env, jobject _this, jint target, jint level, jint xoffset, jint yoffset, jint zoffset, jint width, jint height, jint depth, jint format, jint type, jint offset) {
+ glTexSubImage3D(
+ (GLenum)target,
+ (GLint)level,
+ (GLint)xoffset,
+ (GLint)yoffset,
+ (GLint)zoffset,
+ (GLsizei)width,
+ (GLsizei)height,
+ (GLsizei)depth,
+ (GLenum)format,
+ (GLenum)type,
+ (GLvoid *)offset
+ );
+}
+
+/* void glCopyTexSubImage3D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height ) */
+static void
+android_glCopyTexSubImage3D__IIIIIIIII
+ (JNIEnv *_env, jobject _this, jint target, jint level, jint xoffset, jint yoffset, jint zoffset, jint x, jint y, jint width, jint height) {
+ glCopyTexSubImage3D(
+ (GLenum)target,
+ (GLint)level,
+ (GLint)xoffset,
+ (GLint)yoffset,
+ (GLint)zoffset,
+ (GLint)x,
+ (GLint)y,
+ (GLsizei)width,
+ (GLsizei)height
+ );
+}
+
+/* void glCompressedTexImage3D ( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data ) */
+static void
+android_glCompressedTexImage3D__IIIIIIIILjava_nio_Buffer_2
+ (JNIEnv *_env, jobject _this, jint target, jint level, jint internalformat, jint width, jint height, jint depth, jint border, jint imageSize, jobject data_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLvoid *data = (GLvoid *) 0;
+
+ data = (GLvoid *)getPointer(_env, data_buf, &_array, &_remaining, &_bufferOffset);
+ if (data == NULL) {
+ char * _dataBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ data = (GLvoid *) (_dataBase + _bufferOffset);
+ }
+ glCompressedTexImage3D(
+ (GLenum)target,
+ (GLint)level,
+ (GLenum)internalformat,
+ (GLsizei)width,
+ (GLsizei)height,
+ (GLsizei)depth,
+ (GLint)border,
+ (GLsizei)imageSize,
+ (GLvoid *)data
+ );
+ if (_array) {
+ releasePointer(_env, _array, data, JNI_FALSE);
+ }
+}
+
+/* void glCompressedTexImage3D ( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, GLsizei offset ) */
+static void
+android_glCompressedTexImage3D__IIIIIIIII
+ (JNIEnv *_env, jobject _this, jint target, jint level, jint internalformat, jint width, jint height, jint depth, jint border, jint imageSize, jint offset) {
+ glCompressedTexImage3D(
+ (GLenum)target,
+ (GLint)level,
+ (GLenum)internalformat,
+ (GLsizei)width,
+ (GLsizei)height,
+ (GLsizei)depth,
+ (GLint)border,
+ (GLsizei)imageSize,
+ (GLvoid *)offset
+ );
+}
+
+/* void glCompressedTexSubImage3D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data ) */
+static void
+android_glCompressedTexSubImage3D__IIIIIIIIIILjava_nio_Buffer_2
+ (JNIEnv *_env, jobject _this, jint target, jint level, jint xoffset, jint yoffset, jint zoffset, jint width, jint height, jint depth, jint format, jint imageSize, jobject data_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLvoid *data = (GLvoid *) 0;
+
+ data = (GLvoid *)getPointer(_env, data_buf, &_array, &_remaining, &_bufferOffset);
+ if (data == NULL) {
+ char * _dataBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ data = (GLvoid *) (_dataBase + _bufferOffset);
+ }
+ glCompressedTexSubImage3D(
+ (GLenum)target,
+ (GLint)level,
+ (GLint)xoffset,
+ (GLint)yoffset,
+ (GLint)zoffset,
+ (GLsizei)width,
+ (GLsizei)height,
+ (GLsizei)depth,
+ (GLenum)format,
+ (GLsizei)imageSize,
+ (GLvoid *)data
+ );
+ if (_array) {
+ releasePointer(_env, _array, data, JNI_FALSE);
+ }
+}
+
+/* void glCompressedTexSubImage3D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, GLsizei offset ) */
+static void
+android_glCompressedTexSubImage3D__IIIIIIIIIII
+ (JNIEnv *_env, jobject _this, jint target, jint level, jint xoffset, jint yoffset, jint zoffset, jint width, jint height, jint depth, jint format, jint imageSize, jint offset) {
+ glCompressedTexSubImage3D(
+ (GLenum)target,
+ (GLint)level,
+ (GLint)xoffset,
+ (GLint)yoffset,
+ (GLint)zoffset,
+ (GLsizei)width,
+ (GLsizei)height,
+ (GLsizei)depth,
+ (GLenum)format,
+ (GLsizei)imageSize,
+ (GLvoid *)offset
+ );
+}
+
+/* void glGenQueries ( GLsizei n, GLuint *ids ) */
+static void
+android_glGenQueries__I_3II
+ (JNIEnv *_env, jobject _this, jint n, jintArray ids_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLuint *ids_base = (GLuint *) 0;
+ jint _remaining;
+ GLuint *ids = (GLuint *) 0;
+
+ if (!ids_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "ids == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(ids_ref) - offset;
+ ids_base = (GLuint *)
+ _env->GetPrimitiveArrayCritical(ids_ref, (jboolean *)0);
+ ids = ids_base + offset;
+
+ glGenQueries(
+ (GLsizei)n,
+ (GLuint *)ids
+ );
+
+exit:
+ if (ids_base) {
+ _env->ReleasePrimitiveArrayCritical(ids_ref, ids_base,
+ _exception ? JNI_ABORT: 0);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glGenQueries ( GLsizei n, GLuint *ids ) */
+static void
+android_glGenQueries__ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint n, jobject ids_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLuint *ids = (GLuint *) 0;
+
+ ids = (GLuint *)getPointer(_env, ids_buf, &_array, &_remaining, &_bufferOffset);
+ if (ids == NULL) {
+ char * _idsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ ids = (GLuint *) (_idsBase + _bufferOffset);
+ }
+ glGenQueries(
+ (GLsizei)n,
+ (GLuint *)ids
+ );
+ if (_array) {
+ releasePointer(_env, _array, ids, JNI_TRUE);
+ }
+}
+
+/* void glDeleteQueries ( GLsizei n, const GLuint *ids ) */
+static void
+android_glDeleteQueries__I_3II
+ (JNIEnv *_env, jobject _this, jint n, jintArray ids_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLuint *ids_base = (GLuint *) 0;
+ jint _remaining;
+ GLuint *ids = (GLuint *) 0;
+
+ if (!ids_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "ids == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(ids_ref) - offset;
+ ids_base = (GLuint *)
+ _env->GetPrimitiveArrayCritical(ids_ref, (jboolean *)0);
+ ids = ids_base + offset;
+
+ glDeleteQueries(
+ (GLsizei)n,
+ (GLuint *)ids
+ );
+
+exit:
+ if (ids_base) {
+ _env->ReleasePrimitiveArrayCritical(ids_ref, ids_base,
+ JNI_ABORT);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glDeleteQueries ( GLsizei n, const GLuint *ids ) */
+static void
+android_glDeleteQueries__ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint n, jobject ids_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLuint *ids = (GLuint *) 0;
+
+ ids = (GLuint *)getPointer(_env, ids_buf, &_array, &_remaining, &_bufferOffset);
+ if (ids == NULL) {
+ char * _idsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ ids = (GLuint *) (_idsBase + _bufferOffset);
+ }
+ glDeleteQueries(
+ (GLsizei)n,
+ (GLuint *)ids
+ );
+ if (_array) {
+ releasePointer(_env, _array, ids, JNI_FALSE);
+ }
+}
+
+/* GLboolean glIsQuery ( GLuint id ) */
+static jboolean
+android_glIsQuery__I
+ (JNIEnv *_env, jobject _this, jint id) {
+ GLboolean _returnValue;
+ _returnValue = glIsQuery(
+ (GLuint)id
+ );
+ return (jboolean)_returnValue;
+}
+
+/* void glBeginQuery ( GLenum target, GLuint id ) */
+static void
+android_glBeginQuery__II
+ (JNIEnv *_env, jobject _this, jint target, jint id) {
+ glBeginQuery(
+ (GLenum)target,
+ (GLuint)id
+ );
+}
+
+/* void glEndQuery ( GLenum target ) */
+static void
+android_glEndQuery__I
+ (JNIEnv *_env, jobject _this, jint target) {
+ glEndQuery(
+ (GLenum)target
+ );
+}
+
+/* void glGetQueryiv ( GLenum target, GLenum pname, GLint *params ) */
+static void
+android_glGetQueryiv__II_3II
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jintArray params_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLint *params_base = (GLint *) 0;
+ jint _remaining;
+ GLint *params = (GLint *) 0;
+
+ if (!params_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "params == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ params_base = (GLint *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glGetQueryiv(
+ (GLenum)target,
+ (GLenum)pname,
+ (GLint *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _exception ? JNI_ABORT: 0);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glGetQueryiv ( GLenum target, GLenum pname, GLint *params ) */
+static void
+android_glGetQueryiv__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLint *params = (GLint *) 0;
+
+ params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ if (params == NULL) {
+ char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ params = (GLint *) (_paramsBase + _bufferOffset);
+ }
+ glGetQueryiv(
+ (GLenum)target,
+ (GLenum)pname,
+ (GLint *)params
+ );
+ if (_array) {
+ releasePointer(_env, _array, params, JNI_TRUE);
+ }
+}
+
+/* void glGetQueryObjectuiv ( GLuint id, GLenum pname, GLuint *params ) */
+static void
+android_glGetQueryObjectuiv__II_3II
+ (JNIEnv *_env, jobject _this, jint id, jint pname, jintArray params_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLuint *params_base = (GLuint *) 0;
+ jint _remaining;
+ GLuint *params = (GLuint *) 0;
+
+ if (!params_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "params == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ params_base = (GLuint *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glGetQueryObjectuiv(
+ (GLuint)id,
+ (GLenum)pname,
+ (GLuint *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _exception ? JNI_ABORT: 0);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glGetQueryObjectuiv ( GLuint id, GLenum pname, GLuint *params ) */
+static void
+android_glGetQueryObjectuiv__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint id, jint pname, jobject params_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLuint *params = (GLuint *) 0;
+
+ params = (GLuint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ if (params == NULL) {
+ char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ params = (GLuint *) (_paramsBase + _bufferOffset);
+ }
+ glGetQueryObjectuiv(
+ (GLuint)id,
+ (GLenum)pname,
+ (GLuint *)params
+ );
+ if (_array) {
+ releasePointer(_env, _array, params, JNI_TRUE);
+ }
+}
+
+/* GLboolean glUnmapBuffer ( GLenum target ) */
+static jboolean
+android_glUnmapBuffer__I
+ (JNIEnv *_env, jobject _this, jint target) {
+ GLboolean _returnValue;
+ _returnValue = glUnmapBuffer(
+ (GLenum)target
+ );
+ return (jboolean)_returnValue;
+}
+
+/* void glGetBufferPointerv ( GLenum target, GLenum pname, GLvoid** params ) */
+static jobject
+android_glGetBufferPointerv__II
+ (JNIEnv *_env, jobject _this, jint target, jint pname) {
+ GLint64 _mapLength;
+ GLvoid* _p;
+ glGetBufferParameteri64v((GLenum)target, GL_BUFFER_MAP_LENGTH, &_mapLength);
+ glGetBufferPointerv((GLenum)target, (GLenum)pname, &_p);
+ return _env->NewDirectByteBuffer(_p, _mapLength);
+}
+
+/* void glDrawBuffers ( GLsizei n, const GLenum *bufs ) */
+static void
+android_glDrawBuffers__I_3II
+ (JNIEnv *_env, jobject _this, jint n, jintArray bufs_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLenum *bufs_base = (GLenum *) 0;
+ jint _remaining;
+ GLenum *bufs = (GLenum *) 0;
+
+ if (!bufs_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "bufs == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(bufs_ref) - offset;
+ bufs_base = (GLenum *)
+ _env->GetPrimitiveArrayCritical(bufs_ref, (jboolean *)0);
+ bufs = bufs_base + offset;
+
+ glDrawBuffers(
+ (GLsizei)n,
+ (GLenum *)bufs
+ );
+
+exit:
+ if (bufs_base) {
+ _env->ReleasePrimitiveArrayCritical(bufs_ref, bufs_base,
+ JNI_ABORT);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glDrawBuffers ( GLsizei n, const GLenum *bufs ) */
+static void
+android_glDrawBuffers__ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint n, jobject bufs_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLenum *bufs = (GLenum *) 0;
+
+ bufs = (GLenum *)getPointer(_env, bufs_buf, &_array, &_remaining, &_bufferOffset);
+ if (bufs == NULL) {
+ char * _bufsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ bufs = (GLenum *) (_bufsBase + _bufferOffset);
+ }
+ glDrawBuffers(
+ (GLsizei)n,
+ (GLenum *)bufs
+ );
+ if (_array) {
+ releasePointer(_env, _array, bufs, JNI_FALSE);
+ }
+}
+
+/* void glUniformMatrix2x3fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
+static void
+android_glUniformMatrix2x3fv__IIZ_3FI
+ (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLfloat *value_base = (GLfloat *) 0;
+ jint _remaining;
+ GLfloat *value = (GLfloat *) 0;
+
+ if (!value_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "value == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(value_ref) - offset;
+ value_base = (GLfloat *)
+ _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ value = value_base + offset;
+
+ glUniformMatrix2x3fv(
+ (GLint)location,
+ (GLsizei)count,
+ (GLboolean)transpose,
+ (GLfloat *)value
+ );
+
+exit:
+ if (value_base) {
+ _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ JNI_ABORT);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glUniformMatrix2x3fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
+static void
+android_glUniformMatrix2x3fv__IIZLjava_nio_FloatBuffer_2
+ (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLfloat *value = (GLfloat *) 0;
+
+ value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ if (value == NULL) {
+ char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ value = (GLfloat *) (_valueBase + _bufferOffset);
+ }
+ glUniformMatrix2x3fv(
+ (GLint)location,
+ (GLsizei)count,
+ (GLboolean)transpose,
+ (GLfloat *)value
+ );
+ if (_array) {
+ releasePointer(_env, _array, value, JNI_FALSE);
+ }
+}
+
+/* void glUniformMatrix3x2fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
+static void
+android_glUniformMatrix3x2fv__IIZ_3FI
+ (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLfloat *value_base = (GLfloat *) 0;
+ jint _remaining;
+ GLfloat *value = (GLfloat *) 0;
+
+ if (!value_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "value == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(value_ref) - offset;
+ value_base = (GLfloat *)
+ _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ value = value_base + offset;
+
+ glUniformMatrix3x2fv(
+ (GLint)location,
+ (GLsizei)count,
+ (GLboolean)transpose,
+ (GLfloat *)value
+ );
+
+exit:
+ if (value_base) {
+ _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ JNI_ABORT);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glUniformMatrix3x2fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
+static void
+android_glUniformMatrix3x2fv__IIZLjava_nio_FloatBuffer_2
+ (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLfloat *value = (GLfloat *) 0;
+
+ value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ if (value == NULL) {
+ char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ value = (GLfloat *) (_valueBase + _bufferOffset);
+ }
+ glUniformMatrix3x2fv(
+ (GLint)location,
+ (GLsizei)count,
+ (GLboolean)transpose,
+ (GLfloat *)value
+ );
+ if (_array) {
+ releasePointer(_env, _array, value, JNI_FALSE);
+ }
+}
+
+/* void glUniformMatrix2x4fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
+static void
+android_glUniformMatrix2x4fv__IIZ_3FI
+ (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLfloat *value_base = (GLfloat *) 0;
+ jint _remaining;
+ GLfloat *value = (GLfloat *) 0;
+
+ if (!value_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "value == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(value_ref) - offset;
+ value_base = (GLfloat *)
+ _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ value = value_base + offset;
+
+ glUniformMatrix2x4fv(
+ (GLint)location,
+ (GLsizei)count,
+ (GLboolean)transpose,
+ (GLfloat *)value
+ );
+
+exit:
+ if (value_base) {
+ _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ JNI_ABORT);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glUniformMatrix2x4fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
+static void
+android_glUniformMatrix2x4fv__IIZLjava_nio_FloatBuffer_2
+ (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLfloat *value = (GLfloat *) 0;
+
+ value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ if (value == NULL) {
+ char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ value = (GLfloat *) (_valueBase + _bufferOffset);
+ }
+ glUniformMatrix2x4fv(
+ (GLint)location,
+ (GLsizei)count,
+ (GLboolean)transpose,
+ (GLfloat *)value
+ );
+ if (_array) {
+ releasePointer(_env, _array, value, JNI_FALSE);
+ }
+}
+
+/* void glUniformMatrix4x2fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
+static void
+android_glUniformMatrix4x2fv__IIZ_3FI
+ (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLfloat *value_base = (GLfloat *) 0;
+ jint _remaining;
+ GLfloat *value = (GLfloat *) 0;
+
+ if (!value_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "value == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(value_ref) - offset;
+ value_base = (GLfloat *)
+ _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ value = value_base + offset;
+
+ glUniformMatrix4x2fv(
+ (GLint)location,
+ (GLsizei)count,
+ (GLboolean)transpose,
+ (GLfloat *)value
+ );
+
+exit:
+ if (value_base) {
+ _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ JNI_ABORT);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glUniformMatrix4x2fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
+static void
+android_glUniformMatrix4x2fv__IIZLjava_nio_FloatBuffer_2
+ (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLfloat *value = (GLfloat *) 0;
+
+ value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ if (value == NULL) {
+ char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ value = (GLfloat *) (_valueBase + _bufferOffset);
+ }
+ glUniformMatrix4x2fv(
+ (GLint)location,
+ (GLsizei)count,
+ (GLboolean)transpose,
+ (GLfloat *)value
+ );
+ if (_array) {
+ releasePointer(_env, _array, value, JNI_FALSE);
+ }
+}
+
+/* void glUniformMatrix3x4fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
+static void
+android_glUniformMatrix3x4fv__IIZ_3FI
+ (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLfloat *value_base = (GLfloat *) 0;
+ jint _remaining;
+ GLfloat *value = (GLfloat *) 0;
+
+ if (!value_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "value == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(value_ref) - offset;
+ value_base = (GLfloat *)
+ _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ value = value_base + offset;
+
+ glUniformMatrix3x4fv(
+ (GLint)location,
+ (GLsizei)count,
+ (GLboolean)transpose,
+ (GLfloat *)value
+ );
+
+exit:
+ if (value_base) {
+ _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ JNI_ABORT);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glUniformMatrix3x4fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
+static void
+android_glUniformMatrix3x4fv__IIZLjava_nio_FloatBuffer_2
+ (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLfloat *value = (GLfloat *) 0;
+
+ value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ if (value == NULL) {
+ char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ value = (GLfloat *) (_valueBase + _bufferOffset);
+ }
+ glUniformMatrix3x4fv(
+ (GLint)location,
+ (GLsizei)count,
+ (GLboolean)transpose,
+ (GLfloat *)value
+ );
+ if (_array) {
+ releasePointer(_env, _array, value, JNI_FALSE);
+ }
+}
+
+/* void glUniformMatrix4x3fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
+static void
+android_glUniformMatrix4x3fv__IIZ_3FI
+ (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jfloatArray value_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLfloat *value_base = (GLfloat *) 0;
+ jint _remaining;
+ GLfloat *value = (GLfloat *) 0;
+
+ if (!value_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "value == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(value_ref) - offset;
+ value_base = (GLfloat *)
+ _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ value = value_base + offset;
+
+ glUniformMatrix4x3fv(
+ (GLint)location,
+ (GLsizei)count,
+ (GLboolean)transpose,
+ (GLfloat *)value
+ );
+
+exit:
+ if (value_base) {
+ _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ JNI_ABORT);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glUniformMatrix4x3fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value ) */
+static void
+android_glUniformMatrix4x3fv__IIZLjava_nio_FloatBuffer_2
+ (JNIEnv *_env, jobject _this, jint location, jint count, jboolean transpose, jobject value_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLfloat *value = (GLfloat *) 0;
+
+ value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ if (value == NULL) {
+ char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ value = (GLfloat *) (_valueBase + _bufferOffset);
+ }
+ glUniformMatrix4x3fv(
+ (GLint)location,
+ (GLsizei)count,
+ (GLboolean)transpose,
+ (GLfloat *)value
+ );
+ if (_array) {
+ releasePointer(_env, _array, value, JNI_FALSE);
+ }
+}
+
+/* void glBlitFramebuffer ( GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter ) */
+static void
+android_glBlitFramebuffer__IIIIIIIIII
+ (JNIEnv *_env, jobject _this, jint srcX0, jint srcY0, jint srcX1, jint srcY1, jint dstX0, jint dstY0, jint dstX1, jint dstY1, jint mask, jint filter) {
+ glBlitFramebuffer(
+ (GLint)srcX0,
+ (GLint)srcY0,
+ (GLint)srcX1,
+ (GLint)srcY1,
+ (GLint)dstX0,
+ (GLint)dstY0,
+ (GLint)dstX1,
+ (GLint)dstY1,
+ (GLbitfield)mask,
+ (GLenum)filter
+ );
+}
+
+/* void glRenderbufferStorageMultisample ( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height ) */
+static void
+android_glRenderbufferStorageMultisample__IIIII
+ (JNIEnv *_env, jobject _this, jint target, jint samples, jint internalformat, jint width, jint height) {
+ glRenderbufferStorageMultisample(
+ (GLenum)target,
+ (GLsizei)samples,
+ (GLenum)internalformat,
+ (GLsizei)width,
+ (GLsizei)height
+ );
+}
+
+/* void glFramebufferTextureLayer ( GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer ) */
+static void
+android_glFramebufferTextureLayer__IIIII
+ (JNIEnv *_env, jobject _this, jint target, jint attachment, jint texture, jint level, jint layer) {
+ glFramebufferTextureLayer(
+ (GLenum)target,
+ (GLenum)attachment,
+ (GLuint)texture,
+ (GLint)level,
+ (GLint)layer
+ );
+}
+
+/* GLvoid * glMapBufferRange ( GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access ) */
+static jobject
+android_glMapBufferRange__IIII
+ (JNIEnv *_env, jobject _this, jint target, jint offset, jint length, jint access) {
+ GLvoid* _p = glMapBufferRange((GLenum)target,
+ (GLintptr)offset, (GLsizeiptr)length, (GLbitfield)access);
+ jobject _buf = (jobject)0;
+ if (_p) {
+ _buf = _env->NewDirectByteBuffer(_p, length);
+ }
+ return _buf;
+}
+
+/* void glFlushMappedBufferRange ( GLenum target, GLintptr offset, GLsizeiptr length ) */
+static void
+android_glFlushMappedBufferRange__III
+ (JNIEnv *_env, jobject _this, jint target, jint offset, jint length) {
+ glFlushMappedBufferRange(
+ (GLenum)target,
+ (GLintptr)offset,
+ (GLsizeiptr)length
+ );
+}
+
+/* void glBindVertexArray ( GLuint array ) */
+static void
+android_glBindVertexArray__I
+ (JNIEnv *_env, jobject _this, jint array) {
+ glBindVertexArray(
+ (GLuint)array
+ );
+}
+
+/* void glDeleteVertexArrays ( GLsizei n, const GLuint *arrays ) */
+static void
+android_glDeleteVertexArrays__I_3II
+ (JNIEnv *_env, jobject _this, jint n, jintArray arrays_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLuint *arrays_base = (GLuint *) 0;
+ jint _remaining;
+ GLuint *arrays = (GLuint *) 0;
+
+ if (!arrays_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "arrays == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(arrays_ref) - offset;
+ arrays_base = (GLuint *)
+ _env->GetPrimitiveArrayCritical(arrays_ref, (jboolean *)0);
+ arrays = arrays_base + offset;
+
+ glDeleteVertexArrays(
+ (GLsizei)n,
+ (GLuint *)arrays
+ );
+
+exit:
+ if (arrays_base) {
+ _env->ReleasePrimitiveArrayCritical(arrays_ref, arrays_base,
+ JNI_ABORT);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glDeleteVertexArrays ( GLsizei n, const GLuint *arrays ) */
+static void
+android_glDeleteVertexArrays__ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint n, jobject arrays_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLuint *arrays = (GLuint *) 0;
+
+ arrays = (GLuint *)getPointer(_env, arrays_buf, &_array, &_remaining, &_bufferOffset);
+ if (arrays == NULL) {
+ char * _arraysBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ arrays = (GLuint *) (_arraysBase + _bufferOffset);
+ }
+ glDeleteVertexArrays(
+ (GLsizei)n,
+ (GLuint *)arrays
+ );
+ if (_array) {
+ releasePointer(_env, _array, arrays, JNI_FALSE);
+ }
+}
+
+/* void glGenVertexArrays ( GLsizei n, GLuint *arrays ) */
+static void
+android_glGenVertexArrays__I_3II
+ (JNIEnv *_env, jobject _this, jint n, jintArray arrays_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLuint *arrays_base = (GLuint *) 0;
+ jint _remaining;
+ GLuint *arrays = (GLuint *) 0;
+
+ if (!arrays_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "arrays == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(arrays_ref) - offset;
+ arrays_base = (GLuint *)
+ _env->GetPrimitiveArrayCritical(arrays_ref, (jboolean *)0);
+ arrays = arrays_base + offset;
+
+ glGenVertexArrays(
+ (GLsizei)n,
+ (GLuint *)arrays
+ );
+
+exit:
+ if (arrays_base) {
+ _env->ReleasePrimitiveArrayCritical(arrays_ref, arrays_base,
+ _exception ? JNI_ABORT: 0);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glGenVertexArrays ( GLsizei n, GLuint *arrays ) */
+static void
+android_glGenVertexArrays__ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint n, jobject arrays_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLuint *arrays = (GLuint *) 0;
+
+ arrays = (GLuint *)getPointer(_env, arrays_buf, &_array, &_remaining, &_bufferOffset);
+ if (arrays == NULL) {
+ char * _arraysBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ arrays = (GLuint *) (_arraysBase + _bufferOffset);
+ }
+ glGenVertexArrays(
+ (GLsizei)n,
+ (GLuint *)arrays
+ );
+ if (_array) {
+ releasePointer(_env, _array, arrays, JNI_TRUE);
+ }
+}
+
+/* GLboolean glIsVertexArray ( GLuint array ) */
+static jboolean
+android_glIsVertexArray__I
+ (JNIEnv *_env, jobject _this, jint array) {
+ GLboolean _returnValue;
+ _returnValue = glIsVertexArray(
+ (GLuint)array
+ );
+ return (jboolean)_returnValue;
+}
+
+/* void glGetIntegeri_v ( GLenum target, GLuint index, GLint *data ) */
+static void
+android_glGetIntegeri_v__II_3II
+ (JNIEnv *_env, jobject _this, jint target, jint index, jintArray data_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLint *data_base = (GLint *) 0;
+ jint _remaining;
+ GLint *data = (GLint *) 0;
+
+ if (!data_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "data == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(data_ref) - offset;
+ data_base = (GLint *)
+ _env->GetPrimitiveArrayCritical(data_ref, (jboolean *)0);
+ data = data_base + offset;
+
+ glGetIntegeri_v(
+ (GLenum)target,
+ (GLuint)index,
+ (GLint *)data
+ );
+
+exit:
+ if (data_base) {
+ _env->ReleasePrimitiveArrayCritical(data_ref, data_base,
+ _exception ? JNI_ABORT: 0);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glGetIntegeri_v ( GLenum target, GLuint index, GLint *data ) */
+static void
+android_glGetIntegeri_v__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint target, jint index, jobject data_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLint *data = (GLint *) 0;
+
+ data = (GLint *)getPointer(_env, data_buf, &_array, &_remaining, &_bufferOffset);
+ if (data == NULL) {
+ char * _dataBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ data = (GLint *) (_dataBase + _bufferOffset);
+ }
+ glGetIntegeri_v(
+ (GLenum)target,
+ (GLuint)index,
+ (GLint *)data
+ );
+ if (_array) {
+ releasePointer(_env, _array, data, JNI_TRUE);
+ }
+}
+
+/* void glBeginTransformFeedback ( GLenum primitiveMode ) */
+static void
+android_glBeginTransformFeedback__I
+ (JNIEnv *_env, jobject _this, jint primitiveMode) {
+ glBeginTransformFeedback(
+ (GLenum)primitiveMode
+ );
+}
+
+/* void glEndTransformFeedback ( void ) */
+static void
+android_glEndTransformFeedback__
+ (JNIEnv *_env, jobject _this) {
+ glEndTransformFeedback();
+}
+
+/* void glBindBufferRange ( GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size ) */
+static void
+android_glBindBufferRange__IIIII
+ (JNIEnv *_env, jobject _this, jint target, jint index, jint buffer, jint offset, jint size) {
+ glBindBufferRange(
+ (GLenum)target,
+ (GLuint)index,
+ (GLuint)buffer,
+ (GLintptr)offset,
+ (GLsizeiptr)size
+ );
+}
+
+/* void glBindBufferBase ( GLenum target, GLuint index, GLuint buffer ) */
+static void
+android_glBindBufferBase__III
+ (JNIEnv *_env, jobject _this, jint target, jint index, jint buffer) {
+ glBindBufferBase(
+ (GLenum)target,
+ (GLuint)index,
+ (GLuint)buffer
+ );
+}
+
+/* void glTransformFeedbackVaryings ( GLuint program, GLsizei count, const GLchar *varyings, GLenum bufferMode ) */
+static
+void
+android_glTransformFeedbackVaryings
+ (JNIEnv *_env, jobject _this, jint program, jobjectArray varyings_ref, jint bufferMode) {
+ jint _exception = 0;
+ const char* _exceptionType = NULL;
+ const char* _exceptionMessage = NULL;
+ jint _count = 0, _i;
+ const char** _varyings = NULL;
+ const char* _varying = NULL;
+
+ if (!varyings_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "varyings == null";
+ goto exit;
+ }
+
+ _count = _env->GetArrayLength(varyings_ref);
+ _varyings = (const char**)calloc(_count, sizeof(const char*));
+ for (_i = 0; _i < _count; _i++) {
+ jstring _varying = (jstring)_env->GetObjectArrayElement(varyings_ref, _i);
+ if (!_varying) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "null varyings element";
+ goto exit;
+ }
+ _varyings[_i] = _env->GetStringUTFChars(_varying, 0);
+ }
+
+ glTransformFeedbackVaryings(program, _count, _varyings, bufferMode);
+
+exit:
+ for (_i = _count - 1; _i >= 0; _i--) {
+ if (_varyings[_i]) {
+ jstring _varying = (jstring)_env->GetObjectArrayElement(varyings_ref, _i);
+ if (_varying) {
+ _env->ReleaseStringUTFChars(_varying, _varyings[_i]);
+ }
+ }
+ }
+ free(_varyings);
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name ) */
+static void
+android_glGetTransformFeedbackVarying__III_3II_3II_3II_3BI
+ (JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jintArray length_ref, jint lengthOffset, jintArray size_ref, jint sizeOffset, jintArray type_ref, jint typeOffset, jbyteArray name_ref, jint nameOffset) {
+ jint _exception = 0;
+ const char * _exceptionType;
+ const char * _exceptionMessage;
+ GLsizei *length_base = (GLsizei *) 0;
+ jint _lengthRemaining;
+ GLsizei *length = (GLsizei *) 0;
+ GLint *size_base = (GLint *) 0;
+ jint _sizeRemaining;
+ GLint *size = (GLint *) 0;
+ GLenum *type_base = (GLenum *) 0;
+ jint _typeRemaining;
+ GLenum *type = (GLenum *) 0;
+ char *name_base = (char *) 0;
+ jint _nameRemaining;
+ char *name = (char *) 0;
+
+ if (!length_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "length == null";
+ goto exit;
+ }
+ if (lengthOffset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "lengthOffset < 0";
+ goto exit;
+ }
+ _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
+ length_base = (GLsizei *)
+ _env->GetPrimitiveArrayCritical(length_ref, (jboolean *)0);
+ length = length_base + lengthOffset;
+
+ if (!size_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "size == null";
+ goto exit;
+ }
+ if (sizeOffset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "sizeOffset < 0";
+ goto exit;
+ }
+ _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
+ size_base = (GLint *)
+ _env->GetPrimitiveArrayCritical(size_ref, (jboolean *)0);
+ size = size_base + sizeOffset;
+
+ if (!type_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "type == null";
+ goto exit;
+ }
+ if (typeOffset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "typeOffset < 0";
+ goto exit;
+ }
+ _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
+ type_base = (GLenum *)
+ _env->GetPrimitiveArrayCritical(type_ref, (jboolean *)0);
+ type = type_base + typeOffset;
+
+ if (!name_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "name == null";
+ goto exit;
+ }
+ if (nameOffset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "nameOffset < 0";
+ goto exit;
+ }
+ _nameRemaining = _env->GetArrayLength(name_ref) - nameOffset;
+ name_base = (char *)
+ _env->GetPrimitiveArrayCritical(name_ref, (jboolean *)0);
+ name = name_base + nameOffset;
+
+ glGetTransformFeedbackVarying(
+ (GLuint)program,
+ (GLuint)index,
+ (GLsizei)bufsize,
+ (GLsizei *)length,
+ (GLint *)size,
+ (GLenum *)type,
+ (char *)name
+ );
+
+exit:
+ if (name_base) {
+ _env->ReleasePrimitiveArrayCritical(name_ref, name_base,
+ _exception ? JNI_ABORT: 0);
+ }
+ if (type_base) {
+ _env->ReleasePrimitiveArrayCritical(type_ref, type_base,
+ _exception ? JNI_ABORT: 0);
+ }
+ if (size_base) {
+ _env->ReleasePrimitiveArrayCritical(size_ref, size_base,
+ _exception ? JNI_ABORT: 0);
+ }
+ if (length_base) {
+ _env->ReleasePrimitiveArrayCritical(length_ref, length_base,
+ _exception ? JNI_ABORT: 0);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name ) */
+static void
+android_glGetTransformFeedbackVarying__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B
+ (JNIEnv *_env, jobject _this, jint program, jint index, jint bufsize, jobject length_buf, jobject size_buf, jobject type_buf, jbyte name) {
+ jarray _lengthArray = (jarray) 0;
+ jint _lengthBufferOffset = (jint) 0;
+ jarray _sizeArray = (jarray) 0;
+ jint _sizeBufferOffset = (jint) 0;
+ jarray _typeArray = (jarray) 0;
+ jint _typeBufferOffset = (jint) 0;
+ jint _lengthRemaining;
+ GLsizei *length = (GLsizei *) 0;
+ jint _sizeRemaining;
+ GLint *size = (GLint *) 0;
+ jint _typeRemaining;
+ GLenum *type = (GLenum *) 0;
+
+ length = (GLsizei *)getPointer(_env, length_buf, &_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
+ size = (GLint *)getPointer(_env, size_buf, &_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
+ type = (GLenum *)getPointer(_env, type_buf, &_typeArray, &_typeRemaining, &_typeBufferOffset);
+ if (length == NULL) {
+ char * _lengthBase = (char *)_env->GetPrimitiveArrayCritical(_lengthArray, (jboolean *) 0);
+ length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
+ }
+ if (size == NULL) {
+ char * _sizeBase = (char *)_env->GetPrimitiveArrayCritical(_sizeArray, (jboolean *) 0);
+ size = (GLint *) (_sizeBase + _sizeBufferOffset);
+ }
+ if (type == NULL) {
+ char * _typeBase = (char *)_env->GetPrimitiveArrayCritical(_typeArray, (jboolean *) 0);
+ type = (GLenum *) (_typeBase + _typeBufferOffset);
+ }
+ glGetTransformFeedbackVarying(
+ (GLuint)program,
+ (GLuint)index,
+ (GLsizei)bufsize,
+ (GLsizei *)length,
+ (GLint *)size,
+ (GLenum *)type,
+ (char *)name
+ );
+ if (_typeArray) {
+ releasePointer(_env, _typeArray, type, JNI_TRUE);
+ }
+ if (_sizeArray) {
+ releasePointer(_env, _sizeArray, size, JNI_TRUE);
+ }
+ if (_lengthArray) {
+ releasePointer(_env, _lengthArray, length, JNI_TRUE);
+ }
+}
+
+/* void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name ) */
+static jstring
+android_glGetTransformFeedbackVarying1
+ (JNIEnv *_env, jobject _this, jint program, jint index, jintArray size_ref, jint sizeOffset, jintArray type_ref, jint typeOffset) {
+ jint _exception = 0;
+ const char * _exceptionType;
+ const char * _exceptionMessage;
+ GLint *size_base = (GLint *) 0;
+ jint _sizeRemaining;
+ GLint *size = (GLint *) 0;
+ GLenum *type_base = (GLenum *) 0;
+ jint _typeRemaining;
+ GLenum *type = (GLenum *) 0;
+
+ jstring result = 0;
+
+ GLint len = 0;
+ glGetProgramiv((GLuint)program, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &len);
+ if (!len) {
+ return _env->NewStringUTF("");
+ }
+ char* buf = (char*) malloc(len);
+
+ if (buf == NULL) {
+ jniThrowException(_env, "java/lang/IllegalArgumentException", "out of memory");
+ return NULL;
+ }
+ if (!size_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "size == null";
+ goto exit;
+ }
+ if (sizeOffset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "sizeOffset < 0";
+ goto exit;
+ }
+ _sizeRemaining = _env->GetArrayLength(size_ref) - sizeOffset;
+ size_base = (GLint *)
+ _env->GetPrimitiveArrayCritical(size_ref, (jboolean *)0);
+ size = size_base + sizeOffset;
+
+ if (!type_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "type == null";
+ goto exit;
+ }
+ if (typeOffset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "typeOffset < 0";
+ goto exit;
+ }
+ _typeRemaining = _env->GetArrayLength(type_ref) - typeOffset;
+ type_base = (GLenum *)
+ _env->GetPrimitiveArrayCritical(type_ref, (jboolean *)0);
+ type = type_base + typeOffset;
+
+ glGetTransformFeedbackVarying(
+ (GLuint)program,
+ (GLuint)index,
+ (GLsizei)len,
+ NULL,
+ (GLint *)size,
+ (GLenum *)type,
+ (char *)buf
+ );
+exit:
+ if (type_base) {
+ _env->ReleasePrimitiveArrayCritical(type_ref, type_base,
+ _exception ? JNI_ABORT: 0);
+ }
+ if (size_base) {
+ _env->ReleasePrimitiveArrayCritical(size_ref, size_base,
+ _exception ? JNI_ABORT: 0);
+ }
+ if (_exception != 1) {
+ result = _env->NewStringUTF(buf);
+ }
+ if (buf) {
+ free(buf);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+ if (result == 0) {
+ result = _env->NewStringUTF("");
+ }
+
+ return result;
+}
+
+/* void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name ) */
+static jstring
+android_glGetTransformFeedbackVarying2
+ (JNIEnv *_env, jobject _this, jint program, jint index, jobject size_buf, jobject type_buf) {
+ jarray _sizeArray = (jarray) 0;
+ jint _sizeBufferOffset = (jint) 0;
+ jarray _typeArray = (jarray) 0;
+ jint _typeBufferOffset = (jint) 0;
+ jint _lengthRemaining;
+ GLsizei *length = (GLsizei *) 0;
+ jint _sizeRemaining;
+ GLint *size = (GLint *) 0;
+ jint _typeRemaining;
+ GLenum *type = (GLenum *) 0;
+
+ jstring result = 0;
+
+ GLint len = 0;
+ glGetProgramiv((GLuint)program, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &len);
+ if (!len) {
+ return _env->NewStringUTF("");
+ }
+ char* buf = (char*) malloc(len);
+
+ if (buf == NULL) {
+ jniThrowException(_env, "java/lang/IllegalArgumentException", "out of memory");
+ return NULL;
+ }
+
+ size = (GLint *)getPointer(_env, size_buf, &_sizeArray, &_sizeRemaining, &_sizeBufferOffset);
+ type = (GLenum *)getPointer(_env, type_buf, &_typeArray, &_typeRemaining, &_typeBufferOffset);
+ if (size == NULL) {
+ char * _sizeBase = (char *)_env->GetPrimitiveArrayCritical(_sizeArray, (jboolean *) 0);
+ size = (GLint *) (_sizeBase + _sizeBufferOffset);
+ }
+ if (type == NULL) {
+ char * _typeBase = (char *)_env->GetPrimitiveArrayCritical(_typeArray, (jboolean *) 0);
+ type = (GLenum *) (_typeBase + _typeBufferOffset);
+ }
+ glGetTransformFeedbackVarying(
+ (GLuint)program,
+ (GLuint)index,
+ (GLsizei)len,
+ NULL,
+ (GLint *)size,
+ (GLenum *)type,
+ (char *)buf
+ );
+
+ if (_typeArray) {
+ releasePointer(_env, _typeArray, type, JNI_TRUE);
+ }
+ if (_sizeArray) {
+ releasePointer(_env, _sizeArray, size, JNI_TRUE);
+ }
+ result = _env->NewStringUTF(buf);
+ if (buf) {
+ free(buf);
+ }
+ return result;
+}
+/* void glVertexAttribIPointer ( GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ) */
+static void
+android_glVertexAttribIPointerBounds__IIIILjava_nio_Buffer_2I
+ (JNIEnv *_env, jobject _this, jint index, jint size, jint type, jint stride, jobject pointer_buf, jint remaining) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLvoid *pointer = (GLvoid *) 0;
+
+ if (pointer_buf) {
+ pointer = (GLvoid *) getDirectBufferPointer(_env, pointer_buf);
+ if ( ! pointer ) {
+ return;
+ }
+ }
+ glVertexAttribIPointerBounds(
+ (GLuint)index,
+ (GLint)size,
+ (GLenum)type,
+ (GLsizei)stride,
+ (GLvoid *)pointer,
+ (GLsizei)remaining
+ );
+}
+
+/* void glVertexAttribIPointer ( GLuint index, GLint size, GLenum type, GLsizei stride, GLsizei offset ) */
+static void
+android_glVertexAttribIPointer__IIIII
+ (JNIEnv *_env, jobject _this, jint index, jint size, jint type, jint stride, jint offset) {
+ glVertexAttribIPointer(
+ (GLuint)index,
+ (GLint)size,
+ (GLenum)type,
+ (GLsizei)stride,
+ (GLvoid *)offset
+ );
+}
+
+/* void glGetVertexAttribIiv ( GLuint index, GLenum pname, GLint *params ) */
+static void
+android_glGetVertexAttribIiv__II_3II
+ (JNIEnv *_env, jobject _this, jint index, jint pname, jintArray params_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLint *params_base = (GLint *) 0;
+ jint _remaining;
+ GLint *params = (GLint *) 0;
+
+ if (!params_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "params == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ params_base = (GLint *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glGetVertexAttribIiv(
+ (GLuint)index,
+ (GLenum)pname,
+ (GLint *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _exception ? JNI_ABORT: 0);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glGetVertexAttribIiv ( GLuint index, GLenum pname, GLint *params ) */
+static void
+android_glGetVertexAttribIiv__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint index, jint pname, jobject params_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLint *params = (GLint *) 0;
+
+ params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ if (params == NULL) {
+ char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ params = (GLint *) (_paramsBase + _bufferOffset);
+ }
+ glGetVertexAttribIiv(
+ (GLuint)index,
+ (GLenum)pname,
+ (GLint *)params
+ );
+ if (_array) {
+ releasePointer(_env, _array, params, JNI_TRUE);
+ }
+}
+
+/* void glGetVertexAttribIuiv ( GLuint index, GLenum pname, GLuint *params ) */
+static void
+android_glGetVertexAttribIuiv__II_3II
+ (JNIEnv *_env, jobject _this, jint index, jint pname, jintArray params_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLuint *params_base = (GLuint *) 0;
+ jint _remaining;
+ GLuint *params = (GLuint *) 0;
+
+ if (!params_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "params == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ params_base = (GLuint *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glGetVertexAttribIuiv(
+ (GLuint)index,
+ (GLenum)pname,
+ (GLuint *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _exception ? JNI_ABORT: 0);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glGetVertexAttribIuiv ( GLuint index, GLenum pname, GLuint *params ) */
+static void
+android_glGetVertexAttribIuiv__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint index, jint pname, jobject params_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLuint *params = (GLuint *) 0;
+
+ params = (GLuint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ if (params == NULL) {
+ char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ params = (GLuint *) (_paramsBase + _bufferOffset);
+ }
+ glGetVertexAttribIuiv(
+ (GLuint)index,
+ (GLenum)pname,
+ (GLuint *)params
+ );
+ if (_array) {
+ releasePointer(_env, _array, params, JNI_TRUE);
+ }
+}
+
+/* void glVertexAttribI4i ( GLuint index, GLint x, GLint y, GLint z, GLint w ) */
+static void
+android_glVertexAttribI4i__IIIII
+ (JNIEnv *_env, jobject _this, jint index, jint x, jint y, jint z, jint w) {
+ glVertexAttribI4i(
+ (GLuint)index,
+ (GLint)x,
+ (GLint)y,
+ (GLint)z,
+ (GLint)w
+ );
+}
+
+/* void glVertexAttribI4ui ( GLuint index, GLuint x, GLuint y, GLuint z, GLuint w ) */
+static void
+android_glVertexAttribI4ui__IIIII
+ (JNIEnv *_env, jobject _this, jint index, jint x, jint y, jint z, jint w) {
+ glVertexAttribI4ui(
+ (GLuint)index,
+ (GLuint)x,
+ (GLuint)y,
+ (GLuint)z,
+ (GLuint)w
+ );
+}
+
+/* void glVertexAttribI4iv ( GLuint index, const GLint *v ) */
+static void
+android_glVertexAttribI4iv__I_3II
+ (JNIEnv *_env, jobject _this, jint index, jintArray v_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLint *v_base = (GLint *) 0;
+ jint _remaining;
+ GLint *v = (GLint *) 0;
+
+ if (!v_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "v == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(v_ref) - offset;
+ v_base = (GLint *)
+ _env->GetPrimitiveArrayCritical(v_ref, (jboolean *)0);
+ v = v_base + offset;
+
+ glVertexAttribI4iv(
+ (GLuint)index,
+ (GLint *)v
+ );
+
+exit:
+ if (v_base) {
+ _env->ReleasePrimitiveArrayCritical(v_ref, v_base,
+ JNI_ABORT);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glVertexAttribI4iv ( GLuint index, const GLint *v ) */
+static void
+android_glVertexAttribI4iv__ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint index, jobject v_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLint *v = (GLint *) 0;
+
+ v = (GLint *)getPointer(_env, v_buf, &_array, &_remaining, &_bufferOffset);
+ if (v == NULL) {
+ char * _vBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ v = (GLint *) (_vBase + _bufferOffset);
+ }
+ glVertexAttribI4iv(
+ (GLuint)index,
+ (GLint *)v
+ );
+ if (_array) {
+ releasePointer(_env, _array, v, JNI_FALSE);
+ }
+}
+
+/* void glVertexAttribI4uiv ( GLuint index, const GLuint *v ) */
+static void
+android_glVertexAttribI4uiv__I_3II
+ (JNIEnv *_env, jobject _this, jint index, jintArray v_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLuint *v_base = (GLuint *) 0;
+ jint _remaining;
+ GLuint *v = (GLuint *) 0;
+
+ if (!v_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "v == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(v_ref) - offset;
+ v_base = (GLuint *)
+ _env->GetPrimitiveArrayCritical(v_ref, (jboolean *)0);
+ v = v_base + offset;
+
+ glVertexAttribI4uiv(
+ (GLuint)index,
+ (GLuint *)v
+ );
+
+exit:
+ if (v_base) {
+ _env->ReleasePrimitiveArrayCritical(v_ref, v_base,
+ JNI_ABORT);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glVertexAttribI4uiv ( GLuint index, const GLuint *v ) */
+static void
+android_glVertexAttribI4uiv__ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint index, jobject v_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLuint *v = (GLuint *) 0;
+
+ v = (GLuint *)getPointer(_env, v_buf, &_array, &_remaining, &_bufferOffset);
+ if (v == NULL) {
+ char * _vBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ v = (GLuint *) (_vBase + _bufferOffset);
+ }
+ glVertexAttribI4uiv(
+ (GLuint)index,
+ (GLuint *)v
+ );
+ if (_array) {
+ releasePointer(_env, _array, v, JNI_FALSE);
+ }
+}
+
+/* void glGetUniformuiv ( GLuint program, GLint location, GLuint *params ) */
+static void
+android_glGetUniformuiv__II_3II
+ (JNIEnv *_env, jobject _this, jint program, jint location, jintArray params_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLuint *params_base = (GLuint *) 0;
+ jint _remaining;
+ GLuint *params = (GLuint *) 0;
+
+ if (!params_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "params == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ params_base = (GLuint *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glGetUniformuiv(
+ (GLuint)program,
+ (GLint)location,
+ (GLuint *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _exception ? JNI_ABORT: 0);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glGetUniformuiv ( GLuint program, GLint location, GLuint *params ) */
+static void
+android_glGetUniformuiv__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint program, jint location, jobject params_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLuint *params = (GLuint *) 0;
+
+ params = (GLuint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ if (params == NULL) {
+ char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ params = (GLuint *) (_paramsBase + _bufferOffset);
+ }
+ glGetUniformuiv(
+ (GLuint)program,
+ (GLint)location,
+ (GLuint *)params
+ );
+ if (_array) {
+ releasePointer(_env, _array, params, JNI_TRUE);
+ }
+}
+
+/* GLint glGetFragDataLocation ( GLuint program, const GLchar *name ) */
+static jint
+android_glGetFragDataLocation__ILjava_lang_String_2
+ (JNIEnv *_env, jobject _this, jint program, jstring name) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLint _returnValue = 0;
+ const char* _nativename = 0;
+
+ if (!name) {
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "name == null";
+ goto exit;
+ }
+ _nativename = _env->GetStringUTFChars(name, 0);
+
+ _returnValue = glGetFragDataLocation(
+ (GLuint)program,
+ (GLchar *)_nativename
+ );
+
+exit:
+ if (_nativename) {
+ _env->ReleaseStringUTFChars(name, _nativename);
+ }
+
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+ return (jint)_returnValue;
+}
+
+/* void glUniform1ui ( GLint location, GLuint v0 ) */
+static void
+android_glUniform1ui__II
+ (JNIEnv *_env, jobject _this, jint location, jint v0) {
+ glUniform1ui(
+ (GLint)location,
+ (GLuint)v0
+ );
+}
+
+/* void glUniform2ui ( GLint location, GLuint v0, GLuint v1 ) */
+static void
+android_glUniform2ui__III
+ (JNIEnv *_env, jobject _this, jint location, jint v0, jint v1) {
+ glUniform2ui(
+ (GLint)location,
+ (GLuint)v0,
+ (GLuint)v1
+ );
+}
+
+/* void glUniform3ui ( GLint location, GLuint v0, GLuint v1, GLuint v2 ) */
+static void
+android_glUniform3ui__IIII
+ (JNIEnv *_env, jobject _this, jint location, jint v0, jint v1, jint v2) {
+ glUniform3ui(
+ (GLint)location,
+ (GLuint)v0,
+ (GLuint)v1,
+ (GLuint)v2
+ );
+}
+
+/* void glUniform4ui ( GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3 ) */
+static void
+android_glUniform4ui__IIIII
+ (JNIEnv *_env, jobject _this, jint location, jint v0, jint v1, jint v2, jint v3) {
+ glUniform4ui(
+ (GLint)location,
+ (GLuint)v0,
+ (GLuint)v1,
+ (GLuint)v2,
+ (GLuint)v3
+ );
+}
+
+/* void glUniform1uiv ( GLint location, GLsizei count, const GLuint *value ) */
+static void
+android_glUniform1uiv__II_3II
+ (JNIEnv *_env, jobject _this, jint location, jint count, jintArray value_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLuint *value_base = (GLuint *) 0;
+ jint _remaining;
+ GLuint *value = (GLuint *) 0;
+
+ if (!value_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "value == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(value_ref) - offset;
+ value_base = (GLuint *)
+ _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ value = value_base + offset;
+
+ glUniform1uiv(
+ (GLint)location,
+ (GLsizei)count,
+ (GLuint *)value
+ );
+
+exit:
+ if (value_base) {
+ _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ JNI_ABORT);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glUniform1uiv ( GLint location, GLsizei count, const GLuint *value ) */
+static void
+android_glUniform1uiv__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint location, jint count, jobject value_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLuint *value = (GLuint *) 0;
+
+ value = (GLuint *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ if (value == NULL) {
+ char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ value = (GLuint *) (_valueBase + _bufferOffset);
+ }
+ glUniform1uiv(
+ (GLint)location,
+ (GLsizei)count,
+ (GLuint *)value
+ );
+ if (_array) {
+ releasePointer(_env, _array, value, JNI_FALSE);
+ }
+}
+
+/* void glUniform2uiv ( GLint location, GLsizei count, const GLuint *value ) */
+static void
+android_glUniform2uiv__II_3II
+ (JNIEnv *_env, jobject _this, jint location, jint count, jintArray value_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLuint *value_base = (GLuint *) 0;
+ jint _remaining;
+ GLuint *value = (GLuint *) 0;
+
+ if (!value_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "value == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(value_ref) - offset;
+ value_base = (GLuint *)
+ _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ value = value_base + offset;
+
+ glUniform2uiv(
+ (GLint)location,
+ (GLsizei)count,
+ (GLuint *)value
+ );
+
+exit:
+ if (value_base) {
+ _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ JNI_ABORT);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glUniform2uiv ( GLint location, GLsizei count, const GLuint *value ) */
+static void
+android_glUniform2uiv__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint location, jint count, jobject value_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLuint *value = (GLuint *) 0;
+
+ value = (GLuint *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ if (value == NULL) {
+ char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ value = (GLuint *) (_valueBase + _bufferOffset);
+ }
+ glUniform2uiv(
+ (GLint)location,
+ (GLsizei)count,
+ (GLuint *)value
+ );
+ if (_array) {
+ releasePointer(_env, _array, value, JNI_FALSE);
+ }
+}
+
+/* void glUniform3uiv ( GLint location, GLsizei count, const GLuint *value ) */
+static void
+android_glUniform3uiv__II_3II
+ (JNIEnv *_env, jobject _this, jint location, jint count, jintArray value_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLuint *value_base = (GLuint *) 0;
+ jint _remaining;
+ GLuint *value = (GLuint *) 0;
+
+ if (!value_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "value == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(value_ref) - offset;
+ value_base = (GLuint *)
+ _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ value = value_base + offset;
+
+ glUniform3uiv(
+ (GLint)location,
+ (GLsizei)count,
+ (GLuint *)value
+ );
+
+exit:
+ if (value_base) {
+ _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ JNI_ABORT);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glUniform3uiv ( GLint location, GLsizei count, const GLuint *value ) */
+static void
+android_glUniform3uiv__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint location, jint count, jobject value_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLuint *value = (GLuint *) 0;
+
+ value = (GLuint *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ if (value == NULL) {
+ char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ value = (GLuint *) (_valueBase + _bufferOffset);
+ }
+ glUniform3uiv(
+ (GLint)location,
+ (GLsizei)count,
+ (GLuint *)value
+ );
+ if (_array) {
+ releasePointer(_env, _array, value, JNI_FALSE);
+ }
+}
+
+/* void glUniform4uiv ( GLint location, GLsizei count, const GLuint *value ) */
+static void
+android_glUniform4uiv__II_3II
+ (JNIEnv *_env, jobject _this, jint location, jint count, jintArray value_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLuint *value_base = (GLuint *) 0;
+ jint _remaining;
+ GLuint *value = (GLuint *) 0;
+
+ if (!value_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "value == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(value_ref) - offset;
+ value_base = (GLuint *)
+ _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ value = value_base + offset;
+
+ glUniform4uiv(
+ (GLint)location,
+ (GLsizei)count,
+ (GLuint *)value
+ );
+
+exit:
+ if (value_base) {
+ _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ JNI_ABORT);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glUniform4uiv ( GLint location, GLsizei count, const GLuint *value ) */
+static void
+android_glUniform4uiv__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint location, jint count, jobject value_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLuint *value = (GLuint *) 0;
+
+ value = (GLuint *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ if (value == NULL) {
+ char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ value = (GLuint *) (_valueBase + _bufferOffset);
+ }
+ glUniform4uiv(
+ (GLint)location,
+ (GLsizei)count,
+ (GLuint *)value
+ );
+ if (_array) {
+ releasePointer(_env, _array, value, JNI_FALSE);
+ }
+}
+
+/* void glClearBufferiv ( GLenum buffer, GLint drawbuffer, const GLint *value ) */
+static void
+android_glClearBufferiv__II_3II
+ (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jintArray value_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLint *value_base = (GLint *) 0;
+ jint _remaining;
+ GLint *value = (GLint *) 0;
+
+ if (!value_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "value == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(value_ref) - offset;
+ value_base = (GLint *)
+ _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ value = value_base + offset;
+
+ glClearBufferiv(
+ (GLenum)buffer,
+ (GLint)drawbuffer,
+ (GLint *)value
+ );
+
+exit:
+ if (value_base) {
+ _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ JNI_ABORT);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glClearBufferiv ( GLenum buffer, GLint drawbuffer, const GLint *value ) */
+static void
+android_glClearBufferiv__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jobject value_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLint *value = (GLint *) 0;
+
+ value = (GLint *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ if (value == NULL) {
+ char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ value = (GLint *) (_valueBase + _bufferOffset);
+ }
+ glClearBufferiv(
+ (GLenum)buffer,
+ (GLint)drawbuffer,
+ (GLint *)value
+ );
+ if (_array) {
+ releasePointer(_env, _array, value, JNI_FALSE);
+ }
+}
+
+/* void glClearBufferuiv ( GLenum buffer, GLint drawbuffer, const GLuint *value ) */
+static void
+android_glClearBufferuiv__II_3II
+ (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jintArray value_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLuint *value_base = (GLuint *) 0;
+ jint _remaining;
+ GLuint *value = (GLuint *) 0;
+
+ if (!value_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "value == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(value_ref) - offset;
+ value_base = (GLuint *)
+ _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ value = value_base + offset;
+
+ glClearBufferuiv(
+ (GLenum)buffer,
+ (GLint)drawbuffer,
+ (GLuint *)value
+ );
+
+exit:
+ if (value_base) {
+ _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ JNI_ABORT);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glClearBufferuiv ( GLenum buffer, GLint drawbuffer, const GLuint *value ) */
+static void
+android_glClearBufferuiv__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jobject value_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLuint *value = (GLuint *) 0;
+
+ value = (GLuint *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ if (value == NULL) {
+ char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ value = (GLuint *) (_valueBase + _bufferOffset);
+ }
+ glClearBufferuiv(
+ (GLenum)buffer,
+ (GLint)drawbuffer,
+ (GLuint *)value
+ );
+ if (_array) {
+ releasePointer(_env, _array, value, JNI_FALSE);
+ }
+}
+
+/* void glClearBufferfv ( GLenum buffer, GLint drawbuffer, const GLfloat *value ) */
+static void
+android_glClearBufferfv__II_3FI
+ (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jfloatArray value_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLfloat *value_base = (GLfloat *) 0;
+ jint _remaining;
+ GLfloat *value = (GLfloat *) 0;
+
+ if (!value_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "value == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(value_ref) - offset;
+ value_base = (GLfloat *)
+ _env->GetPrimitiveArrayCritical(value_ref, (jboolean *)0);
+ value = value_base + offset;
+
+ glClearBufferfv(
+ (GLenum)buffer,
+ (GLint)drawbuffer,
+ (GLfloat *)value
+ );
+
+exit:
+ if (value_base) {
+ _env->ReleasePrimitiveArrayCritical(value_ref, value_base,
+ JNI_ABORT);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glClearBufferfv ( GLenum buffer, GLint drawbuffer, const GLfloat *value ) */
+static void
+android_glClearBufferfv__IILjava_nio_FloatBuffer_2
+ (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jobject value_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLfloat *value = (GLfloat *) 0;
+
+ value = (GLfloat *)getPointer(_env, value_buf, &_array, &_remaining, &_bufferOffset);
+ if (value == NULL) {
+ char * _valueBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ value = (GLfloat *) (_valueBase + _bufferOffset);
+ }
+ glClearBufferfv(
+ (GLenum)buffer,
+ (GLint)drawbuffer,
+ (GLfloat *)value
+ );
+ if (_array) {
+ releasePointer(_env, _array, value, JNI_FALSE);
+ }
+}
+
+/* void glClearBufferfi ( GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil ) */
+static void
+android_glClearBufferfi__IIFI
+ (JNIEnv *_env, jobject _this, jint buffer, jint drawbuffer, jfloat depth, jint stencil) {
+ glClearBufferfi(
+ (GLenum)buffer,
+ (GLint)drawbuffer,
+ (GLfloat)depth,
+ (GLint)stencil
+ );
+}
+
+/* const GLubyte * glGetStringi ( GLenum name, GLuint index ) */
+static jstring
+android_glGetStringi__II
+ (JNIEnv *_env, jobject _this, jint name, jint index) {
+ const GLubyte* _chars = glGetStringi((GLenum)name, (GLuint)index);
+ return _env->NewStringUTF((const char*)_chars);
+}
+
+/* void glCopyBufferSubData ( GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size ) */
+static void
+android_glCopyBufferSubData__IIIII
+ (JNIEnv *_env, jobject _this, jint readTarget, jint writeTarget, jint readOffset, jint writeOffset, jint size) {
+ glCopyBufferSubData(
+ (GLenum)readTarget,
+ (GLenum)writeTarget,
+ (GLintptr)readOffset,
+ (GLintptr)writeOffset,
+ (GLsizeiptr)size
+ );
+}
+
+/* void glGetUniformIndices ( GLuint program, GLsizei uniformCount, const GLchar *const *uniformNames, GLuint *uniformIndices ) */
+static
+void
+android_glGetUniformIndices_array
+ (JNIEnv *_env, jobject _this, jint program, jobjectArray uniformNames_ref, jintArray uniformIndices_ref, jint uniformIndicesOffset) {
+ jint _exception = 0;
+ const char* _exceptionType = NULL;
+ const char* _exceptionMessage = NULL;
+ jint _count = 0;
+ jint _i;
+ const char** _names = NULL;
+ GLuint* _indices_base = NULL;
+ GLuint* _indices = NULL;
+
+ if (!uniformNames_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "uniformNames == null";
+ goto exit;
+ }
+ _count = _env->GetArrayLength(uniformNames_ref);
+ _names = (const char**)calloc(_count, sizeof(const char*));
+ for (_i = 0; _i < _count; _i++) {
+ jstring _name = (jstring)_env->GetObjectArrayElement(uniformNames_ref, _i);
+ if (!_name) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "null uniformNames element";
+ goto exit;
+ }
+ _names[_i] = _env->GetStringUTFChars(_name, 0);
+ }
+
+ if (!uniformIndices_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "uniformIndices == null";
+ goto exit;
+ }
+ if (uniformIndicesOffset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "uniformIndicesOffset < 0";
+ goto exit;
+ }
+ if (_env->GetArrayLength(uniformIndices_ref) - uniformIndicesOffset < _count) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "not enough space in uniformIndices";
+ goto exit;
+ }
+ _indices_base = (GLuint*)_env->GetPrimitiveArrayCritical(
+ uniformIndices_ref, 0);
+ _indices = _indices_base + uniformIndicesOffset;
+
+ glGetUniformIndices(program, _count, _names, _indices);
+
+exit:
+ if (_indices_base) {
+ _env->ReleasePrimitiveArrayCritical(uniformIndices_ref, _indices_base,
+ _exception ? JNI_ABORT : 0);
+ }
+ for (_i = _count - 1; _i >= 0; _i--) {
+ if (_names[_i]) {
+ jstring _name = (jstring)_env->GetObjectArrayElement(uniformNames_ref, _i);
+ if (_name) {
+ _env->ReleaseStringUTFChars(_name, _names[_i]);
+ }
+ }
+ }
+ free(_names);
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glGetUniformIndices ( GLuint program, GLsizei uniformCount, const GLchar *const *uniformNames, GLuint *uniformIndices ) */
+static
+void
+android_glGetUniformIndices_buffer
+ (JNIEnv *_env, jobject _this, jint program, jobjectArray uniformNames_ref, jobject uniformIndices_buf) {
+ jint _exception = 0;
+ const char* _exceptionType = NULL;
+ const char* _exceptionMessage = NULL;
+ jint _count = 0;
+ jint _i;
+ const char** _names = NULL;
+ jarray _uniformIndicesArray = (jarray)0;
+ jint _uniformIndicesRemaining;
+ jint _uniformIndicesOffset = 0;
+ GLuint* _indices = NULL;
+ char* _indicesBase = NULL;
+
+ if (!uniformNames_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "uniformNames == null";
+ goto exit;
+ }
+ if (!uniformIndices_buf) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "uniformIndices == null";
+ goto exit;
+ }
+
+ _count = _env->GetArrayLength(uniformNames_ref);
+ _names = (const char**)calloc(_count, sizeof(const char*));
+ for (_i = 0; _i < _count; _i++) {
+ jstring _name = (jstring)_env->GetObjectArrayElement(uniformNames_ref, _i);
+ if (!_name) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "null uniformNames element";
+ goto exit;
+ }
+ _names[_i] = _env->GetStringUTFChars(_name, 0);
+ }
+
+ _indices = (GLuint*)getPointer(_env, uniformIndices_buf,
+ &_uniformIndicesArray, &_uniformIndicesRemaining,
+ &_uniformIndicesOffset);
+ if (!_indices) {
+ _indicesBase = (char*)_env->GetPrimitiveArrayCritical(
+ _uniformIndicesArray, 0);
+ _indices = (GLuint*)(_indicesBase + _uniformIndicesOffset);
+ }
+ if (_uniformIndicesRemaining < _count) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "not enough space in uniformIndices";
+ goto exit;
+ }
+
+ glGetUniformIndices(program, _count, _names, _indices);
+
+exit:
+ if (_uniformIndicesArray) {
+ releasePointer(_env, _uniformIndicesArray, _indicesBase, JNI_TRUE);
+ }
+ for (_i = _count - 1; _i >= 0; _i--) {
+ if (_names[_i]) {
+ jstring _name = (jstring)_env->GetObjectArrayElement(uniformNames_ref, _i);
+ if (_name) {
+ _env->ReleaseStringUTFChars(_name, _names[_i]);
+ }
+ }
+ }
+ free(_names);
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glGetActiveUniformsiv ( GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params ) */
+static void
+android_glGetActiveUniformsiv__II_3III_3II
+ (JNIEnv *_env, jobject _this, jint program, jint uniformCount, jintArray uniformIndices_ref, jint uniformIndicesOffset, jint pname, jintArray params_ref, jint paramsOffset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLuint *uniformIndices_base = (GLuint *) 0;
+ jint _uniformIndicesRemaining;
+ GLuint *uniformIndices = (GLuint *) 0;
+ GLint *params_base = (GLint *) 0;
+ jint _paramsRemaining;
+ GLint *params = (GLint *) 0;
+
+ if (!uniformIndices_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "uniformIndices == null";
+ goto exit;
+ }
+ if (uniformIndicesOffset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "uniformIndicesOffset < 0";
+ goto exit;
+ }
+ _uniformIndicesRemaining = _env->GetArrayLength(uniformIndices_ref) - uniformIndicesOffset;
+ uniformIndices_base = (GLuint *)
+ _env->GetPrimitiveArrayCritical(uniformIndices_ref, (jboolean *)0);
+ uniformIndices = uniformIndices_base + uniformIndicesOffset;
+
+ if (!params_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "params == null";
+ goto exit;
+ }
+ if (paramsOffset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "paramsOffset < 0";
+ goto exit;
+ }
+ _paramsRemaining = _env->GetArrayLength(params_ref) - paramsOffset;
+ params_base = (GLint *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + paramsOffset;
+
+ glGetActiveUniformsiv(
+ (GLuint)program,
+ (GLsizei)uniformCount,
+ (GLuint *)uniformIndices,
+ (GLenum)pname,
+ (GLint *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _exception ? JNI_ABORT: 0);
+ }
+ if (uniformIndices_base) {
+ _env->ReleasePrimitiveArrayCritical(uniformIndices_ref, uniformIndices_base,
+ JNI_ABORT);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glGetActiveUniformsiv ( GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params ) */
+static void
+android_glGetActiveUniformsiv__IILjava_nio_IntBuffer_2ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint program, jint uniformCount, jobject uniformIndices_buf, jint pname, jobject params_buf) {
+ jarray _uniformIndicesArray = (jarray) 0;
+ jint _uniformIndicesBufferOffset = (jint) 0;
+ jarray _paramsArray = (jarray) 0;
+ jint _paramsBufferOffset = (jint) 0;
+ jint _uniformIndicesRemaining;
+ GLuint *uniformIndices = (GLuint *) 0;
+ jint _paramsRemaining;
+ GLint *params = (GLint *) 0;
+
+ uniformIndices = (GLuint *)getPointer(_env, uniformIndices_buf, &_uniformIndicesArray, &_uniformIndicesRemaining, &_uniformIndicesBufferOffset);
+ params = (GLint *)getPointer(_env, params_buf, &_paramsArray, &_paramsRemaining, &_paramsBufferOffset);
+ if (uniformIndices == NULL) {
+ char * _uniformIndicesBase = (char *)_env->GetPrimitiveArrayCritical(_uniformIndicesArray, (jboolean *) 0);
+ uniformIndices = (GLuint *) (_uniformIndicesBase + _uniformIndicesBufferOffset);
+ }
+ if (params == NULL) {
+ char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_paramsArray, (jboolean *) 0);
+ params = (GLint *) (_paramsBase + _paramsBufferOffset);
+ }
+ glGetActiveUniformsiv(
+ (GLuint)program,
+ (GLsizei)uniformCount,
+ (GLuint *)uniformIndices,
+ (GLenum)pname,
+ (GLint *)params
+ );
+ if (_paramsArray) {
+ releasePointer(_env, _paramsArray, params, JNI_TRUE);
+ }
+ if (_uniformIndicesArray) {
+ releasePointer(_env, _uniformIndicesArray, uniformIndices, JNI_FALSE);
+ }
+}
+
+/* GLuint glGetUniformBlockIndex ( GLuint program, const GLchar *uniformBlockName ) */
+static jint
+android_glGetUniformBlockIndex__ILjava_lang_String_2
+ (JNIEnv *_env, jobject _this, jint program, jstring uniformBlockName) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLuint _returnValue = 0;
+ const char* _nativeuniformBlockName = 0;
+
+ if (!uniformBlockName) {
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "uniformBlockName == null";
+ goto exit;
+ }
+ _nativeuniformBlockName = _env->GetStringUTFChars(uniformBlockName, 0);
+
+ _returnValue = glGetUniformBlockIndex(
+ (GLuint)program,
+ (GLchar *)_nativeuniformBlockName
+ );
+
+exit:
+ if (_nativeuniformBlockName) {
+ _env->ReleaseStringUTFChars(uniformBlockName, _nativeuniformBlockName);
+ }
+
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+ return (jint)_returnValue;
+}
+
+/* void glGetActiveUniformBlockiv ( GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params ) */
+static void
+android_glGetActiveUniformBlockiv__III_3II
+ (JNIEnv *_env, jobject _this, jint program, jint uniformBlockIndex, jint pname, jintArray params_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLint *params_base = (GLint *) 0;
+ jint _remaining;
+ GLint *params = (GLint *) 0;
+
+ if (!params_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "params == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ params_base = (GLint *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glGetActiveUniformBlockiv(
+ (GLuint)program,
+ (GLuint)uniformBlockIndex,
+ (GLenum)pname,
+ (GLint *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _exception ? JNI_ABORT: 0);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glGetActiveUniformBlockiv ( GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params ) */
+static void
+android_glGetActiveUniformBlockiv__IIILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint program, jint uniformBlockIndex, jint pname, jobject params_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLint *params = (GLint *) 0;
+
+ params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ if (params == NULL) {
+ char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ params = (GLint *) (_paramsBase + _bufferOffset);
+ }
+ glGetActiveUniformBlockiv(
+ (GLuint)program,
+ (GLuint)uniformBlockIndex,
+ (GLenum)pname,
+ (GLint *)params
+ );
+ if (_array) {
+ releasePointer(_env, _array, params, JNI_TRUE);
+ }
+}
+
+/* void glGetActiveUniformBlockName ( GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName ) */
+static void
+android_glGetActiveUniformBlockName_III_3II_3BI
+ (JNIEnv* _env, jobject _this, jint program, jint uniformBlockIndex, int bufSize, jintArray length_ref, jint lengthOffset, jbyteArray name_ref, jint nameOffset) {
+ jint _exception = 0;
+ const char* _exceptionType;
+ const char* _exceptionMessage;
+ GLsizei* _length_base = (GLsizei*)0;
+ jint _lengthRemaining;
+ GLsizei* _length = (GLsizei*)0;
+ GLchar* _name_base = (GLchar*)0;
+ jint _nameRemaining;
+ GLchar* _name = (GLchar*)0;
+
+ if (!length_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "length == null";
+ goto exit;
+ }
+ if (lengthOffset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "lengthOffset < 0";
+ goto exit;
+ }
+ _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
+ _length_base = (GLsizei*)_env->GetPrimitiveArrayCritical(
+ length_ref, (jboolean*)0);
+ _length = _length_base + lengthOffset;
+
+ if (!name_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "uniformBlockName == null";
+ goto exit;
+ }
+ if (nameOffset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "uniformBlockNameOffset < 0";
+ goto exit;
+ }
+ _nameRemaining = _env->GetArrayLength(name_ref) - nameOffset;
+ _name_base = (GLchar*)_env->GetPrimitiveArrayCritical(
+ name_ref, (jboolean*)0);
+ _name = _name_base + nameOffset;
+
+ glGetActiveUniformBlockName(
+ (GLuint)program,
+ (GLuint)uniformBlockIndex,
+ (GLsizei)bufSize,
+ (GLsizei*)_length,
+ (GLchar*)_name
+ );
+
+exit:
+ if (_name_base) {
+ _env->ReleasePrimitiveArrayCritical(name_ref, _name_base,
+ _exception ? JNI_ABORT: 0);
+ }
+ if (_length_base) {
+ _env->ReleasePrimitiveArrayCritical(length_ref, _length_base,
+ _exception ? JNI_ABORT: 0);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glGetActiveUniformBlockName ( GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName ) */
+static void
+android_glGetActiveUniformBlockName_IILjava_nio_Buffer_2Ljava_nio_Buffer_2
+ (JNIEnv* _env, jobject _this, jint program, jint uniformBlockIndex, jobject length_buf, jobject uniformBlockName_buf) {
+ jint _exception = 0;
+ const char* _exceptionType;
+ const char* _exceptionMessage;
+ jarray _lengthArray = (jarray)0;
+ jint _lengthBufferOffset = (jint)0;
+ GLsizei* _length = (GLsizei*)0;
+ jint _lengthRemaining;
+ jarray _nameArray = (jarray)0;
+ jint _nameBufferOffset = (jint)0;
+ GLchar* _name = (GLchar*)0;
+ jint _nameRemaining;
+
+ _length = (GLsizei*)getPointer(_env, length_buf, &_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
+ if (_length == NULL) {
+ GLsizei* _lengthBase = (GLsizei*)_env->GetPrimitiveArrayCritical(_lengthArray, (jboolean*)0);
+ _length = (GLsizei*)(_lengthBase + _lengthBufferOffset);
+ }
+
+ _name = (GLchar*)getPointer(_env, uniformBlockName_buf, &_nameArray, &_nameRemaining, &_nameBufferOffset);
+ if (_name == NULL) {
+ GLchar* _nameBase = (GLchar*)_env->GetPrimitiveArrayCritical(_nameArray, (jboolean*)0);
+ _name = (GLchar*)(_nameBase + _nameBufferOffset);
+ }
+
+ glGetActiveUniformBlockName(
+ (GLuint)program,
+ (GLuint)uniformBlockIndex,
+ (GLsizei)_nameRemaining,
+ _length, _name
+ );
+ if (_nameArray) {
+ releasePointer(_env, _nameArray, _name, JNI_TRUE);
+ }
+ if (_lengthArray) {
+ releasePointer(_env, _lengthArray, _length, JNI_TRUE);
+ }
+}
+
+/* void glGetActiveUniformBlockName ( GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName ) */
+static jstring
+android_glGetActiveUniformBlockName_II
+ (JNIEnv *_env, jobject _this, jint program, jint uniformBlockIndex) {
+ GLint len = 0;
+ glGetActiveUniformBlockiv((GLuint)program, (GLuint)uniformBlockIndex,
+ GL_UNIFORM_BLOCK_NAME_LENGTH, &len);
+ GLchar* name = (GLchar*)malloc(len);
+ glGetActiveUniformBlockName((GLuint)program, (GLuint)uniformBlockIndex,
+ len, NULL, name);
+ jstring result = _env->NewStringUTF(name);
+ free(name);
+ return result;
+}
+
+/* void glUniformBlockBinding ( GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding ) */
+static void
+android_glUniformBlockBinding__III
+ (JNIEnv *_env, jobject _this, jint program, jint uniformBlockIndex, jint uniformBlockBinding) {
+ glUniformBlockBinding(
+ (GLuint)program,
+ (GLuint)uniformBlockIndex,
+ (GLuint)uniformBlockBinding
+ );
+}
+
+/* void glDrawArraysInstanced ( GLenum mode, GLint first, GLsizei count, GLsizei instanceCount ) */
+static void
+android_glDrawArraysInstanced__IIII
+ (JNIEnv *_env, jobject _this, jint mode, jint first, jint count, jint instanceCount) {
+ glDrawArraysInstanced(
+ (GLenum)mode,
+ (GLint)first,
+ (GLsizei)count,
+ (GLsizei)instanceCount
+ );
+}
+
+/* void glDrawElementsInstanced ( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instanceCount ) */
+static void
+android_glDrawElementsInstanced__IIILjava_nio_Buffer_2I
+ (JNIEnv *_env, jobject _this, jint mode, jint count, jint type, jobject indices_buf, jint instanceCount) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLvoid *indices = (GLvoid *) 0;
+
+ indices = (GLvoid *)getPointer(_env, indices_buf, &_array, &_remaining, &_bufferOffset);
+ if (indices == NULL) {
+ char * _indicesBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ indices = (GLvoid *) (_indicesBase + _bufferOffset);
+ }
+ glDrawElementsInstanced(
+ (GLenum)mode,
+ (GLsizei)count,
+ (GLenum)type,
+ (GLvoid *)indices,
+ (GLsizei)instanceCount
+ );
+ if (_array) {
+ releasePointer(_env, _array, indices, JNI_FALSE);
+ }
+}
+
+/* void glDrawElementsInstanced ( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instanceCount ) */
+static void
+android_glDrawElementsInstanced__IIIII
+ (JNIEnv *_env, jobject _this, jint mode, jint count, jint type, jint indicesOffset, jint instanceCount) {
+ glDrawElementsInstanced(
+ (GLenum)mode,
+ (GLsizei)count,
+ (GLenum)type,
+ (GLvoid *)indicesOffset,
+ (GLsizei)instanceCount
+ );
+}
+
+/* GLsync glFenceSync ( GLenum condition, GLbitfield flags ) */
+static jlong
+android_glFenceSync__II
+ (JNIEnv *_env, jobject _this, jint condition, jint flags) {
+ GLsync _returnValue;
+ _returnValue = glFenceSync(
+ (GLenum)condition,
+ (GLbitfield)flags
+ );
+ return (jlong)_returnValue;
+}
+
+/* GLboolean glIsSync ( GLsync sync ) */
+static jboolean
+android_glIsSync__J
+ (JNIEnv *_env, jobject _this, jlong sync) {
+ GLboolean _returnValue;
+ _returnValue = glIsSync(
+ (GLsync)sync
+ );
+ return (jboolean)_returnValue;
+}
+
+/* void glDeleteSync ( GLsync sync ) */
+static void
+android_glDeleteSync__J
+ (JNIEnv *_env, jobject _this, jlong sync) {
+ glDeleteSync(
+ (GLsync)sync
+ );
+}
+
+/* GLenum glClientWaitSync ( GLsync sync, GLbitfield flags, GLuint64 timeout ) */
+static jint
+android_glClientWaitSync__JIJ
+ (JNIEnv *_env, jobject _this, jlong sync, jint flags, jlong timeout) {
+ GLenum _returnValue;
+ _returnValue = glClientWaitSync(
+ (GLsync)sync,
+ (GLbitfield)flags,
+ (GLuint64)timeout
+ );
+ return (jint)_returnValue;
+}
+
+/* void glWaitSync ( GLsync sync, GLbitfield flags, GLuint64 timeout ) */
+static void
+android_glWaitSync__JIJ
+ (JNIEnv *_env, jobject _this, jlong sync, jint flags, jlong timeout) {
+ glWaitSync(
+ (GLsync)sync,
+ (GLbitfield)flags,
+ (GLuint64)timeout
+ );
+}
+
+/* void glGetInteger64v ( GLenum pname, GLint64 *params ) */
+static void
+android_glGetInteger64v__I_3JI
+ (JNIEnv *_env, jobject _this, jint pname, jlongArray params_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLint64 *params_base = (GLint64 *) 0;
+ jint _remaining;
+ GLint64 *params = (GLint64 *) 0;
+
+ if (!params_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "params == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ params_base = (GLint64 *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glGetInteger64v(
+ (GLenum)pname,
+ (GLint64 *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _exception ? JNI_ABORT: 0);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glGetInteger64v ( GLenum pname, GLint64 *params ) */
+static void
+android_glGetInteger64v__ILjava_nio_LongBuffer_2
+ (JNIEnv *_env, jobject _this, jint pname, jobject params_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLint64 *params = (GLint64 *) 0;
+
+ params = (GLint64 *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ if (params == NULL) {
+ char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ params = (GLint64 *) (_paramsBase + _bufferOffset);
+ }
+ glGetInteger64v(
+ (GLenum)pname,
+ (GLint64 *)params
+ );
+ if (_array) {
+ releasePointer(_env, _array, params, JNI_TRUE);
+ }
+}
+
+/* void glGetSynciv ( GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values ) */
+static void
+android_glGetSynciv__JII_3II_3II
+ (JNIEnv *_env, jobject _this, jlong sync, jint pname, jint bufSize, jintArray length_ref, jint lengthOffset, jintArray values_ref, jint valuesOffset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLsizei *length_base = (GLsizei *) 0;
+ jint _lengthRemaining;
+ GLsizei *length = (GLsizei *) 0;
+ GLint *values_base = (GLint *) 0;
+ jint _valuesRemaining;
+ GLint *values = (GLint *) 0;
+
+ if (!length_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "length == null";
+ goto exit;
+ }
+ if (lengthOffset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "lengthOffset < 0";
+ goto exit;
+ }
+ _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
+ length_base = (GLsizei *)
+ _env->GetPrimitiveArrayCritical(length_ref, (jboolean *)0);
+ length = length_base + lengthOffset;
+
+ if (!values_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "values == null";
+ goto exit;
+ }
+ if (valuesOffset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "valuesOffset < 0";
+ goto exit;
+ }
+ _valuesRemaining = _env->GetArrayLength(values_ref) - valuesOffset;
+ values_base = (GLint *)
+ _env->GetPrimitiveArrayCritical(values_ref, (jboolean *)0);
+ values = values_base + valuesOffset;
+
+ glGetSynciv(
+ (GLsync)sync,
+ (GLenum)pname,
+ (GLsizei)bufSize,
+ (GLsizei *)length,
+ (GLint *)values
+ );
+
+exit:
+ if (values_base) {
+ _env->ReleasePrimitiveArrayCritical(values_ref, values_base,
+ _exception ? JNI_ABORT: 0);
+ }
+ if (length_base) {
+ _env->ReleasePrimitiveArrayCritical(length_ref, length_base,
+ _exception ? JNI_ABORT: 0);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glGetSynciv ( GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values ) */
+static void
+android_glGetSynciv__JIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jlong sync, jint pname, jint bufSize, jobject length_buf, jobject values_buf) {
+ jarray _lengthArray = (jarray) 0;
+ jint _lengthBufferOffset = (jint) 0;
+ jarray _valuesArray = (jarray) 0;
+ jint _valuesBufferOffset = (jint) 0;
+ jint _lengthRemaining;
+ GLsizei *length = (GLsizei *) 0;
+ jint _valuesRemaining;
+ GLint *values = (GLint *) 0;
+
+ length = (GLsizei *)getPointer(_env, length_buf, &_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
+ values = (GLint *)getPointer(_env, values_buf, &_valuesArray, &_valuesRemaining, &_valuesBufferOffset);
+ if (length == NULL) {
+ char * _lengthBase = (char *)_env->GetPrimitiveArrayCritical(_lengthArray, (jboolean *) 0);
+ length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
+ }
+ if (values == NULL) {
+ char * _valuesBase = (char *)_env->GetPrimitiveArrayCritical(_valuesArray, (jboolean *) 0);
+ values = (GLint *) (_valuesBase + _valuesBufferOffset);
+ }
+ glGetSynciv(
+ (GLsync)sync,
+ (GLenum)pname,
+ (GLsizei)bufSize,
+ (GLsizei *)length,
+ (GLint *)values
+ );
+ if (_valuesArray) {
+ releasePointer(_env, _valuesArray, values, JNI_TRUE);
+ }
+ if (_lengthArray) {
+ releasePointer(_env, _lengthArray, length, JNI_TRUE);
+ }
+}
+
+/* void glGetInteger64i_v ( GLenum target, GLuint index, GLint64 *data ) */
+static void
+android_glGetInteger64i_v__II_3JI
+ (JNIEnv *_env, jobject _this, jint target, jint index, jlongArray data_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLint64 *data_base = (GLint64 *) 0;
+ jint _remaining;
+ GLint64 *data = (GLint64 *) 0;
+
+ if (!data_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "data == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(data_ref) - offset;
+ data_base = (GLint64 *)
+ _env->GetPrimitiveArrayCritical(data_ref, (jboolean *)0);
+ data = data_base + offset;
+
+ glGetInteger64i_v(
+ (GLenum)target,
+ (GLuint)index,
+ (GLint64 *)data
+ );
+
+exit:
+ if (data_base) {
+ _env->ReleasePrimitiveArrayCritical(data_ref, data_base,
+ _exception ? JNI_ABORT: 0);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glGetInteger64i_v ( GLenum target, GLuint index, GLint64 *data ) */
+static void
+android_glGetInteger64i_v__IILjava_nio_LongBuffer_2
+ (JNIEnv *_env, jobject _this, jint target, jint index, jobject data_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLint64 *data = (GLint64 *) 0;
+
+ data = (GLint64 *)getPointer(_env, data_buf, &_array, &_remaining, &_bufferOffset);
+ if (data == NULL) {
+ char * _dataBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ data = (GLint64 *) (_dataBase + _bufferOffset);
+ }
+ glGetInteger64i_v(
+ (GLenum)target,
+ (GLuint)index,
+ (GLint64 *)data
+ );
+ if (_array) {
+ releasePointer(_env, _array, data, JNI_TRUE);
+ }
+}
+
+/* void glGetBufferParameteri64v ( GLenum target, GLenum pname, GLint64 *params ) */
+static void
+android_glGetBufferParameteri64v__II_3JI
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jlongArray params_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLint64 *params_base = (GLint64 *) 0;
+ jint _remaining;
+ GLint64 *params = (GLint64 *) 0;
+
+ if (!params_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "params == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ params_base = (GLint64 *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glGetBufferParameteri64v(
+ (GLenum)target,
+ (GLenum)pname,
+ (GLint64 *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _exception ? JNI_ABORT: 0);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glGetBufferParameteri64v ( GLenum target, GLenum pname, GLint64 *params ) */
+static void
+android_glGetBufferParameteri64v__IILjava_nio_LongBuffer_2
+ (JNIEnv *_env, jobject _this, jint target, jint pname, jobject params_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLint64 *params = (GLint64 *) 0;
+
+ params = (GLint64 *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ if (params == NULL) {
+ char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ params = (GLint64 *) (_paramsBase + _bufferOffset);
+ }
+ glGetBufferParameteri64v(
+ (GLenum)target,
+ (GLenum)pname,
+ (GLint64 *)params
+ );
+ if (_array) {
+ releasePointer(_env, _array, params, JNI_TRUE);
+ }
+}
+
+/* void glGenSamplers ( GLsizei count, GLuint *samplers ) */
+static void
+android_glGenSamplers__I_3II
+ (JNIEnv *_env, jobject _this, jint count, jintArray samplers_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLuint *samplers_base = (GLuint *) 0;
+ jint _remaining;
+ GLuint *samplers = (GLuint *) 0;
+
+ if (!samplers_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "samplers == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(samplers_ref) - offset;
+ samplers_base = (GLuint *)
+ _env->GetPrimitiveArrayCritical(samplers_ref, (jboolean *)0);
+ samplers = samplers_base + offset;
+
+ glGenSamplers(
+ (GLsizei)count,
+ (GLuint *)samplers
+ );
+
+exit:
+ if (samplers_base) {
+ _env->ReleasePrimitiveArrayCritical(samplers_ref, samplers_base,
+ _exception ? JNI_ABORT: 0);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glGenSamplers ( GLsizei count, GLuint *samplers ) */
+static void
+android_glGenSamplers__ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint count, jobject samplers_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLuint *samplers = (GLuint *) 0;
+
+ samplers = (GLuint *)getPointer(_env, samplers_buf, &_array, &_remaining, &_bufferOffset);
+ if (samplers == NULL) {
+ char * _samplersBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ samplers = (GLuint *) (_samplersBase + _bufferOffset);
+ }
+ glGenSamplers(
+ (GLsizei)count,
+ (GLuint *)samplers
+ );
+ if (_array) {
+ releasePointer(_env, _array, samplers, JNI_TRUE);
+ }
+}
+
+/* void glDeleteSamplers ( GLsizei count, const GLuint *samplers ) */
+static void
+android_glDeleteSamplers__I_3II
+ (JNIEnv *_env, jobject _this, jint count, jintArray samplers_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLuint *samplers_base = (GLuint *) 0;
+ jint _remaining;
+ GLuint *samplers = (GLuint *) 0;
+
+ if (!samplers_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "samplers == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(samplers_ref) - offset;
+ samplers_base = (GLuint *)
+ _env->GetPrimitiveArrayCritical(samplers_ref, (jboolean *)0);
+ samplers = samplers_base + offset;
+
+ glDeleteSamplers(
+ (GLsizei)count,
+ (GLuint *)samplers
+ );
+
+exit:
+ if (samplers_base) {
+ _env->ReleasePrimitiveArrayCritical(samplers_ref, samplers_base,
+ JNI_ABORT);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glDeleteSamplers ( GLsizei count, const GLuint *samplers ) */
+static void
+android_glDeleteSamplers__ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint count, jobject samplers_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLuint *samplers = (GLuint *) 0;
+
+ samplers = (GLuint *)getPointer(_env, samplers_buf, &_array, &_remaining, &_bufferOffset);
+ if (samplers == NULL) {
+ char * _samplersBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ samplers = (GLuint *) (_samplersBase + _bufferOffset);
+ }
+ glDeleteSamplers(
+ (GLsizei)count,
+ (GLuint *)samplers
+ );
+ if (_array) {
+ releasePointer(_env, _array, samplers, JNI_FALSE);
+ }
+}
+
+/* GLboolean glIsSampler ( GLuint sampler ) */
+static jboolean
+android_glIsSampler__I
+ (JNIEnv *_env, jobject _this, jint sampler) {
+ GLboolean _returnValue;
+ _returnValue = glIsSampler(
+ (GLuint)sampler
+ );
+ return (jboolean)_returnValue;
+}
+
+/* void glBindSampler ( GLuint unit, GLuint sampler ) */
+static void
+android_glBindSampler__II
+ (JNIEnv *_env, jobject _this, jint unit, jint sampler) {
+ glBindSampler(
+ (GLuint)unit,
+ (GLuint)sampler
+ );
+}
+
+/* void glSamplerParameteri ( GLuint sampler, GLenum pname, GLint param ) */
+static void
+android_glSamplerParameteri__III
+ (JNIEnv *_env, jobject _this, jint sampler, jint pname, jint param) {
+ glSamplerParameteri(
+ (GLuint)sampler,
+ (GLenum)pname,
+ (GLint)param
+ );
+}
+
+/* void glSamplerParameteriv ( GLuint sampler, GLenum pname, const GLint *param ) */
+static void
+android_glSamplerParameteriv__II_3II
+ (JNIEnv *_env, jobject _this, jint sampler, jint pname, jintArray param_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLint *param_base = (GLint *) 0;
+ jint _remaining;
+ GLint *param = (GLint *) 0;
+
+ if (!param_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "param == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(param_ref) - offset;
+ param_base = (GLint *)
+ _env->GetPrimitiveArrayCritical(param_ref, (jboolean *)0);
+ param = param_base + offset;
+
+ glSamplerParameteriv(
+ (GLuint)sampler,
+ (GLenum)pname,
+ (GLint *)param
+ );
+
+exit:
+ if (param_base) {
+ _env->ReleasePrimitiveArrayCritical(param_ref, param_base,
+ JNI_ABORT);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glSamplerParameteriv ( GLuint sampler, GLenum pname, const GLint *param ) */
+static void
+android_glSamplerParameteriv__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject param_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLint *param = (GLint *) 0;
+
+ param = (GLint *)getPointer(_env, param_buf, &_array, &_remaining, &_bufferOffset);
+ if (param == NULL) {
+ char * _paramBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ param = (GLint *) (_paramBase + _bufferOffset);
+ }
+ glSamplerParameteriv(
+ (GLuint)sampler,
+ (GLenum)pname,
+ (GLint *)param
+ );
+ if (_array) {
+ releasePointer(_env, _array, param, JNI_FALSE);
+ }
+}
+
+/* void glSamplerParameterf ( GLuint sampler, GLenum pname, GLfloat param ) */
+static void
+android_glSamplerParameterf__IIF
+ (JNIEnv *_env, jobject _this, jint sampler, jint pname, jfloat param) {
+ glSamplerParameterf(
+ (GLuint)sampler,
+ (GLenum)pname,
+ (GLfloat)param
+ );
+}
+
+/* void glSamplerParameterfv ( GLuint sampler, GLenum pname, const GLfloat *param ) */
+static void
+android_glSamplerParameterfv__II_3FI
+ (JNIEnv *_env, jobject _this, jint sampler, jint pname, jfloatArray param_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLfloat *param_base = (GLfloat *) 0;
+ jint _remaining;
+ GLfloat *param = (GLfloat *) 0;
+
+ if (!param_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "param == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(param_ref) - offset;
+ param_base = (GLfloat *)
+ _env->GetPrimitiveArrayCritical(param_ref, (jboolean *)0);
+ param = param_base + offset;
+
+ glSamplerParameterfv(
+ (GLuint)sampler,
+ (GLenum)pname,
+ (GLfloat *)param
+ );
+
+exit:
+ if (param_base) {
+ _env->ReleasePrimitiveArrayCritical(param_ref, param_base,
+ JNI_ABORT);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glSamplerParameterfv ( GLuint sampler, GLenum pname, const GLfloat *param ) */
+static void
+android_glSamplerParameterfv__IILjava_nio_FloatBuffer_2
+ (JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject param_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLfloat *param = (GLfloat *) 0;
+
+ param = (GLfloat *)getPointer(_env, param_buf, &_array, &_remaining, &_bufferOffset);
+ if (param == NULL) {
+ char * _paramBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ param = (GLfloat *) (_paramBase + _bufferOffset);
+ }
+ glSamplerParameterfv(
+ (GLuint)sampler,
+ (GLenum)pname,
+ (GLfloat *)param
+ );
+ if (_array) {
+ releasePointer(_env, _array, param, JNI_FALSE);
+ }
+}
+
+/* void glGetSamplerParameteriv ( GLuint sampler, GLenum pname, GLint *params ) */
+static void
+android_glGetSamplerParameteriv__II_3II
+ (JNIEnv *_env, jobject _this, jint sampler, jint pname, jintArray params_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLint *params_base = (GLint *) 0;
+ jint _remaining;
+ GLint *params = (GLint *) 0;
+
+ if (!params_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "params == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ params_base = (GLint *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glGetSamplerParameteriv(
+ (GLuint)sampler,
+ (GLenum)pname,
+ (GLint *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _exception ? JNI_ABORT: 0);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glGetSamplerParameteriv ( GLuint sampler, GLenum pname, GLint *params ) */
+static void
+android_glGetSamplerParameteriv__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject params_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLint *params = (GLint *) 0;
+
+ params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ if (params == NULL) {
+ char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ params = (GLint *) (_paramsBase + _bufferOffset);
+ }
+ glGetSamplerParameteriv(
+ (GLuint)sampler,
+ (GLenum)pname,
+ (GLint *)params
+ );
+ if (_array) {
+ releasePointer(_env, _array, params, JNI_TRUE);
+ }
+}
+
+/* void glGetSamplerParameterfv ( GLuint sampler, GLenum pname, GLfloat *params ) */
+static void
+android_glGetSamplerParameterfv__II_3FI
+ (JNIEnv *_env, jobject _this, jint sampler, jint pname, jfloatArray params_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLfloat *params_base = (GLfloat *) 0;
+ jint _remaining;
+ GLfloat *params = (GLfloat *) 0;
+
+ if (!params_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "params == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ params_base = (GLfloat *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glGetSamplerParameterfv(
+ (GLuint)sampler,
+ (GLenum)pname,
+ (GLfloat *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _exception ? JNI_ABORT: 0);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glGetSamplerParameterfv ( GLuint sampler, GLenum pname, GLfloat *params ) */
+static void
+android_glGetSamplerParameterfv__IILjava_nio_FloatBuffer_2
+ (JNIEnv *_env, jobject _this, jint sampler, jint pname, jobject params_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLfloat *params = (GLfloat *) 0;
+
+ params = (GLfloat *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ if (params == NULL) {
+ char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ params = (GLfloat *) (_paramsBase + _bufferOffset);
+ }
+ glGetSamplerParameterfv(
+ (GLuint)sampler,
+ (GLenum)pname,
+ (GLfloat *)params
+ );
+ if (_array) {
+ releasePointer(_env, _array, params, JNI_TRUE);
+ }
+}
+
+/* void glVertexAttribDivisor ( GLuint index, GLuint divisor ) */
+static void
+android_glVertexAttribDivisor__II
+ (JNIEnv *_env, jobject _this, jint index, jint divisor) {
+ glVertexAttribDivisor(
+ (GLuint)index,
+ (GLuint)divisor
+ );
+}
+
+/* void glBindTransformFeedback ( GLenum target, GLuint id ) */
+static void
+android_glBindTransformFeedback__II
+ (JNIEnv *_env, jobject _this, jint target, jint id) {
+ glBindTransformFeedback(
+ (GLenum)target,
+ (GLuint)id
+ );
+}
+
+/* void glDeleteTransformFeedbacks ( GLsizei n, const GLuint *ids ) */
+static void
+android_glDeleteTransformFeedbacks__I_3II
+ (JNIEnv *_env, jobject _this, jint n, jintArray ids_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLuint *ids_base = (GLuint *) 0;
+ jint _remaining;
+ GLuint *ids = (GLuint *) 0;
+
+ if (!ids_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "ids == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(ids_ref) - offset;
+ ids_base = (GLuint *)
+ _env->GetPrimitiveArrayCritical(ids_ref, (jboolean *)0);
+ ids = ids_base + offset;
+
+ glDeleteTransformFeedbacks(
+ (GLsizei)n,
+ (GLuint *)ids
+ );
+
+exit:
+ if (ids_base) {
+ _env->ReleasePrimitiveArrayCritical(ids_ref, ids_base,
+ JNI_ABORT);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glDeleteTransformFeedbacks ( GLsizei n, const GLuint *ids ) */
+static void
+android_glDeleteTransformFeedbacks__ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint n, jobject ids_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLuint *ids = (GLuint *) 0;
+
+ ids = (GLuint *)getPointer(_env, ids_buf, &_array, &_remaining, &_bufferOffset);
+ if (ids == NULL) {
+ char * _idsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ ids = (GLuint *) (_idsBase + _bufferOffset);
+ }
+ glDeleteTransformFeedbacks(
+ (GLsizei)n,
+ (GLuint *)ids
+ );
+ if (_array) {
+ releasePointer(_env, _array, ids, JNI_FALSE);
+ }
+}
+
+/* void glGenTransformFeedbacks ( GLsizei n, GLuint *ids ) */
+static void
+android_glGenTransformFeedbacks__I_3II
+ (JNIEnv *_env, jobject _this, jint n, jintArray ids_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLuint *ids_base = (GLuint *) 0;
+ jint _remaining;
+ GLuint *ids = (GLuint *) 0;
+
+ if (!ids_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "ids == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(ids_ref) - offset;
+ ids_base = (GLuint *)
+ _env->GetPrimitiveArrayCritical(ids_ref, (jboolean *)0);
+ ids = ids_base + offset;
+
+ glGenTransformFeedbacks(
+ (GLsizei)n,
+ (GLuint *)ids
+ );
+
+exit:
+ if (ids_base) {
+ _env->ReleasePrimitiveArrayCritical(ids_ref, ids_base,
+ _exception ? JNI_ABORT: 0);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glGenTransformFeedbacks ( GLsizei n, GLuint *ids ) */
+static void
+android_glGenTransformFeedbacks__ILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint n, jobject ids_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLuint *ids = (GLuint *) 0;
+
+ ids = (GLuint *)getPointer(_env, ids_buf, &_array, &_remaining, &_bufferOffset);
+ if (ids == NULL) {
+ char * _idsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ ids = (GLuint *) (_idsBase + _bufferOffset);
+ }
+ glGenTransformFeedbacks(
+ (GLsizei)n,
+ (GLuint *)ids
+ );
+ if (_array) {
+ releasePointer(_env, _array, ids, JNI_TRUE);
+ }
+}
+
+/* GLboolean glIsTransformFeedback ( GLuint id ) */
+static jboolean
+android_glIsTransformFeedback__I
+ (JNIEnv *_env, jobject _this, jint id) {
+ GLboolean _returnValue;
+ _returnValue = glIsTransformFeedback(
+ (GLuint)id
+ );
+ return (jboolean)_returnValue;
+}
+
+/* void glPauseTransformFeedback ( void ) */
+static void
+android_glPauseTransformFeedback__
+ (JNIEnv *_env, jobject _this) {
+ glPauseTransformFeedback();
+}
+
+/* void glResumeTransformFeedback ( void ) */
+static void
+android_glResumeTransformFeedback__
+ (JNIEnv *_env, jobject _this) {
+ glResumeTransformFeedback();
+}
+
+/* void glGetProgramBinary ( GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary ) */
+static void
+android_glGetProgramBinary__II_3II_3IILjava_nio_Buffer_2
+ (JNIEnv *_env, jobject _this, jint program, jint bufSize, jintArray length_ref, jint lengthOffset, jintArray binaryFormat_ref, jint binaryFormatOffset, jobject binary_buf) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ GLsizei *length_base = (GLsizei *) 0;
+ jint _lengthRemaining;
+ GLsizei *length = (GLsizei *) 0;
+ GLenum *binaryFormat_base = (GLenum *) 0;
+ jint _binaryFormatRemaining;
+ GLenum *binaryFormat = (GLenum *) 0;
+ jint _binaryRemaining;
+ GLvoid *binary = (GLvoid *) 0;
+
+ if (!length_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "length == null";
+ goto exit;
+ }
+ if (lengthOffset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "lengthOffset < 0";
+ goto exit;
+ }
+ _lengthRemaining = _env->GetArrayLength(length_ref) - lengthOffset;
+ length_base = (GLsizei *)
+ _env->GetPrimitiveArrayCritical(length_ref, (jboolean *)0);
+ length = length_base + lengthOffset;
+
+ if (!binaryFormat_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "binaryFormat == null";
+ goto exit;
+ }
+ if (binaryFormatOffset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "binaryFormatOffset < 0";
+ goto exit;
+ }
+ _binaryFormatRemaining = _env->GetArrayLength(binaryFormat_ref) - binaryFormatOffset;
+ binaryFormat_base = (GLenum *)
+ _env->GetPrimitiveArrayCritical(binaryFormat_ref, (jboolean *)0);
+ binaryFormat = binaryFormat_base + binaryFormatOffset;
+
+ binary = (GLvoid *)getPointer(_env, binary_buf, &_array, &_binaryRemaining, &_bufferOffset);
+ if (binary == NULL) {
+ char * _binaryBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ binary = (GLvoid *) (_binaryBase + _bufferOffset);
+ }
+ glGetProgramBinary(
+ (GLuint)program,
+ (GLsizei)bufSize,
+ (GLsizei *)length,
+ (GLenum *)binaryFormat,
+ (GLvoid *)binary
+ );
+
+exit:
+ if (_array) {
+ releasePointer(_env, _array, binary, _exception ? JNI_FALSE : JNI_TRUE);
+ }
+ if (binaryFormat_base) {
+ _env->ReleasePrimitiveArrayCritical(binaryFormat_ref, binaryFormat_base,
+ _exception ? JNI_ABORT: 0);
+ }
+ if (length_base) {
+ _env->ReleasePrimitiveArrayCritical(length_ref, length_base,
+ _exception ? JNI_ABORT: 0);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glGetProgramBinary ( GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary ) */
+static void
+android_glGetProgramBinary__IILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_Buffer_2
+ (JNIEnv *_env, jobject _this, jint program, jint bufSize, jobject length_buf, jobject binaryFormat_buf, jobject binary_buf) {
+ jarray _lengthArray = (jarray) 0;
+ jint _lengthBufferOffset = (jint) 0;
+ jarray _binaryFormatArray = (jarray) 0;
+ jint _binaryFormatBufferOffset = (jint) 0;
+ jarray _binaryArray = (jarray) 0;
+ jint _binaryBufferOffset = (jint) 0;
+ jint _lengthRemaining;
+ GLsizei *length = (GLsizei *) 0;
+ jint _binaryFormatRemaining;
+ GLenum *binaryFormat = (GLenum *) 0;
+ jint _binaryRemaining;
+ GLvoid *binary = (GLvoid *) 0;
+
+ length = (GLsizei *)getPointer(_env, length_buf, &_lengthArray, &_lengthRemaining, &_lengthBufferOffset);
+ binaryFormat = (GLenum *)getPointer(_env, binaryFormat_buf, &_binaryFormatArray, &_binaryFormatRemaining, &_binaryFormatBufferOffset);
+ binary = (GLvoid *)getPointer(_env, binary_buf, &_binaryArray, &_binaryRemaining, &_binaryBufferOffset);
+ if (length == NULL) {
+ char * _lengthBase = (char *)_env->GetPrimitiveArrayCritical(_lengthArray, (jboolean *) 0);
+ length = (GLsizei *) (_lengthBase + _lengthBufferOffset);
+ }
+ if (binaryFormat == NULL) {
+ char * _binaryFormatBase = (char *)_env->GetPrimitiveArrayCritical(_binaryFormatArray, (jboolean *) 0);
+ binaryFormat = (GLenum *) (_binaryFormatBase + _binaryFormatBufferOffset);
+ }
+ if (binary == NULL) {
+ char * _binaryBase = (char *)_env->GetPrimitiveArrayCritical(_binaryArray, (jboolean *) 0);
+ binary = (GLvoid *) (_binaryBase + _binaryBufferOffset);
+ }
+ glGetProgramBinary(
+ (GLuint)program,
+ (GLsizei)bufSize,
+ (GLsizei *)length,
+ (GLenum *)binaryFormat,
+ (GLvoid *)binary
+ );
+ if (_binaryArray) {
+ releasePointer(_env, _binaryArray, binary, JNI_TRUE);
+ }
+ if (_binaryFormatArray) {
+ releasePointer(_env, _binaryFormatArray, binaryFormat, JNI_TRUE);
+ }
+ if (_lengthArray) {
+ releasePointer(_env, _lengthArray, length, JNI_TRUE);
+ }
+}
+
+/* void glProgramBinary ( GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length ) */
+static void
+android_glProgramBinary__IILjava_nio_Buffer_2I
+ (JNIEnv *_env, jobject _this, jint program, jint binaryFormat, jobject binary_buf, jint length) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLvoid *binary = (GLvoid *) 0;
+
+ binary = (GLvoid *)getPointer(_env, binary_buf, &_array, &_remaining, &_bufferOffset);
+ if (binary == NULL) {
+ char * _binaryBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ binary = (GLvoid *) (_binaryBase + _bufferOffset);
+ }
+ glProgramBinary(
+ (GLuint)program,
+ (GLenum)binaryFormat,
+ (GLvoid *)binary,
+ (GLsizei)length
+ );
+ if (_array) {
+ releasePointer(_env, _array, binary, JNI_FALSE);
+ }
+}
+
+/* void glProgramParameteri ( GLuint program, GLenum pname, GLint value ) */
+static void
+android_glProgramParameteri__III
+ (JNIEnv *_env, jobject _this, jint program, jint pname, jint value) {
+ glProgramParameteri(
+ (GLuint)program,
+ (GLenum)pname,
+ (GLint)value
+ );
+}
+
+/* void glInvalidateFramebuffer ( GLenum target, GLsizei numAttachments, const GLenum *attachments ) */
+static void
+android_glInvalidateFramebuffer__II_3II
+ (JNIEnv *_env, jobject _this, jint target, jint numAttachments, jintArray attachments_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLenum *attachments_base = (GLenum *) 0;
+ jint _remaining;
+ GLenum *attachments = (GLenum *) 0;
+
+ if (!attachments_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "attachments == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(attachments_ref) - offset;
+ attachments_base = (GLenum *)
+ _env->GetPrimitiveArrayCritical(attachments_ref, (jboolean *)0);
+ attachments = attachments_base + offset;
+
+ glInvalidateFramebuffer(
+ (GLenum)target,
+ (GLsizei)numAttachments,
+ (GLenum *)attachments
+ );
+
+exit:
+ if (attachments_base) {
+ _env->ReleasePrimitiveArrayCritical(attachments_ref, attachments_base,
+ JNI_ABORT);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glInvalidateFramebuffer ( GLenum target, GLsizei numAttachments, const GLenum *attachments ) */
+static void
+android_glInvalidateFramebuffer__IILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint target, jint numAttachments, jobject attachments_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLenum *attachments = (GLenum *) 0;
+
+ attachments = (GLenum *)getPointer(_env, attachments_buf, &_array, &_remaining, &_bufferOffset);
+ if (attachments == NULL) {
+ char * _attachmentsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ attachments = (GLenum *) (_attachmentsBase + _bufferOffset);
+ }
+ glInvalidateFramebuffer(
+ (GLenum)target,
+ (GLsizei)numAttachments,
+ (GLenum *)attachments
+ );
+ if (_array) {
+ releasePointer(_env, _array, attachments, JNI_FALSE);
+ }
+}
+
+/* void glInvalidateSubFramebuffer ( GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height ) */
+static void
+android_glInvalidateSubFramebuffer__II_3IIIIII
+ (JNIEnv *_env, jobject _this, jint target, jint numAttachments, jintArray attachments_ref, jint offset, jint x, jint y, jint width, jint height) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLenum *attachments_base = (GLenum *) 0;
+ jint _remaining;
+ GLenum *attachments = (GLenum *) 0;
+
+ if (!attachments_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "attachments == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(attachments_ref) - offset;
+ attachments_base = (GLenum *)
+ _env->GetPrimitiveArrayCritical(attachments_ref, (jboolean *)0);
+ attachments = attachments_base + offset;
+
+ glInvalidateSubFramebuffer(
+ (GLenum)target,
+ (GLsizei)numAttachments,
+ (GLenum *)attachments,
+ (GLint)x,
+ (GLint)y,
+ (GLsizei)width,
+ (GLsizei)height
+ );
+
+exit:
+ if (attachments_base) {
+ _env->ReleasePrimitiveArrayCritical(attachments_ref, attachments_base,
+ JNI_ABORT);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glInvalidateSubFramebuffer ( GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height ) */
+static void
+android_glInvalidateSubFramebuffer__IILjava_nio_IntBuffer_2IIII
+ (JNIEnv *_env, jobject _this, jint target, jint numAttachments, jobject attachments_buf, jint x, jint y, jint width, jint height) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLenum *attachments = (GLenum *) 0;
+
+ attachments = (GLenum *)getPointer(_env, attachments_buf, &_array, &_remaining, &_bufferOffset);
+ if (attachments == NULL) {
+ char * _attachmentsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ attachments = (GLenum *) (_attachmentsBase + _bufferOffset);
+ }
+ glInvalidateSubFramebuffer(
+ (GLenum)target,
+ (GLsizei)numAttachments,
+ (GLenum *)attachments,
+ (GLint)x,
+ (GLint)y,
+ (GLsizei)width,
+ (GLsizei)height
+ );
+ if (_array) {
+ releasePointer(_env, _array, attachments, JNI_FALSE);
+ }
+}
+
+/* void glTexStorage2D ( GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height ) */
+static void
+android_glTexStorage2D__IIIII
+ (JNIEnv *_env, jobject _this, jint target, jint levels, jint internalformat, jint width, jint height) {
+ glTexStorage2D(
+ (GLenum)target,
+ (GLsizei)levels,
+ (GLenum)internalformat,
+ (GLsizei)width,
+ (GLsizei)height
+ );
+}
+
+/* void glTexStorage3D ( GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth ) */
+static void
+android_glTexStorage3D__IIIIII
+ (JNIEnv *_env, jobject _this, jint target, jint levels, jint internalformat, jint width, jint height, jint depth) {
+ glTexStorage3D(
+ (GLenum)target,
+ (GLsizei)levels,
+ (GLenum)internalformat,
+ (GLsizei)width,
+ (GLsizei)height,
+ (GLsizei)depth
+ );
+}
+
+/* void glGetInternalformativ ( GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params ) */
+static void
+android_glGetInternalformativ__IIII_3II
+ (JNIEnv *_env, jobject _this, jint target, jint internalformat, jint pname, jint bufSize, jintArray params_ref, jint offset) {
+ jint _exception = 0;
+ const char * _exceptionType = NULL;
+ const char * _exceptionMessage = NULL;
+ GLint *params_base = (GLint *) 0;
+ jint _remaining;
+ GLint *params = (GLint *) 0;
+
+ if (!params_ref) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "params == null";
+ goto exit;
+ }
+ if (offset < 0) {
+ _exception = 1;
+ _exceptionType = "java/lang/IllegalArgumentException";
+ _exceptionMessage = "offset < 0";
+ goto exit;
+ }
+ _remaining = _env->GetArrayLength(params_ref) - offset;
+ params_base = (GLint *)
+ _env->GetPrimitiveArrayCritical(params_ref, (jboolean *)0);
+ params = params_base + offset;
+
+ glGetInternalformativ(
+ (GLenum)target,
+ (GLenum)internalformat,
+ (GLenum)pname,
+ (GLsizei)bufSize,
+ (GLint *)params
+ );
+
+exit:
+ if (params_base) {
+ _env->ReleasePrimitiveArrayCritical(params_ref, params_base,
+ _exception ? JNI_ABORT: 0);
+ }
+ if (_exception) {
+ jniThrowException(_env, _exceptionType, _exceptionMessage);
+ }
+}
+
+/* void glGetInternalformativ ( GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params ) */
+static void
+android_glGetInternalformativ__IIIILjava_nio_IntBuffer_2
+ (JNIEnv *_env, jobject _this, jint target, jint internalformat, jint pname, jint bufSize, jobject params_buf) {
+ jarray _array = (jarray) 0;
+ jint _bufferOffset = (jint) 0;
+ jint _remaining;
+ GLint *params = (GLint *) 0;
+
+ params = (GLint *)getPointer(_env, params_buf, &_array, &_remaining, &_bufferOffset);
+ if (params == NULL) {
+ char * _paramsBase = (char *)_env->GetPrimitiveArrayCritical(_array, (jboolean *) 0);
+ params = (GLint *) (_paramsBase + _bufferOffset);
+ }
+ glGetInternalformativ(
+ (GLenum)target,
+ (GLenum)internalformat,
+ (GLenum)pname,
+ (GLsizei)bufSize,
+ (GLint *)params
+ );
+ if (_array) {
+ releasePointer(_env, _array, params, JNI_TRUE);
+ }
+}
+
+static const char *classPathName = "android/opengl/GLES30";
+
+static JNINativeMethod methods[] = {
+{"_nativeClassInit", "()V", (void*)nativeClassInit },
+{"glReadBuffer", "(I)V", (void *) android_glReadBuffer__I },
+{"glDrawRangeElements", "(IIIIILjava/nio/Buffer;)V", (void *) android_glDrawRangeElements__IIIIILjava_nio_Buffer_2 },
+{"glDrawRangeElements", "(IIIIII)V", (void *) android_glDrawRangeElements__IIIIII },
+{"glTexImage3D", "(IIIIIIIIILjava/nio/Buffer;)V", (void *) android_glTexImage3D__IIIIIIIIILjava_nio_Buffer_2 },
+{"glTexImage3D", "(IIIIIIIIII)V", (void *) android_glTexImage3D__IIIIIIIIII },
+{"glTexSubImage3D", "(IIIIIIIIIILjava/nio/Buffer;)V", (void *) android_glTexSubImage3D__IIIIIIIIIILjava_nio_Buffer_2 },
+{"glTexSubImage3D", "(IIIIIIIIIII)V", (void *) android_glTexSubImage3D__IIIIIIIIIII },
+{"glCopyTexSubImage3D", "(IIIIIIIII)V", (void *) android_glCopyTexSubImage3D__IIIIIIIII },
+{"glCompressedTexImage3D", "(IIIIIIIILjava/nio/Buffer;)V", (void *) android_glCompressedTexImage3D__IIIIIIIILjava_nio_Buffer_2 },
+{"glCompressedTexImage3D", "(IIIIIIIII)V", (void *) android_glCompressedTexImage3D__IIIIIIIII },
+{"glCompressedTexSubImage3D", "(IIIIIIIIIILjava/nio/Buffer;)V", (void *) android_glCompressedTexSubImage3D__IIIIIIIIIILjava_nio_Buffer_2 },
+{"glCompressedTexSubImage3D", "(IIIIIIIIIII)V", (void *) android_glCompressedTexSubImage3D__IIIIIIIIIII },
+{"glGenQueries", "(I[II)V", (void *) android_glGenQueries__I_3II },
+{"glGenQueries", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenQueries__ILjava_nio_IntBuffer_2 },
+{"glDeleteQueries", "(I[II)V", (void *) android_glDeleteQueries__I_3II },
+{"glDeleteQueries", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteQueries__ILjava_nio_IntBuffer_2 },
+{"glIsQuery", "(I)Z", (void *) android_glIsQuery__I },
+{"glBeginQuery", "(II)V", (void *) android_glBeginQuery__II },
+{"glEndQuery", "(I)V", (void *) android_glEndQuery__I },
+{"glGetQueryiv", "(II[II)V", (void *) android_glGetQueryiv__II_3II },
+{"glGetQueryiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetQueryiv__IILjava_nio_IntBuffer_2 },
+{"glGetQueryObjectuiv", "(II[II)V", (void *) android_glGetQueryObjectuiv__II_3II },
+{"glGetQueryObjectuiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetQueryObjectuiv__IILjava_nio_IntBuffer_2 },
+{"glUnmapBuffer", "(I)Z", (void *) android_glUnmapBuffer__I },
+{"glGetBufferPointerv", "(II)Ljava/nio/Buffer;", (void *) android_glGetBufferPointerv__II },
+{"glDrawBuffers", "(I[II)V", (void *) android_glDrawBuffers__I_3II },
+{"glDrawBuffers", "(ILjava/nio/IntBuffer;)V", (void *) android_glDrawBuffers__ILjava_nio_IntBuffer_2 },
+{"glUniformMatrix2x3fv", "(IIZ[FI)V", (void *) android_glUniformMatrix2x3fv__IIZ_3FI },
+{"glUniformMatrix2x3fv", "(IIZLjava/nio/FloatBuffer;)V", (void *) android_glUniformMatrix2x3fv__IIZLjava_nio_FloatBuffer_2 },
+{"glUniformMatrix3x2fv", "(IIZ[FI)V", (void *) android_glUniformMatrix3x2fv__IIZ_3FI },
+{"glUniformMatrix3x2fv", "(IIZLjava/nio/FloatBuffer;)V", (void *) android_glUniformMatrix3x2fv__IIZLjava_nio_FloatBuffer_2 },
+{"glUniformMatrix2x4fv", "(IIZ[FI)V", (void *) android_glUniformMatrix2x4fv__IIZ_3FI },
+{"glUniformMatrix2x4fv", "(IIZLjava/nio/FloatBuffer;)V", (void *) android_glUniformMatrix2x4fv__IIZLjava_nio_FloatBuffer_2 },
+{"glUniformMatrix4x2fv", "(IIZ[FI)V", (void *) android_glUniformMatrix4x2fv__IIZ_3FI },
+{"glUniformMatrix4x2fv", "(IIZLjava/nio/FloatBuffer;)V", (void *) android_glUniformMatrix4x2fv__IIZLjava_nio_FloatBuffer_2 },
+{"glUniformMatrix3x4fv", "(IIZ[FI)V", (void *) android_glUniformMatrix3x4fv__IIZ_3FI },
+{"glUniformMatrix3x4fv", "(IIZLjava/nio/FloatBuffer;)V", (void *) android_glUniformMatrix3x4fv__IIZLjava_nio_FloatBuffer_2 },
+{"glUniformMatrix4x3fv", "(IIZ[FI)V", (void *) android_glUniformMatrix4x3fv__IIZ_3FI },
+{"glUniformMatrix4x3fv", "(IIZLjava/nio/FloatBuffer;)V", (void *) android_glUniformMatrix4x3fv__IIZLjava_nio_FloatBuffer_2 },
+{"glBlitFramebuffer", "(IIIIIIIIII)V", (void *) android_glBlitFramebuffer__IIIIIIIIII },
+{"glRenderbufferStorageMultisample", "(IIIII)V", (void *) android_glRenderbufferStorageMultisample__IIIII },
+{"glFramebufferTextureLayer", "(IIIII)V", (void *) android_glFramebufferTextureLayer__IIIII },
+{"glMapBufferRange", "(IIII)Ljava/nio/Buffer;", (void *) android_glMapBufferRange__IIII },
+{"glFlushMappedBufferRange", "(III)V", (void *) android_glFlushMappedBufferRange__III },
+{"glBindVertexArray", "(I)V", (void *) android_glBindVertexArray__I },
+{"glDeleteVertexArrays", "(I[II)V", (void *) android_glDeleteVertexArrays__I_3II },
+{"glDeleteVertexArrays", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteVertexArrays__ILjava_nio_IntBuffer_2 },
+{"glGenVertexArrays", "(I[II)V", (void *) android_glGenVertexArrays__I_3II },
+{"glGenVertexArrays", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenVertexArrays__ILjava_nio_IntBuffer_2 },
+{"glIsVertexArray", "(I)Z", (void *) android_glIsVertexArray__I },
+{"glGetIntegeri_v", "(II[II)V", (void *) android_glGetIntegeri_v__II_3II },
+{"glGetIntegeri_v", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetIntegeri_v__IILjava_nio_IntBuffer_2 },
+{"glBeginTransformFeedback", "(I)V", (void *) android_glBeginTransformFeedback__I },
+{"glEndTransformFeedback", "()V", (void *) android_glEndTransformFeedback__ },
+{"glBindBufferRange", "(IIIII)V", (void *) android_glBindBufferRange__IIIII },
+{"glBindBufferBase", "(III)V", (void *) android_glBindBufferBase__III },
+{"glTransformFeedbackVaryings", "(I[Ljava/lang/String;I)V", (void *) android_glTransformFeedbackVaryings },
+{"glGetTransformFeedbackVarying", "(III[II[II[II[BI)V", (void *) android_glGetTransformFeedbackVarying__III_3II_3II_3II_3BI },
+{"glGetTransformFeedbackVarying", "(IIILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;B)V", (void *) android_glGetTransformFeedbackVarying__IIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_IntBuffer_2B },
+{"glGetTransformFeedbackVarying", "(II[II[II)Ljava/lang/String;", (void *) android_glGetTransformFeedbackVarying1 },
+{"glGetTransformFeedbackVarying", "(IILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)Ljava/lang/String;", (void *) android_glGetTransformFeedbackVarying2 },
+{"glVertexAttribIPointerBounds", "(IIIILjava/nio/Buffer;I)V", (void *) android_glVertexAttribIPointerBounds__IIIILjava_nio_Buffer_2I },
+{"glVertexAttribIPointer", "(IIIII)V", (void *) android_glVertexAttribIPointer__IIIII },
+{"glGetVertexAttribIiv", "(II[II)V", (void *) android_glGetVertexAttribIiv__II_3II },
+{"glGetVertexAttribIiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetVertexAttribIiv__IILjava_nio_IntBuffer_2 },
+{"glGetVertexAttribIuiv", "(II[II)V", (void *) android_glGetVertexAttribIuiv__II_3II },
+{"glGetVertexAttribIuiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetVertexAttribIuiv__IILjava_nio_IntBuffer_2 },
+{"glVertexAttribI4i", "(IIIII)V", (void *) android_glVertexAttribI4i__IIIII },
+{"glVertexAttribI4ui", "(IIIII)V", (void *) android_glVertexAttribI4ui__IIIII },
+{"glVertexAttribI4iv", "(I[II)V", (void *) android_glVertexAttribI4iv__I_3II },
+{"glVertexAttribI4iv", "(ILjava/nio/IntBuffer;)V", (void *) android_glVertexAttribI4iv__ILjava_nio_IntBuffer_2 },
+{"glVertexAttribI4uiv", "(I[II)V", (void *) android_glVertexAttribI4uiv__I_3II },
+{"glVertexAttribI4uiv", "(ILjava/nio/IntBuffer;)V", (void *) android_glVertexAttribI4uiv__ILjava_nio_IntBuffer_2 },
+{"glGetUniformuiv", "(II[II)V", (void *) android_glGetUniformuiv__II_3II },
+{"glGetUniformuiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetUniformuiv__IILjava_nio_IntBuffer_2 },
+{"glGetFragDataLocation", "(ILjava/lang/String;)I", (void *) android_glGetFragDataLocation__ILjava_lang_String_2 },
+{"glUniform1ui", "(II)V", (void *) android_glUniform1ui__II },
+{"glUniform2ui", "(III)V", (void *) android_glUniform2ui__III },
+{"glUniform3ui", "(IIII)V", (void *) android_glUniform3ui__IIII },
+{"glUniform4ui", "(IIIII)V", (void *) android_glUniform4ui__IIIII },
+{"glUniform1uiv", "(II[II)V", (void *) android_glUniform1uiv__II_3II },
+{"glUniform1uiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glUniform1uiv__IILjava_nio_IntBuffer_2 },
+{"glUniform2uiv", "(II[II)V", (void *) android_glUniform2uiv__II_3II },
+{"glUniform2uiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glUniform2uiv__IILjava_nio_IntBuffer_2 },
+{"glUniform3uiv", "(II[II)V", (void *) android_glUniform3uiv__II_3II },
+{"glUniform3uiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glUniform3uiv__IILjava_nio_IntBuffer_2 },
+{"glUniform4uiv", "(II[II)V", (void *) android_glUniform4uiv__II_3II },
+{"glUniform4uiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glUniform4uiv__IILjava_nio_IntBuffer_2 },
+{"glClearBufferiv", "(II[II)V", (void *) android_glClearBufferiv__II_3II },
+{"glClearBufferiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glClearBufferiv__IILjava_nio_IntBuffer_2 },
+{"glClearBufferuiv", "(II[II)V", (void *) android_glClearBufferuiv__II_3II },
+{"glClearBufferuiv", "(IILjava/nio/IntBuffer;)V", (void *) android_glClearBufferuiv__IILjava_nio_IntBuffer_2 },
+{"glClearBufferfv", "(II[FI)V", (void *) android_glClearBufferfv__II_3FI },
+{"glClearBufferfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glClearBufferfv__IILjava_nio_FloatBuffer_2 },
+{"glClearBufferfi", "(IIFI)V", (void *) android_glClearBufferfi__IIFI },
+{"glGetStringi", "(II)Ljava/lang/String;", (void *) android_glGetStringi__II },
+{"glCopyBufferSubData", "(IIIII)V", (void *) android_glCopyBufferSubData__IIIII },
+{"glGetUniformIndices", "(I[Ljava/lang/String;[II)V", (void *) android_glGetUniformIndices_array },
+{"glGetUniformIndices", "(I[Ljava/lang/String;[Ljava/nio/IntBuffer)V", (void *) android_glGetUniformIndices_buffer },
+{"glGetActiveUniformsiv", "(II[III[II)V", (void *) android_glGetActiveUniformsiv__II_3III_3II },
+{"glGetActiveUniformsiv", "(IILjava/nio/IntBuffer;ILjava/nio/IntBuffer;)V", (void *) android_glGetActiveUniformsiv__IILjava_nio_IntBuffer_2ILjava_nio_IntBuffer_2 },
+{"glGetUniformBlockIndex", "(ILjava/lang/String;)I", (void *) android_glGetUniformBlockIndex__ILjava_lang_String_2 },
+{"glGetActiveUniformBlockiv", "(III[II)V", (void *) android_glGetActiveUniformBlockiv__III_3II },
+{"glGetActiveUniformBlockiv", "(IIILjava/nio/IntBuffer;)V", (void *) android_glGetActiveUniformBlockiv__IIILjava_nio_IntBuffer_2 },
+{"glGetActiveUniformBlockName", "(III[II[BI)V", (void *) android_glGetActiveUniformBlockName_III_3II_3BI },
+{"glGetActiveUniformBlockName", "(IILjava/nio/Buffer;Ljava/nio/Buffer;)V", (void *) android_glGetActiveUniformBlockName_IILjava_nio_Buffer_2Ljava_nio_Buffer_2 },
+{"glGetActiveUniformBlockName", "(II)Ljava/lang/String;", (void *) android_glGetActiveUniformBlockName_II },
+{"glUniformBlockBinding", "(III)V", (void *) android_glUniformBlockBinding__III },
+{"glDrawArraysInstanced", "(IIII)V", (void *) android_glDrawArraysInstanced__IIII },
+{"glDrawElementsInstanced", "(IIILjava/nio/Buffer;I)V", (void *) android_glDrawElementsInstanced__IIILjava_nio_Buffer_2I },
+{"glDrawElementsInstanced", "(IIIII)V", (void *) android_glDrawElementsInstanced__IIIII },
+{"glFenceSync", "(II)J", (void *) android_glFenceSync__II },
+{"glIsSync", "(J)Z", (void *) android_glIsSync__J },
+{"glDeleteSync", "(J)V", (void *) android_glDeleteSync__J },
+{"glClientWaitSync", "(JIJ)I", (void *) android_glClientWaitSync__JIJ },
+{"glWaitSync", "(JIJ)V", (void *) android_glWaitSync__JIJ },
+{"glGetInteger64v", "(I[JI)V", (void *) android_glGetInteger64v__I_3JI },
+{"glGetInteger64v", "(ILjava/nio/LongBuffer;)V", (void *) android_glGetInteger64v__ILjava_nio_LongBuffer_2 },
+{"glGetSynciv", "(JII[II[II)V", (void *) android_glGetSynciv__JII_3II_3II },
+{"glGetSynciv", "(JIILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)V", (void *) android_glGetSynciv__JIILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2 },
+{"glGetInteger64i_v", "(II[JI)V", (void *) android_glGetInteger64i_v__II_3JI },
+{"glGetInteger64i_v", "(IILjava/nio/LongBuffer;)V", (void *) android_glGetInteger64i_v__IILjava_nio_LongBuffer_2 },
+{"glGetBufferParameteri64v", "(II[JI)V", (void *) android_glGetBufferParameteri64v__II_3JI },
+{"glGetBufferParameteri64v", "(IILjava/nio/LongBuffer;)V", (void *) android_glGetBufferParameteri64v__IILjava_nio_LongBuffer_2 },
+{"glGenSamplers", "(I[II)V", (void *) android_glGenSamplers__I_3II },
+{"glGenSamplers", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenSamplers__ILjava_nio_IntBuffer_2 },
+{"glDeleteSamplers", "(I[II)V", (void *) android_glDeleteSamplers__I_3II },
+{"glDeleteSamplers", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteSamplers__ILjava_nio_IntBuffer_2 },
+{"glIsSampler", "(I)Z", (void *) android_glIsSampler__I },
+{"glBindSampler", "(II)V", (void *) android_glBindSampler__II },
+{"glSamplerParameteri", "(III)V", (void *) android_glSamplerParameteri__III },
+{"glSamplerParameteriv", "(II[II)V", (void *) android_glSamplerParameteriv__II_3II },
+{"glSamplerParameteriv", "(IILjava/nio/IntBuffer;)V", (void *) android_glSamplerParameteriv__IILjava_nio_IntBuffer_2 },
+{"glSamplerParameterf", "(IIF)V", (void *) android_glSamplerParameterf__IIF },
+{"glSamplerParameterfv", "(II[FI)V", (void *) android_glSamplerParameterfv__II_3FI },
+{"glSamplerParameterfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glSamplerParameterfv__IILjava_nio_FloatBuffer_2 },
+{"glGetSamplerParameteriv", "(II[II)V", (void *) android_glGetSamplerParameteriv__II_3II },
+{"glGetSamplerParameteriv", "(IILjava/nio/IntBuffer;)V", (void *) android_glGetSamplerParameteriv__IILjava_nio_IntBuffer_2 },
+{"glGetSamplerParameterfv", "(II[FI)V", (void *) android_glGetSamplerParameterfv__II_3FI },
+{"glGetSamplerParameterfv", "(IILjava/nio/FloatBuffer;)V", (void *) android_glGetSamplerParameterfv__IILjava_nio_FloatBuffer_2 },
+{"glVertexAttribDivisor", "(II)V", (void *) android_glVertexAttribDivisor__II },
+{"glBindTransformFeedback", "(II)V", (void *) android_glBindTransformFeedback__II },
+{"glDeleteTransformFeedbacks", "(I[II)V", (void *) android_glDeleteTransformFeedbacks__I_3II },
+{"glDeleteTransformFeedbacks", "(ILjava/nio/IntBuffer;)V", (void *) android_glDeleteTransformFeedbacks__ILjava_nio_IntBuffer_2 },
+{"glGenTransformFeedbacks", "(I[II)V", (void *) android_glGenTransformFeedbacks__I_3II },
+{"glGenTransformFeedbacks", "(ILjava/nio/IntBuffer;)V", (void *) android_glGenTransformFeedbacks__ILjava_nio_IntBuffer_2 },
+{"glIsTransformFeedback", "(I)Z", (void *) android_glIsTransformFeedback__I },
+{"glPauseTransformFeedback", "()V", (void *) android_glPauseTransformFeedback__ },
+{"glResumeTransformFeedback", "()V", (void *) android_glResumeTransformFeedback__ },
+{"glGetProgramBinary", "(II[II[IILjava/nio/Buffer;)V", (void *) android_glGetProgramBinary__II_3II_3IILjava_nio_Buffer_2 },
+{"glGetProgramBinary", "(IILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/Buffer;)V", (void *) android_glGetProgramBinary__IILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_nio_Buffer_2 },
+{"glProgramBinary", "(IILjava/nio/Buffer;I)V", (void *) android_glProgramBinary__IILjava_nio_Buffer_2I },
+{"glProgramParameteri", "(III)V", (void *) android_glProgramParameteri__III },
+{"glInvalidateFramebuffer", "(II[II)V", (void *) android_glInvalidateFramebuffer__II_3II },
+{"glInvalidateFramebuffer", "(IILjava/nio/IntBuffer;)V", (void *) android_glInvalidateFramebuffer__IILjava_nio_IntBuffer_2 },
+{"glInvalidateSubFramebuffer", "(II[IIIIII)V", (void *) android_glInvalidateSubFramebuffer__II_3IIIIII },
+{"glInvalidateSubFramebuffer", "(IILjava/nio/IntBuffer;IIII)V", (void *) android_glInvalidateSubFramebuffer__IILjava_nio_IntBuffer_2IIII },
+{"glTexStorage2D", "(IIIII)V", (void *) android_glTexStorage2D__IIIII },
+{"glTexStorage3D", "(IIIIII)V", (void *) android_glTexStorage3D__IIIIII },
+{"glGetInternalformativ", "(IIII[II)V", (void *) android_glGetInternalformativ__IIII_3II },
+{"glGetInternalformativ", "(IIIILjava/nio/IntBuffer;)V", (void *) android_glGetInternalformativ__IIIILjava_nio_IntBuffer_2 },
+};
+
+int register_android_opengl_jni_GLES30(JNIEnv *_env)
+{
+ int err;
+ err = android::AndroidRuntime::registerNativeMethods(_env, classPathName, methods, NELEM(methods));
+ return err;
+}
diff --git a/core/jni/android_os_Trace.cpp b/core/jni/android_os_Trace.cpp
index 1315291..01d02c5 100644
--- a/core/jni/android_os_Trace.cpp
+++ b/core/jni/android_os_Trace.cpp
@@ -86,6 +86,11 @@
atrace_set_debuggable(allowed);
}
+static void android_os_Trace_nativeSetTracingEnabled(JNIEnv* env,
+ jclass clazz, jboolean enabled) {
+ atrace_set_tracing_enabled(enabled);
+}
+
static JNINativeMethod gTraceMethods[] = {
/* name, signature, funcPtr */
{ "nativeGetEnabledTags",
@@ -109,6 +114,9 @@
{ "nativeSetAppTracingAllowed",
"(Z)V",
(void*)android_os_Trace_nativeSetAppTracingAllowed },
+ { "nativeSetTracingEnabled",
+ "(Z)V",
+ (void*)android_os_Trace_nativeSetTracingEnabled },
};
int register_android_os_Trace(JNIEnv* env) {
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 6b4fe79..514178d 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -918,7 +918,8 @@
<permission android:name="android.permission.RECORD_AUDIO"
android:permissionGroup="android.permission-group.MICROPHONE"
android:protectionLevel="dangerous"
- android:label="@string/permlab_recordAudio" />
+ android:label="@string/permlab_recordAudio"
+ android:description="@string/permdesc_recordAudio" />
<!-- =========================================== -->
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index cc50d8a..84e300a 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -345,6 +345,12 @@
A value of -1 means no change in orientation by default. -->
<integer name="config_carDockRotation">-1</integer>
+ <!-- The number of degrees to rotate the display when the device has HDMI connected
+ but is not in a dock. A value of -1 means no change in orientation by default.
+ Use -1 except on older devices whose Hardware Composer HAL does not
+ provide full support for multiple displays. -->
+ <integer name="config_undockedHdmiRotation">-1</integer>
+
<!-- Control the default UI mode type to use when there is no other type override
happening. One of the following values (See Configuration.java):
1 UI_MODE_TYPE_NORMAL
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 45ea182..5e75390 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -1584,6 +1584,7 @@
<java-symbol type="integer" name="config_screenBrightnessSettingDefault" />
<java-symbol type="integer" name="config_screenBrightnessDim" />
<java-symbol type="integer" name="config_shutdownBatteryTemperature" />
+ <java-symbol type="integer" name="config_undockedHdmiRotation" />
<java-symbol type="integer" name="config_virtualKeyQuietTimeMillis" />
<java-symbol type="layout" name="am_compat_mode_dialog" />
<java-symbol type="layout" name="launch_warning" />
diff --git a/libs/hwui/Layer.cpp b/libs/hwui/Layer.cpp
index a718294..4adad05 100644
--- a/libs/hwui/Layer.cpp
+++ b/libs/hwui/Layer.cpp
@@ -45,6 +45,7 @@
fbo = 0;
stencil = NULL;
debugDrawUpdate = false;
+ hasDrawnSinceUpdate = false;
deferredList = NULL;
Caches::getInstance().resourceCache.incrementRefcount(this);
}
diff --git a/libs/hwui/Layer.h b/libs/hwui/Layer.h
index 715dfa4..7186603 100644
--- a/libs/hwui/Layer.h
+++ b/libs/hwui/Layer.h
@@ -317,6 +317,7 @@
DisplayList* displayList;
Rect dirtyRect;
bool debugDrawUpdate;
+ bool hasDrawnSinceUpdate;
private:
/**
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index f81b4ff..6fc2771 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -550,6 +550,7 @@
}
layer->debugDrawUpdate = mCaches.debugLayersUpdates;
+ layer->hasDrawnSinceUpdate = false;
return true;
}
@@ -1088,11 +1089,28 @@
}
}
+/**
+ * Issues the command X, and if we're composing a save layer to the fbo or drawing a newly updated
+ * hardware layer with overdraw debug on, draws again to the stencil only, so that these draw
+ * operations are correctly counted twice for overdraw. NOTE: assumes composeLayerRegion only used
+ * by saveLayer's restore
+ */
+#define DRAW_DOUBLE_STENCIL_IF(COND, DRAW_COMMAND) { \
+ DRAW_COMMAND; \
+ if (CC_UNLIKELY(mCaches.debugOverdraw && getTargetFbo() == 0 && COND)) { \
+ glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); \
+ DRAW_COMMAND; \
+ glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); \
+ } \
+ }
+
+#define DRAW_DOUBLE_STENCIL(DRAW_COMMAND) DRAW_DOUBLE_STENCIL_IF(true, DRAW_COMMAND)
+
void OpenGLRenderer::composeLayerRegion(Layer* layer, const Rect& rect) {
if (layer->region.isRect()) {
layer->setRegionAsRect();
- composeLayerRect(layer, layer->regionRect);
+ DRAW_DOUBLE_STENCIL(composeLayerRect(layer, layer->regionRect));
layer->region.clear();
return;
@@ -1162,14 +1180,16 @@
numQuads++;
if (numQuads >= REGION_MESH_QUAD_COUNT) {
- glDrawElements(GL_TRIANGLES, numQuads * 6, GL_UNSIGNED_SHORT, NULL);
+ DRAW_DOUBLE_STENCIL(glDrawElements(GL_TRIANGLES, numQuads * 6,
+ GL_UNSIGNED_SHORT, NULL));
numQuads = 0;
mesh = mCaches.getRegionMesh();
}
}
if (numQuads > 0) {
- glDrawElements(GL_TRIANGLES, numQuads * 6, GL_UNSIGNED_SHORT, NULL);
+ DRAW_DOUBLE_STENCIL(glDrawElements(GL_TRIANGLES, numQuads * 6,
+ GL_UNSIGNED_SHORT, NULL));
}
finishDrawTexture();
@@ -3042,7 +3062,8 @@
mDrawModifiers.mColorFilter = layer->getColorFilter();
if (layer->region.isRect()) {
- composeLayerRect(layer, layer->regionRect);
+ DRAW_DOUBLE_STENCIL_IF(!layer->hasDrawnSinceUpdate,
+ composeLayerRect(layer, layer->regionRect));
} else if (layer->mesh) {
const float a = getLayerAlpha(layer);
setupDraw();
@@ -3068,8 +3089,9 @@
}
setupDrawMesh(&layer->mesh[0].position[0], &layer->mesh[0].texture[0]);
- glDrawElements(GL_TRIANGLES, layer->meshElementCount,
- GL_UNSIGNED_SHORT, layer->meshIndices);
+ DRAW_DOUBLE_STENCIL_IF(!layer->hasDrawnSinceUpdate,
+ glDrawElements(GL_TRIANGLES, layer->meshElementCount,
+ GL_UNSIGNED_SHORT, layer->meshIndices));
finishDrawTexture();
@@ -3086,6 +3108,7 @@
0x7f00ff00, SkXfermode::kSrcOver_Mode);
}
}
+ layer->hasDrawnSinceUpdate = true;
if (transform && !transform->isIdentity()) {
restore();
diff --git a/media/java/android/media/RemoteControlClient.java b/media/java/android/media/RemoteControlClient.java
index 4a5e82e..61a0134 100644
--- a/media/java/android/media/RemoteControlClient.java
+++ b/media/java/android/media/RemoteControlClient.java
@@ -999,7 +999,7 @@
if (mEventHandler != null) {
// signal new client
mEventHandler.removeMessages(MSG_NEW_INTERNAL_CLIENT_GEN);
- mEventHandler.dispatchMessage(
+ mEventHandler.sendMessage(
mEventHandler.obtainMessage(MSG_NEW_INTERNAL_CLIENT_GEN,
/*arg1*/ generationId, /*arg2, ignored*/ 0));
// send the information
@@ -1007,12 +1007,12 @@
mEventHandler.removeMessages(MSG_REQUEST_METADATA);
mEventHandler.removeMessages(MSG_REQUEST_TRANSPORTCONTROL);
mEventHandler.removeMessages(MSG_REQUEST_ARTWORK);
- mEventHandler.dispatchMessage(
+ mEventHandler.sendMessage(
mEventHandler.obtainMessage(MSG_REQUEST_PLAYBACK_STATE));
- mEventHandler.dispatchMessage(
+ mEventHandler.sendMessage(
mEventHandler.obtainMessage(MSG_REQUEST_TRANSPORTCONTROL));
- mEventHandler.dispatchMessage(mEventHandler.obtainMessage(MSG_REQUEST_METADATA));
- mEventHandler.dispatchMessage(mEventHandler.obtainMessage(MSG_REQUEST_ARTWORK));
+ mEventHandler.sendMessage(mEventHandler.obtainMessage(MSG_REQUEST_METADATA));
+ mEventHandler.sendMessage(mEventHandler.obtainMessage(MSG_REQUEST_ARTWORK));
}
}
@@ -1020,7 +1020,7 @@
// only post messages, we can't block here
if (mEventHandler != null) {
mEventHandler.removeMessages(MSG_NEW_CURRENT_CLIENT_GEN);
- mEventHandler.dispatchMessage(mEventHandler.obtainMessage(
+ mEventHandler.sendMessage(mEventHandler.obtainMessage(
MSG_NEW_CURRENT_CLIENT_GEN, clientGeneration, 0/*ignored*/));
}
}
@@ -1028,7 +1028,7 @@
public void plugRemoteControlDisplay(IRemoteControlDisplay rcd, int w, int h) {
// only post messages, we can't block here
if ((mEventHandler != null) && (rcd != null)) {
- mEventHandler.dispatchMessage(mEventHandler.obtainMessage(
+ mEventHandler.sendMessage(mEventHandler.obtainMessage(
MSG_PLUG_DISPLAY, w, h, rcd));
}
}
@@ -1036,7 +1036,7 @@
public void unplugRemoteControlDisplay(IRemoteControlDisplay rcd) {
// only post messages, we can't block here
if ((mEventHandler != null) && (rcd != null)) {
- mEventHandler.dispatchMessage(mEventHandler.obtainMessage(
+ mEventHandler.sendMessage(mEventHandler.obtainMessage(
MSG_UNPLUG_DISPLAY, rcd));
}
}
@@ -1044,7 +1044,7 @@
public void setBitmapSizeForDisplay(IRemoteControlDisplay rcd, int w, int h) {
// only post messages, we can't block here
if ((mEventHandler != null) && (rcd != null)) {
- mEventHandler.dispatchMessage(mEventHandler.obtainMessage(
+ mEventHandler.sendMessage(mEventHandler.obtainMessage(
MSG_UPDATE_DISPLAY_ARTWORK_SIZE, w, h, rcd));
}
}
@@ -1053,7 +1053,7 @@
// only post messages, we can't block here
if (mEventHandler != null) {
mEventHandler.removeMessages(MSG_SEEK_TO);
- mEventHandler.dispatchMessage(mEventHandler.obtainMessage(
+ mEventHandler.sendMessage(mEventHandler.obtainMessage(
MSG_SEEK_TO, generationId /* arg1 */, 0 /* arg2, ignored */,
new Long(timeMs)));
}
@@ -1145,6 +1145,7 @@
break;
case MSG_SEEK_TO:
onSeekTo(msg.arg1, ((Long)msg.obj).longValue());
+ break;
default:
Log.e(TAG, "Unknown event " + msg.what + " in RemoteControlClient handler");
}
diff --git a/opengl/java/android/opengl/GLES20.java b/opengl/java/android/opengl/GLES20.java
index dd9f8b8..8261474 100644
--- a/opengl/java/android/opengl/GLES20.java
+++ b/opengl/java/android/opengl/GLES20.java
@@ -296,6 +296,10 @@
public static final int GL_RGB5_A1 = 0x8057;
public static final int GL_RGB565 = 0x8D62;
public static final int GL_DEPTH_COMPONENT16 = 0x81A5;
+ // GL_STENCIL_INDEX does not appear in gl2.h or gl2ext.h, and there is no
+ // token with value 0x1901.
+ //
+ @Deprecated
public static final int GL_STENCIL_INDEX = 0x1901;
public static final int GL_STENCIL_INDEX8 = 0x8D48;
public static final int GL_RENDERBUFFER_WIDTH = 0x8D42;
@@ -327,7 +331,7 @@
native private static void _nativeClassInit();
static {
- _nativeClassInit();
+ _nativeClassInit();
}
// C function void glActiveTexture ( GLenum texture )
@@ -1025,7 +1029,7 @@
);
// C function void glGetProgramInfoLog( GLuint program, GLsizei maxLength, GLsizei * length,
- // GLchar * infoLog);
+ // GLchar * infoLog);
public static native String glGetProgramInfoLog(
int program
@@ -1065,7 +1069,7 @@
);
// C function void glGetShaderInfoLog( GLuint shader, GLsizei maxLength, GLsizei * length,
- // GLchar * infoLog);
+ // GLchar * infoLog);
public static native String glGetShaderInfoLog(
int shader
diff --git a/opengl/java/android/opengl/GLES30.java b/opengl/java/android/opengl/GLES30.java
new file mode 100644
index 0000000..9164849
--- /dev/null
+++ b/opengl/java/android/opengl/GLES30.java
@@ -0,0 +1,1794 @@
+/*
+**
+** Copyright 2013, 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;
+
+/** OpenGL ES 3.0
+ */
+public class GLES30 extends GLES20 {
+ public static final int GL_READ_BUFFER = 0x0C02;
+ public static final int GL_UNPACK_ROW_LENGTH = 0x0CF2;
+ public static final int GL_UNPACK_SKIP_ROWS = 0x0CF3;
+ public static final int GL_UNPACK_SKIP_PIXELS = 0x0CF4;
+ public static final int GL_PACK_ROW_LENGTH = 0x0D02;
+ public static final int GL_PACK_SKIP_ROWS = 0x0D03;
+ public static final int GL_PACK_SKIP_PIXELS = 0x0D04;
+ public static final int GL_COLOR = 0x1800;
+ public static final int GL_DEPTH = 0x1801;
+ public static final int GL_STENCIL = 0x1802;
+ public static final int GL_RED = 0x1903;
+ public static final int GL_RGB8 = 0x8051;
+ public static final int GL_RGBA8 = 0x8058;
+ public static final int GL_RGB10_A2 = 0x8059;
+ public static final int GL_TEXTURE_BINDING_3D = 0x806A;
+ public static final int GL_UNPACK_SKIP_IMAGES = 0x806D;
+ public static final int GL_UNPACK_IMAGE_HEIGHT = 0x806E;
+ public static final int GL_TEXTURE_3D = 0x806F;
+ public static final int GL_TEXTURE_WRAP_R = 0x8072;
+ public static final int GL_MAX_3D_TEXTURE_SIZE = 0x8073;
+ public static final int GL_UNSIGNED_INT_2_10_10_10_REV = 0x8368;
+ public static final int GL_MAX_ELEMENTS_VERTICES = 0x80E8;
+ public static final int GL_MAX_ELEMENTS_INDICES = 0x80E9;
+ public static final int GL_TEXTURE_MIN_LOD = 0x813A;
+ public static final int GL_TEXTURE_MAX_LOD = 0x813B;
+ public static final int GL_TEXTURE_BASE_LEVEL = 0x813C;
+ public static final int GL_TEXTURE_MAX_LEVEL = 0x813D;
+ public static final int GL_MIN = 0x8007;
+ public static final int GL_MAX = 0x8008;
+ public static final int GL_DEPTH_COMPONENT24 = 0x81A6;
+ public static final int GL_MAX_TEXTURE_LOD_BIAS = 0x84FD;
+ public static final int GL_TEXTURE_COMPARE_MODE = 0x884C;
+ public static final int GL_TEXTURE_COMPARE_FUNC = 0x884D;
+ public static final int GL_CURRENT_QUERY = 0x8865;
+ public static final int GL_QUERY_RESULT = 0x8866;
+ public static final int GL_QUERY_RESULT_AVAILABLE = 0x8867;
+ public static final int GL_BUFFER_MAPPED = 0x88BC;
+ public static final int GL_BUFFER_MAP_POINTER = 0x88BD;
+ public static final int GL_STREAM_READ = 0x88E1;
+ public static final int GL_STREAM_COPY = 0x88E2;
+ public static final int GL_STATIC_READ = 0x88E5;
+ public static final int GL_STATIC_COPY = 0x88E6;
+ public static final int GL_DYNAMIC_READ = 0x88E9;
+ public static final int GL_DYNAMIC_COPY = 0x88EA;
+ public static final int GL_MAX_DRAW_BUFFERS = 0x8824;
+ public static final int GL_DRAW_BUFFER0 = 0x8825;
+ public static final int GL_DRAW_BUFFER1 = 0x8826;
+ public static final int GL_DRAW_BUFFER2 = 0x8827;
+ public static final int GL_DRAW_BUFFER3 = 0x8828;
+ public static final int GL_DRAW_BUFFER4 = 0x8829;
+ public static final int GL_DRAW_BUFFER5 = 0x882A;
+ public static final int GL_DRAW_BUFFER6 = 0x882B;
+ public static final int GL_DRAW_BUFFER7 = 0x882C;
+ public static final int GL_DRAW_BUFFER8 = 0x882D;
+ public static final int GL_DRAW_BUFFER9 = 0x882E;
+ public static final int GL_DRAW_BUFFER10 = 0x882F;
+ public static final int GL_DRAW_BUFFER11 = 0x8830;
+ public static final int GL_DRAW_BUFFER12 = 0x8831;
+ public static final int GL_DRAW_BUFFER13 = 0x8832;
+ public static final int GL_DRAW_BUFFER14 = 0x8833;
+ public static final int GL_DRAW_BUFFER15 = 0x8834;
+ public static final int GL_MAX_FRAGMENT_UNIFORM_COMPONENTS = 0x8B49;
+ public static final int GL_MAX_VERTEX_UNIFORM_COMPONENTS = 0x8B4A;
+ public static final int GL_SAMPLER_3D = 0x8B5F;
+ public static final int GL_SAMPLER_2D_SHADOW = 0x8B62;
+ public static final int GL_FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8B8B;
+ public static final int GL_PIXEL_PACK_BUFFER = 0x88EB;
+ public static final int GL_PIXEL_UNPACK_BUFFER = 0x88EC;
+ public static final int GL_PIXEL_PACK_BUFFER_BINDING = 0x88ED;
+ public static final int GL_PIXEL_UNPACK_BUFFER_BINDING = 0x88EF;
+ public static final int GL_FLOAT_MAT2x3 = 0x8B65;
+ public static final int GL_FLOAT_MAT2x4 = 0x8B66;
+ public static final int GL_FLOAT_MAT3x2 = 0x8B67;
+ public static final int GL_FLOAT_MAT3x4 = 0x8B68;
+ public static final int GL_FLOAT_MAT4x2 = 0x8B69;
+ public static final int GL_FLOAT_MAT4x3 = 0x8B6A;
+ public static final int GL_SRGB = 0x8C40;
+ public static final int GL_SRGB8 = 0x8C41;
+ public static final int GL_SRGB8_ALPHA8 = 0x8C43;
+ public static final int GL_COMPARE_REF_TO_TEXTURE = 0x884E;
+ public static final int GL_MAJOR_VERSION = 0x821B;
+ public static final int GL_MINOR_VERSION = 0x821C;
+ public static final int GL_NUM_EXTENSIONS = 0x821D;
+ public static final int GL_RGBA32F = 0x8814;
+ public static final int GL_RGB32F = 0x8815;
+ public static final int GL_RGBA16F = 0x881A;
+ public static final int GL_RGB16F = 0x881B;
+ public static final int GL_VERTEX_ATTRIB_ARRAY_INTEGER = 0x88FD;
+ public static final int GL_MAX_ARRAY_TEXTURE_LAYERS = 0x88FF;
+ public static final int GL_MIN_PROGRAM_TEXEL_OFFSET = 0x8904;
+ public static final int GL_MAX_PROGRAM_TEXEL_OFFSET = 0x8905;
+ public static final int GL_MAX_VARYING_COMPONENTS = 0x8B4B;
+ public static final int GL_TEXTURE_2D_ARRAY = 0x8C1A;
+ public static final int GL_TEXTURE_BINDING_2D_ARRAY = 0x8C1D;
+ public static final int GL_R11F_G11F_B10F = 0x8C3A;
+ public static final int GL_UNSIGNED_INT_10F_11F_11F_REV = 0x8C3B;
+ public static final int GL_RGB9_E5 = 0x8C3D;
+ public static final int GL_UNSIGNED_INT_5_9_9_9_REV = 0x8C3E;
+ public static final int GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH = 0x8C76;
+ public static final int GL_TRANSFORM_FEEDBACK_BUFFER_MODE = 0x8C7F;
+ public static final int GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 0x8C80;
+ public static final int GL_TRANSFORM_FEEDBACK_VARYINGS = 0x8C83;
+ public static final int GL_TRANSFORM_FEEDBACK_BUFFER_START = 0x8C84;
+ public static final int GL_TRANSFORM_FEEDBACK_BUFFER_SIZE = 0x8C85;
+ public static final int GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8C88;
+ public static final int GL_RASTERIZER_DISCARD = 0x8C89;
+ public static final int GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 0x8C8A;
+ public static final int GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 0x8C8B;
+ public static final int GL_INTERLEAVED_ATTRIBS = 0x8C8C;
+ public static final int GL_SEPARATE_ATTRIBS = 0x8C8D;
+ public static final int GL_TRANSFORM_FEEDBACK_BUFFER = 0x8C8E;
+ public static final int GL_TRANSFORM_FEEDBACK_BUFFER_BINDING = 0x8C8F;
+ public static final int GL_RGBA32UI = 0x8D70;
+ public static final int GL_RGB32UI = 0x8D71;
+ public static final int GL_RGBA16UI = 0x8D76;
+ public static final int GL_RGB16UI = 0x8D77;
+ public static final int GL_RGBA8UI = 0x8D7C;
+ public static final int GL_RGB8UI = 0x8D7D;
+ public static final int GL_RGBA32I = 0x8D82;
+ public static final int GL_RGB32I = 0x8D83;
+ public static final int GL_RGBA16I = 0x8D88;
+ public static final int GL_RGB16I = 0x8D89;
+ public static final int GL_RGBA8I = 0x8D8E;
+ public static final int GL_RGB8I = 0x8D8F;
+ public static final int GL_RED_INTEGER = 0x8D94;
+ public static final int GL_RGB_INTEGER = 0x8D98;
+ public static final int GL_RGBA_INTEGER = 0x8D99;
+ public static final int GL_SAMPLER_2D_ARRAY = 0x8DC1;
+ public static final int GL_SAMPLER_2D_ARRAY_SHADOW = 0x8DC4;
+ public static final int GL_SAMPLER_CUBE_SHADOW = 0x8DC5;
+ public static final int GL_UNSIGNED_INT_VEC2 = 0x8DC6;
+ public static final int GL_UNSIGNED_INT_VEC3 = 0x8DC7;
+ public static final int GL_UNSIGNED_INT_VEC4 = 0x8DC8;
+ public static final int GL_INT_SAMPLER_2D = 0x8DCA;
+ public static final int GL_INT_SAMPLER_3D = 0x8DCB;
+ public static final int GL_INT_SAMPLER_CUBE = 0x8DCC;
+ public static final int GL_INT_SAMPLER_2D_ARRAY = 0x8DCF;
+ public static final int GL_UNSIGNED_INT_SAMPLER_2D = 0x8DD2;
+ public static final int GL_UNSIGNED_INT_SAMPLER_3D = 0x8DD3;
+ public static final int GL_UNSIGNED_INT_SAMPLER_CUBE = 0x8DD4;
+ public static final int GL_UNSIGNED_INT_SAMPLER_2D_ARRAY = 0x8DD7;
+ public static final int GL_BUFFER_ACCESS_FLAGS = 0x911F;
+ public static final int GL_BUFFER_MAP_LENGTH = 0x9120;
+ public static final int GL_BUFFER_MAP_OFFSET = 0x9121;
+ public static final int GL_DEPTH_COMPONENT32F = 0x8CAC;
+ public static final int GL_DEPTH32F_STENCIL8 = 0x8CAD;
+ public static final int GL_FLOAT_32_UNSIGNED_INT_24_8_REV = 0x8DAD;
+ public static final int GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 0x8210;
+ public static final int GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = 0x8211;
+ public static final int GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE = 0x8212;
+ public static final int GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = 0x8213;
+ public static final int GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = 0x8214;
+ public static final int GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = 0x8215;
+ public static final int GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = 0x8216;
+ public static final int GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = 0x8217;
+ public static final int GL_FRAMEBUFFER_DEFAULT = 0x8218;
+ public static final int GL_FRAMEBUFFER_UNDEFINED = 0x8219;
+ public static final int GL_DEPTH_STENCIL_ATTACHMENT = 0x821A;
+ public static final int GL_DEPTH_STENCIL = 0x84F9;
+ public static final int GL_UNSIGNED_INT_24_8 = 0x84FA;
+ public static final int GL_DEPTH24_STENCIL8 = 0x88F0;
+ public static final int GL_UNSIGNED_NORMALIZED = 0x8C17;
+ public static final int GL_DRAW_FRAMEBUFFER_BINDING = GL_FRAMEBUFFER_BINDING;
+ public static final int GL_READ_FRAMEBUFFER = 0x8CA8;
+ public static final int GL_DRAW_FRAMEBUFFER = 0x8CA9;
+ public static final int GL_READ_FRAMEBUFFER_BINDING = 0x8CAA;
+ public static final int GL_RENDERBUFFER_SAMPLES = 0x8CAB;
+ public static final int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = 0x8CD4;
+ public static final int GL_MAX_COLOR_ATTACHMENTS = 0x8CDF;
+ public static final int GL_COLOR_ATTACHMENT1 = 0x8CE1;
+ public static final int GL_COLOR_ATTACHMENT2 = 0x8CE2;
+ public static final int GL_COLOR_ATTACHMENT3 = 0x8CE3;
+ public static final int GL_COLOR_ATTACHMENT4 = 0x8CE4;
+ public static final int GL_COLOR_ATTACHMENT5 = 0x8CE5;
+ public static final int GL_COLOR_ATTACHMENT6 = 0x8CE6;
+ public static final int GL_COLOR_ATTACHMENT7 = 0x8CE7;
+ public static final int GL_COLOR_ATTACHMENT8 = 0x8CE8;
+ public static final int GL_COLOR_ATTACHMENT9 = 0x8CE9;
+ public static final int GL_COLOR_ATTACHMENT10 = 0x8CEA;
+ public static final int GL_COLOR_ATTACHMENT11 = 0x8CEB;
+ public static final int GL_COLOR_ATTACHMENT12 = 0x8CEC;
+ public static final int GL_COLOR_ATTACHMENT13 = 0x8CED;
+ public static final int GL_COLOR_ATTACHMENT14 = 0x8CEE;
+ public static final int GL_COLOR_ATTACHMENT15 = 0x8CEF;
+ public static final int GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 0x8D56;
+ public static final int GL_MAX_SAMPLES = 0x8D57;
+ public static final int GL_HALF_FLOAT = 0x140B;
+ public static final int GL_MAP_READ_BIT = 0x0001;
+ public static final int GL_MAP_WRITE_BIT = 0x0002;
+ public static final int GL_MAP_INVALIDATE_RANGE_BIT = 0x0004;
+ public static final int GL_MAP_INVALIDATE_BUFFER_BIT = 0x0008;
+ public static final int GL_MAP_FLUSH_EXPLICIT_BIT = 0x0010;
+ public static final int GL_MAP_UNSYNCHRONIZED_BIT = 0x0020;
+ public static final int GL_RG = 0x8227;
+ public static final int GL_RG_INTEGER = 0x8228;
+ public static final int GL_R8 = 0x8229;
+ public static final int GL_RG8 = 0x822B;
+ public static final int GL_R16F = 0x822D;
+ public static final int GL_R32F = 0x822E;
+ public static final int GL_RG16F = 0x822F;
+ public static final int GL_RG32F = 0x8230;
+ public static final int GL_R8I = 0x8231;
+ public static final int GL_R8UI = 0x8232;
+ public static final int GL_R16I = 0x8233;
+ public static final int GL_R16UI = 0x8234;
+ public static final int GL_R32I = 0x8235;
+ public static final int GL_R32UI = 0x8236;
+ public static final int GL_RG8I = 0x8237;
+ public static final int GL_RG8UI = 0x8238;
+ public static final int GL_RG16I = 0x8239;
+ public static final int GL_RG16UI = 0x823A;
+ public static final int GL_RG32I = 0x823B;
+ public static final int GL_RG32UI = 0x823C;
+ public static final int GL_VERTEX_ARRAY_BINDING = 0x85B5;
+ public static final int GL_R8_SNORM = 0x8F94;
+ public static final int GL_RG8_SNORM = 0x8F95;
+ public static final int GL_RGB8_SNORM = 0x8F96;
+ public static final int GL_RGBA8_SNORM = 0x8F97;
+ public static final int GL_SIGNED_NORMALIZED = 0x8F9C;
+ public static final int GL_PRIMITIVE_RESTART_FIXED_INDEX = 0x8D69;
+ public static final int GL_COPY_READ_BUFFER = 0x8F36;
+ public static final int GL_COPY_WRITE_BUFFER = 0x8F37;
+ public static final int GL_COPY_READ_BUFFER_BINDING = GL_COPY_READ_BUFFER;
+ public static final int GL_COPY_WRITE_BUFFER_BINDING = GL_COPY_WRITE_BUFFER;
+ public static final int GL_UNIFORM_BUFFER = 0x8A11;
+ public static final int GL_UNIFORM_BUFFER_BINDING = 0x8A28;
+ public static final int GL_UNIFORM_BUFFER_START = 0x8A29;
+ public static final int GL_UNIFORM_BUFFER_SIZE = 0x8A2A;
+ public static final int GL_MAX_VERTEX_UNIFORM_BLOCKS = 0x8A2B;
+ public static final int GL_MAX_FRAGMENT_UNIFORM_BLOCKS = 0x8A2D;
+ public static final int GL_MAX_COMBINED_UNIFORM_BLOCKS = 0x8A2E;
+ public static final int GL_MAX_UNIFORM_BUFFER_BINDINGS = 0x8A2F;
+ public static final int GL_MAX_UNIFORM_BLOCK_SIZE = 0x8A30;
+ public static final int GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = 0x8A31;
+ public static final int GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = 0x8A33;
+ public static final int GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT = 0x8A34;
+ public static final int GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH = 0x8A35;
+ public static final int GL_ACTIVE_UNIFORM_BLOCKS = 0x8A36;
+ public static final int GL_UNIFORM_TYPE = 0x8A37;
+ public static final int GL_UNIFORM_SIZE = 0x8A38;
+ public static final int GL_UNIFORM_NAME_LENGTH = 0x8A39;
+ public static final int GL_UNIFORM_BLOCK_INDEX = 0x8A3A;
+ public static final int GL_UNIFORM_OFFSET = 0x8A3B;
+ public static final int GL_UNIFORM_ARRAY_STRIDE = 0x8A3C;
+ public static final int GL_UNIFORM_MATRIX_STRIDE = 0x8A3D;
+ public static final int GL_UNIFORM_IS_ROW_MAJOR = 0x8A3E;
+ public static final int GL_UNIFORM_BLOCK_BINDING = 0x8A3F;
+ public static final int GL_UNIFORM_BLOCK_DATA_SIZE = 0x8A40;
+ public static final int GL_UNIFORM_BLOCK_NAME_LENGTH = 0x8A41;
+ public static final int GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS = 0x8A42;
+ public static final int GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = 0x8A43;
+ public static final int GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = 0x8A44;
+ public static final int GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = 0x8A46;
+ // GL_INVALID_INDEX is defined as 0xFFFFFFFFu in C.
+ public static final int GL_INVALID_INDEX = -1;
+ public static final int GL_MAX_VERTEX_OUTPUT_COMPONENTS = 0x9122;
+ public static final int GL_MAX_FRAGMENT_INPUT_COMPONENTS = 0x9125;
+ public static final int GL_MAX_SERVER_WAIT_TIMEOUT = 0x9111;
+ public static final int GL_OBJECT_TYPE = 0x9112;
+ public static final int GL_SYNC_CONDITION = 0x9113;
+ public static final int GL_SYNC_STATUS = 0x9114;
+ public static final int GL_SYNC_FLAGS = 0x9115;
+ public static final int GL_SYNC_FENCE = 0x9116;
+ public static final int GL_SYNC_GPU_COMMANDS_COMPLETE = 0x9117;
+ public static final int GL_UNSIGNALED = 0x9118;
+ public static final int GL_SIGNALED = 0x9119;
+ public static final int GL_ALREADY_SIGNALED = 0x911A;
+ public static final int GL_TIMEOUT_EXPIRED = 0x911B;
+ public static final int GL_CONDITION_SATISFIED = 0x911C;
+ public static final int GL_WAIT_FAILED = 0x911D;
+ public static final int GL_SYNC_FLUSH_COMMANDS_BIT = 0x00000001;
+ // GL_TIMEOUT_IGNORED is defined as 0xFFFFFFFFFFFFFFFFull in C.
+ public static final long GL_TIMEOUT_IGNORED = -1;
+ public static final int GL_VERTEX_ATTRIB_ARRAY_DIVISOR = 0x88FE;
+ public static final int GL_ANY_SAMPLES_PASSED = 0x8C2F;
+ public static final int GL_ANY_SAMPLES_PASSED_CONSERVATIVE = 0x8D6A;
+ public static final int GL_SAMPLER_BINDING = 0x8919;
+ public static final int GL_RGB10_A2UI = 0x906F;
+ public static final int GL_TEXTURE_SWIZZLE_R = 0x8E42;
+ public static final int GL_TEXTURE_SWIZZLE_G = 0x8E43;
+ public static final int GL_TEXTURE_SWIZZLE_B = 0x8E44;
+ public static final int GL_TEXTURE_SWIZZLE_A = 0x8E45;
+ public static final int GL_GREEN = 0x1904;
+ public static final int GL_BLUE = 0x1905;
+ public static final int GL_INT_2_10_10_10_REV = 0x8D9F;
+ public static final int GL_TRANSFORM_FEEDBACK = 0x8E22;
+ public static final int GL_TRANSFORM_FEEDBACK_PAUSED = 0x8E23;
+ public static final int GL_TRANSFORM_FEEDBACK_ACTIVE = 0x8E24;
+ public static final int GL_TRANSFORM_FEEDBACK_BINDING = 0x8E25;
+ public static final int GL_PROGRAM_BINARY_RETRIEVABLE_HINT = 0x8257;
+ public static final int GL_PROGRAM_BINARY_LENGTH = 0x8741;
+ public static final int GL_NUM_PROGRAM_BINARY_FORMATS = 0x87FE;
+ public static final int GL_PROGRAM_BINARY_FORMATS = 0x87FF;
+ public static final int GL_COMPRESSED_R11_EAC = 0x9270;
+ public static final int GL_COMPRESSED_SIGNED_R11_EAC = 0x9271;
+ public static final int GL_COMPRESSED_RG11_EAC = 0x9272;
+ public static final int GL_COMPRESSED_SIGNED_RG11_EAC = 0x9273;
+ public static final int GL_COMPRESSED_RGB8_ETC2 = 0x9274;
+ public static final int GL_COMPRESSED_SRGB8_ETC2 = 0x9275;
+ public static final int GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9276;
+ public static final int GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9277;
+ public static final int GL_COMPRESSED_RGBA8_ETC2_EAC = 0x9278;
+ public static final int GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC = 0x9279;
+ public static final int GL_TEXTURE_IMMUTABLE_FORMAT = 0x912F;
+ public static final int GL_MAX_ELEMENT_INDEX = 0x8D6B;
+ public static final int GL_NUM_SAMPLE_COUNTS = 0x9380;
+ public static final int GL_TEXTURE_IMMUTABLE_LEVELS = 0x82DF;
+
+ native private static void _nativeClassInit();
+ static {
+ _nativeClassInit();
+ }
+
+ // C function void glReadBuffer ( GLenum mode )
+
+ public static native void glReadBuffer(
+ int mode
+ );
+
+ // C function void glDrawRangeElements ( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices )
+
+ public static native void glDrawRangeElements(
+ int mode,
+ int start,
+ int end,
+ int count,
+ int type,
+ java.nio.Buffer indices
+ );
+
+ // C function void glDrawRangeElements ( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, GLsizei offset )
+
+ public static native void glDrawRangeElements(
+ int mode,
+ int start,
+ int end,
+ int count,
+ int type,
+ int offset
+ );
+
+ // C function void glTexImage3D ( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels )
+
+ public static native void glTexImage3D(
+ int target,
+ int level,
+ int internalformat,
+ int width,
+ int height,
+ int depth,
+ int border,
+ int format,
+ int type,
+ java.nio.Buffer pixels
+ );
+
+ // C function void glTexImage3D ( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, GLsizei offset )
+
+ public static native void glTexImage3D(
+ int target,
+ int level,
+ int internalformat,
+ int width,
+ int height,
+ int depth,
+ int border,
+ int format,
+ int type,
+ int offset
+ );
+
+ // C function void glTexSubImage3D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels )
+
+ public static native void glTexSubImage3D(
+ int target,
+ int level,
+ int xoffset,
+ int yoffset,
+ int zoffset,
+ int width,
+ int height,
+ int depth,
+ int format,
+ int type,
+ java.nio.Buffer pixels
+ );
+
+ // C function void glTexSubImage3D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei offset )
+
+ public static native void glTexSubImage3D(
+ int target,
+ int level,
+ int xoffset,
+ int yoffset,
+ int zoffset,
+ int width,
+ int height,
+ int depth,
+ int format,
+ int type,
+ int offset
+ );
+
+ // C function void glCopyTexSubImage3D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height )
+
+ public static native void glCopyTexSubImage3D(
+ int target,
+ int level,
+ int xoffset,
+ int yoffset,
+ int zoffset,
+ int x,
+ int y,
+ int width,
+ int height
+ );
+
+ // C function void glCompressedTexImage3D ( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data )
+
+ public static native void glCompressedTexImage3D(
+ int target,
+ int level,
+ int internalformat,
+ int width,
+ int height,
+ int depth,
+ int border,
+ int imageSize,
+ java.nio.Buffer data
+ );
+
+ // C function void glCompressedTexImage3D ( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, GLsizei offset )
+
+ public static native void glCompressedTexImage3D(
+ int target,
+ int level,
+ int internalformat,
+ int width,
+ int height,
+ int depth,
+ int border,
+ int imageSize,
+ int offset
+ );
+
+ // C function void glCompressedTexSubImage3D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data )
+
+ public static native void glCompressedTexSubImage3D(
+ int target,
+ int level,
+ int xoffset,
+ int yoffset,
+ int zoffset,
+ int width,
+ int height,
+ int depth,
+ int format,
+ int imageSize,
+ java.nio.Buffer data
+ );
+
+ // C function void glCompressedTexSubImage3D ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, GLsizei offset )
+
+ public static native void glCompressedTexSubImage3D(
+ int target,
+ int level,
+ int xoffset,
+ int yoffset,
+ int zoffset,
+ int width,
+ int height,
+ int depth,
+ int format,
+ int imageSize,
+ int offset
+ );
+
+ // C function void glGenQueries ( GLsizei n, GLuint *ids )
+
+ public static native void glGenQueries(
+ int n,
+ int[] ids,
+ int offset
+ );
+
+ // C function void glGenQueries ( GLsizei n, GLuint *ids )
+
+ public static native void glGenQueries(
+ int n,
+ java.nio.IntBuffer ids
+ );
+
+ // C function void glDeleteQueries ( GLsizei n, const GLuint *ids )
+
+ public static native void glDeleteQueries(
+ int n,
+ int[] ids,
+ int offset
+ );
+
+ // C function void glDeleteQueries ( GLsizei n, const GLuint *ids )
+
+ public static native void glDeleteQueries(
+ int n,
+ java.nio.IntBuffer ids
+ );
+
+ // C function GLboolean glIsQuery ( GLuint id )
+
+ public static native boolean glIsQuery(
+ int id
+ );
+
+ // C function void glBeginQuery ( GLenum target, GLuint id )
+
+ public static native void glBeginQuery(
+ int target,
+ int id
+ );
+
+ // C function void glEndQuery ( GLenum target )
+
+ public static native void glEndQuery(
+ int target
+ );
+
+ // C function void glGetQueryiv ( GLenum target, GLenum pname, GLint *params )
+
+ public static native void glGetQueryiv(
+ int target,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetQueryiv ( GLenum target, GLenum pname, GLint *params )
+
+ public static native void glGetQueryiv(
+ int target,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glGetQueryObjectuiv ( GLuint id, GLenum pname, GLuint *params )
+
+ public static native void glGetQueryObjectuiv(
+ int id,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetQueryObjectuiv ( GLuint id, GLenum pname, GLuint *params )
+
+ public static native void glGetQueryObjectuiv(
+ int id,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function GLboolean glUnmapBuffer ( GLenum target )
+
+ public static native boolean glUnmapBuffer(
+ int target
+ );
+
+ // C function void glGetBufferPointerv ( GLenum target, GLenum pname, GLvoid** params )
+
+ public static native java.nio.Buffer glGetBufferPointerv(
+ int target,
+ int pname
+ );
+
+ // C function void glDrawBuffers ( GLsizei n, const GLenum *bufs )
+
+ public static native void glDrawBuffers(
+ int n,
+ int[] bufs,
+ int offset
+ );
+
+ // C function void glDrawBuffers ( GLsizei n, const GLenum *bufs )
+
+ public static native void glDrawBuffers(
+ int n,
+ java.nio.IntBuffer bufs
+ );
+
+ // C function void glUniformMatrix2x3fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value )
+
+ public static native void glUniformMatrix2x3fv(
+ int location,
+ int count,
+ boolean transpose,
+ float[] value,
+ int offset
+ );
+
+ // C function void glUniformMatrix2x3fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value )
+
+ public static native void glUniformMatrix2x3fv(
+ int location,
+ int count,
+ boolean transpose,
+ java.nio.FloatBuffer value
+ );
+
+ // C function void glUniformMatrix3x2fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value )
+
+ public static native void glUniformMatrix3x2fv(
+ int location,
+ int count,
+ boolean transpose,
+ float[] value,
+ int offset
+ );
+
+ // C function void glUniformMatrix3x2fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value )
+
+ public static native void glUniformMatrix3x2fv(
+ int location,
+ int count,
+ boolean transpose,
+ java.nio.FloatBuffer value
+ );
+
+ // C function void glUniformMatrix2x4fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value )
+
+ public static native void glUniformMatrix2x4fv(
+ int location,
+ int count,
+ boolean transpose,
+ float[] value,
+ int offset
+ );
+
+ // C function void glUniformMatrix2x4fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value )
+
+ public static native void glUniformMatrix2x4fv(
+ int location,
+ int count,
+ boolean transpose,
+ java.nio.FloatBuffer value
+ );
+
+ // C function void glUniformMatrix4x2fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value )
+
+ public static native void glUniformMatrix4x2fv(
+ int location,
+ int count,
+ boolean transpose,
+ float[] value,
+ int offset
+ );
+
+ // C function void glUniformMatrix4x2fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value )
+
+ public static native void glUniformMatrix4x2fv(
+ int location,
+ int count,
+ boolean transpose,
+ java.nio.FloatBuffer value
+ );
+
+ // C function void glUniformMatrix3x4fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value )
+
+ public static native void glUniformMatrix3x4fv(
+ int location,
+ int count,
+ boolean transpose,
+ float[] value,
+ int offset
+ );
+
+ // C function void glUniformMatrix3x4fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value )
+
+ public static native void glUniformMatrix3x4fv(
+ int location,
+ int count,
+ boolean transpose,
+ java.nio.FloatBuffer value
+ );
+
+ // C function void glUniformMatrix4x3fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value )
+
+ public static native void glUniformMatrix4x3fv(
+ int location,
+ int count,
+ boolean transpose,
+ float[] value,
+ int offset
+ );
+
+ // C function void glUniformMatrix4x3fv ( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value )
+
+ public static native void glUniformMatrix4x3fv(
+ int location,
+ int count,
+ boolean transpose,
+ java.nio.FloatBuffer value
+ );
+
+ // C function void glBlitFramebuffer ( GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter )
+
+ public static native void glBlitFramebuffer(
+ int srcX0,
+ int srcY0,
+ int srcX1,
+ int srcY1,
+ int dstX0,
+ int dstY0,
+ int dstX1,
+ int dstY1,
+ int mask,
+ int filter
+ );
+
+ // C function void glRenderbufferStorageMultisample ( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height )
+
+ public static native void glRenderbufferStorageMultisample(
+ int target,
+ int samples,
+ int internalformat,
+ int width,
+ int height
+ );
+
+ // C function void glFramebufferTextureLayer ( GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer )
+
+ public static native void glFramebufferTextureLayer(
+ int target,
+ int attachment,
+ int texture,
+ int level,
+ int layer
+ );
+
+ // C function GLvoid * glMapBufferRange ( GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access )
+
+ public static native java.nio.Buffer glMapBufferRange(
+ int target,
+ int offset,
+ int length,
+ int access
+ );
+
+ // C function void glFlushMappedBufferRange ( GLenum target, GLintptr offset, GLsizeiptr length )
+
+ public static native void glFlushMappedBufferRange(
+ int target,
+ int offset,
+ int length
+ );
+
+ // C function void glBindVertexArray ( GLuint array )
+
+ public static native void glBindVertexArray(
+ int array
+ );
+
+ // C function void glDeleteVertexArrays ( GLsizei n, const GLuint *arrays )
+
+ public static native void glDeleteVertexArrays(
+ int n,
+ int[] arrays,
+ int offset
+ );
+
+ // C function void glDeleteVertexArrays ( GLsizei n, const GLuint *arrays )
+
+ public static native void glDeleteVertexArrays(
+ int n,
+ java.nio.IntBuffer arrays
+ );
+
+ // C function void glGenVertexArrays ( GLsizei n, GLuint *arrays )
+
+ public static native void glGenVertexArrays(
+ int n,
+ int[] arrays,
+ int offset
+ );
+
+ // C function void glGenVertexArrays ( GLsizei n, GLuint *arrays )
+
+ public static native void glGenVertexArrays(
+ int n,
+ java.nio.IntBuffer arrays
+ );
+
+ // C function GLboolean glIsVertexArray ( GLuint array )
+
+ public static native boolean glIsVertexArray(
+ int array
+ );
+
+ // C function void glGetIntegeri_v ( GLenum target, GLuint index, GLint *data )
+
+ public static native void glGetIntegeri_v(
+ int target,
+ int index,
+ int[] data,
+ int offset
+ );
+
+ // C function void glGetIntegeri_v ( GLenum target, GLuint index, GLint *data )
+
+ public static native void glGetIntegeri_v(
+ int target,
+ int index,
+ java.nio.IntBuffer data
+ );
+
+ // C function void glBeginTransformFeedback ( GLenum primitiveMode )
+
+ public static native void glBeginTransformFeedback(
+ int primitiveMode
+ );
+
+ // C function void glEndTransformFeedback ( void )
+
+ public static native void glEndTransformFeedback(
+ );
+
+ // C function void glBindBufferRange ( GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size )
+
+ public static native void glBindBufferRange(
+ int target,
+ int index,
+ int buffer,
+ int offset,
+ int size
+ );
+
+ // C function void glBindBufferBase ( GLenum target, GLuint index, GLuint buffer )
+
+ public static native void glBindBufferBase(
+ int target,
+ int index,
+ int buffer
+ );
+
+ // C function void glTransformFeedbackVaryings ( GLuint program, GLsizei count, const GLchar *varyings, GLenum bufferMode )
+
+ public static native void glTransformFeedbackVaryings(
+ int program,
+ String[] varyings,
+ int bufferMode
+ );
+
+ // C function void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name )
+
+ public static native void glGetTransformFeedbackVarying(
+ int program,
+ int index,
+ int bufsize,
+ int[] length,
+ int lengthOffset,
+ int[] size,
+ int sizeOffset,
+ int[] type,
+ int typeOffset,
+ byte[] name,
+ int nameOffset
+ );
+
+ // C function void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name )
+
+ public static native void glGetTransformFeedbackVarying(
+ int program,
+ int index,
+ int bufsize,
+ java.nio.IntBuffer length,
+ java.nio.IntBuffer size,
+ java.nio.IntBuffer type,
+ byte name
+ );
+
+ // C function void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name )
+
+ public static native String glGetTransformFeedbackVarying(
+ int program,
+ int index,
+ int[] size,
+ int sizeOffset,
+ int[] type,
+ int typeOffset
+ );
+
+ // C function void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name )
+
+ public static native String glGetTransformFeedbackVarying(
+ int program,
+ int index,
+ java.nio.IntBuffer size,
+ java.nio.IntBuffer type
+ );
+
+ // C function void glVertexAttribIPointer ( GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer )
+
+ private static native void glVertexAttribIPointerBounds(
+ int index,
+ int size,
+ int type,
+ int stride,
+ java.nio.Buffer pointer,
+ int remaining
+ );
+
+ public static void glVertexAttribIPointer(
+ int index,
+ int size,
+ int type,
+ int stride,
+ java.nio.Buffer pointer
+ ) {
+ glVertexAttribIPointerBounds(
+ index,
+ size,
+ type,
+ stride,
+ pointer,
+ pointer.remaining()
+ );
+ }
+
+ // C function void glVertexAttribIPointer ( GLuint index, GLint size, GLenum type, GLsizei stride, GLsizei offset )
+
+ public static native void glVertexAttribIPointer(
+ int index,
+ int size,
+ int type,
+ int stride,
+ int offset
+ );
+
+ // C function void glGetVertexAttribIiv ( GLuint index, GLenum pname, GLint *params )
+
+ public static native void glGetVertexAttribIiv(
+ int index,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetVertexAttribIiv ( GLuint index, GLenum pname, GLint *params )
+
+ public static native void glGetVertexAttribIiv(
+ int index,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glGetVertexAttribIuiv ( GLuint index, GLenum pname, GLuint *params )
+
+ public static native void glGetVertexAttribIuiv(
+ int index,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetVertexAttribIuiv ( GLuint index, GLenum pname, GLuint *params )
+
+ public static native void glGetVertexAttribIuiv(
+ int index,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glVertexAttribI4i ( GLuint index, GLint x, GLint y, GLint z, GLint w )
+
+ public static native void glVertexAttribI4i(
+ int index,
+ int x,
+ int y,
+ int z,
+ int w
+ );
+
+ // C function void glVertexAttribI4ui ( GLuint index, GLuint x, GLuint y, GLuint z, GLuint w )
+
+ public static native void glVertexAttribI4ui(
+ int index,
+ int x,
+ int y,
+ int z,
+ int w
+ );
+
+ // C function void glVertexAttribI4iv ( GLuint index, const GLint *v )
+
+ public static native void glVertexAttribI4iv(
+ int index,
+ int[] v,
+ int offset
+ );
+
+ // C function void glVertexAttribI4iv ( GLuint index, const GLint *v )
+
+ public static native void glVertexAttribI4iv(
+ int index,
+ java.nio.IntBuffer v
+ );
+
+ // C function void glVertexAttribI4uiv ( GLuint index, const GLuint *v )
+
+ public static native void glVertexAttribI4uiv(
+ int index,
+ int[] v,
+ int offset
+ );
+
+ // C function void glVertexAttribI4uiv ( GLuint index, const GLuint *v )
+
+ public static native void glVertexAttribI4uiv(
+ int index,
+ java.nio.IntBuffer v
+ );
+
+ // C function void glGetUniformuiv ( GLuint program, GLint location, GLuint *params )
+
+ public static native void glGetUniformuiv(
+ int program,
+ int location,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetUniformuiv ( GLuint program, GLint location, GLuint *params )
+
+ public static native void glGetUniformuiv(
+ int program,
+ int location,
+ java.nio.IntBuffer params
+ );
+
+ // C function GLint glGetFragDataLocation ( GLuint program, const GLchar *name )
+
+ public static native int glGetFragDataLocation(
+ int program,
+ String name
+ );
+
+ // C function void glUniform1ui ( GLint location, GLuint v0 )
+
+ public static native void glUniform1ui(
+ int location,
+ int v0
+ );
+
+ // C function void glUniform2ui ( GLint location, GLuint v0, GLuint v1 )
+
+ public static native void glUniform2ui(
+ int location,
+ int v0,
+ int v1
+ );
+
+ // C function void glUniform3ui ( GLint location, GLuint v0, GLuint v1, GLuint v2 )
+
+ public static native void glUniform3ui(
+ int location,
+ int v0,
+ int v1,
+ int v2
+ );
+
+ // C function void glUniform4ui ( GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3 )
+
+ public static native void glUniform4ui(
+ int location,
+ int v0,
+ int v1,
+ int v2,
+ int v3
+ );
+
+ // C function void glUniform1uiv ( GLint location, GLsizei count, const GLuint *value )
+
+ public static native void glUniform1uiv(
+ int location,
+ int count,
+ int[] value,
+ int offset
+ );
+
+ // C function void glUniform1uiv ( GLint location, GLsizei count, const GLuint *value )
+
+ public static native void glUniform1uiv(
+ int location,
+ int count,
+ java.nio.IntBuffer value
+ );
+
+ // C function void glUniform2uiv ( GLint location, GLsizei count, const GLuint *value )
+
+ public static native void glUniform2uiv(
+ int location,
+ int count,
+ int[] value,
+ int offset
+ );
+
+ // C function void glUniform2uiv ( GLint location, GLsizei count, const GLuint *value )
+
+ public static native void glUniform2uiv(
+ int location,
+ int count,
+ java.nio.IntBuffer value
+ );
+
+ // C function void glUniform3uiv ( GLint location, GLsizei count, const GLuint *value )
+
+ public static native void glUniform3uiv(
+ int location,
+ int count,
+ int[] value,
+ int offset
+ );
+
+ // C function void glUniform3uiv ( GLint location, GLsizei count, const GLuint *value )
+
+ public static native void glUniform3uiv(
+ int location,
+ int count,
+ java.nio.IntBuffer value
+ );
+
+ // C function void glUniform4uiv ( GLint location, GLsizei count, const GLuint *value )
+
+ public static native void glUniform4uiv(
+ int location,
+ int count,
+ int[] value,
+ int offset
+ );
+
+ // C function void glUniform4uiv ( GLint location, GLsizei count, const GLuint *value )
+
+ public static native void glUniform4uiv(
+ int location,
+ int count,
+ java.nio.IntBuffer value
+ );
+
+ // C function void glClearBufferiv ( GLenum buffer, GLint drawbuffer, const GLint *value )
+
+ public static native void glClearBufferiv(
+ int buffer,
+ int drawbuffer,
+ int[] value,
+ int offset
+ );
+
+ // C function void glClearBufferiv ( GLenum buffer, GLint drawbuffer, const GLint *value )
+
+ public static native void glClearBufferiv(
+ int buffer,
+ int drawbuffer,
+ java.nio.IntBuffer value
+ );
+
+ // C function void glClearBufferuiv ( GLenum buffer, GLint drawbuffer, const GLuint *value )
+
+ public static native void glClearBufferuiv(
+ int buffer,
+ int drawbuffer,
+ int[] value,
+ int offset
+ );
+
+ // C function void glClearBufferuiv ( GLenum buffer, GLint drawbuffer, const GLuint *value )
+
+ public static native void glClearBufferuiv(
+ int buffer,
+ int drawbuffer,
+ java.nio.IntBuffer value
+ );
+
+ // C function void glClearBufferfv ( GLenum buffer, GLint drawbuffer, const GLfloat *value )
+
+ public static native void glClearBufferfv(
+ int buffer,
+ int drawbuffer,
+ float[] value,
+ int offset
+ );
+
+ // C function void glClearBufferfv ( GLenum buffer, GLint drawbuffer, const GLfloat *value )
+
+ public static native void glClearBufferfv(
+ int buffer,
+ int drawbuffer,
+ java.nio.FloatBuffer value
+ );
+
+ // C function void glClearBufferfi ( GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil )
+
+ public static native void glClearBufferfi(
+ int buffer,
+ int drawbuffer,
+ float depth,
+ int stencil
+ );
+
+ // C function const GLubyte * glGetStringi ( GLenum name, GLuint index )
+
+ public static native String glGetStringi(
+ int name,
+ int index
+ );
+
+ // C function void glCopyBufferSubData ( GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size )
+
+ public static native void glCopyBufferSubData(
+ int readTarget,
+ int writeTarget,
+ int readOffset,
+ int writeOffset,
+ int size
+ );
+
+ // C function void glGetUniformIndices ( GLuint program, GLsizei uniformCount, const GLchar *const *uniformNames, GLuint *uniformIndices )
+
+ public static native void glGetUniformIndices(
+ int program,
+ String[] uniformNames,
+ int[] uniformIndices,
+ int uniformIndicesOffset
+ );
+
+ // C function void glGetUniformIndices ( GLuint program, GLsizei uniformCount, const GLchar *const *uniformNames, GLuint *uniformIndices )
+
+ public static native void glGetUniformIndices(
+ int program,
+ String[] uniformNames,
+ java.nio.IntBuffer uniformIndices
+ );
+
+ // C function void glGetActiveUniformsiv ( GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params )
+
+ public static native void glGetActiveUniformsiv(
+ int program,
+ int uniformCount,
+ int[] uniformIndices,
+ int uniformIndicesOffset,
+ int pname,
+ int[] params,
+ int paramsOffset
+ );
+
+ // C function void glGetActiveUniformsiv ( GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params )
+
+ public static native void glGetActiveUniformsiv(
+ int program,
+ int uniformCount,
+ java.nio.IntBuffer uniformIndices,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function GLuint glGetUniformBlockIndex ( GLuint program, const GLchar *uniformBlockName )
+
+ public static native int glGetUniformBlockIndex(
+ int program,
+ String uniformBlockName
+ );
+
+ // C function void glGetActiveUniformBlockiv ( GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params )
+
+ public static native void glGetActiveUniformBlockiv(
+ int program,
+ int uniformBlockIndex,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetActiveUniformBlockiv ( GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params )
+
+ public static native void glGetActiveUniformBlockiv(
+ int program,
+ int uniformBlockIndex,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glGetActiveUniformBlockName ( GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName )
+
+ public static native void glGetActiveUniformBlockName(
+ int program,
+ int uniformBlockIndex,
+ int bufSize,
+ int[] length,
+ int lengthOffset,
+ byte[] uniformBlockName,
+ int uniformBlockNameOffset
+ );
+
+ // C function void glGetActiveUniformBlockName ( GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName )
+
+ public static native void glGetActiveUniformBlockName(
+ int program,
+ int uniformBlockIndex,
+ java.nio.Buffer length,
+ java.nio.Buffer uniformBlockName
+ );
+
+ // C function void glGetActiveUniformBlockName ( GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName )
+
+ public static native String glGetActiveUniformBlockName(
+ int program,
+ int uniformBlockIndex
+ );
+
+ // C function void glUniformBlockBinding ( GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding )
+
+ public static native void glUniformBlockBinding(
+ int program,
+ int uniformBlockIndex,
+ int uniformBlockBinding
+ );
+
+ // C function void glDrawArraysInstanced ( GLenum mode, GLint first, GLsizei count, GLsizei instanceCount )
+
+ public static native void glDrawArraysInstanced(
+ int mode,
+ int first,
+ int count,
+ int instanceCount
+ );
+
+ // C function void glDrawElementsInstanced ( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instanceCount )
+
+ public static native void glDrawElementsInstanced(
+ int mode,
+ int count,
+ int type,
+ java.nio.Buffer indices,
+ int instanceCount
+ );
+
+ // C function void glDrawElementsInstanced ( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instanceCount )
+
+ public static native void glDrawElementsInstanced(
+ int mode,
+ int count,
+ int type,
+ int indicesOffset,
+ int instanceCount
+ );
+
+ // C function GLsync glFenceSync ( GLenum condition, GLbitfield flags )
+
+ public static native long glFenceSync(
+ int condition,
+ int flags
+ );
+
+ // C function GLboolean glIsSync ( GLsync sync )
+
+ public static native boolean glIsSync(
+ long sync
+ );
+
+ // C function void glDeleteSync ( GLsync sync )
+
+ public static native void glDeleteSync(
+ long sync
+ );
+
+ // C function GLenum glClientWaitSync ( GLsync sync, GLbitfield flags, GLuint64 timeout )
+
+ public static native int glClientWaitSync(
+ long sync,
+ int flags,
+ long timeout
+ );
+
+ // C function void glWaitSync ( GLsync sync, GLbitfield flags, GLuint64 timeout )
+
+ public static native void glWaitSync(
+ long sync,
+ int flags,
+ long timeout
+ );
+
+ // C function void glGetInteger64v ( GLenum pname, GLint64 *params )
+
+ public static native void glGetInteger64v(
+ int pname,
+ long[] params,
+ int offset
+ );
+
+ // C function void glGetInteger64v ( GLenum pname, GLint64 *params )
+
+ public static native void glGetInteger64v(
+ int pname,
+ java.nio.LongBuffer params
+ );
+
+ // C function void glGetSynciv ( GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values )
+
+ public static native void glGetSynciv(
+ long sync,
+ int pname,
+ int bufSize,
+ int[] length,
+ int lengthOffset,
+ int[] values,
+ int valuesOffset
+ );
+
+ // C function void glGetSynciv ( GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values )
+
+ public static native void glGetSynciv(
+ long sync,
+ int pname,
+ int bufSize,
+ java.nio.IntBuffer length,
+ java.nio.IntBuffer values
+ );
+
+ // C function void glGetInteger64i_v ( GLenum target, GLuint index, GLint64 *data )
+
+ public static native void glGetInteger64i_v(
+ int target,
+ int index,
+ long[] data,
+ int offset
+ );
+
+ // C function void glGetInteger64i_v ( GLenum target, GLuint index, GLint64 *data )
+
+ public static native void glGetInteger64i_v(
+ int target,
+ int index,
+ java.nio.LongBuffer data
+ );
+
+ // C function void glGetBufferParameteri64v ( GLenum target, GLenum pname, GLint64 *params )
+
+ public static native void glGetBufferParameteri64v(
+ int target,
+ int pname,
+ long[] params,
+ int offset
+ );
+
+ // C function void glGetBufferParameteri64v ( GLenum target, GLenum pname, GLint64 *params )
+
+ public static native void glGetBufferParameteri64v(
+ int target,
+ int pname,
+ java.nio.LongBuffer params
+ );
+
+ // C function void glGenSamplers ( GLsizei count, GLuint *samplers )
+
+ public static native void glGenSamplers(
+ int count,
+ int[] samplers,
+ int offset
+ );
+
+ // C function void glGenSamplers ( GLsizei count, GLuint *samplers )
+
+ public static native void glGenSamplers(
+ int count,
+ java.nio.IntBuffer samplers
+ );
+
+ // C function void glDeleteSamplers ( GLsizei count, const GLuint *samplers )
+
+ public static native void glDeleteSamplers(
+ int count,
+ int[] samplers,
+ int offset
+ );
+
+ // C function void glDeleteSamplers ( GLsizei count, const GLuint *samplers )
+
+ public static native void glDeleteSamplers(
+ int count,
+ java.nio.IntBuffer samplers
+ );
+
+ // C function GLboolean glIsSampler ( GLuint sampler )
+
+ public static native boolean glIsSampler(
+ int sampler
+ );
+
+ // C function void glBindSampler ( GLuint unit, GLuint sampler )
+
+ public static native void glBindSampler(
+ int unit,
+ int sampler
+ );
+
+ // C function void glSamplerParameteri ( GLuint sampler, GLenum pname, GLint param )
+
+ public static native void glSamplerParameteri(
+ int sampler,
+ int pname,
+ int param
+ );
+
+ // C function void glSamplerParameteriv ( GLuint sampler, GLenum pname, const GLint *param )
+
+ public static native void glSamplerParameteriv(
+ int sampler,
+ int pname,
+ int[] param,
+ int offset
+ );
+
+ // C function void glSamplerParameteriv ( GLuint sampler, GLenum pname, const GLint *param )
+
+ public static native void glSamplerParameteriv(
+ int sampler,
+ int pname,
+ java.nio.IntBuffer param
+ );
+
+ // C function void glSamplerParameterf ( GLuint sampler, GLenum pname, GLfloat param )
+
+ public static native void glSamplerParameterf(
+ int sampler,
+ int pname,
+ float param
+ );
+
+ // C function void glSamplerParameterfv ( GLuint sampler, GLenum pname, const GLfloat *param )
+
+ public static native void glSamplerParameterfv(
+ int sampler,
+ int pname,
+ float[] param,
+ int offset
+ );
+
+ // C function void glSamplerParameterfv ( GLuint sampler, GLenum pname, const GLfloat *param )
+
+ public static native void glSamplerParameterfv(
+ int sampler,
+ int pname,
+ java.nio.FloatBuffer param
+ );
+
+ // C function void glGetSamplerParameteriv ( GLuint sampler, GLenum pname, GLint *params )
+
+ public static native void glGetSamplerParameteriv(
+ int sampler,
+ int pname,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetSamplerParameteriv ( GLuint sampler, GLenum pname, GLint *params )
+
+ public static native void glGetSamplerParameteriv(
+ int sampler,
+ int pname,
+ java.nio.IntBuffer params
+ );
+
+ // C function void glGetSamplerParameterfv ( GLuint sampler, GLenum pname, GLfloat *params )
+
+ public static native void glGetSamplerParameterfv(
+ int sampler,
+ int pname,
+ float[] params,
+ int offset
+ );
+
+ // C function void glGetSamplerParameterfv ( GLuint sampler, GLenum pname, GLfloat *params )
+
+ public static native void glGetSamplerParameterfv(
+ int sampler,
+ int pname,
+ java.nio.FloatBuffer params
+ );
+
+ // C function void glVertexAttribDivisor ( GLuint index, GLuint divisor )
+
+ public static native void glVertexAttribDivisor(
+ int index,
+ int divisor
+ );
+
+ // C function void glBindTransformFeedback ( GLenum target, GLuint id )
+
+ public static native void glBindTransformFeedback(
+ int target,
+ int id
+ );
+
+ // C function void glDeleteTransformFeedbacks ( GLsizei n, const GLuint *ids )
+
+ public static native void glDeleteTransformFeedbacks(
+ int n,
+ int[] ids,
+ int offset
+ );
+
+ // C function void glDeleteTransformFeedbacks ( GLsizei n, const GLuint *ids )
+
+ public static native void glDeleteTransformFeedbacks(
+ int n,
+ java.nio.IntBuffer ids
+ );
+
+ // C function void glGenTransformFeedbacks ( GLsizei n, GLuint *ids )
+
+ public static native void glGenTransformFeedbacks(
+ int n,
+ int[] ids,
+ int offset
+ );
+
+ // C function void glGenTransformFeedbacks ( GLsizei n, GLuint *ids )
+
+ public static native void glGenTransformFeedbacks(
+ int n,
+ java.nio.IntBuffer ids
+ );
+
+ // C function GLboolean glIsTransformFeedback ( GLuint id )
+
+ public static native boolean glIsTransformFeedback(
+ int id
+ );
+
+ // C function void glPauseTransformFeedback ( void )
+
+ public static native void glPauseTransformFeedback(
+ );
+
+ // C function void glResumeTransformFeedback ( void )
+
+ public static native void glResumeTransformFeedback(
+ );
+
+ // C function void glGetProgramBinary ( GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary )
+
+ public static native void glGetProgramBinary(
+ int program,
+ int bufSize,
+ int[] length,
+ int lengthOffset,
+ int[] binaryFormat,
+ int binaryFormatOffset,
+ java.nio.Buffer binary
+ );
+
+ // C function void glGetProgramBinary ( GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary )
+
+ public static native void glGetProgramBinary(
+ int program,
+ int bufSize,
+ java.nio.IntBuffer length,
+ java.nio.IntBuffer binaryFormat,
+ java.nio.Buffer binary
+ );
+
+ // C function void glProgramBinary ( GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length )
+
+ public static native void glProgramBinary(
+ int program,
+ int binaryFormat,
+ java.nio.Buffer binary,
+ int length
+ );
+
+ // C function void glProgramParameteri ( GLuint program, GLenum pname, GLint value )
+
+ public static native void glProgramParameteri(
+ int program,
+ int pname,
+ int value
+ );
+
+ // C function void glInvalidateFramebuffer ( GLenum target, GLsizei numAttachments, const GLenum *attachments )
+
+ public static native void glInvalidateFramebuffer(
+ int target,
+ int numAttachments,
+ int[] attachments,
+ int offset
+ );
+
+ // C function void glInvalidateFramebuffer ( GLenum target, GLsizei numAttachments, const GLenum *attachments )
+
+ public static native void glInvalidateFramebuffer(
+ int target,
+ int numAttachments,
+ java.nio.IntBuffer attachments
+ );
+
+ // C function void glInvalidateSubFramebuffer ( GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height )
+
+ public static native void glInvalidateSubFramebuffer(
+ int target,
+ int numAttachments,
+ int[] attachments,
+ int offset,
+ int x,
+ int y,
+ int width,
+ int height
+ );
+
+ // C function void glInvalidateSubFramebuffer ( GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height )
+
+ public static native void glInvalidateSubFramebuffer(
+ int target,
+ int numAttachments,
+ java.nio.IntBuffer attachments,
+ int x,
+ int y,
+ int width,
+ int height
+ );
+
+ // C function void glTexStorage2D ( GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height )
+
+ public static native void glTexStorage2D(
+ int target,
+ int levels,
+ int internalformat,
+ int width,
+ int height
+ );
+
+ // C function void glTexStorage3D ( GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth )
+
+ public static native void glTexStorage3D(
+ int target,
+ int levels,
+ int internalformat,
+ int width,
+ int height,
+ int depth
+ );
+
+ // C function void glGetInternalformativ ( GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params )
+
+ public static native void glGetInternalformativ(
+ int target,
+ int internalformat,
+ int pname,
+ int bufSize,
+ int[] params,
+ int offset
+ );
+
+ // C function void glGetInternalformativ ( GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params )
+
+ public static native void glGetInternalformativ(
+ int target,
+ int internalformat,
+ int pname,
+ int bufSize,
+ java.nio.IntBuffer params
+ );
+
+}
diff --git a/packages/SystemUI/res/layout/quick_settings_tile_airplane.xml b/packages/SystemUI/res/layout/quick_settings_tile_airplane.xml
deleted file mode 100644
index ac87496..0000000
--- a/packages/SystemUI/res/layout/quick_settings_tile_airplane.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 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.
--->
-<TextView
- xmlns:android="http://schemas.android.com/apk/res/android"
- style="@style/TextAppearance.QuickSettings.TileView"
- android:id="@+id/airplane_mode_textview"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:gravity="center"
- />
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/quick_settings_tile_alarm.xml b/packages/SystemUI/res/layout/quick_settings_tile_alarm.xml
index 0327bee..493c704 100644
--- a/packages/SystemUI/res/layout/quick_settings_tile_alarm.xml
+++ b/packages/SystemUI/res/layout/quick_settings_tile_alarm.xml
@@ -15,11 +15,11 @@
-->
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
- style="@style/TextAppearance.QuickSettings.TileView"
+ style="@style/TextAppearance.QuickSettings.TileView.AllInOne"
android:id="@+id/alarm_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:drawableTop="@drawable/ic_qs_alarm_on"
- />
\ No newline at end of file
+ />
diff --git a/packages/SystemUI/res/layout/quick_settings_tile_basic.xml b/packages/SystemUI/res/layout/quick_settings_tile_basic.xml
new file mode 100644
index 0000000..16bf49c
--- /dev/null
+++ b/packages/SystemUI/res/layout/quick_settings_tile_basic.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2013 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="match_parent"
+ android:layout_height="match_parent"
+ android:layout_gravity="top"
+ android:orientation="vertical">
+ <ImageView
+ android:id="@+id/image"
+ android:layout_marginTop="@dimen/qs_tile_margin_above_icon"
+ android:layout_marginBottom="@dimen/qs_tile_margin_below_icon"
+ android:layout_width="@dimen/qs_tile_icon_size"
+ android:layout_height="@dimen/qs_tile_icon_size"
+ android:layout_gravity="top|center_horizontal"
+ android:scaleType="centerInside"
+ />
+ <TextView
+ style="@style/TextAppearance.QuickSettings.TileView"
+ android:id="@+id/text"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="top|center_horizontal"
+ android:gravity="top|center_horizontal"
+ />
+</LinearLayout>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/quick_settings_tile_battery.xml b/packages/SystemUI/res/layout/quick_settings_tile_battery.xml
index 446b24c..c41e9b9 100644
--- a/packages/SystemUI/res/layout/quick_settings_tile_battery.xml
+++ b/packages/SystemUI/res/layout/quick_settings_tile_battery.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 The Android Open Source Project
+<!-- Copyright (C) 2013 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.
@@ -14,24 +14,26 @@
limitations under the License.
-->
<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:orientation="vertical">
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_gravity="top"
+ android:orientation="vertical">
<ImageView
- android:id="@+id/battery_image"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:paddingBottom="10dp"
- />
+ android:id="@+id/image"
+ android:layout_marginTop="@dimen/qs_tile_margin_above_icon"
+ android:layout_marginBottom="@dimen/qs_tile_margin_below_icon"
+ android:layout_width="@dimen/qs_tile_icon_size"
+ android:layout_height="@dimen/qs_tile_icon_size"
+ android:layout_gravity="top|center_horizontal"
+ android:scaleType="centerInside"
+ />
<TextView
- style="@style/TextAppearance.QuickSettings.TileView"
- android:id="@+id/battery_textview"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:gravity="center"
- />
+ style="@style/TextAppearance.QuickSettings.TileView"
+ android:id="@+id/text"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="top|center_horizontal"
+ android:gravity="top|center_horizontal"
+ />
</LinearLayout>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/quick_settings_tile_bluetooth.xml b/packages/SystemUI/res/layout/quick_settings_tile_bluetooth.xml
deleted file mode 100644
index 2f3a9c6..0000000
--- a/packages/SystemUI/res/layout/quick_settings_tile_bluetooth.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 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.
--->
-<TextView
- xmlns:android="http://schemas.android.com/apk/res/android"
- style="@style/TextAppearance.QuickSettings.TileView"
- android:id="@+id/bluetooth_textview"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:gravity="center"
- />
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/quick_settings_tile_brightness.xml b/packages/SystemUI/res/layout/quick_settings_tile_brightness.xml
deleted file mode 100644
index 5b3ce1f..0000000
--- a/packages/SystemUI/res/layout/quick_settings_tile_brightness.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 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.
--->
-<TextView
- xmlns:android="http://schemas.android.com/apk/res/android"
- style="@style/TextAppearance.QuickSettings.TileView"
- android:id="@+id/brightness_textview"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:gravity="center"
- android:drawableTop="@drawable/ic_qs_brightness_auto_off"
- />
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/quick_settings_tile_bugreport.xml b/packages/SystemUI/res/layout/quick_settings_tile_bugreport.xml
deleted file mode 100644
index 0b6a614..0000000
--- a/packages/SystemUI/res/layout/quick_settings_tile_bugreport.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 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.
--->
-<TextView
- xmlns:android="http://schemas.android.com/apk/res/android"
- style="@style/TextAppearance.QuickSettings.TileView"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:gravity="center"
- android:drawableTop="@*android:drawable/stat_sys_adb"
- android:text="@*android:string/bugreport_title"
- />
diff --git a/packages/SystemUI/res/layout/quick_settings_tile_ime.xml b/packages/SystemUI/res/layout/quick_settings_tile_ime.xml
index e92acd5..1a31efa5 100644
--- a/packages/SystemUI/res/layout/quick_settings_tile_ime.xml
+++ b/packages/SystemUI/res/layout/quick_settings_tile_ime.xml
@@ -15,7 +15,7 @@
-->
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
- style="@style/TextAppearance.QuickSettings.TileView"
+ style="@style/TextAppearance.QuickSettings.TileView.AllInOne"
android:id="@+id/ime_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@@ -23,4 +23,4 @@
android:gravity="center"
android:drawableTop="@drawable/ic_qs_ime"
android:text="@string/quick_settings_ime_label"
- />
\ No newline at end of file
+ />
diff --git a/packages/SystemUI/res/layout/quick_settings_tile_location.xml b/packages/SystemUI/res/layout/quick_settings_tile_location.xml
deleted file mode 100644
index 0accb38..0000000
--- a/packages/SystemUI/res/layout/quick_settings_tile_location.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 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.
--->
-<TextView
- xmlns:android="http://schemas.android.com/apk/res/android"
- style="@style/TextAppearance.QuickSettings.TileView"
- android:id="@+id/location_textview"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:gravity="center"
- android:drawableTop="@drawable/ic_qs_location"
- android:text="@string/quick_settings_location_label"
- />
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/quick_settings_tile_media.xml b/packages/SystemUI/res/layout/quick_settings_tile_media.xml
index 7217de3..355176c6 100644
--- a/packages/SystemUI/res/layout/quick_settings_tile_media.xml
+++ b/packages/SystemUI/res/layout/quick_settings_tile_media.xml
@@ -15,10 +15,10 @@
-->
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
- style="@style/TextAppearance.QuickSettings.TileView"
+ style="@style/TextAppearance.QuickSettings.TileView.AllInOne"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/quick_settings_media_device_label"
android:singleLine="true"
- />
\ No newline at end of file
+ />
diff --git a/packages/SystemUI/res/layout/quick_settings_tile_rotation_lock.xml b/packages/SystemUI/res/layout/quick_settings_tile_rotation_lock.xml
deleted file mode 100644
index 6aecaea..0000000
--- a/packages/SystemUI/res/layout/quick_settings_tile_rotation_lock.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 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.
--->
-<TextView
- xmlns:android="http://schemas.android.com/apk/res/android"
- style="@style/TextAppearance.QuickSettings.TileView"
- android:id="@+id/rotation_lock_textview"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:gravity="center"
- />
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/quick_settings_tile_rssi.xml b/packages/SystemUI/res/layout/quick_settings_tile_rssi.xml
index febd8a8..34506b1 100644
--- a/packages/SystemUI/res/layout/quick_settings_tile_rssi.xml
+++ b/packages/SystemUI/res/layout/quick_settings_tile_rssi.xml
@@ -15,27 +15,28 @@
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_gravity="top"
android:orientation="vertical">
<FrameLayout
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center">
+ android:layout_marginTop="@dimen/qs_tile_margin_above_icon"
+ android:layout_marginBottom="@dimen/qs_tile_margin_below_icon"
+ android:layout_width="@dimen/qs_tile_icon_size"
+ android:layout_height="@dimen/qs_tile_icon_size"
+ android:layout_gravity="top|center_horizontal"
+ >
<ImageView
android:id="@+id/rssi_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
- android:paddingBottom="10dp"
/>
<ImageView
android:id="@+id/rssi_overlay_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
- android:paddingBottom="10dp"
/>
</FrameLayout>
<TextView
@@ -43,8 +44,8 @@
android:id="@+id/rssi_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:gravity="center"
+ android:layout_gravity="top|center_horizontal"
+ android:gravity="top|center_horizontal"
android:text="@string/quick_settings_rssi_label"
/>
</LinearLayout>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/quick_settings_tile_settings.xml b/packages/SystemUI/res/layout/quick_settings_tile_settings.xml
deleted file mode 100644
index d155935..0000000
--- a/packages/SystemUI/res/layout/quick_settings_tile_settings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 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.
--->
-<TextView
- xmlns:android="http://schemas.android.com/apk/res/android"
- style="@style/TextAppearance.QuickSettings.TileView"
- android:id="@+id/settings_tileview"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:gravity="center"
- android:drawableTop="@drawable/ic_qs_settings"
- />
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/quick_settings_tile_user.xml b/packages/SystemUI/res/layout/quick_settings_tile_user.xml
index 878f500..80fc685 100644
--- a/packages/SystemUI/res/layout/quick_settings_tile_user.xml
+++ b/packages/SystemUI/res/layout/quick_settings_tile_user.xml
@@ -25,13 +25,12 @@
android:scaleType="centerCrop"
/>
<TextView
- style="@style/TextAppearance.QuickSettings.TileView"
+ style="@style/TextAppearance.QuickSettings.TileView.User"
android:id="@+id/user_textview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|bottom"
android:gravity="center"
android:text="@string/quick_settings_user_label"
- android:background="#CC000000"
/>
</FrameLayout>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/quick_settings_tile_wifi.xml b/packages/SystemUI/res/layout/quick_settings_tile_wifi.xml
deleted file mode 100644
index 67d6c23..0000000
--- a/packages/SystemUI/res/layout/quick_settings_tile_wifi.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 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.
--->
-<TextView
- xmlns:android="http://schemas.android.com/apk/res/android"
- style="@style/TextAppearance.QuickSettings.TileView"
- android:id="@+id/wifi_textview"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:gravity="center"
- android:text="@string/quick_settings_wifi_label"
- />
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/quick_settings_tile_wifi_display.xml b/packages/SystemUI/res/layout/quick_settings_tile_wifi_display.xml
deleted file mode 100644
index 2d7e441..0000000
--- a/packages/SystemUI/res/layout/quick_settings_tile_wifi_display.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 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.
--->
-<TextView
- xmlns:android="http://schemas.android.com/apk/res/android"
- style="@style/TextAppearance.QuickSettings.TileView"
- android:id="@+id/wifi_display_textview"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:gravity="center"
- android:drawableTop="@drawable/ic_qs_remote_display"
- android:text="@string/quick_settings_wifi_display_label"
- />
\ No newline at end of file
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index ed08115..f90f08a 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -205,4 +205,11 @@
<!-- How far to slide the panel out when you touch it -->
<!-- For phones, this is close_handle_height + header_height -->
<dimen name="peek_height">84dp</dimen>
+
+ <!-- Quick Settings tile geometry: top interior margin, above icon -->
+ <dimen name="qs_tile_margin_above_icon">27dp</dimen>
+ <!-- Quick Settings tile geometry: gap between icon and text -->
+ <dimen name="qs_tile_margin_below_icon">17dp</dimen>
+ <!-- Quick Settings tile geometry: icon size -->
+ <dimen name="qs_tile_icon_size">32dp</dimen>
</resources>
diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml
index 1a59d6c..7ddf261 100644
--- a/packages/SystemUI/res/values/styles.xml
+++ b/packages/SystemUI/res/values/styles.xml
@@ -92,17 +92,20 @@
<style name="TextAppearance.QuickSettings" />
<style name="TextAppearance.QuickSettings.TileView">
- <item name="android:paddingLeft">6dp</item>
- <item name="android:paddingRight">6dp</item>
- <item name="android:paddingBottom">2dp</item>
- <item name="android:drawablePadding">12dp</item>
<item name="android:textSize">12dp</item>
<item name="android:textStyle">normal</item>
<item name="android:textColor">#CCCCCC</item>
<item name="android:textAllCaps">true</item>
- <item name="android:singleLine">true</item>
- <item name="android:ellipsize">marquee</item>
- <item name="android:fadingEdge">horizontal</item>
+ <item name="android:paddingStart">6dp</item>
+ <item name="android:paddingEnd">6dp</item>
+ </style>
+
+ <style name="TextAppearance.QuickSettings.TileView.AllInOne" parent="@style/TextAppearance.QuickSettings.TileView">
+ <item name="android:lines">2</item>
+ <item name="android:gravity">top</item>
+ <item name="android:paddingBottom">2dp</item>
+ <item name="android:paddingTop">16dp</item>
+ <item name="android:drawablePadding">8dp</item>
</style>
<style name="TextAppearance.QuickSettings.Clock" parent="@style/TextAppearance.QuickSettings.TileView">
@@ -119,6 +122,13 @@
<item name="android:textColor">#ff3a3b39</item>
</style>
+ <style name="TextAppearance.QuickSettings.TileView.User" parent="@style/TextAppearance.QuickSettings.TileView">
+ <item name="android:background">#CC000000</item>
+ <item name="android:padding">4dp</item>
+ <item name="android:singleLine">true</item>
+ <item name="android:fadingEdge">horizontal</item>
+ </style>
+
<style name="BaseBrightnessDialogContainer">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java
index a7c7fba..d826282 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java
@@ -17,7 +17,6 @@
package com.android.systemui.statusbar.phone;
import com.android.internal.view.RotationPolicy;
-import com.android.internal.widget.LockPatternUtils;
import com.android.systemui.R;
import com.android.systemui.statusbar.phone.QuickSettingsModel.BluetoothState;
@@ -38,7 +37,6 @@
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
-import android.content.CursorLoader;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
@@ -80,6 +78,7 @@
*
*/
class QuickSettings {
+ static final boolean DEBUG_GONE_TILES = false;
private static final String TAG = "QuickSettings";
public static final boolean SHOW_IME_TILE = false;
@@ -271,6 +270,10 @@
startSettingsActivity(intent, true);
}
+ private void collapsePanels() {
+ getService().animateCollapsePanels();
+ }
+
private void startSettingsActivity(Intent intent, boolean onlyProvisioned) {
if (onlyProvisioned && !getService().isDeviceProvisioned()) return;
try {
@@ -280,7 +283,7 @@
}
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
mContext.startActivityAsUser(intent, new UserHandle(UserHandle.USER_CURRENT));
- getService().animateCollapsePanels();
+ collapsePanels();
}
private void addUserTiles(ViewGroup parent, LayoutInflater inflater) {
@@ -290,7 +293,7 @@
userTile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- mBar.collapseAllPanels(true);
+ collapsePanels();
final UserManager um = UserManager.get(mContext);
if (um.getUsers(true).size() > 1) {
try {
@@ -322,24 +325,18 @@
mDynamicSpannedTiles.add(userTile);
// Brightness
- QuickSettingsTileView brightnessTile = (QuickSettingsTileView)
- inflater.inflate(R.layout.quick_settings_tile, parent, false);
- brightnessTile.setContent(R.layout.quick_settings_tile_brightness, inflater);
+ final QuickSettingsBasicTile brightnessTile
+ = new QuickSettingsBasicTile(mContext);
+ brightnessTile.setImageResource(R.drawable.ic_qs_brightness_auto_off);
brightnessTile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- mBar.collapseAllPanels(true);
+ collapsePanels();
showBrightnessDialog();
}
});
- mModel.addBrightnessTile(brightnessTile, new QuickSettingsModel.RefreshCallback() {
- @Override
- public void refreshView(QuickSettingsTileView view, State state) {
- TextView tv = (TextView) view.findViewById(R.id.brightness_textview);
- tv.setCompoundDrawablesWithIntrinsicBounds(0, state.iconId, 0, 0);
- tv.setText(state.label);
- }
- });
+ mModel.addBrightnessTile(brightnessTile,
+ new QuickSettingsModel.BasicRefreshCallback(brightnessTile));
parent.addView(brightnessTile);
mDynamicSpannedTiles.add(brightnessTile);
@@ -364,31 +361,24 @@
*/
// Settings tile
- QuickSettingsTileView settingsTile = (QuickSettingsTileView)
- inflater.inflate(R.layout.quick_settings_tile, parent, false);
- settingsTile.setContent(R.layout.quick_settings_tile_settings, inflater);
+ final QuickSettingsBasicTile settingsTile = new QuickSettingsBasicTile(mContext);
+ settingsTile.setImageResource(R.drawable.ic_qs_settings);
settingsTile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startSettingsActivity(android.provider.Settings.ACTION_SETTINGS);
}
});
- mModel.addSettingsTile(settingsTile, new QuickSettingsModel.RefreshCallback() {
- @Override
- public void refreshView(QuickSettingsTileView view, State state) {
- TextView tv = (TextView) view.findViewById(R.id.settings_tileview);
- tv.setText(state.label);
- }
- });
+ mModel.addSettingsTile(settingsTile,
+ new QuickSettingsModel.BasicRefreshCallback(settingsTile));
parent.addView(settingsTile);
mDynamicSpannedTiles.add(settingsTile);
}
private void addSystemTiles(ViewGroup parent, LayoutInflater inflater) {
// Wi-fi
- final QuickSettingsTileView wifiTile = (QuickSettingsTileView)
- inflater.inflate(R.layout.quick_settings_tile, parent, false);
- wifiTile.setContent(R.layout.quick_settings_tile_wifi, inflater);
+ final QuickSettingsBasicTile wifiTile
+ = new QuickSettingsBasicTile(mContext);
wifiTile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -421,12 +411,11 @@
}
mModel.addWifiTile(wifiTile, new QuickSettingsModel.RefreshCallback() {
@Override
- public void refreshView(QuickSettingsTileView view, State state) {
+ public void refreshView(QuickSettingsTileView unused, State state) {
WifiState wifiState = (WifiState) state;
- TextView tv = (TextView) view.findViewById(R.id.wifi_textview);
- tv.setCompoundDrawablesWithIntrinsicBounds(0, wifiState.iconId, 0, 0);
- tv.setText(wifiState.label);
- view.setContentDescription(mContext.getString(
+ wifiTile.setImageResource(wifiState.iconId);
+ wifiTile.setText(wifiState.label);
+ wifiTile.setContentDescription(mContext.getString(
R.string.accessibility_quick_settings_wifi,
wifiState.signalContentDescription,
(wifiState.connected) ? wifiState.label : ""));
@@ -476,10 +465,10 @@
}
// Rotation Lock
- if (mContext.getResources().getBoolean(R.bool.quick_settings_show_rotation_lock)) {
- QuickSettingsTileView rotationLockTile = (QuickSettingsTileView)
- inflater.inflate(R.layout.quick_settings_tile, parent, false);
- rotationLockTile.setContent(R.layout.quick_settings_tile_rotation_lock, inflater);
+ if (mContext.getResources().getBoolean(R.bool.quick_settings_show_rotation_lock)
+ || DEBUG_GONE_TILES) {
+ final QuickSettingsBasicTile rotationLockTile
+ = new QuickSettingsBasicTile(mContext);
rotationLockTile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -487,21 +476,13 @@
RotationPolicy.setRotationLock(mContext, !locked);
}
});
- mModel.addRotationLockTile(rotationLockTile, new QuickSettingsModel.RefreshCallback() {
- @Override
- public void refreshView(QuickSettingsTileView view, State state) {
- TextView tv = (TextView) view.findViewById(R.id.rotation_lock_textview);
- tv.setCompoundDrawablesWithIntrinsicBounds(0, state.iconId, 0, 0);
- tv.setText(state.label);
- }
- });
+ mModel.addRotationLockTile(rotationLockTile,
+ new QuickSettingsModel.BasicRefreshCallback(rotationLockTile));
parent.addView(rotationLockTile);
}
// Battery
- QuickSettingsTileView batteryTile = (QuickSettingsTileView)
- inflater.inflate(R.layout.quick_settings_tile, parent, false);
- batteryTile.setContent(R.layout.quick_settings_tile_battery, inflater);
+ final QuickSettingsBasicTile batteryTile = new QuickSettingsBasicTile(mContext);
batteryTile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -510,11 +491,9 @@
});
mModel.addBatteryTile(batteryTile, new QuickSettingsModel.RefreshCallback() {
@Override
- public void refreshView(QuickSettingsTileView view, State state) {
+ public void refreshView(QuickSettingsTileView unused, State state) {
QuickSettingsModel.BatteryState batteryState =
(QuickSettingsModel.BatteryState) state;
- TextView tv = (TextView) view.findViewById(R.id.battery_textview);
- ImageView iv = (ImageView) view.findViewById(R.id.battery_image);
Drawable d = batteryState.pluggedIn
? mChargingBatteryLevels
: mBatteryLevels;
@@ -528,40 +507,38 @@
: mContext.getString(R.string.status_bar_settings_battery_meter_format,
batteryState.batteryLevel);
}
- iv.setImageDrawable(d);
- iv.setImageLevel(batteryState.batteryLevel);
- tv.setText(t);
- view.setContentDescription(
+ d.setLevel(batteryState.batteryLevel);
+ batteryTile.setImageDrawable(d);
+ batteryTile.setText(t);
+ batteryTile.setContentDescription(
mContext.getString(R.string.accessibility_quick_settings_battery, t));
}
});
parent.addView(batteryTile);
// Airplane Mode
- QuickSettingsTileView airplaneTile = (QuickSettingsTileView)
- inflater.inflate(R.layout.quick_settings_tile, parent, false);
- airplaneTile.setContent(R.layout.quick_settings_tile_airplane, inflater);
+ final QuickSettingsBasicTile airplaneTile
+ = new QuickSettingsBasicTile(mContext);
mModel.addAirplaneModeTile(airplaneTile, new QuickSettingsModel.RefreshCallback() {
@Override
- public void refreshView(QuickSettingsTileView view, State state) {
- TextView tv = (TextView) view.findViewById(R.id.airplane_mode_textview);
- tv.setCompoundDrawablesWithIntrinsicBounds(0, state.iconId, 0, 0);
+ public void refreshView(QuickSettingsTileView unused, State state) {
+ airplaneTile.setImageResource(state.iconId);
String airplaneState = mContext.getString(
(state.enabled) ? R.string.accessibility_desc_on
: R.string.accessibility_desc_off);
- view.setContentDescription(
+ airplaneTile.setContentDescription(
mContext.getString(R.string.accessibility_quick_settings_airplane, airplaneState));
- tv.setText(state.label);
+ airplaneTile.setText(state.label);
}
});
parent.addView(airplaneTile);
// Bluetooth
- if (mModel.deviceSupportsBluetooth()) {
- final QuickSettingsTileView bluetoothTile = (QuickSettingsTileView)
- inflater.inflate(R.layout.quick_settings_tile, parent, false);
- bluetoothTile.setContent(R.layout.quick_settings_tile_bluetooth, inflater);
+ if (mModel.deviceSupportsBluetooth()
+ || DEBUG_GONE_TILES) {
+ final QuickSettingsBasicTile bluetoothTile
+ = new QuickSettingsBasicTile(mContext);
bluetoothTile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -583,14 +560,12 @@
}
mModel.addBluetoothTile(bluetoothTile, new QuickSettingsModel.RefreshCallback() {
@Override
- public void refreshView(QuickSettingsTileView view, State state) {
+ public void refreshView(QuickSettingsTileView unused, State state) {
BluetoothState bluetoothState = (BluetoothState) state;
- TextView tv = (TextView) view.findViewById(R.id.bluetooth_textview);
- tv.setCompoundDrawablesWithIntrinsicBounds(0, state.iconId, 0, 0);
+ bluetoothTile.setImageResource(state.iconId);
- Resources r = mContext.getResources();
- String label = state.label;
/*
+ Resources r = mContext.getResources();
//TODO: Show connected bluetooth device label
Set<BluetoothDevice> btDevices =
mBluetoothController.getBondedBluetoothDevices();
@@ -603,10 +578,10 @@
btDevices.size());
}
*/
- view.setContentDescription(mContext.getString(
+ bluetoothTile.setContentDescription(mContext.getString(
R.string.accessibility_quick_settings_bluetooth,
bluetoothState.stateContentDescription));
- tv.setText(label);
+ bluetoothTile.setText(state.label);
}
});
parent.addView(bluetoothTile);
@@ -616,9 +591,9 @@
private void addTemporaryTiles(final ViewGroup parent, final LayoutInflater inflater) {
// Alarm tile
- QuickSettingsTileView alarmTile = (QuickSettingsTileView)
- inflater.inflate(R.layout.quick_settings_tile, parent, false);
- alarmTile.setContent(R.layout.quick_settings_tile_alarm, inflater);
+ final QuickSettingsBasicTile alarmTile
+ = new QuickSettingsBasicTile(mContext);
+ alarmTile.setImageResource(R.drawable.ic_qs_alarm_on);
alarmTile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -632,94 +607,77 @@
});
mModel.addAlarmTile(alarmTile, new QuickSettingsModel.RefreshCallback() {
@Override
- public void refreshView(QuickSettingsTileView view, State alarmState) {
- TextView tv = (TextView) view.findViewById(R.id.alarm_textview);
- tv.setText(alarmState.label);
- view.setVisibility(alarmState.enabled ? View.VISIBLE : View.GONE);
- view.setContentDescription(mContext.getString(
+ public void refreshView(QuickSettingsTileView unused, State alarmState) {
+ alarmTile.setText(alarmState.label);
+ alarmTile.setVisibility(alarmState.enabled ? View.VISIBLE : View.GONE);
+ alarmTile.setContentDescription(mContext.getString(
R.string.accessibility_quick_settings_alarm, alarmState.label));
}
});
parent.addView(alarmTile);
// Location
- QuickSettingsTileView locationTile = (QuickSettingsTileView)
- inflater.inflate(R.layout.quick_settings_tile, parent, false);
- locationTile.setContent(R.layout.quick_settings_tile_location, inflater);
+ final QuickSettingsBasicTile locationTile
+ = new QuickSettingsBasicTile(mContext);
+ locationTile.setImageResource(R.drawable.ic_qs_location);
+ locationTile.setTextResource(R.string.quick_settings_location_label);
locationTile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startSettingsActivity(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
}
});
- mModel.addLocationTile(locationTile, new QuickSettingsModel.RefreshCallback() {
- @Override
- public void refreshView(QuickSettingsTileView view, State state) {
- TextView tv = (TextView) view.findViewById(R.id.location_textview);
- tv.setText(state.label);
- view.setVisibility(state.enabled ? View.VISIBLE : View.GONE);
- }
- });
+ mModel.addLocationTile(locationTile,
+ new QuickSettingsModel.BasicRefreshCallback(locationTile)
+ .setShowWhenEnabled(true));
parent.addView(locationTile);
// Wifi Display
- QuickSettingsTileView wifiDisplayTile = (QuickSettingsTileView)
- inflater.inflate(R.layout.quick_settings_tile, parent, false);
- wifiDisplayTile.setContent(R.layout.quick_settings_tile_wifi_display, inflater);
+ QuickSettingsBasicTile wifiDisplayTile
+ = new QuickSettingsBasicTile(mContext);
+ wifiDisplayTile.setImageResource(R.drawable.ic_qs_remote_display);
wifiDisplayTile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startSettingsActivity(android.provider.Settings.ACTION_WIFI_DISPLAY_SETTINGS);
}
});
- mModel.addWifiDisplayTile(wifiDisplayTile, new QuickSettingsModel.RefreshCallback() {
- @Override
- public void refreshView(QuickSettingsTileView view, State state) {
- TextView tv = (TextView) view.findViewById(R.id.wifi_display_textview);
- tv.setText(state.label);
- tv.setCompoundDrawablesWithIntrinsicBounds(0, state.iconId, 0, 0);
- view.setVisibility(state.enabled ? View.VISIBLE : View.GONE);
- }
- });
+ mModel.addWifiDisplayTile(wifiDisplayTile,
+ new QuickSettingsModel.BasicRefreshCallback(wifiDisplayTile)
+ .setShowWhenEnabled(true));
parent.addView(wifiDisplayTile);
- if (SHOW_IME_TILE) {
+ if (SHOW_IME_TILE || DEBUG_GONE_TILES) {
// IME
- QuickSettingsTileView imeTile = (QuickSettingsTileView)
- inflater.inflate(R.layout.quick_settings_tile, parent, false);
- imeTile.setContent(R.layout.quick_settings_tile_ime, inflater);
+ final QuickSettingsBasicTile imeTile
+ = new QuickSettingsBasicTile(mContext);
+ imeTile.setImageResource(R.drawable.ic_qs_ime);
imeTile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
- mBar.collapseAllPanels(true);
+ collapsePanels();
Intent intent = new Intent(Settings.ACTION_SHOW_INPUT_METHOD_PICKER);
PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, intent, 0);
pendingIntent.send();
} catch (Exception e) {}
}
});
- mModel.addImeTile(imeTile, new QuickSettingsModel.RefreshCallback() {
- @Override
- public void refreshView(QuickSettingsTileView view, State state) {
- TextView tv = (TextView) view.findViewById(R.id.ime_textview);
- if (state.label != null) {
- tv.setText(state.label);
- }
- view.setVisibility(state.enabled ? View.VISIBLE : View.GONE);
- }
- });
+ mModel.addImeTile(imeTile,
+ new QuickSettingsModel.BasicRefreshCallback(imeTile)
+ .setShowWhenEnabled(true));
parent.addView(imeTile);
}
// Bug reports
- QuickSettingsTileView bugreportTile = (QuickSettingsTileView)
- inflater.inflate(R.layout.quick_settings_tile, parent, false);
- bugreportTile.setContent(R.layout.quick_settings_tile_bugreport, inflater);
+ final QuickSettingsBasicTile bugreportTile
+ = new QuickSettingsBasicTile(mContext);
+ bugreportTile.setImageResource(com.android.internal.R.drawable.stat_sys_adb);
+ bugreportTile.setTextResource(com.android.internal.R.string.bugreport_title);
bugreportTile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- mBar.collapseAllPanels(true);
+ collapsePanels();
showBugreportDialog();
}
});
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsBasicTile.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsBasicTile.java
new file mode 100644
index 0000000..94b2fc7
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsBasicTile.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2013 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.systemui.statusbar.phone;
+
+import com.android.systemui.R;
+
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+class QuickSettingsBasicTile extends QuickSettingsTileView {
+ private final TextView mTextView;
+ private final ImageView mImageView;
+
+ public QuickSettingsBasicTile(Context context) {
+ this(context, null);
+ }
+
+ public QuickSettingsBasicTile(Context context, AttributeSet attrs) {
+ super(context, attrs);
+
+ setLayoutParams(new FrameLayout.LayoutParams(
+ FrameLayout.LayoutParams.MATCH_PARENT,
+ context.getResources().getDimensionPixelSize(R.dimen.quick_settings_cell_height)
+ ));
+ setBackgroundResource(R.drawable.qs_tile_background);
+ addView(LayoutInflater.from(context).inflate(
+ R.layout.quick_settings_tile_basic, null),
+ new FrameLayout.LayoutParams(
+ FrameLayout.LayoutParams.MATCH_PARENT,
+ FrameLayout.LayoutParams.MATCH_PARENT));
+ mTextView = (TextView) findViewById(R.id.text);
+ mImageView = (ImageView) findViewById(R.id.image);
+ }
+
+ @Override
+ void setContent(int layoutId, LayoutInflater inflater) {
+ throw new RuntimeException("why?");
+ }
+
+ public ImageView getImageView() {
+ return mImageView;
+ }
+
+ public TextView getTextView() {
+ return mTextView;
+ }
+
+ public void setImageDrawable(Drawable drawable) {
+ mImageView.setImageDrawable(drawable);
+ }
+
+ public void setImageResource(int resId) {
+ mImageView.setImageResource(resId);
+ }
+
+ public void setText(CharSequence text) {
+ mTextView.setText(text);
+ }
+
+ public void setTextResource(int resId) {
+ mTextView.setText(resId);
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java
index 435ea4c..38c46c4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java
@@ -16,7 +16,6 @@
package com.android.systemui.statusbar.phone;
-import android.app.ActivityManager;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothAdapter.BluetoothStateChangeCallback;
import android.content.BroadcastReceiver;
@@ -96,6 +95,31 @@
public void refreshView(QuickSettingsTileView view, State state);
}
+ public static class BasicRefreshCallback implements RefreshCallback {
+ private final QuickSettingsBasicTile mView;
+ private boolean mShowWhenEnabled;
+
+ public BasicRefreshCallback(QuickSettingsBasicTile v) {
+ mView = v;
+ }
+ public void refreshView(QuickSettingsTileView ignored, State state) {
+ if (mShowWhenEnabled) {
+ mView.setVisibility(state.enabled ? View.VISIBLE : View.GONE);
+ }
+ if (state.iconId != 0) {
+ mView.setImageDrawable(null); // needed to flush any cached IDs
+ mView.setImageResource(state.iconId);
+ }
+ if (state.label != null) {
+ mView.setText(state.label);
+ }
+ }
+ public BasicRefreshCallback setShowWhenEnabled(boolean swe) {
+ mShowWhenEnabled = swe;
+ return this;
+ }
+ }
+
/** Broadcast receive to determine if there is an alarm set. */
private BroadcastReceiver mAlarmIntentReceiver = new BroadcastReceiver() {
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsTileView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsTileView.java
index 8f5cde6..9cff242 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsTileView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsTileView.java
@@ -19,6 +19,7 @@
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
+import android.view.View;
import android.widget.FrameLayout;
/**
@@ -28,7 +29,6 @@
private int mColSpan;
private int mRowSpan;
- private int mCellWidth;
public QuickSettingsTileView(Context context, AttributeSet attrs) {
super(context, attrs);
@@ -48,4 +48,19 @@
void setContent(int layoutId, LayoutInflater inflater) {
inflater.inflate(layoutId, this);
}
+
+ @Override
+ public void setVisibility(int vis) {
+ if (QuickSettings.DEBUG_GONE_TILES) {
+ if (vis == View.GONE) {
+ vis = View.VISIBLE;
+ setAlpha(0.25f);
+ setEnabled(false);
+ } else {
+ setAlpha(1f);
+ setEnabled(true);
+ }
+ }
+ super.setVisibility(vis);
+ }
}
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java b/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java
index 9146ccd..2c25236 100644
--- a/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java
@@ -30,6 +30,7 @@
import android.os.Bundle;
import android.os.IBinder;
import android.os.ServiceManager;
+import android.os.SystemProperties;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
@@ -54,7 +55,10 @@
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
- mDisconnectedReceiver = new UsbDisconnectedReceiver(this);
+ if (SystemProperties.getInt("service.adb.tcp.port", 0) == 0) {
+ mDisconnectedReceiver = new UsbDisconnectedReceiver(this);
+ }
+
Intent intent = getIntent();
String fingerprints = intent.getStringExtra("fingerprints");
mKey = intent.getStringExtra("key");
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index 273ac31..7f3fc43 100644
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -251,8 +251,9 @@
int mLidOpenRotation;
int mCarDockRotation;
int mDeskDockRotation;
- int mHdmiRotation;
- boolean mHdmiRotationLock;
+ int mUndockedHdmiRotation;
+ int mDemoHdmiRotation;
+ boolean mDemoHdmiRotationLock;
int mUserRotationMode = WindowManagerPolicy.USER_ROTATION_FREE;
int mUserRotation = Surface.ROTATION_0;
@@ -854,6 +855,8 @@
com.android.internal.R.integer.config_carDockRotation);
mDeskDockRotation = readRotation(
com.android.internal.R.integer.config_deskDockRotation);
+ mUndockedHdmiRotation = readRotation(
+ com.android.internal.R.integer.config_undockedHdmiRotation);
mCarDockEnablesAccelerometer = mContext.getResources().getBoolean(
com.android.internal.R.bool.config_carDockEnablesAccelerometer);
mDeskDockEnablesAccelerometer = mContext.getResources().getBoolean(
@@ -1024,11 +1027,11 @@
// For demo purposes, allow the rotation of the HDMI display to be controlled.
// By default, HDMI locks rotation to landscape.
if ("portrait".equals(SystemProperties.get("persist.demo.hdmirotation"))) {
- mHdmiRotation = mPortraitRotation;
+ mDemoHdmiRotation = mPortraitRotation;
} else {
- mHdmiRotation = mLandscapeRotation;
+ mDemoHdmiRotation = mLandscapeRotation;
}
- mHdmiRotationLock = SystemProperties.getBoolean("persist.demo.hdmirotationlock", false);
+ mDemoHdmiRotationLock = SystemProperties.getBoolean("persist.demo.hdmirotationlock", false);
}
@Override
@@ -3204,7 +3207,8 @@
mDismissKeyguard = mWinDismissingKeyguard == win ?
DISMISS_KEYGUARD_CONTINUE : DISMISS_KEYGUARD_START;
mWinDismissingKeyguard = win;
- mForceStatusBarFromKeyguard = false;
+ mForceStatusBarFromKeyguard =
+ mShowingLockscreen && mKeyguardMediator.isSecure();
}
if ((attrs.flags & FLAG_ALLOW_LOCK_WHILE_SCREEN_ON) != 0) {
mAllowLockscreenWhenOn = true;
@@ -4199,10 +4203,17 @@
// enable 180 degree rotation while docked.
preferredRotation = mDeskDockEnablesAccelerometer
? sensorRotation : mDeskDockRotation;
- } else if (mHdmiPlugged && mHdmiRotationLock) {
- // Ignore sensor when plugged into HDMI.
+ } else if (mHdmiPlugged && mDemoHdmiRotationLock) {
+ // Ignore sensor when plugged into HDMI when demo HDMI rotation lock enabled.
// Note that the dock orientation overrides the HDMI orientation.
- preferredRotation = mHdmiRotation;
+ preferredRotation = mDemoHdmiRotation;
+ } else if (mHdmiPlugged && mDockMode == Intent.EXTRA_DOCK_STATE_UNDOCKED
+ && mUndockedHdmiRotation >= 0) {
+ // Ignore sensor when plugged into HDMI and an undocked orientation has
+ // been specified in the configuration (only for legacy devices without
+ // full multi-display support).
+ // Note that the dock orientation overrides the HDMI orientation.
+ preferredRotation = mUndockedHdmiRotation;
} else if (orientation == ActivityInfo.SCREEN_ORIENTATION_LOCKED) {
// Application just wants to remain locked in the last rotation.
preferredRotation = lastRotation;
@@ -4966,7 +4977,8 @@
pw.print(" mSeascapeRotation="); pw.println(mSeascapeRotation);
pw.print(prefix); pw.print("mPortraitRotation="); pw.print(mPortraitRotation);
pw.print(" mUpsideDownRotation="); pw.println(mUpsideDownRotation);
- pw.print(prefix); pw.print("mHdmiRotation="); pw.print(mHdmiRotation);
- pw.print(" mHdmiRotationLock="); pw.println(mHdmiRotationLock);
+ pw.print(prefix); pw.print("mDemoHdmiRotation="); pw.print(mDemoHdmiRotation);
+ pw.print(" mDemoHdmiRotationLock="); pw.println(mDemoHdmiRotationLock);
+ pw.print(prefix); pw.print("mUndockedHdmiRotation="); pw.println(mUndockedHdmiRotation);
}
}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMessageArea.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMessageArea.java
index 77359ff..9b58803 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMessageArea.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMessageArea.java
@@ -23,12 +23,16 @@
import android.content.Context;
import android.os.BatteryManager;
import android.os.Handler;
+import android.os.IBinder;
import android.os.Looper;
+import android.os.RemoteException;
+import android.os.ServiceManager;
import android.os.SystemClock;
import android.os.UserHandle;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.AttributeSet;
+import android.util.Slog;
import android.view.View;
import android.widget.TextView;
@@ -37,6 +41,8 @@
import java.lang.ref.WeakReference;
import com.android.internal.R;
+import com.android.internal.widget.ILockSettings;
+import com.android.internal.widget.LockPatternUtils;
/***
* Manages a number of views inside of the given layout. See below for a list of widgets.
@@ -57,6 +63,8 @@
static final int SECURITY_MESSAGE_DURATION = 5000;
protected static final int FADE_DURATION = 750;
+ private static final String TAG = "KeyguardMessageArea";
+
// are we showing battery information?
boolean mShowingBatteryInfo = false;
@@ -82,6 +90,9 @@
CharSequence mMessage;
boolean mShowingMessage;
+ private CharSequence mSeparator;
+ private LockPatternUtils mLockPatternUtils;
+
Runnable mClearMessageRunnable = new Runnable() {
@Override
public void run() {
@@ -156,8 +167,6 @@
}
};
- private CharSequence mSeparator;
-
public KeyguardMessageArea(Context context) {
this(context, null);
}
@@ -165,6 +174,8 @@
public KeyguardMessageArea(Context context, AttributeSet attrs) {
super(context, attrs);
+ mLockPatternUtils = new LockPatternUtils(context);
+
// This is required to ensure marquee works
setSelected(true);
@@ -228,11 +239,12 @@
String getOwnerInfo() {
ContentResolver res = getContext().getContentResolver();
- final boolean ownerInfoEnabled = Settings.Secure.getIntForUser(res,
- Settings.Secure.LOCK_SCREEN_OWNER_INFO_ENABLED, 1, UserHandle.USER_CURRENT) != 0;
- return ownerInfoEnabled && !mShowingMessage ?
- Settings.Secure.getStringForUser(res, Settings.Secure.LOCK_SCREEN_OWNER_INFO,
- UserHandle.USER_CURRENT) : null;
+ String info = null;
+ final boolean ownerInfoEnabled = mLockPatternUtils.isOwnerInfoEnabled();
+ if (ownerInfoEnabled && !mShowingMessage) {
+ info = mLockPatternUtils.getOwnerInfo(mLockPatternUtils.getCurrentUser());
+ }
+ return info;
}
private CharSequence getChargeInfo(MutableInt icon) {
diff --git a/services/java/com/android/server/LockSettingsService.java b/services/java/com/android/server/LockSettingsService.java
index e20a21f..41cc4d7 100644
--- a/services/java/com/android/server/LockSettingsService.java
+++ b/services/java/com/android/server/LockSettingsService.java
@@ -19,6 +19,11 @@
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
+import android.content.pm.PackageManager;
+import android.content.pm.UserInfo;
+
+import static android.content.Context.USER_SERVICE;
+import static android.Manifest.permission.READ_PROFILE;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
@@ -27,8 +32,10 @@
import android.os.RemoteException;
import android.os.SystemProperties;
import android.os.UserHandle;
+import android.os.UserManager;
import android.provider.Settings;
import android.provider.Settings.Secure;
+import android.provider.Settings.SettingNotFoundException;
import android.text.TextUtils;
import android.util.Slog;
@@ -40,6 +47,7 @@
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;
+import java.util.List;
/**
* Keeps the lock pattern/password data and related settings for each user.
@@ -79,23 +87,52 @@
private void migrateOldData() {
try {
- if (getString("migrated", null, 0) != null) {
- // Already migrated
- return;
+ // These Settings moved before multi-user was enabled, so we only have to do it for the
+ // root user.
+ if (getString("migrated", null, 0) == null) {
+ final ContentResolver cr = mContext.getContentResolver();
+ for (String validSetting : VALID_SETTINGS) {
+ String value = Settings.Secure.getString(cr, validSetting);
+ if (value != null) {
+ setString(validSetting, value, 0);
+ }
+ }
+ // No need to move the password / pattern files. They're already in the right place.
+ setString("migrated", "true", 0);
+ Slog.i(TAG, "Migrated lock settings to new location");
}
- final ContentResolver cr = mContext.getContentResolver();
- for (String validSetting : VALID_SETTINGS) {
- String value = Settings.Secure.getString(cr, validSetting);
- if (value != null) {
- setString(validSetting, value, 0);
+ // These Settings changed after multi-user was enabled, hence need to be moved per user.
+ if (getString("migrated_user_specific", null, 0) == null) {
+ final UserManager um = (UserManager) mContext.getSystemService(USER_SERVICE);
+ final ContentResolver cr = mContext.getContentResolver();
+ List<UserInfo> users = um.getUsers();
+ for (int user = 0; user < users.size(); user++) {
+ int userId = users.get(user).getUserHandle().getIdentifier();
+ for (String perUserSetting : MIGRATE_SETTINGS_PER_USER) {
+ // Handle Strings
+ String value = Settings.Secure.getStringForUser(cr, perUserSetting, userId);
+ if (value != null) {
+ setString(perUserSetting, value, userId);
+ Settings.Secure.putStringForUser(cr, perUserSetting, "", userId);
+ continue;
+ }
+
+ // Handle integers
+ try {
+ int ivalue = Settings.Secure.getIntForUser(cr, perUserSetting, userId);
+ setLong(perUserSetting, ivalue, userId);
+ Settings.Secure.putIntForUser(cr, perUserSetting, 0, userId);
+ } catch (SettingNotFoundException e) {
+ }
+ }
}
+ // No need to move the password / pattern files. They're already in the right place.
+ setString("migrated_user_specific", "true", 0);
+ Slog.i(TAG, "Migrated per-user lock settings to new location");
}
- // No need to move the password / pattern files. They're already in the right place.
- setString("migrated", "true", 0);
- Slog.i(TAG, "Migrated lock settings to new location");
} catch (RemoteException re) {
- Slog.e(TAG, "Unable to migrate old data");
+ Slog.e(TAG, "Unable to migrate old data", re);
}
}
@@ -115,12 +152,16 @@
}
}
- private static final void checkReadPermission(int userId) {
+ private final void checkReadPermission(String requestedKey, int userId) {
final int callingUid = Binder.getCallingUid();
- if (UserHandle.getAppId(callingUid) != android.os.Process.SYSTEM_UID
- && UserHandle.getUserId(callingUid) != userId) {
- throw new SecurityException("uid=" + callingUid
- + " not authorized to read settings of user " + userId);
+ for (int i = 0; i < READ_PROFILE_PROTECTED_SETTINGS.length; i++) {
+ String key = READ_PROFILE_PROTECTED_SETTINGS[i];
+ if (key.equals(requestedKey) && mContext.checkCallingOrSelfPermission(READ_PROFILE)
+ != PackageManager.PERMISSION_GRANTED) {
+ throw new SecurityException("uid=" + callingUid
+ + " needs permission " + READ_PROFILE + " to read "
+ + requestedKey + " for user " + userId);
+ }
}
}
@@ -147,7 +188,7 @@
@Override
public boolean getBoolean(String key, boolean defaultValue, int userId) throws RemoteException {
- //checkReadPermission(userId);
+ checkReadPermission(key, userId);
String value = readFromDb(key, null, userId);
return TextUtils.isEmpty(value) ?
@@ -156,7 +197,7 @@
@Override
public long getLong(String key, long defaultValue, int userId) throws RemoteException {
- //checkReadPermission(userId);
+ checkReadPermission(key, userId);
String value = readFromDb(key, null, userId);
return TextUtils.isEmpty(value) ? defaultValue : Long.parseLong(value);
@@ -164,7 +205,7 @@
@Override
public String getString(String key, String defaultValue, int userId) throws RemoteException {
- //checkReadPermission(userId);
+ checkReadPermission(key, userId);
return readFromDb(key, defaultValue, userId);
}
@@ -404,5 +445,13 @@
Secure.LOCK_BIOMETRIC_WEAK_FLAGS,
Secure.LOCK_PATTERN_VISIBLE,
Secure.LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED
- };
+ };
+
+ private static final String[] MIGRATE_SETTINGS_PER_USER = new String[] {
+ Secure.LOCK_SCREEN_OWNER_INFO_ENABLED,
+ Secure.LOCK_SCREEN_OWNER_INFO
+ };
+
+ // These are protected with a read permission
+ private static final String[] READ_PROFILE_PROTECTED_SETTINGS = MIGRATE_SETTINGS_PER_USER;
}
diff --git a/services/java/com/android/server/NotificationManagerService.java b/services/java/com/android/server/NotificationManagerService.java
index fa18e76..3bebf91 100644
--- a/services/java/com/android/server/NotificationManagerService.java
+++ b/services/java/com/android/server/NotificationManagerService.java
@@ -1676,8 +1676,12 @@
.getSystemService(Context.AUDIO_SERVICE);
// sound
+
+ // should we use the default notification sound? (indicated either by DEFAULT_SOUND
+ // or because notification.sound is pointing at Settings.System.NOTIFICATION_SOUND)
final boolean useDefaultSound =
- (notification.defaults & Notification.DEFAULT_SOUND) != 0;
+ (notification.defaults & Notification.DEFAULT_SOUND) != 0
+ || Settings.System.DEFAULT_NOTIFICATION_URI.equals(notification.sound);
Uri soundUri = null;
boolean hasValidSound = false;
diff --git a/services/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/java/com/android/server/accessibility/AccessibilityManagerService.java
index 128a49f..1f3ac96 100644
--- a/services/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -970,7 +970,7 @@
private void addServiceLocked(Service service, UserState userState) {
try {
- service.linkToOwnDeath();
+ service.linkToOwnDeathLocked();
userState.mBoundServices.add(service);
userState.mComponentNameToServiceMap.put(service.mComponentName, service);
} catch (RemoteException re) {
@@ -987,7 +987,7 @@
private void removeServiceLocked(Service service, UserState userState) {
userState.mBoundServices.remove(service);
userState.mComponentNameToServiceMap.remove(service.mComponentName);
- service.unlinkToOwnDeath();
+ service.unlinkToOwnDeathLocked();
}
/**
@@ -1765,7 +1765,7 @@
userState.destroyUiAutomationService();
}
removeServiceLocked(this, userState);
- dispose();
+ resetLocked();
return true;
}
@@ -2150,15 +2150,15 @@
/* do nothing - #binderDied takes care */
}
- public void linkToOwnDeath() throws RemoteException {
+ public void linkToOwnDeathLocked() throws RemoteException {
mService.linkToDeath(this, 0);
}
- public void unlinkToOwnDeath() {
+ public void unlinkToOwnDeathLocked() {
mService.unlinkToDeath(this, 0);
}
- public void dispose() {
+ public void resetLocked() {
try {
// Clear the proxy in the other process so this
// IAccessibilityServiceConnection can be garbage collected.
@@ -2170,13 +2170,24 @@
mServiceInterface = null;
}
+ public boolean isInitializedLocked() {
+ return (mService != null);
+ }
+
public void binderDied() {
synchronized (mLock) {
+ // It is possible that this service's package was force stopped during
+ // whose handling the death recipient is unlinked and still get a call
+ // on binderDied since the call was made before we unlink but was
+ // waiting on the lock we held during the force stop handling.
+ if (!isInitializedLocked()) {
+ return;
+ }
mKeyEventDispatcher.flush();
UserState userState = getUserStateLocked(mUserId);
// The death recipient is unregistered in removeServiceLocked
removeServiceLocked(this, userState);
- dispose();
+ resetLocked();
if (mIsAutomation) {
// We no longer have an automation service, so restore
// the state based on values in the settings database.
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index bc1df85..1d17da9 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -4967,6 +4967,10 @@
return ActivityManagerService.this.checkComponentPermission(permission, pid, uid,
owningUid, exported);
}
+
+ public Object getAMSLock() {
+ return ActivityManagerService.this;
+ }
}
/**
diff --git a/services/java/com/android/server/am/NativeCrashListener.java b/services/java/com/android/server/am/NativeCrashListener.java
index 0688c50..de439d7 100644
--- a/services/java/com/android/server/am/NativeCrashListener.java
+++ b/services/java/com/android/server/am/NativeCrashListener.java
@@ -43,13 +43,14 @@
class NativeCrashListener extends Thread {
static final String TAG = "NativeCrashListener";
static final boolean DEBUG = false;
+ static final boolean MORE_DEBUG = DEBUG && false;
// Must match the path defined in debuggerd.c.
static final String DEBUGGERD_SOCKET_PATH = "/data/system/ndebugsocket";
// Use a short timeout on socket operations and abandon the connection
// on hard errors
- static final long SOCKET_TIMEOUT_MILLIS = 1000; // 1 second
+ static final long SOCKET_TIMEOUT_MILLIS = 2000; // 2 seconds
final ActivityManagerService mAm;
@@ -124,9 +125,9 @@
InetSocketAddress peer = new InetSocketAddress();
FileDescriptor peerFd = null;
try {
- if (DEBUG) Slog.v(TAG, "Waiting for debuggerd connection");
+ if (MORE_DEBUG) Slog.v(TAG, "Waiting for debuggerd connection");
peerFd = Libcore.os.accept(serverFd, peer);
- if (DEBUG) Slog.v(TAG, "Got debuggerd socket " + peerFd);
+ if (MORE_DEBUG) Slog.v(TAG, "Got debuggerd socket " + peerFd);
if (peerFd != null) {
// Only the superuser is allowed to talk to us over this socket
StructUcred credentials =
@@ -145,7 +146,12 @@
if (peerFd != null) {
try {
Libcore.os.write(peerFd, ackSignal, 0, 1);
- } catch (Exception e) { /* we don't care about failures here */ }
+ } catch (Exception e) {
+ /* we don't care about failures here */
+ if (MORE_DEBUG) {
+ Slog.d(TAG, "Exception writing ack: " + e.getMessage());
+ }
+ }
}
}
}
@@ -183,7 +189,7 @@
// Read the crash report from the debuggerd connection
void consumeNativeCrashData(FileDescriptor fd) {
- if (DEBUG) Slog.i(TAG, "debuggerd connected");
+ if (MORE_DEBUG) Slog.i(TAG, "debuggerd connected");
final byte[] buf = new byte[4096];
final ByteArrayOutputStream os = new ByteArrayOutputStream(4096);
@@ -218,7 +224,7 @@
// get some data
bytes = Libcore.os.read(fd, buf, 0, buf.length);
if (bytes > 0) {
- if (DEBUG) {
+ if (MORE_DEBUG) {
String s = new String(buf, 0, bytes, "UTF-8");
Slog.v(TAG, "READ=" + bytes + "> " + s);
}
diff --git a/services/java/com/android/server/firewall/IntentFirewall.java b/services/java/com/android/server/firewall/IntentFirewall.java
index 08e6b45..edba243 100644
--- a/services/java/com/android/server/firewall/IntentFirewall.java
+++ b/services/java/com/android/server/firewall/IntentFirewall.java
@@ -25,6 +25,9 @@
import android.content.pm.IPackageManager;
import android.content.pm.PackageManager;
import android.os.Environment;
+import android.os.FileObserver;
+import android.os.Handler;
+import android.os.Message;
import android.os.RemoteException;
import android.util.Slog;
import android.util.Xml;
@@ -58,19 +61,18 @@
private static final String TAG_BROADCAST = "broadcast";
private static final int TYPE_ACTIVITY = 0;
- private static final int TYPE_SERVICE = 1;
- private static final int TYPE_BROADCAST = 2;
+ private static final int TYPE_BROADCAST = 1;
+ private static final int TYPE_SERVICE = 2;
private static final HashMap<String, FilterFactory> factoryMap;
private final AMSInterface mAms;
- private final IntentResolver<FirewallIntentFilter, Rule> mActivityResolver =
- new FirewallIntentResolver();
- private final IntentResolver<FirewallIntentFilter, Rule> mServiceResolver =
- new FirewallIntentResolver();
- private final IntentResolver<FirewallIntentFilter, Rule> mBroadcastResolver =
- new FirewallIntentResolver();
+ private final RuleObserver mObserver;
+
+ private FirewallIntentResolver mActivityResolver = new FirewallIntentResolver();
+ private FirewallIntentResolver mBroadcastResolver = new FirewallIntentResolver();
+ private FirewallIntentResolver mServiceResolver = new FirewallIntentResolver();
static {
FilterFactory[] factories = new FilterFactory[] {
@@ -104,9 +106,18 @@
public IntentFirewall(AMSInterface ams) {
mAms = ams;
- readRules(getRulesFile());
+ File rulesFile = getRulesFile();
+
+ readRules(rulesFile);
+
+ mObserver = new RuleObserver(rulesFile);
+ mObserver.startWatching();
}
+ /**
+ * This is called from ActivityManager to check if a start activity intent should be allowed.
+ * It is assumed the caller is already holding the global ActivityManagerService lock.
+ */
public boolean checkStartActivity(Intent intent, ApplicationInfo callerApp, int callerUid,
int callerPid, String resolvedType, ActivityInfo resolvedActivity) {
List<Rule> matchingRules = mActivityResolver.queryIntent(intent, resolvedType, false, 0);
@@ -208,7 +219,18 @@
return RULES_FILE;
}
+ /**
+ * Reads rules from the given file and replaces our set of rules with the newly read rules
+ *
+ * All calls to this method from the file observer come through a handler and are inherently
+ * serialized
+ */
private void readRules(File rulesFile) {
+ FirewallIntentResolver[] resolvers = new FirewallIntentResolver[3];
+ for (int i=0; i<resolvers.length; i++) {
+ resolvers[i] = new FirewallIntentResolver();
+ }
+
FileInputStream fis;
try {
fis = new FileInputStream(rulesFile);
@@ -224,40 +246,59 @@
XmlUtils.beginDocument(parser, TAG_RULES);
+ int[] numRules = new int[3];
+
int outerDepth = parser.getDepth();
while (XmlUtils.nextElementWithin(parser, outerDepth)) {
- IntentResolver<FirewallIntentFilter, Rule> resolver = null;
+ int ruleType = -1;
+
String tagName = parser.getName();
if (tagName.equals(TAG_ACTIVITY)) {
- resolver = mActivityResolver;
- } else if (tagName.equals(TAG_SERVICE)) {
- resolver = mServiceResolver;
+ ruleType = TYPE_ACTIVITY;
} else if (tagName.equals(TAG_BROADCAST)) {
- resolver = mBroadcastResolver;
+ ruleType = TYPE_BROADCAST;
+ } else if (tagName.equals(TAG_SERVICE)) {
+ ruleType = TYPE_SERVICE;
}
- if (resolver != null) {
+ if (ruleType != -1) {
Rule rule = new Rule();
+ FirewallIntentResolver resolver = resolvers[ruleType];
+
+ // if we get an error while parsing a particular rule, we'll just ignore
+ // that rule and continue on with the next rule
try {
rule.readFromXml(parser);
} catch (XmlPullParserException ex) {
Slog.e(TAG, "Error reading intent firewall rule", ex);
continue;
- } catch (IOException ex) {
- Slog.e(TAG, "Error reading intent firewall rule", ex);
- continue;
}
+ numRules[ruleType]++;
+
for (int i=0; i<rule.getIntentFilterCount(); i++) {
resolver.addFilter(rule.getIntentFilter(i));
}
}
}
+
+ Slog.i(TAG, "Read new rules (A:" + numRules[TYPE_ACTIVITY] +
+ " B:" + numRules[TYPE_BROADCAST] + " S:" + numRules[TYPE_SERVICE] + ")");
+
+ synchronized (mAms.getAMSLock()) {
+ mActivityResolver = resolvers[TYPE_ACTIVITY];
+ mBroadcastResolver = resolvers[TYPE_BROADCAST];
+ mServiceResolver = resolvers[TYPE_SERVICE];
+ }
} catch (XmlPullParserException ex) {
+ // if there was an error outside of a specific rule, then there are probably
+ // structural problems with the xml file, and we should completely ignore it
Slog.e(TAG, "Error reading intent firewall rules", ex);
+ clearRules();
} catch (IOException ex) {
Slog.e(TAG, "Error reading intent firewall rules", ex);
+ clearRules();
} finally {
try {
fis.close();
@@ -267,6 +308,22 @@
}
}
+ /**
+ * Clears out all of our rules
+ *
+ * All calls to this method from the file observer come through a handler and are inherently
+ * serialized
+ */
+ private void clearRules() {
+ Slog.i(TAG, "Clearing all rules");
+
+ synchronized (mAms.getAMSLock()) {
+ mActivityResolver = new FirewallIntentResolver();
+ mBroadcastResolver = new FirewallIntentResolver();
+ mServiceResolver = new FirewallIntentResolver();
+ }
+ }
+
static Filter parseFilter(XmlPullParser parser) throws IOException, XmlPullParserException {
String elementName = parser.getName();
@@ -363,6 +420,58 @@
}
}
+ private static final int READ_RULES = 0;
+ private static final int CLEAR_RULES = 1;
+
+ final Handler mHandler = new Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case READ_RULES:
+ readRules(getRulesFile());
+ break;
+ case CLEAR_RULES:
+ clearRules();
+ break;
+ }
+ }
+ };
+
+ /**
+ * Monitors for the creation/deletion/modification of the rule file
+ */
+ private class RuleObserver extends FileObserver {
+ // The file name we're monitoring, with no path component
+ private final String mMonitoredFile;
+
+ private static final int CREATED_FLAGS = FileObserver.CREATE|FileObserver.MOVED_TO|
+ FileObserver.CLOSE_WRITE;
+ private static final int DELETED_FLAGS = FileObserver.DELETE|FileObserver.MOVED_FROM;
+
+ public RuleObserver(File monitoredFile) {
+ super(monitoredFile.getParentFile().getAbsolutePath(), CREATED_FLAGS|DELETED_FLAGS);
+ mMonitoredFile = monitoredFile.getName();
+ }
+
+ @Override
+ public void onEvent(int event, String path) {
+ if (path.equals(mMonitoredFile)) {
+ // we wait 250ms before taking any action on an event, in order to dedup multiple
+ // events. E.g. a delete event followed by a create event followed by a subsequent
+ // write+close event;
+ if ((event & CREATED_FLAGS) != 0) {
+ mHandler.removeMessages(READ_RULES);
+ mHandler.removeMessages(CLEAR_RULES);
+ mHandler.sendEmptyMessageDelayed(READ_RULES, 250);
+ } else if ((event & DELETED_FLAGS) != 0) {
+ mHandler.removeMessages(READ_RULES);
+ mHandler.removeMessages(CLEAR_RULES);
+ mHandler.sendEmptyMessageDelayed(CLEAR_RULES, 250);
+ }
+ }
+ }
+ }
+
/**
* This interface contains the methods we need from ActivityManagerService. This allows AMS to
* export these methods to us without making them public, and also makes it easier to test this
@@ -371,6 +480,7 @@
public interface AMSInterface {
int checkComponentPermission(String permission, int pid, int uid,
int owningUid, boolean exported);
+ Object getAMSLock();
}
/**
diff --git a/services/java/com/android/server/pm/UserManagerService.java b/services/java/com/android/server/pm/UserManagerService.java
index df90a56..11c6dab 100644
--- a/services/java/com/android/server/pm/UserManagerService.java
+++ b/services/java/com/android/server/pm/UserManagerService.java
@@ -88,8 +88,13 @@
private static final String TAG_ENTRY = "entry";
private static final String TAG_VALUE = "value";
private static final String ATTR_KEY = "key";
+ private static final String ATTR_VALUE_TYPE = "type";
private static final String ATTR_MULTIPLE = "m";
+ private static final String ATTR_TYPE_STRING_ARRAY = "sa";
+ private static final String ATTR_TYPE_STRING = "s";
+ private static final String ATTR_TYPE_BOOLEAN = "b";
+
private static final String USER_INFO_DIR = "system" + File.separator + "users";
private static final String USER_LIST_FILENAME = "userlist.xml";
private static final String USER_PHOTO_FILENAME = "photo.png";
@@ -965,7 +970,12 @@
}
@Override
- public List<RestrictionEntry> getApplicationRestrictions(String packageName, int userId) {
+ public Bundle getApplicationRestrictions(String packageName) {
+ return getApplicationRestrictionsForUser(packageName, UserHandle.getCallingUserId());
+ }
+
+ @Override
+ public Bundle getApplicationRestrictionsForUser(String packageName, int userId) {
if (UserHandle.getCallingUserId() != userId
|| !UserHandle.isSameApp(Binder.getCallingUid(), getUidForPackage(packageName))) {
checkManageUsersPermission("Only system can get restrictions for other users/apps");
@@ -977,7 +987,7 @@
}
@Override
- public void setApplicationRestrictions(String packageName, List<RestrictionEntry> entries,
+ public void setApplicationRestrictions(String packageName, Bundle restrictions,
int userId) {
if (UserHandle.getCallingUserId() != userId
|| !UserHandle.isSameApp(Binder.getCallingUid(), getUidForPackage(packageName))) {
@@ -985,7 +995,7 @@
}
synchronized (mPackagesLock) {
// Write the restrictions to XML
- writeApplicationRestrictionsLocked(packageName, entries, userId);
+ writeApplicationRestrictionsLocked(packageName, restrictions, userId);
}
}
@@ -1001,9 +1011,9 @@
}
}
- private List<RestrictionEntry> readApplicationRestrictionsLocked(String packageName,
+ private Bundle readApplicationRestrictionsLocked(String packageName,
int userId) {
- final ArrayList<RestrictionEntry> entries = new ArrayList<RestrictionEntry>();
+ final Bundle restrictions = new Bundle();
final ArrayList<String> values = new ArrayList<String>();
FileInputStream fis = null;
@@ -1023,12 +1033,13 @@
if (type != XmlPullParser.START_TAG) {
Slog.e(LOG_TAG, "Unable to read restrictions file "
+ restrictionsFile.getBaseFile());
- return entries;
+ return restrictions;
}
while ((type = parser.next()) != XmlPullParser.END_DOCUMENT) {
if (type == XmlPullParser.START_TAG && parser.getName().equals(TAG_ENTRY)) {
String key = parser.getAttributeValue(null, ATTR_KEY);
+ String valType = parser.getAttributeValue(null, ATTR_VALUE_TYPE);
String multiple = parser.getAttributeValue(null, ATTR_MULTIPLE);
if (multiple != null) {
int count = Integer.parseInt(multiple);
@@ -1041,14 +1052,13 @@
}
String [] valueStrings = new String[values.size()];
values.toArray(valueStrings);
- Slog.d(LOG_TAG, "Got RestrictionEntry " + key + "," + valueStrings);
- RestrictionEntry entry = new RestrictionEntry(key, valueStrings);
- entries.add(entry);
+ restrictions.putStringArray(key, valueStrings);
+ } else if (ATTR_TYPE_BOOLEAN.equals(valType)) {
+ restrictions.putBoolean(key, Boolean.parseBoolean(
+ parser.nextText().trim()));
} else {
String value = parser.nextText().trim();
- Slog.d(LOG_TAG, "Got RestrictionEntry " + key + "," + value);
- RestrictionEntry entry = new RestrictionEntry(key, value);
- entries.add(entry);
+ restrictions.putString(key, value);
}
}
}
@@ -1063,11 +1073,11 @@
}
}
}
- return entries;
+ return restrictions;
}
private void writeApplicationRestrictionsLocked(String packageName,
- List<RestrictionEntry> entries, int userId) {
+ Bundle restrictions, int userId) {
FileOutputStream fos = null;
AtomicFile restrictionsFile = new AtomicFile(
new File(Environment.getUserSystemDirectory(userId),
@@ -1084,18 +1094,24 @@
serializer.startTag(null, TAG_RESTRICTIONS);
- for (RestrictionEntry entry : entries) {
+ for (String key : restrictions.keySet()) {
+ Object value = restrictions.get(key);
serializer.startTag(null, TAG_ENTRY);
- serializer.attribute(null, ATTR_KEY, entry.getKey());
- if (entry.getSelectedString() != null || entry.getAllSelectedStrings() == null) {
- String value = entry.getSelectedString();
- serializer.text(value != null ? value : "");
+ serializer.attribute(null, ATTR_KEY, key);
+
+ if (value instanceof Boolean) {
+ serializer.attribute(null, ATTR_VALUE_TYPE, ATTR_TYPE_BOOLEAN);
+ serializer.text(value.toString());
+ } else if (value == null || value instanceof String) {
+ serializer.attribute(null, ATTR_VALUE_TYPE, ATTR_TYPE_STRING);
+ serializer.text(value != null ? (String) value : "");
} else {
- String[] values = entry.getAllSelectedStrings();
+ serializer.attribute(null, ATTR_VALUE_TYPE, ATTR_TYPE_STRING_ARRAY);
+ String[] values = (String[]) value;
serializer.attribute(null, ATTR_MULTIPLE, Integer.toString(values.length));
- for (String value : values) {
+ for (String choice : values) {
serializer.startTag(null, TAG_VALUE);
- serializer.text(value != null ? value : "");
+ serializer.text(choice != null ? choice : "");
serializer.endTag(null, TAG_VALUE);
}
}
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index 1d1fda5..bc442ce 100644
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -5490,6 +5490,7 @@
ScreenRotationAnimation.createRotationMatrix(rot, dw, dh, matrix);
matrix.postTranslate(-FloatMath.ceil(frame.left*scale), -FloatMath.ceil(frame.top*scale));
Canvas canvas = new Canvas(bm);
+ canvas.drawColor(0xFF000000);
canvas.drawBitmap(rawss, matrix, null);
canvas.setBitmap(null);
diff --git a/tests/CanvasCompare/AndroidManifest.xml b/tests/CanvasCompare/AndroidManifest.xml
index 1cb8c37..b55e290 100644
--- a/tests/CanvasCompare/AndroidManifest.xml
+++ b/tests/CanvasCompare/AndroidManifest.xml
@@ -15,8 +15,9 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.test.hwuicompare" >
- <!-- for perfhud -->
<uses-permission android:name="android.permission.INTERNET" />
+ <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
+ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:label="@string/app_name"
diff --git a/tests/CanvasCompare/src/com/android/test/hwuicompare/AutomaticActivity.java b/tests/CanvasCompare/src/com/android/test/hwuicompare/AutomaticActivity.java
index e0ff1dc..1ed4723 100644
--- a/tests/CanvasCompare/src/com/android/test/hwuicompare/AutomaticActivity.java
+++ b/tests/CanvasCompare/src/com/android/test/hwuicompare/AutomaticActivity.java
@@ -16,11 +16,20 @@
package com.android.test.hwuicompare;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.TreeSet;
-import com.android.test.hwuicompare.R;
+import org.json.JSONException;
+import org.json.JSONObject;
import android.os.Bundle;
+import android.os.Environment;
import android.os.Trace;
import android.util.Log;
import android.widget.ImageView;
@@ -31,20 +40,31 @@
private static final float ERROR_DISPLAY_THRESHOLD = 0.01f;
protected static final boolean DRAW_BITMAPS = false;
+ /**
+ * Threshold of error change required to consider a test regressed/improved
+ */
+ private static final float ERROR_CHANGE_THRESHOLD = 0.001f;
+
+ private static final float[] ERROR_CUTOFFS = {
+ 0, 0.005f, 0.01f, 0.02f, 0.05f, 0.1f, 0.25f, 0.5f, 1f, 2f
+ };
+
+ private final float[] mErrorRates = new float[ERROR_CUTOFFS.length];
+ private float mTotalTests = 0;
+ private float mTotalError = 0;
+ private int mTestsRegressed = 0;
+ private int mTestsImproved = 0;
+
private ImageView mSoftwareImageView = null;
private ImageView mHardwareImageView = null;
- private static final float[] ERROR_CUTOFFS = {0, 0.005f, 0.01f, 0.02f, 0.05f, 0.1f, 0.25f, 0.5f, 1f, 2f};
- private float[] mErrorRates = new float[ERROR_CUTOFFS.length];
- private float mTotalTests = 0;
- private float mTotalError = 0;
- public abstract static class TestCallback {
+ public abstract static class FinalCallback {
abstract void report(String name, float value);
- void complete() {}
+ void complete() {};
}
- private ArrayList<TestCallback> mTestCallbacks = new ArrayList<TestCallback>();
+ private final ArrayList<FinalCallback> mFinalCallbacks = new ArrayList<FinalCallback>();
Runnable mRunnable = new Runnable() {
@Override
@@ -64,32 +84,11 @@
float error = mErrorCalculator.calcErrorRS(mSoftwareBitmap, mHardwareBitmap);
Trace.traceEnd(Trace.TRACE_TAG_ALWAYS);
- if (error > ERROR_DISPLAY_THRESHOLD) {
- String modname = "";
- for (String s : DisplayModifier.getLastAppliedModifications()) {
- modname = modname.concat(s + ".");
- }
- Log.d(LOG_TAG, String.format("error for %s was %2.9f", modname, error));
- }
- for (int i = 0; i < ERROR_CUTOFFS.length; i++) {
- if (error <= ERROR_CUTOFFS[i]) break;
- mErrorRates[i]++;
- }
- mTotalError += error;
- mTotalTests++;
+ final String[] modifierNames = DisplayModifier.getLastAppliedModifications();
+ handleError(modifierNames, error);
if (DisplayModifier.step()) {
- for (TestCallback c : mTestCallbacks) {
- c.report("averageError", (mTotalError / mTotalTests));
- for (int i = 1; i < ERROR_CUTOFFS.length; i++) {
- c.report(String.format("error over %1.3f", ERROR_CUTOFFS[i]),
- mErrorRates[i]/mTotalTests);
- }
- c.complete();
- }
-
- Toast.makeText(getApplicationContext(), "done!", Toast.LENGTH_SHORT).show();
- finish();
+ finishTest();
} else {
mHardwareView.invalidate();
if (DRAW_BITMAPS) {
@@ -116,11 +115,186 @@
mHardwareImageView = (ImageView) findViewById(R.id.hardware_image_view);
onCreateCommon(mRunnable);
- mTestCallbacks.add(new TestCallback() {
+ beginTest();
+ }
+
+ private static class TestResult {
+ TestResult(String label, float error) {
+ mLabel = label;
+ mTotalError = error;
+ mCount = 1;
+ }
+ public void addInto(float error) {
+ mTotalError += error;
+ mCount++;
+ }
+ public float getAverage() {
+ return mTotalError / mCount;
+ }
+ final String mLabel;
+ float mTotalError;
+ int mCount;
+ }
+
+ JSONObject mOutputJson = null;
+ JSONObject mInputJson = null;
+ final HashMap<String, TestResult> mModifierResults = new HashMap<String, TestResult>();
+ final HashMap<String, TestResult> mIndividualResults = new HashMap<String, TestResult>();
+ final HashMap<String, TestResult> mModifierDiffResults = new HashMap<String, TestResult>();
+ final HashMap<String, TestResult> mIndividualDiffResults = new HashMap<String, TestResult>();
+ private void beginTest() {
+ mFinalCallbacks.add(new FinalCallback() {
+ @Override
void report(String name, float value) {
Log.d(LOG_TAG, name + " " + value);
};
});
+
+ File inputFile = new File(Environment.getExternalStorageDirectory(),
+ "CanvasCompareInput.json");
+ if (inputFile.exists() && inputFile.canRead() && inputFile.length() > 0) {
+ try {
+ FileInputStream inputStream = new FileInputStream(inputFile);
+ Log.d(LOG_TAG, "Parsing input file...");
+ StringBuffer content = new StringBuffer((int)inputFile.length());
+ byte[] buffer = new byte[1024];
+ while (inputStream.read(buffer) != -1) {
+ content.append(new String(buffer));
+ }
+ mInputJson = new JSONObject(content.toString());
+ inputStream.close();
+ Log.d(LOG_TAG, "Parsed input file with " + mInputJson.length() + " entries");
+ } catch (JSONException e) {
+ Log.e(LOG_TAG, "error parsing input json", e);
+ } catch (IOException e) {
+ Log.e(LOG_TAG, "error reading input json from sd", e);
+ }
+ }
+
+ mOutputJson = new JSONObject();
+ }
+
+ private static void logTestResultHash(String label, HashMap<String, TestResult> map) {
+ Log.d(LOG_TAG, "---------------");
+ Log.d(LOG_TAG, label + ":");
+ Log.d(LOG_TAG, "---------------");
+ TreeSet<TestResult> set = new TreeSet<TestResult>(new Comparator<TestResult>() {
+ @Override
+ public int compare(TestResult lhs, TestResult rhs) {
+ if (lhs == rhs) return 0; // don't need to worry about complex equality
+
+ int cmp = Float.compare(lhs.getAverage(), rhs.getAverage());
+ if (cmp != 0) {
+ return cmp;
+ }
+ return lhs.mLabel.compareTo(rhs.mLabel);
+ }
+ });
+
+ for (TestResult t : map.values()) {
+ set.add(t);
+ }
+
+ for (TestResult t : set.descendingSet()) {
+ if (Math.abs(t.getAverage()) > ERROR_DISPLAY_THRESHOLD) {
+ Log.d(LOG_TAG, String.format("%2.4f : %s", t.getAverage(), t.mLabel));
+ }
+ }
+ Log.d(LOG_TAG, "");
+ }
+
+ private void finishTest() {
+ for (FinalCallback c : mFinalCallbacks) {
+ c.report("averageError", (mTotalError / mTotalTests));
+ for (int i = 1; i < ERROR_CUTOFFS.length; i++) {
+ c.report(String.format("tests with error over %1.3f", ERROR_CUTOFFS[i]),
+ mErrorRates[i]);
+ }
+ if (mInputJson != null) {
+ c.report("tests regressed", mTestsRegressed);
+ c.report("tests improved", mTestsImproved);
+ }
+ c.complete();
+ }
+
+ try {
+ if (mOutputJson != null) {
+ String outputString = mOutputJson.toString(4);
+ File outputFile = new File(Environment.getExternalStorageDirectory(),
+ "CanvasCompareOutput.json");
+ FileOutputStream outputStream = new FileOutputStream(outputFile);
+ outputStream.write(outputString.getBytes());
+ outputStream.close();
+ Log.d(LOG_TAG, "Saved output file with " + mOutputJson.length() + " entries");
+ }
+ } catch (JSONException e) {
+ Log.e(LOG_TAG, "error during JSON stringify", e);
+ } catch (IOException e) {
+ Log.e(LOG_TAG, "error storing JSON output on sd", e);
+ }
+
+ logTestResultHash("Modifier change vs previous", mModifierDiffResults);
+ logTestResultHash("Invidual test change vs previous", mIndividualDiffResults);
+ logTestResultHash("Modifier average test results", mModifierResults);
+ logTestResultHash("Individual test results", mIndividualResults);
+
+ Toast.makeText(getApplicationContext(), "done!", Toast.LENGTH_SHORT).show();
+ finish();
+ }
+
+ /**
+ * Inserts the error value into all TestResult objects, associated with each of its modifiers
+ */
+ private static void addForAllModifiers(String fullName, float error, String[] modifierNames,
+ HashMap<String, TestResult> modifierResults) {
+ for (String modifierName : modifierNames) {
+ TestResult r = modifierResults.get(fullName);
+ if (r == null) {
+ modifierResults.put(modifierName, new TestResult(modifierName, error));
+ } else {
+ r.addInto(error);
+ }
+ }
+ }
+
+ private void handleError(final String[] modifierNames, final float error) {
+ String fullName = "";
+ for (String s : modifierNames) {
+ fullName = fullName.concat("." + s);
+ }
+ fullName = fullName.substring(1);
+
+ float deltaError = 0;
+ if (mInputJson != null) {
+ try {
+ deltaError = error - (float)mInputJson.getDouble(fullName);
+ } catch (JSONException e) {
+ Log.w(LOG_TAG, "Warning: unable to read from input json", e);
+ }
+ if (deltaError > ERROR_CHANGE_THRESHOLD) mTestsRegressed++;
+ if (deltaError < -ERROR_CHANGE_THRESHOLD) mTestsImproved++;
+ mIndividualDiffResults.put(fullName, new TestResult(fullName, deltaError));
+ addForAllModifiers(fullName, deltaError, modifierNames, mModifierDiffResults);
+ }
+
+ mIndividualResults.put(fullName, new TestResult(fullName, error));
+ addForAllModifiers(fullName, error, modifierNames, mModifierResults);
+
+ try {
+ if (mOutputJson != null) {
+ mOutputJson.put(fullName, error);
+ }
+ } catch (JSONException e) {
+ Log.e(LOG_TAG, "exception during JSON recording", e);
+ mOutputJson = null;
+ }
+
+ for (int i = 0; i < ERROR_CUTOFFS.length; i++) {
+ if (error <= ERROR_CUTOFFS[i]) break;
+ mErrorRates[i]++;
+ }
+ mTotalError += error;
+ mTotalTests++;
}
@Override
@@ -130,7 +304,7 @@
}
// FOR TESTING
- public void setCallback(TestCallback c) {
- mTestCallbacks.add(c);
+ public void setFinalCallback(FinalCallback c) {
+ mFinalCallbacks.add(c);
}
}
diff --git a/tests/CanvasCompare/src/com/android/test/hwuicompare/Test.java b/tests/CanvasCompare/src/com/android/test/hwuicompare/Test.java
index 6ea8237..1ff153c 100644
--- a/tests/CanvasCompare/src/com/android/test/hwuicompare/Test.java
+++ b/tests/CanvasCompare/src/com/android/test/hwuicompare/Test.java
@@ -1,6 +1,6 @@
package com.android.test.hwuicompare;
-import com.android.test.hwuicompare.AutomaticActivity.TestCallback;
+import com.android.test.hwuicompare.AutomaticActivity.FinalCallback;
import android.os.Bundle;
import android.test.ActivityInstrumentationTestCase2;
@@ -18,7 +18,7 @@
super.setUp();
mBundle = new Bundle();
mActivity = getActivity();
- mActivity.setCallback(new TestCallback() {
+ mActivity.setFinalCallback(new FinalCallback() {
@Override
void report(String key, float value) {
diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java
index a5d98cc..2c3df95 100644
--- a/wifi/java/android/net/wifi/WifiStateMachine.java
+++ b/wifi/java/android/net/wifi/WifiStateMachine.java
@@ -2383,6 +2383,8 @@
mWifiNative.disconnect();
transitionTo(mScanModeState);
} else {
+ /* Driver stop may have disabled networks, enable right after start */
+ mWifiConfigStore.enableAllNetworks();
mWifiNative.reconnect();
// Status pulls in the current supplicant state and network connection state
// events over the monitor connection. This helps framework sync up with