![]() |
Vollbildmodus mit OpenGL
Wie bekomme ich einen Vollbildmodus in OpenGL?
Ohne OpenGL geht es ja mit:
Delphi-Quellcode:
form1.Windowstate:=wsmaximized;
form1.Borderstyle:=bsnone; Ich weiß aber leider den Befehl für OpenGL nicht, da ich mich erst seit kurzem damit beschäfftige. |
Re: Vollbildmodus mit OpenGL
wie verwendest du OpenGL (was für Kompos / BaseCode)
|
Re: Vollbildmodus mit OpenGL
Ich weiß nicht genau, was du damit meinst, da ich Neuling in dem Bereich bin.
Ich poste aber mal meine Initialisierung
Delphi-Quellcode:
Der Code ist aus dem Tut von Mr_T
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, opengl, ExtCtrls; type TForm1 = class(TForm) Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormResize(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private-Deklarationen } myDC : HDC; myRC : HGLRC; myPalette : HPALETTE; procedure SetupPixelFormat; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.SetupPixelFormat; var hHeap: THandle; nColors, i: Integer; lpPalette : PLogPalette; byRedMask, byGreenMask, byBlueMask: Byte; nPixelFormat: Integer; pfd: TPixelFormatDescriptor; begin FillChar(pfd, SizeOf(pfd), 0); with pfd do begin nSize := sizeof(pfd); // Länge der pfd-Struktur nVersion := 1; // Version dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER; // Flags iPixelType:= PFD_TYPE_RGBA; // RGBA Pixel Type cColorBits:= 24; // 24-bit color cDepthBits:= 32; // 32-bit depth buffer iLayerType:= PFD_MAIN_PLANE; // Layer Type end; nPixelFormat:= ChoosePixelFormat(myDC, @pfd); SetPixelFormat(myDC, nPixelFormat, @pfd); // Farbpalettenoptimierung wenn erforderlich DescribePixelFormat(myDC, nPixelFormat, sizeof(TPixelFormatDescriptor),pfd); if ((pfd.dwFlags and PFD_NEED_PALETTE) <> 0) then begin nColors := 1 shl pfd.cColorBits; hHeap := GetProcessHeap; lpPalette:= HeapAlloc (hHeap,0,sizeof(TLogPalette)+(nColors*sizeof(TPaletteEntry))); lpPalette^.palVersion := $300; lpPalette^.palNumEntries := nColors; byRedMask := (1 shl pfd.cRedBits) - 1; byGreenMask:= (1 shl pfd.cGreenBits) - 1; byBlueMask := (1 shl pfd.cBlueBits) - 1; for i := 0 to nColors - 1 do begin lpPalette^.palPalEntry[i].peRed := (((i shr pfd.cRedShift) and byRedMask) *255)DIV byRedMask; lpPalette^.palPalEntry[i].peGreen:= (((i shr pfd.cGreenShift)and byGreenMask)*255)DIV byGreenMask; lpPalette^.palPalEntry[i].peBlue := (((i shr pfd.cBlueShift) and byBlueMask) *255)DIV byBlueMask; lpPalette^.palPalEntry[i].peFlags:= 0; end; myPalette:= CreatePalette(lpPalette^); HeapFree(hHeap, 0, lpPalette); if (myPalette <> 0) then begin SelectPalette(myDC, myPalette, False); RealizePalette(myDC); end; end; end; procedure render; begin glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); //Farb und Tiefenpuffer löschen glLoadIdentity; // World Matrix zurücksetzen //hier kommen die Objekte hin SwapBuffers(form1.myDC); //scene ausgeben end; procedure TForm1.FormCreate(Sender: TObject); begin form1.myDC:= GetDC(Handle); SetupPixelFormat; myRC:= wglCreateContext(myDC); wglMakeCurrent(myDC, myRC); glEnable(GL_DEPTH_TEST); glLoadIdentity; end; procedure TForm1.FormDestroy(Sender: TObject); begin wglmakecurrent(0,0); wgldeletecontext(mydc); releasedc(handle,mydc); end; procedure TForm1.FormResize(Sender: TObject); begin glViewport(0, 0, Width, Height); // Setzt den Viewport für das OpenGL Fenster glMatrixMode(GL_PROJECTION); // Matrix Mode auf Projection setzen glLoadIdentity(); // Reset View gluPerspective(45.0, Width/Height, 1, 100.0); // Perspektive den neuen Maßen anpassen. glMatrixMode(GL_MODELVIEW); // Zurück zur Modelview Matrix glLoadIdentity(); end; procedure TForm1.Timer1Timer(Sender: TObject); begin render; end; end. |
Re: Vollbildmodus mit OpenGL
Wenn du die dglOpenGL.pas verwendest dann schau mal auf
![]() |
Re: Vollbildmodus mit OpenGL
Geht das nicht auch im Normalen OpenGL?
Wenn ich die dglOpenGL.pas verwende, wo muss ich dann die procedure GoToFullScreen einfügen? In Form1.Create? |
Re: Vollbildmodus mit OpenGL
KA. ob das auch mit einem anderen OpenGL.pas Funktioniert, denk aber schon ...
Ja das musst du bevor du OpenGL Initialisierst oder sonst ein OGL Befehl ausführst ausführen (also ganz oben in FormCreate) |
Re: Vollbildmodus mit OpenGL
du scheinst mit der VCL zu arbeiten und auf nem ganz normalem Canvas rumzuwerkeln. Mach einfach den Canvas (d.h. deine Form) auf Fullscreen _BEVOR DU IRGENDWAS MIT OPENGL MACHST_ und probier es dann. Dann solltest du zumindest Vollbildausgabe haben. Ob dann allerdings auch die Windows-Grafikrechnerei eingestellt wird (und du den für Vollbild üblichen Geschwindigkeitsboost bekommst) weiß ich nicht. Sollte das nicht der Fall sein, erzeug dir per WinApi ein Vollbild-Fenster und initialisiere darin dein OpenGL. Entsprechenden Code gibts im Netz.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz