29 files changed, 1185 insertions, 0 deletions
diff --git a/src/controller/exp004processhits.c b/src/controller/exp004processhits.c new file mode 100644 index 0000000..29fbbbc --- a/dev/null +++ b/src/controller/exp004processhits.c @@ -0,0 +1,54 @@ +/* I seem to need this for glGenBuffers as per + http://www.gamedev.net/community/forums/topic.asp?topic_id=422358 */ +#define GL_GLEXT_PROTOTYPES + +#include "exp004processhits.h" +#include "../view/exp004state0.h" +#include <stdio.h> + +/* + * The implementation of this function is based on + * [Angel,2008,pp80-81]. + */ +void +exp004processhits (GLint hits, GLuint buffer[]) +{ + /* + * A simple alias to make the code more readable. + */ + EXP004STATE* S = &exp004state0; + + printf ("Hits: %d\n", hits); + + GLuint *hitlist = buffer; + + for (int i = 0; i < hits; i++) + { + hitlist += 3; + + /* + * Report the hit to the terminal. + */ + printf ("Hit %i: %s\n", i + 1, exp004state0.gi_data[*hitlist]); + + /* + * Add the hits to the selection. + */ + exp004state0.selection[*hitlist] = true; + exp004state0.base_colors_data[*hitlist][0] = SELECT_COLOR_R; + exp004state0.base_colors_data[*hitlist][1] = SELECT_COLOR_G; + exp004state0.base_colors_data[*hitlist][2] = SELECT_COLOR_B; + + hitlist++; + } + + glBindBuffer (GL_ARRAY_BUFFER, S->buffers[BASE_COLORS]); + glColorPointer (3, GL_FLOAT, 0, 0); + glBufferData (GL_ARRAY_BUFFER, + sizeof (S->base_colors_data), S->base_colors_data, + GL_STATIC_DRAW); + + printf ("\n"); + + return; +} |