diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..eaf91e2 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/description.html b/.idea/description.html new file mode 100644 index 0000000..db5f129 --- /dev/null +++ b/.idea/description.html @@ -0,0 +1 @@ +Simple Java application that includes a class with main() method \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..ab2dc53 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/libraries/lwjgl_release_3_2.xml b/.idea/libraries/lwjgl_release_3_2.xml new file mode 100644 index 0000000..752a18d --- /dev/null +++ b/.idea/libraries/lwjgl_release_3_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..3b8368f --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..ebb736b --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/project-template.xml b/.idea/project-template.xml new file mode 100644 index 0000000..d57a956 --- /dev/null +++ b/.idea/project-template.xml @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/OpenGL app.iml b/OpenGL app.iml new file mode 100644 index 0000000..268f1c1 --- /dev/null +++ b/OpenGL app.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/out/production/untitled/com/company/Main.class b/out/production/untitled/com/company/Main.class new file mode 100644 index 0000000..594b36a Binary files /dev/null and b/out/production/untitled/com/company/Main.class differ diff --git a/src/site/rekovalev/Main.java b/src/site/rekovalev/Main.java new file mode 100644 index 0000000..3d16f0a --- /dev/null +++ b/src/site/rekovalev/Main.java @@ -0,0 +1,86 @@ +package site.rekovalev; + +import org.lwjgl.*; +import org.lwjgl.glfw.*; +import org.lwjgl.opengl.*; + +import static org.lwjgl.glfw.Callbacks.*; +import static org.lwjgl.glfw.GLFW.*; +import static org.lwjgl.opengl.GL11.*; +import static org.lwjgl.system.MemoryUtil.*; + +public class Main { + + private long window; + private int width = 800, + height = 600; + + public void run() { + System.out.println(" Hello LWJGL " + Version.getVersion() + "!"); + + init(); + loop(); + + glfwFreeCallbacks(window); + glfwDestroyWindow(window); + + // Уничтожение GLFW и очистка + glfwTerminate(); + glfwSetErrorCallback(null).free(); + } + + private void init() { + // Вывод ошибок в STDERR + GLFWErrorCallback.createPrint(System.err).set(); + + // Инициализация glfw + if ( !glfwInit() ) + throw new IllegalStateException(" Ошибка инициализации GLFW"); + + // Конфиги + glfwDefaultWindowHints(); //загрузка стандартных значений параметров + glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE); // Отключение возможности изменения размера окна + + // Создание окна + this.window = glfwCreateWindow(this.width, this.height, "Тестовое окно", NULL, NULL); + if ( this.window == NULL ) + throw new RuntimeException(" Ошибка создания окна"); + + // Лямбда-функция для обработки нажатия кнопок + glfwSetKeyCallback(window, (window, key, scancode, action, mods) -> { + if ( key == GLFW_KEY_ESCAPE && action == GLFW_RELEASE ) + glfwSetWindowShouldClose(window, true); // Создает событие запроса на закрытие + }); + + glfwMakeContextCurrent(window);// Делаем контекст OpenGL + + glfwSwapInterval(1); // Вертикальная синхронизация + + } + + private void loop() { + // Требуется для LWJGL использующего GLFW + // LWJGL определяет контекст для текущего потока и привязывает GL функции к нему. + GL.createCapabilities(); + + + glClearColor(1.0f, 0.0f, 0.0f, 0.0f); // Цвет очистки + + + while ( !glfwWindowShouldClose(window) ) { //Цикл до события закрытия окна + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Очистка буферов + + /* + * код тут + */ + + glfwSwapBuffers(window); // перенос COLOR_BUFFER на окно + glfwPollEvents(); // обработка очереди событий + } + } + + public static void main(String[] args) { + new Main().run(); + } + +} \ No newline at end of file