diff options
author | Lorenzo Torres <lorenzotorres@outlook.it> | 2025-03-12 19:56:19 +0100 |
---|---|---|
committer | Lorenzo Torres <lorenzotorres@outlook.it> | 2025-03-12 19:56:19 +0100 |
commit | 4f45899a3c28440724ffcaa3a604ad48f18a25c8 (patch) | |
tree | cecd79da4e3e3cb17ffd86ec1a58d6e77a44cb83 /ext/glfw/examples/windows.c | |
parent | fc39b277155044366f1647b238a415fab4028d83 (diff) |
base code
Diffstat (limited to 'ext/glfw/examples/windows.c')
-rw-r--r-- | ext/glfw/examples/windows.c | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/ext/glfw/examples/windows.c b/ext/glfw/examples/windows.c new file mode 100644 index 0000000..1589ffb --- /dev/null +++ b/ext/glfw/examples/windows.c @@ -0,0 +1,106 @@ +//======================================================================== +// Simple multi-window example +// Copyright (c) Camilla Löwy <elmindreda@glfw.org> +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would +// be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +// +//======================================================================== + +#define GLAD_GL_IMPLEMENTATION +#include <glad/gl.h> +#define GLFW_INCLUDE_NONE +#include <GLFW/glfw3.h> + +#include <stdio.h> +#include <stdlib.h> + +int main(int argc, char** argv) +{ + int xpos, ypos, height; + const char* description; + GLFWwindow* windows[4]; + + if (!glfwInit()) + { + glfwGetError(&description); + printf("Error: %s\n", description); + exit(EXIT_FAILURE); + } + + glfwWindowHint(GLFW_DECORATED, GLFW_FALSE); + + glfwGetMonitorWorkarea(glfwGetPrimaryMonitor(), &xpos, &ypos, NULL, &height); + + for (int i = 0; i < 4; i++) + { + const int size = height / 5; + const struct + { + float r, g, b; + } colors[] = + { + { 0.95f, 0.32f, 0.11f }, + { 0.50f, 0.80f, 0.16f }, + { 0.f, 0.68f, 0.94f }, + { 0.98f, 0.74f, 0.04f } + }; + + if (i > 0) + glfwWindowHint(GLFW_FOCUS_ON_SHOW, GLFW_FALSE); + + glfwWindowHint(GLFW_POSITION_X, xpos + size * (1 + (i & 1))); + glfwWindowHint(GLFW_POSITION_Y, ypos + size * (1 + (i >> 1))); + + windows[i] = glfwCreateWindow(size, size, "Multi-Window Example", NULL, NULL); + if (!windows[i]) + { + glfwGetError(&description); + printf("Error: %s\n", description); + glfwTerminate(); + exit(EXIT_FAILURE); + } + + glfwSetInputMode(windows[i], GLFW_STICKY_KEYS, GLFW_TRUE); + + glfwMakeContextCurrent(windows[i]); + gladLoadGL(glfwGetProcAddress); + glClearColor(colors[i].r, colors[i].g, colors[i].b, 1.f); + } + + for (;;) + { + for (int i = 0; i < 4; i++) + { + glfwMakeContextCurrent(windows[i]); + glClear(GL_COLOR_BUFFER_BIT); + glfwSwapBuffers(windows[i]); + + if (glfwWindowShouldClose(windows[i]) || + glfwGetKey(windows[i], GLFW_KEY_ESCAPE)) + { + glfwTerminate(); + exit(EXIT_SUCCESS); + } + } + + glfwWaitEvents(); + } +} + |