AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Vollbildmodus mit OpenGL
Thema durchsuchen
Ansicht
Themen-Optionen

Vollbildmodus mit OpenGL

Ein Thema von maddddi · begonnen am 12. Dez 2004 · letzter Beitrag vom 12. Dez 2004
Antwort Antwort
maddddi

Registriert seit: 31. Okt 2004
18 Beiträge
 
Delphi 7 Personal
 
#1

Vollbildmodus mit OpenGL

  Alt 12. Dez 2004, 11:15
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.
Derzeitiges Projekt: Simtower
http://www.pro3d.de/forum/index.php?c=19
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#2

Re: Vollbildmodus mit OpenGL

  Alt 12. Dez 2004, 11:19
wie verwendest du OpenGL (was für Kompos / BaseCode)
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
maddddi

Registriert seit: 31. Okt 2004
18 Beiträge
 
Delphi 7 Personal
 
#3

Re: Vollbildmodus mit OpenGL

  Alt 12. Dez 2004, 11:24
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
Derzeitiges Projekt: Simtower
http://www.pro3d.de/forum/index.php?c=19
  Mit Zitat antworten Zitat
Maximus

Registriert seit: 26. Okt 2003
169 Beiträge
 
#4

Re: Vollbildmodus mit OpenGL

  Alt 12. Dez 2004, 11:26
Wenn du die dglOpenGL.pas verwendest dann schau mal auf DelphiGl nach einem Example, dort findest du dan die Procedure GoToFullScreen!
  Mit Zitat antworten Zitat
maddddi

Registriert seit: 31. Okt 2004
18 Beiträge
 
Delphi 7 Personal
 
#5

Re: Vollbildmodus mit OpenGL

  Alt 12. Dez 2004, 11:33
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?
Derzeitiges Projekt: Simtower
http://www.pro3d.de/forum/index.php?c=19
  Mit Zitat antworten Zitat
Maximus

Registriert seit: 26. Okt 2003
169 Beiträge
 
#6

Re: Vollbildmodus mit OpenGL

  Alt 12. Dez 2004, 11:54
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)
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#7

Re: Vollbildmodus mit OpenGL

  Alt 12. Dez 2004, 12:40
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.
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:51 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