Reines OpenGL-Software-Rendering

8

Um einen Algorithmus für maschinelles Lernen zu trainieren, müssen wir einige Geometrien in OpenGL ohne Unterstützung für Hardware-Rendering rendern (keine Grafikkarte). Wir haben also überlegt, in reiner Software zu rendern, und wir haben uns Mesa bereits angesehen. Es scheint, dass es in der Lage ist, in reiner Software zu rendern, aber bisher erhalten wir nur OpenGL 2.x, während wir OpenGL 3.3 benötigen.

Weiß jemand, ob das möglich ist? und wenn ja, wie? Wir scheinen die ganze Zeit auf Stolpersteine ​​zu stoßen.

(Hintergrund, warum wir das tun wollen: Um den Lernalgorithmus zu trainieren, müssen wir viele Läufe unserer Software auf einem PC-Cluster ausführen, die kein Rendern in Hardware ermöglichen.)

Alle Hinweise, Ideen und Hinweise werden geschätzt.

Gabriel
quelle
Mesa unterstützt auf einigen Systemen (wie meinem Laptop) nicht einmal hardwarebeschleunigtes OpenGL 3.3.
Oberst
verwandte gamedev.stackexchange.com/questions/17571/…
Ciro Santilli 法轮功 病毒 审查 六四 事件 法轮功

Antworten:

6

Ich bin verwirrt über Ihre Anforderungen. Führen Sie den Code auf einem PC oder einem eingebetteten System aus? Wenn Sie auf etwas laufen, das aus der Ferne wie ein PC aussieht, ist die "Unterstützung für Hardware-Rendering" im Grunde einfach nicht wahr. Zumindest haben Sie einige Intel integrierte Sachen. Ich habe noch kein kopfloses System gesehen, das physisch keinen Videochip hatte.

Auf einem Headless-System können Sie ohne Fenster rendern. Wie dies mit GLX gemacht wird, sehen Sie Details in Windowless OpenGL . In jedem Fall ist selbst die beschissenste Hardware effizienter als ein Software-Renderer.

Wenn Sie wirklich in Not sind und absolut keine grafische Hardware haben, können Sie so etwas wie VirtualGL verwenden .

Aber wenn Sie Bilder in Software mit OpenGL synthetisieren, ist das irgendwie rückwärts. OpenGL wurde unter Berücksichtigung der strengen Einschränkungen der Grafikhardware entwickelt. Das Ergebnis ist, dass es erhebliche Einschränkungen gibt, die beim Rendern in Software absichtlich ignoriert werden können. Darüber hinaus ist der Raster-Algorithmus bei Verwendung der aktuellen Hardware nicht sehr effizient. Ein Raytracing erster Ordnung kann effizienter sein und über mehrere Kerne hinweg leicht lähmen. Vielleicht können Sie sich so etwas wie PovRay ansehen .

Rioki
quelle
1
Es gibt einige beschissene Intel-Videochips, die noch heute hergestellt werden und nur OpenGL 1.4 + ARB-Fragment-Assembly + ARB-Software-implementierte Vertex-Assembly unterstützen. Diese sind nicht effizienter als Software-Renderer für jede App, die OpenGL 3 benötigt.
Ruslan
Vielen Dank. Ja, es ist ein PC-ähnlich. Zunächst ein einfacher PC in einem PC-Cluster, bei dem wir uns über ssh anmelden. Später werden es PC-Knoten in einem HPC-System sein. Das Problem ist: Egal was wir tun, wir bekommen immer nur OpenGL 2.1. Unsere Anwendung basiert auf Qt, aber in der fensterlosen Version ist der gesamte Qt-Code inaktiv, mit Ausnahme desjenigen, der den OpenGL-Kontext erstellt. Und ja, wir haben DISPLAY auf dem Remote-Computer auf: 0.0 gesetzt.
Gabriel
Andererseits ist OpenGL 2.1 nicht schlecht. Ich habe das ausgiebig mit ziemlich guten Ergebnissen genutzt.
Rioki
3

Es scheint, dass nur OpenGL 2.x vom Software-Renderer in Mesa vollständig unterstützt wird.

Diese Antwort legt jedoch nahe, dass die meisten Funktionen von OpenGL 3.x über Erweiterungen unterstützt werden. Vielleicht möchten Sie es versuchen.

Kolrabi
quelle