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

问题描述 投票:0回答:1

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

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

opencl
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.