1560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich** 2560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich** Copyright 2009, The Android Open Source Project 3560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich** 424ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes** Licensed under the Apache License, Version 2.0 (the "License"); 524ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes** you may not use this file except in compliance with the License. 624ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes** You may obtain a copy of the License at 7560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich** 824ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes** http://www.apache.org/licenses/LICENSE-2.0 9560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich** 1024ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes** Unless required by applicable law or agreed to in writing, software 1124ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes** distributed under the License is distributed on an "AS IS" BASIS, 1224ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1324ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes** See the License for the specific language governing permissions and 14560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich** limitations under the License. 15560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich*/ 16560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich 17560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich// This source file is automatically generated 18560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich 1924ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes#include "jni.h" 2024ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes#include "JNIHelp.h" 21560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich#include <android_runtime/AndroidRuntime.h> 22560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich#include <utils/misc.h> 23560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich 24560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich#include <assert.h> 25560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich#include <GLES2/gl2.h> 26560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich#include <GLES2/gl2ext.h> 27560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich 28560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevichstatic int initialized = 0; 29560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich 30560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevichstatic jclass nioAccessClass; 31560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevichstatic jclass bufferClass; 32560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevichstatic jmethodID getBasePointerID; 33560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevichstatic jmethodID getBaseArrayID; 34560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevichstatic jmethodID getBaseArrayOffsetID; 35560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevichstatic jfieldID positionID; 36560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevichstatic jfieldID limitID; 37560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevichstatic jfieldID elementSizeShiftID; 38560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich 39560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich/* Cache method IDs each time the class is loaded. */ 40560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich 41560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevichstatic void 4224ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott HughesnativeClassInit(JNIEnv *_env, jclass glImplClass) 43560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich{ 44560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess"); 45560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich nioAccessClass = (jclass) _env->NewGlobalRef(nioAccessClassLocal); 46560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich 47560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich jclass bufferClassLocal = _env->FindClass("java/nio/Buffer"); 48560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich bufferClass = (jclass) _env->NewGlobalRef(bufferClassLocal); 49560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich 50560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich getBasePointerID = _env->GetStaticMethodID(nioAccessClass, 51560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich "getBasePointer", "(Ljava/nio/Buffer;)J"); 52560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich getBaseArrayID = _env->GetStaticMethodID(nioAccessClass, 53560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;"); 54560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich getBaseArrayOffsetID = _env->GetStaticMethodID(nioAccessClass, 55560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich "getBaseArrayOffset", "(Ljava/nio/Buffer;)I"); 56560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich 57560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich positionID = _env->GetFieldID(bufferClass, "position", "I"); 58560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich limitID = _env->GetFieldID(bufferClass, "limit", "I"); 59560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich elementSizeShiftID = 60560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich _env->GetFieldID(bufferClass, "_elementSizeShift", "I"); 61560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich} 62560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich 63560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich 64560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevichstatic void * 65560814f6b11abe83ff0c4ed18cac015c276b3181Jack PalevichgetPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining) 66560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich{ 67560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich jint position; 68560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich jint limit; 69560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich jint elementSizeShift; 70560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich jlong pointer; 71560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich jint offset; 72560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich void *data; 73560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich 74560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich position = _env->GetIntField(buffer, positionID); 75560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich limit = _env->GetIntField(buffer, limitID); 76560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID); 77560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich *remaining = (limit - position) << elementSizeShift; 78560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich pointer = _env->CallStaticLongMethod(nioAccessClass, 79560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich getBasePointerID, buffer); 80560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich if (pointer != 0L) { 81560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich *array = NULL; 82560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich return (void *) (jint) pointer; 83560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich } 8424ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes 85560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich *array = (jarray) _env->CallStaticObjectMethod(nioAccessClass, 86560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich getBaseArrayID, buffer); 87560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich offset = _env->CallStaticIntMethod(nioAccessClass, 88560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich getBaseArrayOffsetID, buffer); 89560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich data = _env->GetPrimitiveArrayCritical(*array, (jboolean *) 0); 9024ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes 91560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich return (void *) ((char *) data + offset); 92560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich} 93560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich 94560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich 95560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevichstatic void 96560814f6b11abe83ff0c4ed18cac015c276b3181Jack PalevichreleasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit) 97560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich{ 98560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich _env->ReleasePrimitiveArrayCritical(array, data, 99560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich commit ? 0 : JNI_ABORT); 100560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich} 101560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich 102560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevichstatic void * 103560814f6b11abe83ff0c4ed18cac015c276b3181Jack PalevichgetDirectBufferPointer(JNIEnv *_env, jobject buffer) { 104560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich char* buf = (char*) _env->GetDirectBufferAddress(buffer); 105560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich if (buf) { 106560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich jint position = _env->GetIntField(buffer, positionID); 107560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich jint elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID); 108560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich buf += position << elementSizeShift; 109560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich } else { 11024ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes jniThrowException(_env, "java/lang/IllegalArgumentException", 11124ce5fb2cc09d0a14406e7b935f8648c5720d27eElliott Hughes "Must use a native order direct Buffer"); 112560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich } 113560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich return (void*) buf; 114560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich} 115560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich 116560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevichstatic int 117560814f6b11abe83ff0c4ed18cac015c276b3181Jack PalevichgetNumCompressedTextureFormats() { 118560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich int numCompressedTextureFormats = 0; 119560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &numCompressedTextureFormats); 120560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich return numCompressedTextureFormats; 121560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich} 122560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich 123560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevichstatic void glVertexAttribPointerBounds(GLuint indx, GLint size, GLenum type, 124560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich GLboolean normalized, GLsizei stride, const GLvoid *pointer, GLsizei count) { 125560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich glVertexAttribPointer(indx, size, type, normalized, stride, pointer); 126560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich} 127560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich 128560814f6b11abe83ff0c4ed18cac015c276b3181Jack Palevich// -------------------------------------------------------------------------- 129