36 files changed, 332 insertions, 176 deletions
diff --git a/src/controller/actions/process_hits.c b/src/controller/actions/process_hits.c new file mode 100644 index 0000000..4a76d1c --- a/dev/null +++ b/src/controller/actions/process_hits.c | |||
@@ -0,0 +1,45 @@ | |||
1 | #define GL_GLEXT_PROTOTYPES | ||
2 | #include "../../view/exp004state0.h" | ||
3 | #include "../../model/geometry/map_geometry.h" | ||
4 | #include "process_hits.h" | ||
5 | #include "sel_save.h" | ||
6 | |||
7 | /* | ||
8 | * A simple alias to make the code more readable. | ||
9 | */ | ||
10 | #define S exp004state0 | ||
11 | |||
12 | /* | ||
13 | * The implementation of this function is based on | ||
14 | * [Angel,2008,pp80-81]. | ||
15 | */ | ||
16 | void | ||
17 | process_hits (const GLint hits, const GLuint * hitlist) | ||
18 | { | ||
19 | for (unsigned int i = 0; i < hits; i++) | ||
20 | { | ||
21 | hitlist += 3; | ||
22 | |||
23 | /* | ||
24 | * Add the hits to the selection. | ||
25 | */ | ||
26 | S.selection.set[*hitlist] = true; | ||
27 | |||
28 | hitlist++; | ||
29 | } | ||
30 | |||
31 | sel_save (); | ||
32 | |||
33 | glBindBuffer (GL_ARRAY_BUFFER, S.buffers[BASE_COLORS]); | ||
34 | glColorPointer (4, GL_FLOAT, 0, 0); | ||
35 | glBufferData (GL_ARRAY_BUFFER, | ||
36 | sizeof (S.base_colors_data), S.base_colors_data, | ||
37 | GL_STATIC_DRAW); | ||
38 | |||
39 | /* | ||
40 | * Rebuild the display list for the map. | ||
41 | */ | ||
42 | map_geometry (); | ||
43 | |||
44 | return; | ||
45 | } | ||