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)

就像一个重载函数。