summaryrefslogtreecommitdiffstats
path: root/balls.c
diff options
context:
space:
mode:
Diffstat (limited to 'balls.c')
-rw-r--r--balls.c49
1 files changed, 33 insertions, 16 deletions
diff --git a/balls.c b/balls.c
index 521fbe1..f40f64e 100644
--- a/balls.c
+++ b/balls.c
@@ -45,8 +45,10 @@ void setPositions(void);
void setVelocities(void);
void setRadii(void);
void setCollisions(void);
-void configureSharedData(void);
-void configureColorBuffer(void);
+void genBuffers(void);
+void genVertexBuffer(void);
+void setColors(void);
+void configSharedData(void);
void setKernelArgs(void);
void display(void);
void reshape(int w, int h);
@@ -82,8 +84,11 @@ main(int argc, char *argv[]) {
setVelocities();
setRadii();
setCollisions();
- configureSharedData();
- configureColorBuffer();
+
+ genBuffers();
+ setColors();
+ configSharedData();
+
setKernelArgs();
glutDisplayFunc(display);
@@ -295,29 +300,32 @@ setCollisions(void) {
}
}
+/* Create GL vertex and color buffers. */
void
-configureSharedData(void) {
- int err;
-
- /* Create vertex array. */
+genBuffers(void) {
glGenVertexArrays(1, &vertexVAO);
glBindVertexArray(vertexVAO);
- /* Create vertex buffer. */
+ /* Generate vertex buffer. */
+ genVertexBuffer();
+
+ /* Generate color buffer. */
+ glGenBuffers(1, &colorVBO);
+}
+
+/* Generate GL vertex buffer. */
+void
+genVertexBuffer(void) {
glGenBuffers(1, &vertexVBO);
glBindBuffer(GL_ARRAY_BUFFER, vertexVBO);
glBufferData(GL_ARRAY_BUFFER, NBALLS*CIRCLE_POINTS*2*sizeof(GLfloat), NULL, GL_DYNAMIC_DRAW);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(0);
-
- /* Create CL memory object from vertex buffer. */
- vertexBuf = clCreateFromGLBuffer(context, CL_MEM_WRITE_ONLY, vertexVBO, &err);
- if (err < 0)
- sysfatal("Failed to create buffer object from VBO.\n");
}
+/* Set ball colors in the GL vertex color buffer. */
void
-configureColorBuffer(void) {
+setColors(void) {
GLfloat (*colors)[3];
int i, j;
@@ -331,7 +339,6 @@ configureColorBuffer(void) {
}
}
- glGenBuffers(1, &colorVBO);
glBindBuffer(GL_ARRAY_BUFFER, colorVBO);
glBufferData(GL_ARRAY_BUFFER, NBALLS*CIRCLE_POINTS*3*sizeof(GLfloat), colors, GL_STATIC_DRAW);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, 0);
@@ -340,6 +347,16 @@ configureColorBuffer(void) {
free(colors);
}
+/* Create CL memory object from vertex buffer. */
+void
+configSharedData(void) {
+ int err;
+
+ vertexBuf = clCreateFromGLBuffer(context, CL_MEM_WRITE_ONLY, vertexVBO, &err);
+ if (err < 0)
+ sysfatal("Failed to create buffer object from VBO.\n");
+}
+
void
setKernelArgs(void) {
int err;