我想使用OpenGL + OpenCL模拟粒子系统。在我要更改粒子数之前,它工作正常。
我创建了包含质量/速度/位置三元组的缓冲区。
cl_vbo_mem = cl::BufferGL(context, CL_MEM_WRITE_ONLY, vbo);
cl_v = cl::Buffer(context, CL_MEM_READ_WRITE, num_particles * sizeof(float) * 3);
cl_m = cl::Buffer(context, CL_MEM_READ_WRITE, num_particles * sizeof(float));
然后我上传它们
/// set masses
command_queue.enqueueWriteBuffer(cl_m, CL_TRUE, 0, num_particles * sizeof(float), &initialMasses[0]);
/// set initial velocities
command_queue.enqueueWriteBuffer(cl_v, CL_TRUE, 0, num_particles * sizeof(float) * 3, &initialVelocities[0]);
/// set initial velocities
command_queue.enqueueWriteBuffer(cl_vbo_mem, CL_TRUE, 0, num_particles * sizeof(float) * 3, &initialPositions[0]);
当我增加粒子数量时,程序只会崩溃。
API中没有任何官方方法来更改缓冲区的大小。如果您知道最大粒子数,则只需分配所需的大小即可。或者,您可以提出一些动态的重新分配机制。