Was ist indirektes Rendern und welche Auswirkungen hat es auf die Grafikleistung?
Handelt es sich auch um einen Linux-spezifischen Begriff oder kann er im Kontext anderer Betriebssysteme verwendet werden?
Indirektes Rendern ist das Rendern einer Remoteanwendung auf dem lokalen Computer. Es transportiert die Grafikdaten über das X11-Protokoll. Die Leistung hängt sowohl von der Netzwerkverbindung ab, über die die Daten übertragen werden, als auch davon, wie gut Ihre lokale Grafikkarte ist.
Es ist auf jedem System mit einer Grafikkarte und einem laufenden X-Server (Windows oder Linux) anwendbar.
Indirektes Rendering bedeutet im Grunde, dass die gesamte Rendering-Pipeline durch GLX / X11 läuft. Dies ist ein Kompromiss, der in der Regel zu einem höheren Ressourcenverbrauch sowie einer höheren Latenz führt und gelegentlich zu einer geringeren Rendergeschwindigkeit führt
Vereinfacht zu Illustrationszwecken beschreibe ich es hier.
Direktes Rendern:
Anwendung → LibGL → Treiber → Hardware
Indirektes Rendern:
Anwendung → LibGL → Xorg → Treiber → Hardware
Indirektes Rendern hat den Vorteil, dass es einige Fehler im Zusammenhang mit Treibern reduziert, keinen Zugriff auf die Grafikkarte auf Benutzerebene erfordert (Sicherheitsfunktion) und das Rendern über ein Netzwerk ermöglicht.
Der Nachteil des indirekten Renderns besteht darin, dass es eine längere Pipeline-Latenzzeit aufweist und mehr Ressourcen verwendet (insbesondere Speicherbandbreite und Prozessorzeit).
Indirektes Rendern führt normalerweise zu einer geringeren Leistung, insbesondere bei Anwendungen mit hohem Prozessor-Overhead oder wenn eine Rendering-Pipeline mit geringer Latenz verwendet wird.
In einigen seltenen Fällen kann das direkte Rendern in Anwendungen, die den Puffer für kurze Warteschlangen in der Pipeline für das direkte Rendern schlecht verarbeiten, schneller sein. Ähnlich wie ein Druckpuffer das Drucken beschleunigen würde, kann dies an Fehlern oder Einschränkungen in Anwendungen liegen, die von der Rate abhängen, mit der ausgehende asynchrone Rendering-Aufrufe übertragen werden können.
Indirektes Rendern ist das System, mit dem OpenGL eine Zeichnung als Anleitung zur Verfügung gestellt wird. Die meisten Parameter für diese Anforderung beginnen mit der Anhäufung von GPUs durch ein Pufferobjekt.
Nimmt beispielsweise glDrawArrays()
eine grobe Sortierung, die Anzahl der Scheitelpunkte und den Startscheitelpunkt. Bei Verwendung der abweichenden Zeichnungsüberschrift glDrawArraysIndirect()
werden der Startscheitelpunkt und die Anzahl der zu rendernden Scheitelpunkte vorzugsweise in einem Unterstützungsobjekt berücksichtigt.
Indirektes Rendern im Gegensatz zum direkten Rendern bedeutet, dass Sie eine Art Software-Rendering verwenden, anstatt die GPU Ihrer Grafikkarte zu verwenden. Das Ergebnis ist ein schlechtes 3D-Rendering.
Indirektes Rendern bedeutet keine Beschleunigung der Hardware-Grafik.