我正在使用某些本机代码(用于OpenGL ES 2.0渲染)开发Android应用程序。
我有以下方法签名:
JNIEXPORT void JNICALL Java_com_xxxxxx_xxxx_ActivityRenderer_renderFrame
(JNIEnv *env, jobject obj,
jfloatArray vertices, jfloatArray normals,
jfloatArray texCoord, jintArray indices)
要访问
jfloatArray vertices, jfloatArray normals, jfloatArray texCoord, jintArray indices
元素,请执行以下操作:jfloat *vertPos, *vertNorm, *vertTexC;
jint *indicesArray;
vertPos = env->GetFloatArrayElements(vertices, 0);
vertNorm = env->GetFloatArrayElements(normals, 0);
vertTexC = env->GetFloatArrayElements(texCoord, 0);
indicesArray = env->GetIntArrayElements(indices, 0);
并且,在glDrawElements(...)之后,最后,我执行以下操作:
env->ReleaseFloatArrayElements(vertices, vertPos, 0);
env->ReleaseFloatArrayElements(normals, vertNorm, 0);
env->ReleaseFloatArrayElements(texCoord, vertTexC, 0);
env->ReleaseIntArrayElements(indices, indicesArray, 0);
我可能没有绘制所需的模型,因为我在glDrawElements仍在使用它们的同时释放了指针。我不确定,但是我想在进行任何其他测试之前先进行检查。
我的问题是如何从指针创建静态数组?
我可以这样做来获取指针的元素:
jsize numVertices = env->GetArrayLength(vertices);
jsize numNormals = env->GetArrayLength(normals);
jsize numTexCoords = env->GetArrayLength(texCoord);
GLsizei numIndices = (GLsizei) env->GetArrayLength(indices);
但是我不知道如何继续。
有什么建议吗?
我正在网络上搜索以查找方式,如果有发现,我会告诉您。
谢谢。
最佳答案
如果我误解了您的要求,请告诉我,但这听起来像您需要重新使用C ++。 C ++中的静态数组在编译时具有固定大小。您可能想研究使用new[]
或malloc()
实现所需的功能。