glXCreateContext

Aus DGL Wiki
Wechseln zu: Navigation, Suche

glXCreateContext

Name

glXCreateContext - Erzeugt einen neuen GLX-Renderkontext.


Delphi-Spezifikation

function glXCreateContext(dpy: PDisplay; vis: PXVisualInfo; shareList: GLXContext; direct: Boolean): GLXContext;


Parameter

dpy Gibt die Verbindung zum X-Server an
vis Gibt ein Visual an, dass die für den Renderkontext verfügbaren Framebufferressourcen angibt. Dies ist ein Zeiger auf eine XVisualInfo-Struktur, keine Visual-ID und auch kein Zeiger auf ein Visual.
shareList Gibt den Kontext an, mit dem Displaylisten geteilt werden sollen. Ist dieser Wert nil, so heißt dies, dass keine Displaylisten mit einem anderen Kontext geteilt werden.
direct Gibt an, ob das Rendern über eine direkte Verbindung zum Grafiksystem stattfinden soll, sofern möglich (True) oder über den X-Server (False)


Beschreibung

Die Funktion glXCreateContext erzeugt einen GLX-Renderkontext und gibt dessen Handle zurück. Dieser Kontext kann genutzt werden, um sowohl in Fenster als auch in GLX-Pixmaps zu rendern. Falls glXCreateContext keinen Renderkontext erzeugen kann, wird nil zurückgegeben.

Wenn direct den Wert True hat, dann wird ein direkter Renderkontext erzeugt, falls die Implementierung direktes Rendern unterstützt, die Verbindung zu einem lokalen X-Server führt und ein direkter Renderkontext verfügbar ist. (Eine Implementierung darf jedoch auch einen indirekten Renderkontext zurückgeben, wenn direct den Wert True hat.) Falls direct den Wert False hat, dann wird immer ein Renderkontext erzeugt, der über den X-Server rendert. Direktes Rendern bietet in einigen Implementierungen einen Geschwindigkeitsvorteil. Jedoch können direkte Renderkontexte nicht außerhalb eines einzelnen Prozesses geteilt werden und sie sind möglicherweise nicht in der Lage, in GLX-Pixmaps zu rendern.

Falls shareList nicht den Wert nil hat, dann werden alle Displaylistenindizes und -definitionen zwischen dem Kontext shareList und dem neu erzeugten Kontext geteilt. Eine beliebige Anzahl von Kontexten kann einen einzelnen Displaylistenraum teilen. Jedoch müssen alle Renderkontexte, die einen einzelnen Displaylistenraum teilen, selbst im gleichen Adressraum existieren. Zwei Renderkontexte befinden sich im gleichen Adressraum, wenn sie beide nicht-direkt sind und den gleichen Server benutzen, oder falls beide direkt sind und zum gleichen Prozess gehören. Im nicht-direkten Fall ist es nicht notwendig, dass die aufrufenden Threads den gleichen Adressraum haben, sondern nur dass die zugehörigen Renderkontexte im gleichen Adressraum existieren.

Wenn die GL-Version 1.1 oder höher ist, dann werden alle Texturobjekte außer dem Objekt 0 zwischen Kontexten, die die gleichen Displaylisten haben, geteilt.


Hinweise

XVisualInfo ist im Header Xutil.h definiert, es handelt sich dabei um eine Struktur, die die Elemente visual, visualID, screen und depth enthält.

Ein Prozess ist eine einzelne Ausführungsumgebung, welche in einem einzelnen Adressraum implementiert ist und aus einem oder mehreren Threads besteht.

Ein Thread ist einer aus einer Menge von Unterprozessen, doe den gleichen Adressraum haben, aber getrennte Programmzähler, Stacks und andere damit in Verbindung stehende, globale Daten haben. Ein Thread, welcher das einzige Element seiner Unterprozessgruppe ist, ist äquivalent zu einem Prozess.

Es ist ggf. nicht möglich, mit einem direkten Renderkontext in eine GLX-Pixmap zu rendern.


Fehlermeldungen

nil wird zurückgegeben, wenn die Ausführung auf der Klientseite scheitert.

BadAlloc wird generiert, falls der Server nicht genug Ressourcen hat, um einen neuen Kontext anzulegen.

BadMatch wird generiert, falls der zu erzeugende Kontext nicht den gleichen Adressraum oder Bildschirm wie der durch shareList angegebene Kontext hat.

BadValue wird generiert, wenn vis kein gültiges Visual ist (z.B. wenn eine bestimmte GLX-Implementierung dies nicht unterstützt).

GLXBadContext wird generiert, falls shareList kein GLX-Kontext ist und nicht nil ist.


Siehe auch

glXDestroyContext, glXGetConfig, glXIsDirect, glXMakeCurrent