У меня есть OpenGL VBO, содержащий cl_float4
вершины, и я пытаюсь обновить VBO через OpenCL (я визуализирую содержимое VBO как GL_POINTS
). Я передаю объект cl_mem
, представляющий VBO в качестве аргумента ядра (буфер устанавливается как CL_MEM_READ_WRITE
).OpenCL - добавление `float4` в` float4` массив ничего не делает
К сожалению, я не могу обновить данные одной вершины 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) (0,1, 0,1, 0,1, 0,0); не float4 (0,1, 0,1, 0,1, 0,0); –
@huseyintugrulbuyukisik Спасибо, это работает! Если вы опубликуете это как ответ, я приму это. Это был действительно глупый вопрос: я пришел из GLSL, и я (неосмотрительно) убедил, что OpenCL C будет иметь такой же синтаксис, поэтому рассмотрение различий синтаксиса между GLSL и OpenCL C даже не пришло мне в голову. – sarasvati
Это не глупый вопрос. ваш пост и ответ помогут следующему парню, у которого такая же проблема. – mfa