OpenGLGadget()

Syntax

Ergebnis = OpenGLGadget(#Gadget, x, y, Breite, Höhe [, Flags])
Beschreibung
Erstellt ein OpenGL Gadget in der aktuellen Gadgetliste. Dieses Gadget bietet einen OpenGL-Zeichenkontext ("drawing context") und Ereignisse ("events") für die Maus- und Tastatur-Interaktion, um einfach eine 3D-OpenGL-Ansicht zu erstellen.

Die meisten der OpenGL-Befehle sind direkt in PureBasic verfügbar - unter Verwendung der Unterstrich-API-Schreibweise (Befehle enden mit einem Unterstrich, wie 'glBegin_()').

Parameter

#Gadget Eine Nummer, um das neue Gadget zu identifizieren. #PB_Any kann verwendet werden, um diese Nummer automatisch zu generieren.
x, y, Breite, Höhe Die Position und die Abmessungen des neuen Gadgets (in Pixel). Die maximale Breite und Höhe beträgt 16000 Pixel.
Flags (optional) Flags zum Ändern des Gadget-Verhaltens. Dies kann eine Kombination der folgenden Konstanten sein:
  #PB_OpenGL_Keyboard               : Ermöglicht dem Gadget, den Tastaturfokus und Tastaturereignisse zu empfangen.
  #PB_OpenGL_NoFlipSynchronization  : deaktiviert die vsync-Synchronisation.
  #PB_OpenGL_FlipSynchronization    : aktiviert die vsync-Synchronisation (Standard).
  #PB_OpenGL_NoDepthBuffer          : deaktiviert den Tiefenpuffer.
  #PB_OpenGL_16BitDepthBuffer       : erstellt einen 16-Bit Tiefenpuffer (Standard).
  #PB_OpenGL_24BitDepthBuffer       : erstellt einen 24-Bit Tiefenpuffer.
  #PB_OpenGL_NoStencilBuffer        : deaktiviert den Stencil-Puffer (Standard).
  #PB_OpenGL_8BitStencilBuffer      : erstellt einen 8-Bit Stencil-Puffer.
  #PB_OpenGL_NoAccumulationBuffer   : deaktiviert den Akkumulationspuffer (Standard).
  #PB_OpenGL_32BitAccumulationBuffer: erstellt einen 32-Bit Akkumulationspuffer.
  #PB_OpenGL_64BitAccumulationBuffer: erstellt einen 64-Bit Akkumulationspuffer.
Das #PB_OpenGL_Keyboard Flag wird benötigt, um jegliche Tastatur-Ereignisse in diesem Gadget zu empfangen. Wenn Sie dieses Flag verwenden, sollten Sie auf #PB_EventType_Focus und #PB_EventType_LostFocus Ereignisse prüfen und einen visuellen Hinweis auf dem Gadget zeichnen, wenn es den Fokus hat, damit dem Anwender klar ist, welches Gadget aktuell den Fokus hat.

Rückgabewert

Gibt im Erfolgsfall einen Wert ungleich Null zurück, und Null bei einem Fehler. Wenn #PB_Any als #Gadget Parameter verwendet wurde, dann ist bei Erfolg der Rückgabewert die automatisch generierte Gadget-Nummer.

Anmerkungen

Das erstellte Gadget beginnt nur mit einem schwarzen Hintergrund. Der aktuelle OpenGL-Kontext wird auf dieses neu erstellte Gadget gesetzt. Um den aktuellen OpenGL-Kontext zu ändern, verwenden Sie das #PB_OpenGL_SetContext Attribut. Einmal erstellt, kann mit Hilfe des #PB_OpenGL_FlipBuffers Attributs ein Rahmen angezeigt werden.

Da das OpenGL-Gadget als Echtzeit-Rendering-Gadget gedacht ist, speichert es sein aktuelles Rendering (Inhalt) nicht in einem separaten Puffer: Es muss erneut gerendert werden, wenn die Größe des Fensters geändert, minimiert oder maximiert wird oder wenn das Gadget selbst in der Größe verändert oder verschoben wird.

Die folgenden Ereignisse werden vom Gadget gemeldet. Die EventType() Funktion meldet den Typ des aktuellen Gadget-Ereignisses:
  #PB_EventType_MouseEnter      : Der Maus-Cursor "betrat" das Gadget
  #PB_EventType_MouseLeave      : Der Maus-Cursor verließ das Gadget
  #PB_EventType_MouseMove       : Der Maus-Cursor bewegte sich
  #PB_EventType_MouseWheel      : Das Maus-Rad wurde bewegt
  #PB_EventType_LeftButtonDown  : Der linke Maus-Knopf wurde gedrückt
  #PB_EventType_LeftButtonUp    : Der linke Maus-Knopf wurde los gelassen
  #PB_EventType_LeftClick       : Ein Klick mit der linken Maus-Taste
  #PB_EventType_LeftDoubleClick : Ein Doppelklick mit der linken Maus-Taste
  #PB_EventType_RightButtonDown : Der rechte Maus-Knopf wurde gedrückt
  #PB_EventType_RightButtonUp   : Der rechte Maus-Knopf wurde los gelassen
  #PB_EventType_RightClick      : Ein Klick mit der rechten Maus-Taste
  #PB_EventType_RightDoubleClick: Ein Doppelklick mit der rechten Maus-Taste
  #PB_EventType_MiddleButtonDown: Der mittlere Maus-Knopf wurde gedrückt
  #PB_EventType_MiddleButtonUp  : Der mittlere Maus-Knopf wurde los gelassen
  #PB_EventType_Focus           : Das Gadget erhielt den Tastatur-Fokus
  #PB_EventType_LostFocus       : Das Gadget verlor den Tastatur-Fokus
  #PB_EventType_KeyDown         : Eine Taste wurde gedrückt
  #PB_EventType_KeyUp           : Eine Taste wurde los gelassen
  #PB_EventType_Input           : Text-Eingabe wurde generiert
Beachten Sie bitte, dass die Ereignisse #PB_EventType_KeyDown, #PB_EventType_KeyUp und #PB_EventType_Input nur gemeldet werden, wenn das Gadget den Tastatur-Fokus hat. Dies bedeutet, dass das #PB_OpenGL_Keyboard Flag bei der Erstellung des Gadgets gesetzt werden muss, um Tastatur-Ereignisse zu erlauben. Auf Windows wird das #PB_EventType_MouseWheel Ereignis auch nur gemeldet, wenn das Gadget den Tastatur-Fokus hat. Auf den anderen OS wird dieses Ereignis dem Gadget unter dem Maus-Pfeil gemeldet, unabhängig vom Tastatur-Fokus.

Weitere Informationen über das aktuelle Ereignis können mit der Funktion GetGadgetAttribute() empfangen werden. Diese Information ist nur verfügbar, wenn das aktuelle Ereignis (empfangen von WaitWindowEvent() bzw. WindowEvent()) ein Ereignis für dieses Gadget ist. Die folgenden Attribute können verwendet werden:

#PB_OpenGL_MouseX, #PB_OpenGL_MouseY
Gibt die angegebenen Maus-Koordinaten relativ zum Zeichen-Bereich des Gadgets zurück. Die Maus-Position wird zu dem Zeitpunkt zurückgegeben, zu dem das Ereignis generiert wurde. Dadurch kann das Ergebnis von den durch WindowMouseX() und WindowMouseY() gemeldeten Koordinaten abweichen, welche die aktuelle Maus-Position unabhängig vom Status der verarbeiteten Ereignisse zurückmelden. Die mit Hilfe dieser Attribute zurückgegebenen Koordinaten sollten für dieses Gadget verwendet werden, um sicher zu gehen, dass die Maus-Koordinaten mit dem aktuellen Ereignis zusammenpassen.
#PB_OpenGL_Buttons
Gibt den Status der Maus-Knöpfe für das Ereignis zurück, Das Ergebnis ist eine Kombination (verknüpft mit dem bitweisen '|' OR-Operator) der folgenden Konstanten:
  #PB_OpenGL_LeftButton  : Der linke Maus-Knopf ist aktuell gedrückt.
  #PB_OpenGL_RightButton : Der rechte Maus-Knopf ist aktuell gedrückt.
  #PB_OpenGL_MiddleButton: Der mittlere Maus-Knopf ist aktuell gedrückt.
#PB_OpenGL_Modifiers
Gibt den Status der Tastatur-"Modifier" für das Ereignis zurück. Das Ergebnis ist eine Kombination (verknüpft mit dem bitweisen '|' OR-Operator) der folgenden Konstanten:
  #PB_OpenGL_Shift  : Die 'Shift' (Umschalt-) Taste ist aktuell gedrückt.
  #PB_OpenGL_Alt    : Die 'Alt' Taste ist aktuell gedrückt.
  #PB_OpenGL_Control: Die 'Control' Taste ist aktuell gedrückt.
  #PB_OpenGL_Command: Die 'Command' (oder "Apple") Taste ist aktuell gedrückt. (nur auf Mac OSX)
#PB_OpenGL_WheelDelta
Gibt die Bewegung des Maus-Rades für das aktuelle Ereignis in Mehrfachen von 1 bzw. -1 zurück. Ein positiver Wert sagt aus, dass das Rad nach oben (weg vom Anwender) bewegt wurde, und ein negativer Wert sagt aus, dass das Rad nach unten (hin zum Anwender) bewegt wurde. Dieses Attribut ist 0, wenn das aktuelle Ereignis kein #PB_EventType_MouseWheel Ereignis ist.
#PB_OpenGL_Key
Gibt die Taste zurück, die bei einem #PB_EventType_KeyDown oder #PB_EventType_KeyUp Ereignis gedrückt oder los gelassen wurde. Der zurückgegebene Wert ist einer der #PB_Shortcut_... Werte, welche von der Funktion AddKeyboardShortcut() verwendet werden. Dieses Attribut gibt "rohe" (raw) Tastendrücke zurück. Um eine Texteingabe für das Gadget zu erhalten, ist es besser nach dem #PB_EventType_Input Ereignis zu schauen und das #PB_OpenGL_Input Attribut zu verwenden, weil dieses die Texteingabe von mehreren Tastendrücken wie Shift- und ähnlichen Tasten kombiniert beinhaltet.
#PB_OpenGL_Input
Gibt das eingegebene Zeichen (Character) zurück, welches durch ein oder mehrere Tastendrücke generiert wurde. Dieses Attribut ist nur verfügbar nach einem #PB_EventType_Input Ereignis. Der zurückgebene Zeichen-Wert kann mit Hilfe der Chr() Funktion in einen String konvertiert werden.
Ergänzend zu dieser Ereignis-Information kann GetGadgetAttribute() auch verwendet werden, um die folgenden Attribute zu lesen:

#PB_OpenGL_Cursor
Gibt den Maus-Pfeil (Cursor) zurück, welcher aktuell im Gadget verwendet wird. Schauen Sie weiter unten für eine Liste der möglichen Werte. Wenn das Gadget ein benutzerdefiniertes ("custom") Cursor-Handle verwendet, ist der Rückgabewert gleich -1.
#PB_OpenGL_CustomCursor
Gibt das benutzerdefinierte ("custom") Cursor-Handle zurück, welches mittels SetGadgetAttribute() gesetzt wurde. Verwendet das Gadget einen Standard-Mauspfeil (Cursor), ist der Rückgabewert gleich 0.
Die Funktion SetGadgetAttribute() kann verwendet werden, um die folgenden Gadget-Attribute zu verändern:

#PB_OpenGL_SetContext
Ändert den aktuellen OpenGL-Kontext auf diesen Gadget-Kontext.
  #True  : verwendet den OpenGL-Kontext dieses Gadgets.
  #False : entfernt den aktuellen OpenGL-Kontext. Es ist kein Kontext mehr verfügbar.
#PB_OpenGL_FlipBuffers
Wechselt ("flip") den hinteren und vorderen Puffer. Alle Zeichnungen werden im hinteren Puffer durchgeführt. Um sichtbar zu werden, müssen die Puffer gedreht ("flipped") werden, damit der hintere der vordere (derjenige welcher angezeigt wird) wird.
  #True  : wechselt die Puffer
  #False : wechselt nicht die Puffer (derzeit keine Verwendung hierfür).
#PB_OpenGL_Cursor
Ändert den Maus-Pfeil (Cursor), welcher angezeigt wird, wenn sich die Maus über dem Gadget befindet. Die folgenden Werte sind möglich:
  #PB_Cursor_Default        : Standard Pfeil-Cursor
  #PB_Cursor_Cross          : Kreuz-Cursor
  #PB_Cursor_IBeam          : I-Cursor, verwendet für die Textauswahl
  #PB_Cursor_Hand           : Hand-Cursor
  #PB_Cursor_Busy           : Stundenglass oder Uhren-Cursor
  #PB_Cursor_Denied         : durchgestrichener Kreis oder X-Cursor ("Stop" oder "Verboten"-Hinweis)
  #PB_Cursor_Arrows         : Pfeile in alle Richtungen (nicht verfügbar auf Mac OSX)
  #PB_Cursor_LeftRight      : links und rechts Pfeile
  #PB_Cursor_UpDown         : hoch und runter Pfeile
  #PB_Cursor_LeftUpRightDown: diagonale Pfeile (nur auf Windows)
  #PB_Cursor_LeftDownRightUp: diagonale Pfeile (nur auf Windows)
  #PB_Cursor_Invisible      : versteckt den Cursor
#PB_OpenGL_CustomCursor
Ändert den Mauspfeil (Cursor), welcher dargestellt wird, wenn sich die Maus über dem Gadget befindet, in ein benutzerdefiniertes (custom) Cursor-Handle, welches mit der entsprechenden OS API erstellt wurde. Dieses Attribut erwartet die folgende Art an Eingaben:
Windows: ein HCURSOR Handle
Linux: ein GtkCursor Pointer (Zeiger)
Mac OSX: ein Pointer (Zeiger) auf eine Cursor Structure
Zu diesem Gadget kann mittels GadgetToolTip() eine 'Mini-Hilfe' hinzugefügt werden.

Beispiel

OpenGLGadget.pb

Siehe auch

GetGadgetAttribute(), SetGadgetAttribute(), EventType()

Unterstützte OS

Alle

<- MDIGadget() - Gadget Inhaltsverzeichnis - OpenGadgetList() ->