如何更改OpenCL缓冲区的大小?

时间:2019-12-10 12:52:32

标签: opencl

我想使用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]);

当我增加粒子数量时,程序只会崩溃。

1 个答案:

答案 0 :(得分:0)

API中没有任何官方方法来更改缓冲区的大小。如果您知道最大粒子数,则只需分配所需的大小即可。或者,您可以提出一些动态的重新分配机制。