annotate src/main.c @ 29:dae463bbf5ca

implementing multi-thread and refactoring
author Dennis C. M. <dennis@denniscm.com>
date Wed, 28 Jun 2023 20:10:55 +0100
parents 30b6812fefdd
children f945bcc3571f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
1 #include "algorithms.h"
7
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
2 #include <GL/glut.h>
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
3 #include <pthread.h>
13
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
4 #include <ft2build.h>
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
5 #include FT_FREETYPE_H
0
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
6
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
7
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
8 int window_width = 1920;
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
9 int window_height = 1080;
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
10 int vpadding = 150;
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
11 int rect_width = 5;
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
12 int space = 1;
13
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
13
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
14 struct Algo algos[1];
9
b7da0083b706 removing struct?
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
15 int selected_algo = 0;
20
fc44102980fb change rectangle color to white when algorithm is selecting it
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
16
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
17 struct AlgoArgs algo_args;
8
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
18
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
19 FT_Library ft_library;
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
20 FT_Face ft_face;
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
21
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
22 pthread_t thread_id;
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
23
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
24
15
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
25 void render_text(int x, int y, char* text) {
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
26 for (const char *c = text; *c; c++) {
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
27
15
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
28 // Get glyph index from character code
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
29 FT_UInt glyph_index = FT_Get_Char_Index(ft_face, *c);
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
30
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
31 if (glyph_index == 0) {
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
32 fprintf(stderr, "Given character code has no glyph image in the face\n");
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
33 exit(1);
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
34 }
13
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
35
15
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
36 // Load glyph image
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
37 if (FT_Load_Glyph(ft_face, glyph_index, FT_LOAD_DEFAULT)) {
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
38 fprintf(stderr, "Failed to load glyph.\n");
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
39 exit(1);
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
40 }
13
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
41
15
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
42 // Render glyph
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
43 if (FT_Render_Glyph(ft_face->glyph, FT_RENDER_MODE_NORMAL)) {
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
44 fprintf(stderr, "Failed to render glyph.\n");
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
45 exit(1);
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
46 }
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
47
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
48 FT_GlyphSlot slot = ft_face->glyph;
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
49 FT_Bitmap* glyph_bitmap = &slot->bitmap;
14
d055228ca9a6 printing text with custom font
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
50
15
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
51 // Flip the bitmap vertically
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
52 unsigned char* flipped_bitmap = (unsigned char*)malloc(glyph_bitmap->width * glyph_bitmap->rows);
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
53
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
54 for (int row = 0; row < glyph_bitmap->rows; row++) {
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
55 unsigned char* src_row = glyph_bitmap->buffer + (row * glyph_bitmap->width);
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
56 unsigned char* dest_row = flipped_bitmap + ((glyph_bitmap->rows - row - 1) * glyph_bitmap->width);
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
57 memcpy(dest_row, src_row, glyph_bitmap->width);
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
58 }
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
59
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
60 glyph_bitmap->buffer = flipped_bitmap;
15
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
61
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
62 // Calculate the adjusted y position based on the glyph's bearing
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
63 int adjusted_y = y + (slot->bitmap_top - glyph_bitmap->rows);
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
64
15
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
65 glRasterPos2f(x, adjusted_y);
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
66 glDrawPixels(glyph_bitmap->width, glyph_bitmap->rows, GL_LUMINANCE, GL_UNSIGNED_BYTE, glyph_bitmap->buffer);
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
67
18
6a5c5b137348 implement method to run the algo function given the selected algo
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
68 x += slot->advance.x / 64;
15
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
69 }
0
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
70 }
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
71
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
72
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
73 void display() {
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
74 glClear(GL_COLOR_BUFFER_BIT);
14
d055228ca9a6 printing text with custom font
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
75
3
e4003f606e07 draw multiple rectangles with loop
Dennis C. M. <dennis@denniscm.com>
parents: 2
diff changeset
76 glBegin(GL_QUADS);
e4003f606e07 draw multiple rectangles with loop
Dennis C. M. <dennis@denniscm.com>
parents: 2
diff changeset
77
10
f4e0c266321a bubble sort
Dennis C. M. <dennis@denniscm.com>
parents: 9
diff changeset
78 int x = 0;
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
79 for (int i = 0; i < algo_args.arr_size; i++) {
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
80
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
81 if (algo_args.arr[i].current) {
20
fc44102980fb change rectangle color to white when algorithm is selecting it
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
82 glColor3f(1.0, 1.0, 1.0);
fc44102980fb change rectangle color to white when algorithm is selecting it
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
83 } else {
fc44102980fb change rectangle color to white when algorithm is selecting it
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
84 glColor3f(1.0, 0.7569, 0.0);
fc44102980fb change rectangle color to white when algorithm is selecting it
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
85 }
10
f4e0c266321a bubble sort
Dennis C. M. <dennis@denniscm.com>
parents: 9
diff changeset
86
f4e0c266321a bubble sort
Dennis C. M. <dennis@denniscm.com>
parents: 9
diff changeset
87 // Bottom left
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
88 glVertex2f(x, vpadding);
10
f4e0c266321a bubble sort
Dennis C. M. <dennis@denniscm.com>
parents: 9
diff changeset
89
f4e0c266321a bubble sort
Dennis C. M. <dennis@denniscm.com>
parents: 9
diff changeset
90 // Top left
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
91 glVertex2f(x, vpadding + algo_args.arr[i].value);
10
f4e0c266321a bubble sort
Dennis C. M. <dennis@denniscm.com>
parents: 9
diff changeset
92
f4e0c266321a bubble sort
Dennis C. M. <dennis@denniscm.com>
parents: 9
diff changeset
93 // Top right
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
94 glVertex2f(x + rect_width, vpadding + algo_args.arr[i].value);
10
f4e0c266321a bubble sort
Dennis C. M. <dennis@denniscm.com>
parents: 9
diff changeset
95
f4e0c266321a bubble sort
Dennis C. M. <dennis@denniscm.com>
parents: 9
diff changeset
96 // Bottom right
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
97 glVertex2f(x + rect_width, vpadding);
10
f4e0c266321a bubble sort
Dennis C. M. <dennis@denniscm.com>
parents: 9
diff changeset
98
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
99 x += rect_width + space;
20
fc44102980fb change rectangle color to white when algorithm is selecting it
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
100
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
101 algo_args.arr[i].current = false;
3
e4003f606e07 draw multiple rectangles with loop
Dennis C. M. <dennis@denniscm.com>
parents: 2
diff changeset
102 }
e4003f606e07 draw multiple rectangles with loop
Dennis C. M. <dennis@denniscm.com>
parents: 2
diff changeset
103
e4003f606e07 draw multiple rectangles with loop
Dennis C. M. <dennis@denniscm.com>
parents: 2
diff changeset
104 glEnd();
6
40a8bdbe2005 Refactor to array of structures
Dennis C. M. <dennis@denniscm.com>
parents: 5
diff changeset
105
7
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
106 // Render text
4
035d3880da04 render text with number of elements on screen
Dennis C. M. <dennis@denniscm.com>
parents: 3
diff changeset
107 char text[256];
9
b7da0083b706 removing struct?
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
108
17
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
109 // Top: Column 1
18
6a5c5b137348 implement method to run the algo function given the selected algo
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
110 sprintf(text, "Algorithm: %s", algos[selected_algo].name);
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
111 render_text(20, window_height - 50, text);
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
112
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
113 sprintf(text, "Delay: %u microseconds", algo_args.delay);
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
114 render_text(20, window_height - 80, text);
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
115
17
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
116 // Top: Column 2
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
117 sprintf(text, "Number of elements: %i", algo_args.arr_size);
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
118 render_text(500, window_height - 50, text);
9
b7da0083b706 removing struct?
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
119
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
120 sprintf(text, "Comparisons: %i", algo_args.comparisons);
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
121 render_text(500, window_height - 80, text);
12
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
122
17
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
123 // Bottom: Column 1
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
124 render_text(20, vpadding - 50, "Press a or s to select an algorithm.");
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
125 render_text(20, vpadding - 80, "Press u or d to modify speed.");
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
126 render_text(20, vpadding - 110, "Press r to randomize the array.");
17
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
127
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
128 // Bottom: Column 2
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
129 render_text(800, vpadding - 50, "Press enter to run the algorithm.");
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
130 render_text(800, vpadding - 80, "Press p to pause the algorithm.");
8
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
131
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
132 glutSwapBuffers();
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
133 }
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
134
6
40a8bdbe2005 Refactor to array of structures
Dennis C. M. <dennis@denniscm.com>
parents: 5
diff changeset
135
12
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
136 void idle() {
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
137 glutPostRedisplay();
8
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
138 }
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
139
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
140
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
141 void keyboard(unsigned char key, int x, int y) {
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
142
17
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
143 // s: Next algorithm
9
b7da0083b706 removing struct?
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
144 if (key == 115) {
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
145
9
b7da0083b706 removing struct?
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
146 }
b7da0083b706 removing struct?
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
147
17
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
148 // a: Previous algorithm
9
b7da0083b706 removing struct?
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
149 if (key == 97) {
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
150
9
b7da0083b706 removing struct?
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
151 }
b7da0083b706 removing struct?
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
152
17
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
153 // r: Reset state
12
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
154 if (key == 114) {
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
155 randomize_array(algo_args.arr, algo_args.arr_size);
12
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
156 }
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
157
17
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
158 // u: Increase speed
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
159 if (key == 117) {
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
160 algo_args.delay += 10;
17
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
161 }
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
162
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
163 // d: reduce speed
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
164 if (key == 100) {
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
165 if (algo_args.delay > 10) {
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
166 algo_args.delay -= 10;
19
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
167 }
17
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
168 }
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
169
18
6a5c5b137348 implement method to run the algo function given the selected algo
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
170 // enter: Run program
6a5c5b137348 implement method to run the algo function given the selected algo
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
171 if (key == 13) {
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
172 pthread_create(&thread_id, NULL, algos[selected_algo].function, (void *)&algo_args);
18
6a5c5b137348 implement method to run the algo function given the selected algo
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
173 }
6a5c5b137348 implement method to run the algo function given the selected algo
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
174
19
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
175 // p: Pause program
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
176 if (key == 112) {
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
177
19
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
178 }
0
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
179 }
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
180
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
181
14
d055228ca9a6 printing text with custom font
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
182 void setup_gl() {
13
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
183
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
184 // Set background dark
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
185 glClearColor(0.0, 0.0, 0.0, 1.0);
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
186
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
187 // Set point color and size to 1 pixel
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
188 glColor3f(1.0, 0.7569, 0.0);
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
189 glPointSize(5.0);
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
190
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
191 // Matrix projection and reset with identity
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
192 glMatrixMode(GL_PROJECTION);
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
193 glLoadIdentity();
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
194
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
195 /*
13
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
196 * Creates projection matrix
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
197 * x increases from left to right (0 to WINDOW_WIDTH)
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
198 * y increases from bottom to top (0 to WINDOW_HEIGHT)
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
199 */
15
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
200
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
201 gluOrtho2D(0, window_width, 0, window_height);
14
d055228ca9a6 printing text with custom font
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
202
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
203 /*
15
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
204 * This fucking line... I spent a day rendering weird symbols
14
d055228ca9a6 printing text with custom font
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
205 * because the padding that adds FreeType to each row of the bitmap
d055228ca9a6 printing text with custom font
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
206 * does not match the padding expected by GL.
d055228ca9a6 printing text with custom font
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
207 */
d055228ca9a6 printing text with custom font
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
208
d055228ca9a6 printing text with custom font
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
209 glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
13
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
210 }
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
211
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
212
14
d055228ca9a6 printing text with custom font
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
213 void setup_freetype() {
13
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
214
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
215 // Init library
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
216 if (FT_Init_FreeType(&ft_library)) {
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
217 fprintf(stderr, "Failed to initialize FreeType library\n");
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
218 exit(1);
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
219 }
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
220
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
221 // Load font
14
d055228ca9a6 printing text with custom font
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
222 if (FT_New_Face(ft_library, "fonts/JetBrainsMono-Regular.ttf", 0, &ft_face)) {
13
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
223 fprintf(stderr, "Failed to load font\n");
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
224 exit(1);
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
225 }
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
226
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
227 // Set font size
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
228 if (FT_Set_Pixel_Sizes(ft_face, 0, 24)) {
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
229 fprintf(stderr, "Failed to set font size.\n");
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
230 FT_Done_Face(ft_face);
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
231 FT_Done_FreeType(ft_library);
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
232
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
233 exit(1);
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
234 }
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
235 }
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
236
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
237
0
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
238 int main(int argc, char** argv) {
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
239 algo_args.comparisons = 0;
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
240 algo_args.delay = 100;
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
241
18
6a5c5b137348 implement method to run the algo function given the selected algo
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
242 strcpy(algos[0].name, "Bubble sort");
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
243 algos[0].function = bubble_sort;
18
6a5c5b137348 implement method to run the algo function given the selected algo
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
244
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
245 algo_args.arr_size = window_width / (rect_width + space);
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
246 algo_args.arr = malloc(algo_args.arr_size * sizeof(struct Element));
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
247
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
248 create_array(algo_args.arr, algo_args.arr_size, window_height, vpadding);
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
249 randomize_array(algo_args.arr, algo_args.arr_size);
7
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
250
0
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
251 glutInit(&argc, argv);
8
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
252 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
253 glutInitWindowSize(window_width, window_height);
13
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
254 glutCreateWindow("Algorithm animator");
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
255
14
d055228ca9a6 printing text with custom font
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
256 setup_gl();
d055228ca9a6 printing text with custom font
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
257 setup_freetype();
13
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
258
0
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
259 glutDisplayFunc(display);
8
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
260 glutKeyboardFunc(keyboard);
12
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
261 glutIdleFunc(idle);
0
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
262 glutMainLoop();
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
263
29
dae463bbf5ca implementing multi-thread and refactoring
Dennis C. M. <dennis@denniscm.com>
parents: 27
diff changeset
264 free(algo_args.arr);
7
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
265
15
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
266 FT_Done_Face(ft_face);
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
267 FT_Done_FreeType(ft_library);
15
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
268
0
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
269 return 0;
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
270 }