1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** 2427f585f726af6e3bd1fb835f26b2af9f609c483Jack Palevich** Copyright 2009, The Android Open Source Project 3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** 49875750593aae7c2a62f33c620809d49162393ebElliott Hughes** Licensed under the Apache License, Version 2.0 (the "License"); 59875750593aae7c2a62f33c620809d49162393ebElliott Hughes** you may not use this file except in compliance with the License. 69875750593aae7c2a62f33c620809d49162393ebElliott Hughes** You may obtain a copy of the License at 7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** 89875750593aae7c2a62f33c620809d49162393ebElliott Hughes** http://www.apache.org/licenses/LICENSE-2.0 9edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** 109875750593aae7c2a62f33c620809d49162393ebElliott Hughes** Unless required by applicable law or agreed to in writing, software 119875750593aae7c2a62f33c620809d49162393ebElliott Hughes** distributed under the License is distributed on an "AS IS" BASIS, 129875750593aae7c2a62f33c620809d49162393ebElliott Hughes** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139875750593aae7c2a62f33c620809d49162393ebElliott Hughes** See the License for the specific language governing permissions and 14edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** limitations under the License. 15edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project*/ 16edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 17edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// This source file is automatically generated 18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 199875750593aae7c2a62f33c620809d49162393ebElliott Hughes#include "jni.h" 209875750593aae7c2a62f33c620809d49162393ebElliott Hughes#include "JNIHelp.h" 21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <android_runtime/AndroidRuntime.h> 22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/misc.h> 23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <assert.h> 25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <GLES/gl.h> 26593f203ba3df251b238409bb3fcc66b0a90b856dJack Palevich#include <GLES/glext.h> 27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic int initialized = 0; 29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic jclass nioAccessClass; 31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic jclass bufferClass; 32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic jmethodID getBasePointerID; 33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic jmethodID getBaseArrayID; 34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic jmethodID getBaseArrayOffsetID; 35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic jfieldID positionID; 36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic jfieldID limitID; 37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic jfieldID elementSizeShiftID; 38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/* Cache method IDs each time the class is loaded. */ 40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 41427f585f726af6e3bd1fb835f26b2af9f609c483Jack Palevichstatic void 429875750593aae7c2a62f33c620809d49162393ebElliott HughesnativeClassInit(JNIEnv *_env, jclass glImplClass) 43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess"); 45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project nioAccessClass = (jclass) _env->NewGlobalRef(nioAccessClassLocal); 46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project jclass bufferClassLocal = _env->FindClass("java/nio/Buffer"); 48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project bufferClass = (jclass) _env->NewGlobalRef(bufferClassLocal); 49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project getBasePointerID = _env->GetStaticMethodID(nioAccessClass, 51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project "getBasePointer", "(Ljava/nio/Buffer;)J"); 52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project getBaseArrayID = _env->GetStaticMethodID(nioAccessClass, 53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;"); 54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project getBaseArrayOffsetID = _env->GetStaticMethodID(nioAccessClass, 55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project "getBaseArrayOffset", "(Ljava/nio/Buffer;)I"); 56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project positionID = _env->GetFieldID(bufferClass, "position", "I"); 58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project limitID = _env->GetFieldID(bufferClass, "limit", "I"); 59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project elementSizeShiftID = 60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project _env->GetFieldID(bufferClass, "_elementSizeShift", "I"); 61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic void * 65e58a97b5d77b59fad1572ba3c0572c7434e8e503Thomas TafertshofergetPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining, jint *offset) 66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project jint position; 68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project jint limit; 69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project jint elementSizeShift; 70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project jlong pointer; 71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project position = _env->GetIntField(buffer, positionID); 73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project limit = _env->GetIntField(buffer, limitID); 74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID); 75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *remaining = (limit - position) << elementSizeShift; 76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project pointer = _env->CallStaticLongMethod(nioAccessClass, 77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project getBasePointerID, buffer); 78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if (pointer != 0L) { 79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *array = NULL; 80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return (void *) (jint) pointer; 81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 829875750593aae7c2a62f33c620809d49162393ebElliott Hughes 83edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *array = (jarray) _env->CallStaticObjectMethod(nioAccessClass, 84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project getBaseArrayID, buffer); 85e58a97b5d77b59fad1572ba3c0572c7434e8e503Thomas Tafertshofer *offset = _env->CallStaticIntMethod(nioAccessClass, 86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project getBaseArrayOffsetID, buffer); 879875750593aae7c2a62f33c620809d49162393ebElliott Hughes 88e58a97b5d77b59fad1572ba3c0572c7434e8e503Thomas Tafertshofer return NULL; 89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic void 93edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectreleasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit) 94edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 95edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project _env->ReleasePrimitiveArrayCritical(array, data, 96edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project commit ? 0 : JNI_ABORT); 97edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 99edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// -------------------------------------------------------------------------- 100