Различие между GL10 и GLES10 на Android

GLSurfaceView. Интерфейс Renderer SDK Android дает мне интерфейс GL как параметр, который имеет тип GL10. Этот интерфейс реализован некоторым частным внутренним jni классом обертки. Но существует также класс GLES10, где все методы 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 всем вызываемым методам. Но даже это, это работает (И это работает, я попробовал его), интересно, существуют ли какие-либо недостатки и причины НЕ сделать это как этот.

8
задан genpfault 3 May 2010 в 17:51
поделиться

1 ответ

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

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

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

  • Kris
6
ответ дан 5 December 2019 в 22:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: