Скопируйте указатель на статический массив - PullRequest
1 голос
/ 10 декабря 2010

Я разрабатываю приложение 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 голосов
/ 07 марта 2011

Дайте мне знать, если я неверно истолковываю то, что вы спрашиваете, но, похоже, вам нужно освежить свой C ++. Статические массивы в C ++ имеют фиксированный размер во время компиляции. Возможно, вы захотите использовать new[] или malloc() для достижения желаемого.

...