Ich habe schon einiges mit OpenGL gemacht, und wollte jetzt etwas mit
OpenCL ausprobieren.
Meine Idee war es, das Doublebuffering auszuschalten, und dieses mit
einem Renderbuffer-Object und einem Framebuffer-Object zu simulieren, um
den Renderbuffer in OpenCL nutzen zu können.
Es scheint alles bestens zu funktionieren, mit gDEBugger und AMD CodeX
konnte ich sehen, dass alle OpenGL und OpenCL Funktionen in der
erwarteten Reihenfolge ausgeführt werden, es gibt keine Fehlermeldungen,
Compilerflags -Wall -Wextra -pedantic und -Werror sind gesetzt, aber das
Fenster ist grün statt rot.
Der Kernel scheint entweder nicht ausgeführt zu werden, oder aber nichts
zu tun.
Ich kann den Fehler einfach nicht finden. Könnte mir bitte jemand einen
hinweis geben?
Einige infos zu meinem PC:
1
gcc (Ubuntu 4.9.2-0ubuntu1~14.04) 4.9.2
2
3
CL_DEVICE_NAME: GeForce GT 650M
4
CL_DEVICE_VENDOR: NVIDIA Corporation
5
CL_DEVICE_VERSION: OpenCL 1.1 CUDA
6
CL_DEVICE_TYPE: CL_DEVICE_TYPE_GPU
7
CL_DRIVER_VERSION: 331.38
8
CL_DEVICE_PROFILE: FULL_PROFILE
9
CL_DEVICE_MAX_COMPUTE_UNITS: 2
10
CL_DEVICE_MAX_CLOCK_FREQUENCY: 835
11
CL_DEVICE_MEM_BASE_ADDR_ALIGN: 4096
12
CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE: 128
main loop (verkleinert, vollständige Version ist im Anhang):
Ich konnte den Fehler immernochnicht finden, und würde mich sehr über
eine Antwort freuen.
Da die Frage womöglich nicht ideal für ein Mikrocontroller forum ist,
bin ich auch sehr an Erfahrungsberichten über foren mit Spezialisierung
auf OpenCL und OpenGL interessiert.
Kann dir leider ned weiterhelfen. Auch Foren kenn ich dazu keine, aber
einfach mal den Standard ausprobieren:
- OpenCL ist von der Khronos Group. Einfach mal da nach einem Forum
suchen (gibt es, hab gerade gekuckt).
- Bei Stackoverflow sind sicherlich auch Leute unterwegs, die davon
Ahnung haben (OpenCL-Tag hat z.Z. 2615 Threads).
mar IO schrieb:> Auch Foren kenn ich dazu keine, aber> einfach mal den Standard ausprobieren
Trotzdem Danke, ich denke dass werde ich tun.
Eric B. schrieb:> Was passiert wenn du da mal> {0, 255, 0, 127 } reinschreibst? Immer noch grün?
Ja. Das grün kommt von glClear(GL_COLOR_BUFFER_BIT)
Mit glClearColor hab ich grün angegeben. Es sollte danach aber nach
clEnqueueNDRangeKernel mit Rot übermalt werden. Auskommentieren von
glClearColor führt dazu, dass der zufällige initiale Inhalt des Buffers
im Fenster Sichtbar wird. Auskommentieren von glBlitFramebuffer führt zu
einem blauen Fenster.
Ich habe ein lauffähiges Minimalbeispiel erstellt, welches das selbe
Verhalten zeigt. Es befindet sich im Anhang.
Systemanforderungen:
* Linux
* C-Compiler mit C99 Support
* OpenGL >= 3.3
* OpenCL >= 1.1