Java-интерфейс на основе SWIG для OpenGL ES 2.0 и EGL для SWT - PullRequest
0 голосов
/ 16 февраля 2012

Я планировал связать собственный API, предоставляемый OpenGL ES 2.0, с помощью SWIG.

Я знаю, что есть JOGL, но почему-то в нем слишком много абстракций, классов и кода.

ВсеЯ хочу, чтобы это был очень простой минимум API Java для взаимодействия с OpenGL ES 2.0 и EGL-приложением.Наконец, мое приложение будет использовать SWT.SWIG может использоваться для генерации Java-интерфейса с использованием C API, предоставляемого OpenGL ES 2.0 и EGL.

Что касается EGL, мне просто нужно извлечь дескриптор currentwindow из окна Java и перейти к EGL.это работа?

Кто-то уже пробовал это, или это не так просто, как кажется (и по этой причине мы должны использовать JOGL)?

1 Ответ

1 голос
/ 18 февраля 2012

JOGL в своей базовой форме - это всего лишь тонкая оболочка над интерфейсом OpenGL.

В этой оболочке все становится сложнее, когда вы начинаете смотреть на буферы. В интерфейсе C OpenGL все это обрабатывается void*. В Java это вообще не имеет смысла - ближайшая Java имеет Object, но это не может быть использовано таким образом.

... слишком много абстракций, классов и кода.

В C, где мы говорим «просто возьмите этот кусок памяти и используйте его как чередующийся список вершин, нормалей и цветов», нам нужна дополнительная поддержка интерфейса Java, чтобы позволить нам гибко и эффективно вводить нечто подобное в память , Это, я подозреваю, является корнем вашего наблюдения о большом количестве абстракций, классов и кода.

В OpenGL 3.0 с JOGL вы можете напрямую и просто использовать устаревший режим фиксированной функциональности, например ::

gl.glBegin(GL2.GL_QUADS);          
    gl.glColor3f(0.0f, 1.0f, 1.0f);   // set the color of the quad
    gl.glVertex3f(-1.0f, 1.0f, 0.0f);      // Top Left
    gl.glVertex3f( 1.0f, 1.0f, 0.0f);       // Top Right
    gl.glVertex3f( 1.0f,-1.0f, 0.0f);      // Bottom Right
    gl.glVertex3f(-1.0f,-1.0f, 0.0f);     // Bottom Left
gl.glEnd();       

В OpenGL ES с этой фиксированной функциональностью рендеринга в непосредственном режиме просто не существует, потому что это ужасно неэффективно на типах устройств, на которых работает OpenGL ES. В результате все функции, которые вы оставляете в привязках JOGL к OpenGL ES, - это те, которые требуют сложных абстракций в Java, чтобы иметь возможность использовать их, поскольку они в значительной степени зависят от указателей void* на буферы, которые трудно осмысленно представить в Java.

Короче говоря - если вы напишите свою собственную оболочку Java OpenGL ES, она будет не проще, чем JOGL. JOGL - это простая оболочка OpenGL для Java.

...