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

如何更改OpenCL缓冲区的大小?,opencl,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

我想用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中没有任何官方方法来更改缓冲区的大小。如果您知道粒子的最大数量,那么您可以分配所需的大小。或者你可以想出一些动态再分配机制。

请发布一个可以编译并显示错误的最小工作示例。也就是说,
CL_MEM_WRITE_ONLY
声明了一个只对内核写的缓冲区,即它不能在GPU上读取。这可能不是你想要的。所有的文件和东西都可以在github repositoy上找到。我在第329行或在
void CMyApp::KeyboardDown(SDL_KeyboardEvent&key)
函数中评论了问题的位置:GLCL_Interoperation\u NBody/GLCL_Interoperation\u NBody/MyApp.cpp