【发布时间】: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