2017-02-23 39 views
0

В OpenGL, чтобы сохранить кадры рендеринга программы Мне нужен цикл while, весь код, который помещается внутри цикла, выполняется каждый цикл. Цикл выглядит следующим образом:Как работает итерация рендеринга в Android Native App с использованием NDK, JNI в OpenGL ES?

while(!glfwWindowShouldClose(window)) 
{ 
    // Check and call events 
    glfwPollEvents(); 

    // Rendering commands here 
    ... 

    // Swap the buffers 
    glfwSwapBuffers(window); 
} 

Теперь я прыгать в OpenGL ES и пытаюсь извлечь из этого примера:

https://github.com/googlesamples/android-ndk/tree/master/gles3jni

Однако, я не мог найти while или for цикла в коде. Вместо этого есть что-то еще, что нравится расширять GLSurfaceView и внедрять GLSurfaceView.Renderer. Я действительно не понимаю, как это работает.

Поэтому интересно, как итерация идет каждый раз, когда она создает рамку? Все, что написано в файле .cpp, выполняется каждый цикл или просто функции, вызываемые JNI? И как только он заканчивает рендеринг самого первого кадра, где он начинается в начале второго цикла? Ваше внимание и помощь очень ценятся.

ответ

1

В Android вам не нужно делать цикл самостоятельно - цикл обработки управляется для вас ОС. Он реализован в GLSurfaceView.Renderer, который вызывает , который называется каждым фреймом, вам просто нужно переопределить этот метод в вашем рендерере. Все это делается в коде Java - если вы хотите реализовать свой код OpenGL ES в cpp, вы создаете метод рендеринга в коде JNI и вызываете его из вашего переопределенного , как это делается в проекте, на который вы смотрите.

+0

Так что, если у меня есть переменная '' x'', которую нужно было изменить каждый кадр, я мог бы поместить его только в метод ('' step() '' метод в приведенном выше примере), который вызывается через JNI от '' onDrawFrame'', это правильно? –

+1

Да, вы поняли. Если эта переменная является cpp, то вы обновляете ее в «шаге», если она есть Java, вы обновляете ее в 'onDrawFrame' – yakobom

+0

Большое спасибо, вы много дней сохраняете мой день :) –