将指针复制到静态数组

时间:2010-12-10 13:41:11

标签: c++ android java-native-interface opengl-es-2.0

我正在开发一个带有一些本机代码的Android应用程序(用于使用OpenGL ES 2.0进行渲染)。

我有以下方法签名:

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);

但我不知道如何继续。

有什么建议吗?

我正在网上搜索,如果我发现了什么,我会告诉你。

感谢。

1 个答案:

答案 0 :(得分:0)

如果我误解了你的要求,请告诉我,但听起来你需要了解你的C ++。 C ++中的静态数组在编译时具有固定的大小。您可能希望使用new[]malloc()来实现您想要的目标。