glfw/examples/windows.c

111 lines
3.2 KiB
C
Raw Normal View History

2010-09-09 22:31:22 +00:00
//========================================================================
2020-07-15 15:10:32 +00:00
// Simple multi-window example
2016-11-21 15:23:59 +00:00
// Copyright (c) Camilla Löwy <elmindreda@glfw.org>
2010-09-09 22:31:22 +00:00
//
// 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>
2010-09-09 22:31:22 +00:00
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv)
{
2020-07-15 15:10:32 +00:00
int xpos, ypos, height;
const char* description;
GLFWwindow* windows[4];
2010-09-09 22:31:22 +00:00
if (!glfwInit())
2020-07-15 15:10:32 +00:00
{
glfwGetError(&description);
printf("Error: %s\n", description);
2010-09-09 22:36:52 +00:00
exit(EXIT_FAILURE);
2020-07-15 15:10:32 +00:00
}
2010-09-09 22:31:22 +00:00
2015-08-23 17:30:04 +00:00
glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE);
2020-07-15 15:10:32 +00:00
glfwWindowHint(GLFW_DECORATED, GLFW_FALSE);
glfwGetMonitorWorkarea(glfwGetPrimaryMonitor(), &xpos, &ypos, NULL, &height);
for (int i = 0; i < 4; i++)
2010-09-09 22:31:22 +00:00
{
2020-07-15 15:10:32 +00:00
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);
2020-07-15 15:10:32 +00:00
windows[i] = glfwCreateWindow(size, size, "Multi-Window Example", NULL, NULL);
2010-09-09 22:31:22 +00:00
if (!windows[i])
{
2020-07-15 15:10:32 +00:00
glfwGetError(&description);
printf("Error: %s\n", description);
2010-09-09 22:31:22 +00:00
glfwTerminate();
exit(EXIT_FAILURE);
}
2020-07-15 15:10:32 +00:00
glfwSetWindowPos(windows[i],
xpos + size * (1 + (i & 1)),
ypos + size * (1 + (i >> 1)));
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);
2010-09-09 22:31:22 +00:00
}
for (int i = 0; i < 4; i++)
glfwShowWindow(windows[i]);
for (;;)
2010-09-09 22:31:22 +00:00
{
for (int i = 0; i < 4; i++)
2010-09-09 22:31:22 +00:00
{
glfwMakeContextCurrent(windows[i]);
2010-09-09 22:31:22 +00:00
glClear(GL_COLOR_BUFFER_BIT);
glfwSwapBuffers(windows[i]);
2020-07-15 15:10:32 +00:00
if (glfwWindowShouldClose(windows[i]) ||
glfwGetKey(windows[i], GLFW_KEY_ESCAPE))
{
glfwTerminate();
exit(EXIT_SUCCESS);
}
2010-09-09 22:31:22 +00:00
}
2016-02-28 18:16:50 +00:00
glfwWaitEvents();
2010-09-09 22:31:22 +00:00
}
}