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.