[C++][OpenCL] image3D an Kernel übergen

Mit dem Index hast du recht. Das ändert aber leider nichts an meinem Problem, da trotzdem noch überall 0 raus kommt :(.

Den Buffer initialisiere ich doch indem ich das Array bei clEnqueueWriteBuffer mit übergebe, oder nicht?
Ich muss doch nur den Pointer bei der Buffererzeugung mit übergeben, wenn ich sowas wie USE_HOST_PTR benutze.

Das Projekt ist ein reines Test-Projekt, daraus wird nichts. Ich schreibe gerade einen Raytracer, der Voxel renderen soll. Dieser funktioniert eigentlich auch schon ziemlich gut. Bis darauf, dass eben das schreiben in einem image2D-Datentyp nicht funktioniert. (Bis jetzt habe ich in ein ganz normales Array geschrieben.) Leider kann ich den Code hier nicht posten und außerdem wäre er glaube ich auch etwas zu lang (Allein die .cpp-Datei meiner Hauptklasser hat um die 700 Zeilen Code). Deswegen das Testprojekt.

In dem Testprojekt ist das image3D das Voxelvolumen, die in BYTE vorliegen und image2D soll dann das fertige Bild werden. Da ich das ganze (später) per OpenGL anzeigen lassen will wäre es sehr praktisch, wenn das mit dem schreiben in ein image2D funktionieren würde, da ich das dann (meines Wissens) direkt an OpenGL übergeben kann.
 
Mensch bin ich blöd. Hab den falschen Kernel aufgerufen, weswegen es natürlich nicht funktionieren kann :freak:. Naja folgender Code für das Bild funktioniert jetzt:
Code:
m_Img2D = clCreateImage( m_Context, CL_MEM_WRITE_ONLY | CL_MEM_ALLOC_HOST_PTR, &imgForm, &imgDesc, NULL, &err);
//... weitere Sachen und Kernel aufruf
size_t origin[] = { 0, 0, 0 };
size_t region[] = { size_2D, size_2D, 1 };
err = clEnqueueReadImage(m_Queue, m_Img2D, CL_TRUE, origin, region, 0, 0, retArr2, 0, NULL, NULL);
cout<<"read Image: "<<err<<endl;
Mit USE_HOST_PTR (und retArr2) in CreateImage und ohne ReadImage funktionierts aber immer noch net :(. Das wäre mir aber wesentlich lieber.
Jemand ne Idee?
 

Ähnliche Themen

F
2
Antworten
21
Aufrufe
2.866
F
F
Antworten
6
Aufrufe
1.314
Zurück
Oben