2016-07-21 14 views

Antwort

1

Nein, nicht wirklich.

Zuerst werden OpenGL-Zeichenbefehle auf der CPU-Seite ausgegeben (z. B. glDrawArrays). In OpenCL-Kerneln arbeiten Sie auf der GPU und können diese Methoden nicht aufrufen.

Darüber hinaus haben Sie in OpenCL nicht einmal Zugriff auf die Teile mit fester Funktion der GPU-Rendering-Pipeline wie Tessellation Unit oder Rasterizer.

Was Sie natürlich tun können, ist ein 2D-Puffer in OpenCL zu erstellen, implementieren Sie Linienrendering von selbst und malen "Pixel" drin, aber das ist wahrscheinlich nicht das, was Sie wollen.

Es gibt auch Erweiterungen für OpenGL-OpenCL Interoperabilität ist ein Tutorial hier: https://software.intel.com/en-us/articles/opencl-and-opengl-interoperability-tutorial

Vielleicht uns, wenn Sie sagen, was Sie erreichen wollen, können wir Ihnen bessere Alternativen geben :)

+0

Ich baue ein Zeichenanwendung und müssen Renderings von einfachen Primitiven in einer massiven parallelen Art und Weise ausführen. Auf CPU-> OpenGL bekomme ich nur wenige Threads, also war die Idee das Rendering komplett auf die GPU zu verschieben. Wollte vermeiden, Low-Level-Algorithmen für das Rendern von Primitiven zu machen, sagen wir "Assembler-Stil", da OpenGL die Fähigkeit hat, Dinge zu zeichnen. –

+1

Das klingt nicht wie OpenCL ist der richtige Weg ... GPUs sind in der Regel in der Lage, Millionen von Primitiven in ein paar Millisekunden zu machen, und dafür ist OpenGL gemacht. Machen Sie einfach keinen Aufruf pro Grundelement, sondern fügen Sie alles, was Sie haben, in einen Puffer ein und rendern Sie den gesamten Puffer auf einmal. Das ist ziemlich üblich und die meisten modernen OpenGL-Tutorials sollten Dinge auf eine Weise rendern, die auf eine größere Anzahl von Primitiven skaliert. – karyon

+0

Mein Problem ist, ich habe viele Szenen, sagen wir 500. Jede Szene hat pimitives, etwa 1000. Nicht sicher, ob die Erstellung von 500 Rendering-Puffer ist der Weg zu gehen. –