summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSam Anthony <sam@samanthony.xyz>2024-11-12 11:59:21 -0500
committerSam Anthony <sam@samanthony.xyz>2024-11-12 11:59:21 -0500
commit0009a25716a502de8b931f46e0c7d67b6a1bd437 (patch)
tree3665b4bede3018857ea99e530c1464e3837d8caa
parentd553ca9b4020534f3b44fad4ee23b53a8f5019df (diff)
downloadballs-0009a25716a502de8b931f46e0c7d67b6a1bd437.zip
create position buffers
-rw-r--r--balls.c24
1 files changed, 14 insertions, 10 deletions
diff --git a/balls.c b/balls.c
index 4dca29e..8715c00 100644
--- a/balls.c
+++ b/balls.c
@@ -93,7 +93,8 @@ cl_context cpuContext, gpuContext;
cl_command_queue cpuQueue, gpuQueue;
cl_kernel moveKernel, collideWallsKernel, collideBallsKernel, genVerticesKernel;
GLuint vertexVAO, vertexVBO, colorVBO;
-cl_mem positions, velocities, radii, *collisions, vertexBuf;
+cl_mem positionsCpuBuf, positionsGpuBuf, velocitiesCpuBuf, radiiCpuBuf, *collisionsCpuBuf, vertexGpuBuf;
+float *positionsHostBuf;
Partition collisionPartition;
int
@@ -131,6 +132,7 @@ main(int argc, char *argv[]) {
freeCL();
freeGL();
freePartition(collisionPartition);
+ free(positionsHostBuf);
return 0;
}
@@ -281,21 +283,23 @@ createKernel(cl_program prog, const char *kernelFunc) {
void
setPositions(void) {
- Vector *hostPositions;
- float *hostPositionBuf;
+ Vector *positions;
int err;
/* Generate initial ball positions. */
- hostPositions = noOverlapPositions(nBalls, bounds, RMAX);
- hostPositionBuf = flatten(hostPositions, nBalls);
- free(hostPositions);
+ positions = noOverlapPositions(nBalls, bounds, RMAX);
+ positionsHostBuf = flatten(positions, nBalls);
+ free(positions);
- /* Create device-side buffer. */
- positions = clCreateBuffer(context, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR, nBalls*2*sizeof(float), hostPositionBuf, &err);
+ /* Create CPU buffer. */
+ positionsCpuBuf = clCreateBuffer(cpuContext, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR, nBalls*2*sizeof(float), positionsHostBuf, &err);
if (err < 0)
- sysfatal("Failed to allocate position buffer.\n");
+ sysfatal("Failed to allocate CPU position buffer.\n");
- free(hostPositionBuf);
+ /* Create GPU buffer. */
+ positionsGpuBuf = clCreateBuffer(gpuContext, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, nBalls*2*sizeof(float), positionsHostBuf, &err);
+ if (err < 0)
+ sysfatal("Failed to allocate GPU position buffer.\n");
}
void