1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include "main.h"
static void sysError(const char *msg);
static void userError(const char *msg, const char *detail);
static void glfw_size_callback(GLFWwindow *window, int width, int height);
static void processInput(GLFWwindow *window, struct Background *c);
void
sysError(const char *msg)
{
perror(msg);
exit(1);
}
void
userError(const char *msg, const char *detail)
{
fprintf(stderr, "%s : %s\n", msg, detail);
exit(1);
}
static void
glfw_size_callback(GLFWwindow *window, int width, int height)
{
glViewport(0, 0, width, height);
}
static void
processInput(GLFWwindow *window, struct Background *c)
{
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS
|| glfwGetKey(window, GLFW_KEY_Q) == GLFW_PRESS) {
glfwSetWindowShouldClose(window, 1);
} else if (glfwGetKey(window, GLFW_KEY_R) == GLFW_PRESS
&& glfwGetKey(window, GLFW_KEY_LEFT_SHIFT) == GLFW_PRESS
&& c->R >= 0.0) {
c->R -= 0.1;
} else if (glfwGetKey(window, GLFW_KEY_R) == GLFW_PRESS && c->R <= 1.0) {
c->R += 0.1;
}
}
int main()
{
GLFWwindow *window;
const char *glfwErrno;
if (!glfwInit()) {
glfwGetError(&glfwErrno);
glfwTerminate();
userError("glfwInit() Error", glfwErrno);
}
window = glfwCreateWindow(640, 480, "Mverse", NULL, NULL);
if (!window) {
glfwTerminate();
userError("glfwCreateWindow() failed", "Can't create window");
}
glfwSetFramebufferSizeCallback(window, glfw_size_callback);
glfwMakeContextCurrent(window);
GLubyte glewErrno = glewInit();
if (glewErrno != GLEW_OK) {
glfwTerminate();
userError("glewInit() failed", (const char *)glewGetErrorString(glewErrno));
}
struct Background colors = {.R = 0.0, .G = 0.0, .B = 0.0, .A = 0.0};
while (!glfwWindowShouldClose(window)) {
glClear(GL_COLOR_BUFFER_BIT);
glClearColor(colors.R, colors.G, colors.B, colors.A);
processInput(window, &colors);
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwTerminate();
return 0;
}
|