Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Vollbildmodus mit OpenGL (https://www.delphipraxis.net/35823-vollbildmodus-mit-opengl.html)

maddddi 12. Dez 2004 11:15


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.

nailor 12. Dez 2004 11:19

Re: Vollbildmodus mit OpenGL
 
wie verwendest du OpenGL (was für Kompos / BaseCode)

maddddi 12. Dez 2004 11:24

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:
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.
Der Code ist aus dem Tut von Mr_T

Maximus 12. Dez 2004 11:26

Re: Vollbildmodus mit OpenGL
 
Wenn du die dglOpenGL.pas verwendest dann schau mal auf DelphiGl nach einem Example, dort findest du dan die Procedure GoToFullScreen!

maddddi 12. Dez 2004 11:33

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?

Maximus 12. Dez 2004 11:54

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)

nailor 12. Dez 2004 12:40

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 20:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz