Как нарисовать форму с помощью 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)
после создания окна