OpenCL – 将 `float4` 添加到 `float4` 数组什么都不做
OpenCL – adding `float4` to `float4` array does nothing
我有一个包含 cl_float4
个顶点的 OpenGL VBO,我正在尝试通过 OpenCL 更新 VBO(我将 VBO 内容渲染为 GL_POINTS
)。我将表示 VBO 的 cl_mem
对象作为内核参数传递(缓冲区设置为 CL_MEM_READ_WRITE
)。
不幸的是,我无法一次更新一个顶点的 float4
数据。
以下代码段不起作用(即渲染点不移动):
__kernel void update(__global float4* particle_positions)
{
int gid = get_global_id(0);
particle_positions[gid] += float4(0.1, 0.1, 0.1, 0.0);
}
以下代码片段确实有效(即渲染点移动):
__kernel void update(__global float4* particle_positions)
{
int gid = get_global_id(0);
particle_positions[gid].x += 0.1;
particle_positions[gid].y += 0.1;
particle_positions[gid].z += 0.1;
}
需要像
一样在括号中
(float4)(1,1,1,1)
拥有 float4 类型。或者你也可以使用其他类型
(float4)((float2)(1,1),(float2)(1,1))
或混合类型
(float4)((float2)(1,1),1,1)
就像一个重载函数。
我有一个包含 cl_float4
个顶点的 OpenGL VBO,我正在尝试通过 OpenCL 更新 VBO(我将 VBO 内容渲染为 GL_POINTS
)。我将表示 VBO 的 cl_mem
对象作为内核参数传递(缓冲区设置为 CL_MEM_READ_WRITE
)。
不幸的是,我无法一次更新一个顶点的 float4
数据。
以下代码段不起作用(即渲染点不移动):
__kernel void update(__global float4* particle_positions)
{
int gid = get_global_id(0);
particle_positions[gid] += float4(0.1, 0.1, 0.1, 0.0);
}
以下代码片段确实有效(即渲染点移动):
__kernel void update(__global float4* particle_positions)
{
int gid = get_global_id(0);
particle_positions[gid].x += 0.1;
particle_positions[gid].y += 0.1;
particle_positions[gid].z += 0.1;
}
需要像
一样在括号中(float4)(1,1,1,1)
拥有 float4 类型。或者你也可以使用其他类型
(float4)((float2)(1,1),(float2)(1,1))
或混合类型
(float4)((float2)(1,1),1,1)
就像一个重载函数。