#include "BufferUtils.h" #include <stdio.h> #include <stdlib.h> // =========================================================== // org.andengine.opengl.util.BufferUtils // =========================================================== JNIEXPORT void JNICALL Java_org_andengine_opengl_util_BufferUtils_jniPut(JNIEnv *env, jclass, jobject pBuffer, jfloatArray pData, jint pLength, jint pOffset) { unsigned char* bufferAddress = (unsigned char*)env->GetDirectBufferAddress(pBuffer); float* dataAddress = (float*)env->GetPrimitiveArrayCritical(pData, 0); memcpy(bufferAddress, dataAddress + pOffset, pLength << 2); env->ReleasePrimitiveArrayCritical(pData, dataAddress, 0); } JNIEXPORT jobject JNICALL Java_org_andengine_opengl_util_BufferUtils_jniAllocateDirect(JNIEnv *env, jclass, jint pCapacity) { jbyte* bytebuffer = (jbyte*) malloc(sizeof(jbyte) * pCapacity); return env->NewDirectByteBuffer(bytebuffer, pCapacity); } JNIEXPORT void JNICALL Java_org_andengine_opengl_util_BufferUtils_jniFreeDirect(JNIEnv* env, jclass, jobject pBuffer) { unsigned char* bufferAddress = (unsigned char*)env->GetDirectBufferAddress(pBuffer); free(bufferAddress); }