annotate main.c @ 8:f7af7255705e

text flickering fixed
author Dennis C. M. <dennis@denniscm.com>
date Fri, 23 Jun 2023 16:46:43 +0100
parents f159eec07daf
children b7da0083b706
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4
035d3880da04 render text with number of elements on screen
Dennis C. M. <dennis@denniscm.com>
parents: 3
diff changeset
1 #include "utils.h"
8
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
2 #include <stdio.h>
7
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
3 #include <GL/glut.h>
0
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
4
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
5
6
40a8bdbe2005 Refactor to array of structures
Dennis C. M. <dennis@denniscm.com>
parents: 5
diff changeset
6 #define WINDOW_HEIGHT 1080
40a8bdbe2005 Refactor to array of structures
Dennis C. M. <dennis@denniscm.com>
parents: 5
diff changeset
7 #define WINDOW_WIDTH 1920
7
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
8 #define RECT_WIDTH 5
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
9 #define SPACE 5
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
10
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
11
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
12 struct Rectangle {
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
13 int width;
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
14 int height;
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
15 int x;
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
16 };
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
17
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
18 // Globals
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
19 struct Rectangle* rectangles;
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
20 int n_rectangles;
8
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
21 int test_counter = 0;
0
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
22
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
23
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
24 void setup() {
2
ea3c427d922d draw a weird filled rectangle
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
25
0
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
26 // Set background dark
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
27 glClearColor(0.0, 0.0, 0.0, 1.0);
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
28
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
29 // Set point color and size to 1 pixel
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
30 glColor3f(0.0, 1.0, 0.0);
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
31 glPointSize(5.0);
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
32
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
33 // Matrix projection and reset with identity
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
34 glMatrixMode(GL_PROJECTION);
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
35 glLoadIdentity();
2
ea3c427d922d draw a weird filled rectangle
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
36
0
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
37 // Set the coordinates to be used with the viewport
6
40a8bdbe2005 Refactor to array of structures
Dennis C. M. <dennis@denniscm.com>
parents: 5
diff changeset
38 gluOrtho2D(0, WINDOW_WIDTH, WINDOW_HEIGHT, 0);
8
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
39
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
40 }
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
41
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
42
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
43 void render_text(int x, int y, char* text) {
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
44 glRasterPos2f(x, y);
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
45
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
46 for (const char *c = text; *c; ++c) {
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
47 glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, *c);
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
48 }
0
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
49 }
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
50
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
51
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
52 void display() {
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
53 glClear(GL_COLOR_BUFFER_BIT);
3
e4003f606e07 draw multiple rectangles with loop
Dennis C. M. <dennis@denniscm.com>
parents: 2
diff changeset
54 glBegin(GL_QUADS);
e4003f606e07 draw multiple rectangles with loop
Dennis C. M. <dennis@denniscm.com>
parents: 2
diff changeset
55
7
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
56 for (int i = 0; i < n_rectangles; i++) {
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
57 glVertex2f(rectangles[i].x, WINDOW_HEIGHT - 100);
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
58 glVertex2f(rectangles[i].x + rectangles[i].width, WINDOW_HEIGHT - 100);
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
59 glVertex2f(rectangles[i].x + rectangles[i].width, rectangles[i].height);
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
60 glVertex2d(rectangles[i].x, rectangles[i].height);
3
e4003f606e07 draw multiple rectangles with loop
Dennis C. M. <dennis@denniscm.com>
parents: 2
diff changeset
61 }
e4003f606e07 draw multiple rectangles with loop
Dennis C. M. <dennis@denniscm.com>
parents: 2
diff changeset
62
e4003f606e07 draw multiple rectangles with loop
Dennis C. M. <dennis@denniscm.com>
parents: 2
diff changeset
63 glEnd();
6
40a8bdbe2005 Refactor to array of structures
Dennis C. M. <dennis@denniscm.com>
parents: 5
diff changeset
64
7
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
65 // Render text
4
035d3880da04 render text with number of elements on screen
Dennis C. M. <dennis@denniscm.com>
parents: 3
diff changeset
66 char text[256];
7
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
67 sprintf(text, "Number of elements: %i", n_rectangles);
8
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
68 render_text(40.0, WINDOW_HEIGHT - 50, text);
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
69
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
70 sprintf(text, "Test counter: %i", test_counter);
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
71 render_text(540.0, WINDOW_HEIGHT - 50, text);
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
72
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
73 glutSwapBuffers();
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
74 glFlush();
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
75 }
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
76
6
40a8bdbe2005 Refactor to array of structures
Dennis C. M. <dennis@denniscm.com>
parents: 5
diff changeset
77
8
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
78 void idle() {
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
79 glutPostRedisplay();
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
80 }
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
81
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
82
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
83 void keyboard(unsigned char key, int x, int y) {
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
84
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
85 // 13 is the ASCII value of ENTER key
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
86 if (key == 13) {
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
87 test_counter++;
7
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
88 }
0
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
89 }
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
90
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
91
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
92 int main(int argc, char** argv) {
7
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
93 n_rectangles = floor((WINDOW_WIDTH - RECT_WIDTH) / (RECT_WIDTH + SPACE)) + 1;
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
94 rectangles = malloc(n_rectangles * sizeof(struct Rectangle));
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
95
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
96 int x_pos = 1;
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
97
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
98 int i = 0;
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
99 while (i < n_rectangles) {
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
100 rectangles[i].width = RECT_WIDTH;
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
101 rectangles[i].height = random_int(100, WINDOW_HEIGHT - 100);
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
102 rectangles[i].x = x_pos;
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
103
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
104 x_pos += RECT_WIDTH + SPACE;
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
105 i++;
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
106 }
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
107
0
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
108 glutInit(&argc, argv);
8
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
109 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
6
40a8bdbe2005 Refactor to array of structures
Dennis C. M. <dennis@denniscm.com>
parents: 5
diff changeset
110 glutInitWindowSize(WINDOW_WIDTH, WINDOW_HEIGHT);
0
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
111 glutCreateWindow("OpenGL Window");
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
112 setup();
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
113 glutDisplayFunc(display);
8
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
114 glutKeyboardFunc(keyboard);
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
115 glutIdleFunc(idle);
0
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
116 glutMainLoop();
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
117
7
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
118 free(rectangles);
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
119
0
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
120 return 0;
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
121 }
7
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
122
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
123