Ich erhalte einige scheinbar seltsame Ergebnisse, wenn ich versuche, eine float3
Variable in einem OpenCL-Kernel zu aktualisieren. Boiling es nach unten:OpenCL Konstruktor Syntax und Aktualisieren Variable
float3 vel = float3(0); // a
vel = float3(0, 1, 0); // b
vel = (float3)(0, 2, 0); // c
Wenn ich vel
nach jedem Anruf mit Druck:
if(get_global_id(0) == 0)
printf("[%d]: vel: (%f, %f, %f)\n", index, vel.x, vel.y, vel.z);
Dann sehe ich das richtig a) vel
initialisiert, aber b) nicht alles tun. c) funktioniert. Weiß jemand, warum ich die Variable nicht mit einem neuen float3
Objekt aktualisieren kann, wie ich in b mache? So bin ich es in C++ und Glsl gewohnt. Oder möglicherweise ein Treiberfehler?
Mit OpenCL 1.2 auf MacBook Pro mit OS X 10.11.5.
Wenn ich auf die Frage hinzufügen: Was bedeutet 'float3 (0, 1, 0)' kochen bis zu? float3 ist keine Klasse, hat keinen Konstruktor, und das ist nicht C++ ... Auch Fall a)? Wie funktioniert das überhaupt? – DarkZeros
@DarkZeros Dies ist sicherlich nicht Standard-OpenCL C-Syntax, so wird wahrscheinlich nicht überall (oder sogar anderswo außer Apple) funktionieren. – jprice