Разница между GL10 и GLES10 на Android - PullRequest
8 голосов
/ 03 мая 2010

Интерфейс GLSurfaceView.Renderer в Android SDK предоставляет мне интерфейс GL в качестве параметра, который имеет тип GL10. Этот интерфейс реализован некоторым закрытым внутренним классом-оболочкой jni. Но есть также класс GLES10, где все методы GL доступны как статические методы. Есть ли важное различие между ними? Так что, если я проигнорирую параметр gl onDrawFrame и вместо этого буду использовать статические методы GLES10 везде?

Вот пример. Вместо этого:

void onDrawFrame(GL10 gl)
{
    drawSomething(gl);
}

void drawSomething(GL10 gl)
{
    gl.glLoadIdentity();
    ...
}

Я мог бы сделать это:

void onDrawFrame(GL10 gl)
{
    drawSomething();
}

void drawSomething()
{
    GLES10.glLoadIdentity();
    ...
}

Преимущество состоит в том, что мне не нужно передавать контекст GL всем вызываемым методам. Но даже это работает (И это работает, я попробовал это) Интересно, есть ли какие-либо недостатки и причины, чтобы НЕ делать это так.

1 Ответ

6 голосов
/ 16 июня 2010

Я копался в исходном коде, пытаясь ответить на этот вопрос. Насколько я могу судить, оба способа вызова реализации OpenGL ведут к одному и тому же вызову встроенной функции. Тем не менее, я понимаю, что доступ на стороне Java быстрее через статические методы, а не через диспетчеризацию виртуальных методов (см. http://developer.android.com/guide/practices/design/performance.html#prefer_static).

Компромисс заключается в том, что вы жертвуете определенным количеством проверки типов при доступе к вызовам, которые доступны только в более поздних версиях OpenGL. Когда вы получаете доступ к вызову через объект, вы должны сначала выполнить приведение, и это приведение не будет выполнено, если версия GL, которую вы используете, не поддерживает интерфейс. При доступе к вызову через статический метод, я думаю, что произойдет то, что будет установлено состояние ошибки OpenGL, которое будет сложнее обнаружить, если вы не установите режим отладки в GLSurfaceView.

Сейчас я обращаюсь ко всему через статические методы и оставляю режим отладки в GLSurfaceView до тех пор, пока код не станет стабильным, и в этот момент я отключу его.

  • Kris
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...