From 4ab7daa033ac68da9cd452cd1c19f51f6c71bdc0 Mon Sep 17 00:00:00 2001 From: Julian Winkler Date: Sun, 4 Feb 2024 15:46:03 +0100 Subject: [PATCH] GLES20: use get_nio_buffer function from util.c The version in util.c has a fix found by -Xcheck:jni --- src/api-impl-jni/android_opengl_GLES20.c | 31 +----------------------- 1 file changed, 1 insertion(+), 30 deletions(-) diff --git a/src/api-impl-jni/android_opengl_GLES20.c b/src/api-impl-jni/android_opengl_GLES20.c index 5054894b..64a90637 100644 --- a/src/api-impl-jni/android_opengl_GLES20.c +++ b/src/api-impl-jni/android_opengl_GLES20.c @@ -2,39 +2,10 @@ #include #include #include "defines.h" +#include "util.h" #include "generated_headers/android_opengl_GLES20.h" -static void *get_nio_buffer(JNIEnv *env, jobject buffer, jarray *array_ref, jbyte **array) { - jclass class; - void *pointer; - int elementSizeShift, position; - - if (!buffer) { - *array_ref = NULL; - return NULL; - } - class = _CLASS(buffer); - pointer = _PTR((*env)->GetLongField(env, buffer, _FIELD_ID(class, "address", "J"))); - elementSizeShift = (*env)->GetIntField(env, buffer, _FIELD_ID(class, "_elementSizeShift", "I")); - position = (*env)->GetIntField(env, buffer, _FIELD_ID(class, "position", "I")); - if (pointer) { // buffer is direct - *array_ref = NULL; - pointer += position << elementSizeShift; - } else { // buffer is indirect - *array_ref = (*env)->CallObjectMethod(env, buffer, _METHOD(class, "array", "()Ljava/lang/Object;")); - pointer = *array = (*env)->GetPrimitiveArrayCritical(env, *array_ref, NULL); - jint offset = (*env)->CallIntMethod(env, buffer, _METHOD(class, "arrayOffset", "()I")); - pointer += (offset + position) << elementSizeShift; - } - return pointer; -} - -static void release_nio_buffer(JNIEnv *env, jarray array_ref, jbyte *array) { - if (array_ref) - (*env)->ReleasePrimitiveArrayCritical(env, array_ref, array, 0); -} - JNIEXPORT jstring JNICALL Java_android_opengl_GLES20_glGetString(JNIEnv *env, jclass, jint name) { const char* chars = (const char*) glGetString((GLenum) name); return _JSTRING(chars);