GLES10ExtcHeader.cpp revision 427f585f726af6e3bd1fb835f26b2af9f609c483
1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** 2427f585f726af6e3bd1fb835f26b2af9f609c483Jack Palevich** Copyright 2009, The Android Open Source Project 3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** 4edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License"); 5edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** you may not use this file except in compliance with the License. 6edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** You may obtain a copy of the License at 7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** 8edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** http://www.apache.org/licenses/LICENSE-2.0 9edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** 10edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** Unless required by applicable law or agreed to in writing, software 11edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** distributed under the License is distributed on an "AS IS" BASIS, 12edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** 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 19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <android_runtime/AndroidRuntime.h> 20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/misc.h> 21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <assert.h> 23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <GLES/gl.h> 24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <private/opengles/gl_context.h> 26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define _NUM_COMPRESSED_TEXTURE_FORMATS \ 28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project (::android::OGLES_NUM_COMPRESSED_TEXTURE_FORMATS) 29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic int initialized = 0; 31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic jclass nioAccessClass; 33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic jclass bufferClass; 34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic jclass OOMEClass; 35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic jclass UOEClass; 36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic jclass IAEClass; 37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic jclass AIOOBEClass; 38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic jmethodID getBasePointerID; 39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic jmethodID getBaseArrayID; 40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic jmethodID getBaseArrayOffsetID; 41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic jfieldID positionID; 42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic jfieldID limitID; 43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic jfieldID elementSizeShiftID; 44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/* Cache method IDs each time the class is loaded. */ 46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 47427f585f726af6e3bd1fb835f26b2af9f609c483Jack Palevichstatic void 48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectnativeClassInitBuffer(JNIEnv *_env) 49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project jclass nioAccessClassLocal = _env->FindClass("java/nio/NIOAccess"); 51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project nioAccessClass = (jclass) _env->NewGlobalRef(nioAccessClassLocal); 52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project jclass bufferClassLocal = _env->FindClass("java/nio/Buffer"); 54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project bufferClass = (jclass) _env->NewGlobalRef(bufferClassLocal); 55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project getBasePointerID = _env->GetStaticMethodID(nioAccessClass, 57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project "getBasePointer", "(Ljava/nio/Buffer;)J"); 58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project getBaseArrayID = _env->GetStaticMethodID(nioAccessClass, 59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;"); 60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project getBaseArrayOffsetID = _env->GetStaticMethodID(nioAccessClass, 61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project "getBaseArrayOffset", "(Ljava/nio/Buffer;)I"); 62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project positionID = _env->GetFieldID(bufferClass, "position", "I"); 64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project limitID = _env->GetFieldID(bufferClass, "limit", "I"); 65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project elementSizeShiftID = 66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project _env->GetFieldID(bufferClass, "_elementSizeShift", "I"); 67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic void 71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectnativeClassInit(JNIEnv *_env, jclass glImplClass) 72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project nativeClassInitBuffer(_env); 74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project jclass IAEClassLocal = 76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project _env->FindClass("java/lang/IllegalArgumentException"); 77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project jclass OOMEClassLocal = 78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project _env->FindClass("java/lang/OutOfMemoryError"); 79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project jclass UOEClassLocal = 80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project _env->FindClass("java/lang/UnsupportedOperationException"); 81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project jclass AIOOBEClassLocal = 82edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project _env->FindClass("java/lang/ArrayIndexOutOfBoundsException"); 83edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project IAEClass = (jclass) _env->NewGlobalRef(IAEClassLocal); 85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project OOMEClass = (jclass) _env->NewGlobalRef(OOMEClassLocal); 86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project UOEClass = (jclass) _env->NewGlobalRef(UOEClassLocal); 87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project AIOOBEClass = (jclass) _env->NewGlobalRef(AIOOBEClassLocal); 88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic void * 91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectgetPointer(JNIEnv *_env, jobject buffer, jarray *array, jint *remaining) 92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 93edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project jint position; 94edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project jint limit; 95edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project jint elementSizeShift; 96edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project jlong pointer; 97edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project jint offset; 98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void *data; 99edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 100edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project position = _env->GetIntField(buffer, positionID); 101edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project limit = _env->GetIntField(buffer, limitID); 102edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project elementSizeShift = _env->GetIntField(buffer, elementSizeShiftID); 103edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *remaining = (limit - position) << elementSizeShift; 104edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project pointer = _env->CallStaticLongMethod(nioAccessClass, 105edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project getBasePointerID, buffer); 106edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if (pointer != 0L) { 107edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *array = NULL; 108edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return (void *) (jint) pointer; 109edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 110edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 111edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *array = (jarray) _env->CallStaticObjectMethod(nioAccessClass, 112edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project getBaseArrayID, buffer); 113edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project offset = _env->CallStaticIntMethod(nioAccessClass, 114edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project getBaseArrayOffsetID, buffer); 115edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project data = _env->GetPrimitiveArrayCritical(*array, (jboolean *) 0); 116edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 117edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return (void *) ((char *) data + offset); 118edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 119edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 120edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 121edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic void 122edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectreleasePointer(JNIEnv *_env, jarray array, void *data, jboolean commit) 123edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 124edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project _env->ReleasePrimitiveArrayCritical(array, data, 125edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project commit ? 0 : JNI_ABORT); 126edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 127edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 128edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// -------------------------------------------------------------------------- 129edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 130