我正在为 FloatBuffer.put() 制作 Jni 替换方法,因为在 Android 2.x 及更低版本上,FloatBuffer.put() 方法的实现效率低下,如此处所述。但是,我希望能够将给定的 src 浮点数组放置到 dst 浮点缓冲区中的指定偏移量,就像使用 position() 和 put() 一样。考虑到这一点,我实现了这个 JNI 方法。
JNIEXPORT void JNICALL Java_com_voidseer_voidengine_mesh_Vertices_PutFloatsJni
(JNIEnv *env, jclass, jfloatArray src, jobject dst, jint numFloats, jint dstOffset )
{
float* pDst = (float*)env->GetDirectBufferAddress( dst );
float* pSrc = (float*)env->GetPrimitiveArrayCritical(src, 0);
memcpy( pDst + (dstOffset << 2), pSrc, numFloats << 2 );
env->ReleasePrimitiveArrayCritical(src, pSrc, 0);
}
然而,似乎有些不对劲。我的游戏引擎没有像它应该的那样绘制我的实体。有人能发现我在这个函数中做错了什么吗?
谢谢
编辑:
刚刚让它与这个代码一起工作。
JNIEXPORT void JNICALL Java_com_voidseer_voidengine_mesh_Vertices_PutFloatsJni
(JNIEnv *env, jclass, jfloatArray src, jobject dst, jint numFloats, jint dstOffset )
{
float* pDst = (float*)env->GetDirectBufferAddress( dst );
float* pSrc = (float*)env->GetPrimitiveArrayCritical(src, 0);
memcpy( &pDst[dstOffset], pSrc, numFloats << 2 );
env->ReleasePrimitiveArrayCritical(src, pSrc, 0);
}