【问题标题】:OpenCL – adding `float4` to `float4` array does nothingOpenCL – 将 `float4` 添加到 `float4` 数组什么都不做
【发布时间】:2016-07-20 00:58:38
【问题描述】:

我有一个包含cl_float4 顶点的 OpenGL VBO,我正在尝试通过 OpenCL 更新 VBO(我将 VBO 内容渲染为GL_POINTS)。我将代表 VBO 的 cl_mem 对象作为内核参数传递(缓冲区设置为 CL_MEM_READ_WRITE)。

很遗憾,我无法一次更新一个顶点的float4 数据。

跟随 sn-p 不起作用(即渲染点不移动):

__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);
}

按照 sn-p 确实工作(即渲染点移动):

__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)(0.1, 0.1, 0.1, 0.0);不是 float4(0.1, 0.1, 0.1, 0.0);
  • @huseyintugrulbuyukisik 谢谢,它有效!如果您将此作为答案发布,我会接受。这真是一个愚蠢的问题——我来自 GLSL,我(无知地)相信 OpenCL C 将具有相同的语法,因此我什至没有想到 GLSL 和 OpenCL C 之间的语法差异。
  • 这不是一个愚蠢的问题。您的帖子和回复将帮助下一个遇到同样问题的人。

标签: opencl


【解决方案1】:

需要放在括号里

(float4)(1,1,1,1)

有一个 float4 类型。或者你也可以使用其他类型

(float4)((float2)(1,1),(float2)(1,1))

或混合型

(float4)((float2)(1,1),1,1)

就像一个重载函数。

【讨论】:

    猜你喜欢
    • 2015-07-21
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 2014-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多