#define GL_GLEXT_PROTOTYPES #include "../view/exp004state0.h" #include "../model/map_geometry.h" #include "exp004processhits.h" #include "selsave.h" /* * A simple alias to make the code more readable. */ #define S exp004state0 /* * The implementation of this function is based on * [Angel,2008,pp80-81]. */ void exp004processhits (const GLint hits, const GLuint* hitlist) { for (unsigned int i = 0; i < hits; i++) { hitlist += 3; /* * Add the hits to the selection. */ S.selection.set[*hitlist] = true; S.base_colors_data[*hitlist][0] = SELECT_COLOR_R; S.base_colors_data[*hitlist][1] = SELECT_COLOR_G; S.base_colors_data[*hitlist][2] = SELECT_COLOR_B; S.base_colors_data[*hitlist][3] = SELECT_COLOR_A; hitlist++; } selsave (); glBindBuffer (GL_ARRAY_BUFFER, S.buffers[BASE_COLORS]); glColorPointer (4, GL_FLOAT, 0, 0); glBufferData (GL_ARRAY_BUFFER, sizeof (S.base_colors_data), S.base_colors_data, GL_STATIC_DRAW); /* * Rebuild the display list for the map. */ map_geometry (); return; }