Как использовать GL-объект статически в JOGL? - PullRequest
0 голосов
/ 01 июля 2019

Я хочу сделать простой Game-Engine с использованием JOGL. Но вместо использования класса EventListener я хочу создать статический объект, как в LWJGL. И нет, я не использую LWJGL, потому что у меня было много проблем с этим. Это мой EventListener:

class EventListener implements GLEventListener {

    public static GL2 gl;

    @Override
    public void display(GLAutoDrawable drawable) {
        gl = drawable.getGL().getGL2();

        gl.glClear(GL.GL_COLOR_BUFFER_BIT);
        gl.glClearColor(0, 1, 0, 1);
    }

    @Override
    public void dispose(GLAutoDrawable drawable) {

    }

    @Override
    public void init(GLAutoDrawable drawable) {

    }

    @Override
    public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {

    }
}

Он очищает зеленый экран, поэтому он отлично работает. Но если я пытаюсь использовать объект 'gl' в другом классе, он ничего не делает.

1 Ответ

1 голос
/ 02 июля 2019

На самом деле, это плохая идея.Вы не должны сохранять экземпляр GL в поле, так как он подвержен ошибкам по нескольким причинам:

  • Экземпляр GL может стать недействительным в любое время
  • Вы можете получить к нему доступ в потокев котором контекст OpenGL не является текущим
  • Вы можете получить к нему доступ в потоке, в котором контекст OpenGL сделан текущим, но в то время как он не является текущим (после освобождения контекста)

Вот почему вы должны использовать GLEventListener.В противном случае вы можете получить действительный экземпляр GL, вызвав GLContext.getCurrentGL () , но он выдает исключение GLException, если контекст не является текущим.Вы также можете использовать GLAutoDrawable.invoke () , это позволяет запускать ваш код в нужном потоке в нужное время, но GLEventListener более полезен, так как вы можете выполнить некоторый код во время инициализации.

Кстати, конкретные вопросы JOGL следует задавать на официальном форуме JogAmp , а не здесь.StackOverflow - лучшее место для общих вопросов по OpenGL, но большинство участников JogAmp никогда не приходят сюда.Да, StackOverflow не является панацеей.

PS: Я советую вам прочитать эту статью и этот комментарий , если вы хотите понять выбор дизайна JOGL,особенно дизайн экземпляра.

...