Как нарисовать форму с помощью LWJGL 3

Первоначально я использовал:

public void DrawQuad(int x, int y, float width, float height) {
        GL11.glColor3f(0, 255, 255);

        glBegin(GL_QUADS); 

        glVertex2f(-x, y);
        glVertex2f(width, y);
        glVertex2f(width, -height);
        glVertex2f(-x, -height);

       glEnd();
}

Но это просто дает мне эту ошибку:

Неустранимая ошибка была обнаружена средой выполнения Java:

EXCEPTION_ACCESS_VIOLATION (0xc0000005) при pc=0x00007ffd3538e18a, pid=2584, tid=0x0000000000000e38

Версия JRE: среда выполнения Java(TM) SE (8.0_121-b13) (сборка 1.8.0_121-b13) Java VM: виртуальная машина 64-битного сервера Java HotSpot(TM) (сжатые операции windows-amd64 в смешанном режиме 25.121-b13) рамка: C [lwjgl_opengl.dll+0xe18a]

Не удалось записать дамп ядра. Минидампы не включены по умолчанию в клиентских версиях Windows

Файл отчета об ошибке с дополнительной информацией сохраняется как: J:\SkiesDE\hs_err_pid2584.log

Если вы хотите отправить отчет об ошибке, посетите страницу: http://bugreport.java.com/bugreport/crash.jsp Сбой произошел за пределами виртуальной машины Java в собственном коде. Смотрите проблемный кадр, где сообщать об ошибке.

Код из класса бегуна:

public static void run() {
        System.out.println("Hello LWJGL " + Version.getVersion() + "!");

        Display window1 = new Display(640, 480);
        window1.init();

        while(window1.isRunning()) {
            /*
            glBegin(GL_QUADS); 
            glVertex2f(-0.5f, 0.5f);
            glVertex2f(0.5f, 0.5f);
            glVertex2f(0.5f, -0.5f);
            glVertex2f(-0.5f, -0.5f);
            glEnd();
            */

            window1.DrawQuad(10, 10, 50, 50);

            window1.update(); 
        }

        window1.terminate();
    }



public static void main(String[] args) {
    run();
}

Код из класса отображения:

public long window;
private int length;
private int heigth;

public Display(int length, int heigth) {
    this.length = length;
    this.heigth = heigth;
}

public void init() {
    if(!glfwInit()) {
        throw new IllegalStateException("Failed to initalize GLFW!");
    }

    glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE);
    window = glfwCreateWindow(length, heigth, "test", 0, 0); 
    //glfwGetPrimaryMonitor() Replace for full screen^
    if(window == 0) {
        throw new IllegalStateException("Failed to initalize Window!");
    }

    GLFWVidMode videoMode = glfwGetVideoMode(glfwGetPrimaryMonitor());
    glfwSetWindowPos(window, (videoMode.width() - length) / 2, (videoMode.height() - heigth) / 2);

    glfwShowWindow(window); 


}

public boolean isRunning() {
    return(!glfwWindowShouldClose(this.window));
}

public void update() {
    glfwSwapBuffers(window); 
    glfwPollEvents();
}

public void terminate() {
    glfwTerminate();
}

public void DrawQuad(int x, int y, float width, float height) {
    GL11.glColor3f(0, 255, 255);

    glBegin(GL_QUADS); 

    glVertex2f(-x, y);
    glVertex2f(width, y);
    glVertex2f(width, -height);
    glVertex2f(-x, -height);

    glEnd();
    //glLoadIdentity(); 
}

1 ответ

Решение

Вы не привязали контекст OpenGL к окну. Вам нужно добавить glfwMakeContextCurrent(window) после создания окна

Другие вопросы по тегам