Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 21:06

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Erzeugung schlägt fehl
BeitragVerfasst: Fr Okt 20, 2006 14:10 
Offline
DGL Member

Registriert: Di Jan 24, 2006 18:46
Beiträge: 97
Hallo,

ich versuche momentan mir eigene Komponenten zu schreiben, die auf OpenGL basieren. Allerdings scheitert er bei mir bei der erzeugung vom OpenGL_Kontext. Bei den markierten Stellen hat er irgendwie Probleme. Ich verstehe den Grund aber noch nicht :( .

Code:
  1. unit SBComponents;
  2.  
  3. interface
  4.  
  5. uses
  6.   Messages, Windows, Controls, Classes, Math, dglOpenGL;
  7.  
  8.  
  9. type
  10.   TSBControl = class(TWinControl)
  11.     private
  12.       //OpenGL-Vars
  13.       FNoGLParent: Boolean;
  14.  
  15.       FDC    : HDC;
  16.       FRC    : HGLRC;
  17.       FzNear : Double;
  18.       FzFear : Double;
  19.       FGLInit: Boolean;
  20.  
  21.       FOnSetOpenGLSetting :TNotifyEvent;
  22.  
  23.       procedure CreateGL;
  24.       //Messages
  25.       procedure WMPaint(var Msg: TWMPaint); message WM_PAINT;
  26.     protected
  27.       procedure SetParent(AParent: TWinControl); override;
  28.       procedure SetOpenGLSetting; virtual;
  29.       procedure Resize; override;
  30.     public
  31.       constructor Create(AOwner: TComponent); override;
  32.       destructor Destroy; override;
  33.  
  34.       property OnSetOpenGLSetting: TNotifyEvent read FOnSetOpenGLSetting write FOnSetOpenGLSetting;
  35.   end;
  36.  
  37.  
  38. implementation
  39.  
  40. ////////////////////////////////////////////////////////////////////////////////
  41. //--TSBControl--
  42. //public
  43.  
  44. constructor TSBControl.Create(AOwner: TComponent);
  45. begin
  46.   inherited Create(AOwner);
  47.   FzNear     :=-1;
  48.   FzFear     := 1;
  49.   FNoGLParent:=true;
  50.   FGLInit:=false;
  51. end;
  52.  
  53. {******************************************************************************}
  54.  
  55. destructor TSBControl.Destroy;
  56. begin
  57.   if FNoGLParent then
  58.   begin
  59.     wglMakeCurrent(FDC, 0);
  60.     if FRC<>0 then wglDeleteContext(FRC);
  61.     ReleaseDC(Handle, FDC);
  62.     FDC:=0;
  63.   end;
  64.   inherited Destroy;
  65. end;
  66.  
  67. {******************************************************************************}
  68. //protected
  69.  
  70. procedure TSBControl.SetParent(AParent: TWinControl);
  71. begin
  72.   inherited SetParent(AParent);
  73.   if not FGLInit then CreateGL;
  74. end;
  75.  
  76. {******************************************************************************}
  77.  
  78. procedure TSBControl.SetOpenGLSetting;
  79. begin
  80.   if FGLInit then
  81.   begin
  82.     glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
  83.     glDepthFunc(GL_LEQUAL);
  84.     glEnable(GL_DEPTH_TEST);
  85.     glEnable(GL_CULL_FACE);
  86.     glDepthMask(True);
  87.     glClearDepth(1);
  88.     glDisable(GL_BLEND);
  89.     glDisable(GL_ALPHA_TEST);
  90.     glEnable(GL_COLOR_MATERIAL);
  91.     if Assigned(FOnSetOpenGLSetting) then FOnSetOpenGLSetting(Self);
  92.   end;
  93. end;
  94.  
  95. {******************************************************************************}
  96.  
  97. procedure TSBControl.Resize;
  98. var
  99.   CS: array[0..1] of Integer;
  100.   Width, Height: Integer;
  101. begin
  102.   if FGLInit and FNoGLParent then
  103.   begin
  104.     glGetIntegerv(GL_MAX_VIEWPORT_DIMS, @CS);
  105.  
  106.     Width :=  Min(CS[0], ClientWidth);
  107.     Height := Min(CS[1], ClientHeight);
  108.  
  109.     glViewport(0, 0, Width, Height);
  110.  
  111.     glMatrixMode(GL_PROJECTION);
  112.     glLoadIdentity();
  113.  
  114.     glOrtho(0, ClientWidth, ClientHeight, 0, FzNear, FzFear);
  115.  
  116.     glMatrixMode(GL_MODELVIEW);
  117.     glLoadIdentity();
  118.   end;
  119.  
  120.   inherited Resize;
  121. end;
  122.  
  123. {******************************************************************************}
  124. //private
  125. procedure TSBControl.CreateGL;
  126. var
  127.   ParentClass: TClass;
  128. begin
  129.   ParentClass:=Self.ClassType;
  130.   while (ParentClass <> nil) and (ParentClass <> TStream) do ParentClass:=ParentClass.ClassParent;
  131.   if ParentClass = nil then
  132.   begin
  133. [highlight]    FDC:=GetDC(Handle);
  134.     FRC:=wglCreateContext(FDC);
  135.     wglMakeCurrent(FDC, FRC);[/highlight]
  136.     SetOpenGLSetting;
  137.     FNoGLParent:=true;
  138.   end
  139.   else
  140.   begin
  141.     FNoGLParent:=false;
  142.   end;
  143.   FGLInit:=true;
  144. end;
  145.  
  146. {******************************************************************************}
  147.  
  148. procedure TSBControl.WMPaint(var Msg: TWMPaint);
  149. begin
  150.   glClear(GL_DEPTH_BUFFER_BIT or GL_COLOR_BUFFER_BIT);
  151.   SwapBuffers(FDC);
  152. end;
  153.  
  154. end.


Test-Unit:

Code:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs,
  8.  
  9.   SBComponents;
  10.  
  11. type
  12.   TForm1 = class(TForm)
  13.     procedure FormCreate(Sender: TObject);
  14.     procedure FormDestroy(Sender: TObject);
  15.   private
  16.     { Private-Deklarationen }
  17.   public
  18.     { Public-Deklarationen }
  19.   end;
  20.  
  21. var
  22.   Form1: TForm1;
  23.   test: TSBControl;
  24.  
  25. implementation
  26.  
  27. {$R *.dfm}
  28.  
  29. procedure TForm1.FormDestroy(Sender: TObject);
  30. begin
  31.   test.Free;
  32. end;
  33.  
  34. procedure TForm1.FormCreate(Sender: TObject);
  35. begin
  36.   test:=TSBControl.Create(Self);
  37.   test.Parent:=self;
  38.   test.Left:=0;
  39.   test.Top:=0;
  40.   test.Height:=50;
  41.   test.Width:=50;
  42.   test.Show;
  43. end;
  44.  
  45. end.

Sieht einer von euch das Problem?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 20, 2006 15:10 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
Also meines Wissens ist das Handle erst gülig, wenn das (windows)Fenster Diener Komponente erzeugt wurde. Kein Handle, kein DC. Mein Vorschlag wäre, Du baust den GLInit in die Methode CreateWnd und im DetroyWnd hauste den DC wieder platt.

_________________
Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 20, 2006 15:27 
Offline
DGL Member

Registriert: Di Jan 24, 2006 18:46
Beiträge: 97
Sidorion hat geschrieben:
Also meines Wissens ist das Handle erst gülig, wenn das (windows)Fenster Diener Komponente erzeugt wurde.

In dem Falle ist es ja bereits erzeugt. Denn SetParent wird erst bei test.Parent:=self aufgerufen, wo ja bereits der constructor beendte ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 20, 2006 16:34 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
Nein, weil wenn der Parent auch noch nicht sichtbar ist, und das isser nicht im FormCreate, dann ist das Child auch nicht sichtbar.
Das Handle ist wirklich erst dann gültig, wenn Windows das Fenster für die Komponente erzeugt hat und dieses wird erst dann erzeugt, wenn die Komponente wirklich sichtbar ist.
Abgesehen davon muss der Benutzer deiner Klasse ja nicht unbedingt wissen, dass ein eventueller Parent bereits sichtbar sein muss und spätestens dann hast Du ein Problem.
Ich hatte die selbe Situation wie Du mit einem eigenen GL-Panel und da hat nur die Erzeugung des DC im CreateWnd geholfen.

_________________
Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Okt 21, 2006 10:14 
Offline
DGL Member

Registriert: Di Jan 24, 2006 18:46
Beiträge: 97
Sidorion hat geschrieben:
Nein, weil wenn der Parent auch noch nicht sichtbar ist, und das isser nicht im FormCreate, dann ist das Child auch nicht sichtbar.

Nun gut, dass hatte ich auch scon mal ausprobiert, also wenn man auf nen Button klickt, dass es dann erst frei gegeben wird. Aber das hat auch nichts gebracht, da GetDC trotzdem fehlschlug.
Sidorion hat geschrieben:
Ich hatte die selbe Situation wie Du mit einem eigenen GL-Panel und da hat nur die Erzeugung des DC im CreateWnd geholfen.

Wird CreateWnd immer dann aufgerufen, wenn die Komponente sichtbar wird?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Okt 22, 2006 12:41 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
Genaugenommen dann, wenn die Komponente ein gültiges Handle bekommt, was in der Regel der selbe Zeitpunkt ist. Du solltest allerdings hier trotzdem prüfen, ob die Komponente nicht zufällig grade zerstört wird, dann darfst Du keinen DC erzeugen.

_________________
Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Okt 22, 2006 13:57 
Offline
DGL Member

Registriert: Di Jan 24, 2006 18:46
Beiträge: 97
Sidorion hat geschrieben:
Du solltest allerdings hier trotzdem prüfen, ob die Komponente nicht zufällig grade zerstört wird, dann darfst Du keinen DC erzeugen.
Durch welche Eigenschaft bekomme ich das mit? Und gibts es Probleme mit dem GetDC, wenn die Komponente die Ausdehung 0 hat bzw invisible ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 23, 2006 09:24 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
Abfragen kannst Du das mit dem ComponentState. Wenn die Komponente gerade zerstört wird, ist csDestroying enthalten. Näheres siehe OH.
Fenster erhalten ein Handle, sobald Windows das für nötig hält. Bereits erzeugte Handles bleiben imho erhalten, wenn das Fenster usichtbar wird bzw. eine Ausdehnung von null hat.
Ich bekam damals ne Schutzverletzung, wenn ich den DC während des Destruierens erzeugen wollte.

_________________
Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 23, 2006 17:24 
Offline
DGL Member

Registriert: Di Jan 24, 2006 18:46
Beiträge: 97
Ich habs jetzte mal gerade umgesetzt. Ergebnis: Es besteht immer noch das gleiche Problem. Zwar wird GetDC jetzt erst aufgerufen, wenn CreateWnd aufgerufen wird, aber leider ändetr das nichts am Ergebnis :(:

Code:
  1. unit SBComponents;
  2.  
  3. interface
  4.  
  5. uses
  6.   Messages, Windows, Controls, Classes, Math, dglOpenGL;
  7.  
  8.  
  9. type
  10.   TSBControl = class(TWinControl)
  11.     private
  12.       //OpenGL-Vars
  13.       FNoGLParent: Boolean;
  14.  
  15.       FDC    : HDC;
  16.       FRC    : HGLRC;
  17.       FzNear : Double;
  18.       FzFear : Double;
  19.       FGLInit: Boolean;
  20.  
  21.       FOnSetOpenGLSetting :TNotifyEvent;
  22.  
  23.       procedure CreateGL;
  24.       //Messages
  25.       procedure WMPaint(var Msg: TWMPaint); message WM_PAINT;
  26.     protected
  27.       procedure SetParent(AParent: TWinControl); override;
  28.       procedure SetOpenGLSetting; virtual;
  29.       procedure Resize; override;
  30.       procedure CreateWnd; override;
  31.  
  32.     public
  33.       constructor Create(AOwner: TComponent); override;
  34.       destructor Destroy; override;
  35.  
  36.       property OnSetOpenGLSetting: TNotifyEvent read FOnSetOpenGLSetting write FOnSetOpenGLSetting;
  37.   end;
  38.  
  39.  
  40. implementation
  41.  
  42. ////////////////////////////////////////////////////////////////////////////////
  43. //--TSBControl--
  44. //public
  45.  
  46. constructor TSBControl.Create(AOwner: TComponent);
  47. begin
  48.   inherited Create(AOwner);
  49.   FzNear     :=-1;
  50.   FzFear     := 1;
  51.   FNoGLParent:=true;
  52.   FGLInit:=false;
  53. end;
  54.  
  55. {******************************************************************************}
  56.  
  57. destructor TSBControl.Destroy;
  58. begin
  59.   if FGLInit and FNoGLParent then
  60.   begin
  61.     wglMakeCurrent(FDC, 0);
  62.     if FRC<>0 then wglDeleteContext(FRC);
  63.     ReleaseDC(Handle, FDC);
  64.     FDC:=0;
  65.   end;
  66.   inherited Destroy;
  67. end;
  68.  
  69. {******************************************************************************}
  70. //protected
  71.  
  72. procedure TSBControl.SetParent(AParent: TWinControl);
  73. begin
  74.   inherited SetParent(AParent);
  75. end;
  76.  
  77. {******************************************************************************}
  78.  
  79. procedure TSBControl.SetOpenGLSetting;
  80. begin
  81.   if FGLInit then
  82.   begin
  83.     glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
  84.     glDepthFunc(GL_LEQUAL);
  85.     glEnable(GL_DEPTH_TEST);
  86.     glEnable(GL_CULL_FACE);
  87.     glDepthMask(True);
  88.     glClearDepth(1);
  89.     glDisable(GL_BLEND);
  90.     glDisable(GL_ALPHA_TEST);
  91.     glEnable(GL_COLOR_MATERIAL);
  92.     if Assigned(FOnSetOpenGLSetting) then FOnSetOpenGLSetting(Self);
  93.   end;
  94. end;
  95.  
  96. {******************************************************************************}
  97.  
  98. procedure TSBControl.Resize;
  99. var
  100.   CS: array[0..1] of Integer;
  101.   Width, Height: Integer;
  102. begin
  103.   if FGLInit and FNoGLParent then
  104.   begin
  105.     glGetIntegerv(GL_MAX_VIEWPORT_DIMS, @CS);
  106.  
  107.     Width :=  Min(CS[0], ClientWidth);
  108.     Height := Min(CS[1], ClientHeight);
  109.  
  110.     glViewport(0, 0, Width, Height);
  111.  
  112.     glMatrixMode(GL_PROJECTION);
  113.     glLoadIdentity();
  114.  
  115.     glOrtho(0, ClientWidth, ClientHeight, 0, FzNear, FzFear);
  116.  
  117.     glMatrixMode(GL_MODELVIEW);
  118.     glLoadIdentity();
  119.   end;
  120.  
  121.   inherited Resize;
  122. end;
  123.  
  124. procedure TSBControl.CreateWnd;
  125. begin
  126.   if (not (csDestroying in ComponentState)) and (not FGLInit) then CreateGL;
  127. end;
  128.  
  129. {******************************************************************************}
  130. //private
  131. procedure TSBControl.CreateGL;
  132. var
  133.   ParentClass: TClass;
  134. begin
  135.   ParentClass:=Self.ClassType;
  136.   while (ParentClass <> nil) and (ParentClass <> TStream) do ParentClass:=ParentClass.ClassParent;
  137.   if ParentClass = nil then
  138.   begin
  139.     FDC:=GetDC(Handle);
  140.     FRC:=wglCreateContext(FDC);
  141.     wglMakeCurrent(FDC, FRC);
  142.     SetOpenGLSetting;
  143.     FNoGLParent:=true;
  144.   end
  145.   else
  146.   begin
  147.     FNoGLParent:=false;
  148.   end;
  149.   FGLInit:=true;
  150. end;
  151.  
  152. {******************************************************************************}
  153.  
  154. procedure TSBControl.WMPaint(var Msg: TWMPaint);
  155. begin
  156.   if FGLInit then
  157.   begin
  158.     glClear(GL_DEPTH_BUFFER_BIT or GL_COLOR_BUFFER_BIT);
  159.     SwapBuffers(FDC);
  160.   end;
  161. end;
  162.  
  163. end.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 23, 2006 17:30 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Eventuell lieg es daran, dass CreateWnd nicht die überschriebene Methode aufruft um das Fenster zu erstellen. Da fehlt am Anfang inherited;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 23, 2006 17:38 
Offline
DGL Member

Registriert: Di Jan 24, 2006 18:46
Beiträge: 97
Stimmt. Jetzt hängt er nicht mehr an GetDC (was auch einen vernünftigen Wert zurückliefert, also >0), aber er hängt jetzte an der darauf folgenden Zeile, also am wglCreateContext.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 23, 2006 17:48 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Das Pixelformat von dem DC muß auch noch OpenGL kompatibel gemacht werden. Vermute im Wiki oder bei CreateRenderingContext im Header ist ein Beispielquelltext dazu.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 23, 2006 18:47 
Offline
DGL Member

Registriert: Di Jan 24, 2006 18:46
Beiträge: 97
Ich habs hinbekommen, dass es ohne Fehlermeldungen startet ;): InitOpenGL. hat gefehlt:

Code:
  1. procedure TSBControl.CreateGL;
  2. var
  3.   ParentClass: TClass;
  4.   pfd: PIXELFORMATDESCRIPTOR;
  5. begin
  6.   ParentClass:=Self.ClassType;
  7.   while (ParentClass <> nil) and (ParentClass <> TStream) do ParentClass:=ParentClass.ClassParent;
  8.   if ParentClass = nil then
  9.   begin
  10.     FDC:=GetDC(Handle);
  11.  
  12.     DescribePixelFormat(FDC, GetPixelFormat(FDC), SizeOf(PIXELFORMATDESCRIPTOR), pfd);
  13.     pfd.dwFlags:= PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;
  14.     DescribePixelFormat(FDC, ChoosePixelFormat(FDC, @pfd), SizeOf(PIXELFORMATDESCRIPTOR), pfd);
  15.  
  16.     InitOpenGL;
  17.     FRC:=wglCreateContext(FDC);
  18.     ReadExtensions;
  19.     ReadImplementationProperties;
  20.  
  21.     wglMakeCurrent(FDC, FRC);
  22.  
  23.     SetOpenGLSetting;
  24.     FNoGLParent:=true;
  25.   end
  26.   else
  27.   begin
  28.     FNoGLParent:=false;
  29.   end;
  30.   FGLInit:=true;
  31.   Resize;
  32. end;


Was mich aber noch wundert, ist dass er keine Schwarze Fläche im WMPAint zeichnet, wie er es sollte.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 24, 2006 05:39 
Offline
DGL Member

Registriert: Di Jan 24, 2006 18:46
Beiträge: 97
Ich habs :). DescribePixelformat hat bei mir nicht, wie ich es nach MSDN erwartet hatte, das maximale Profil zurückgegeben. Ist es eiegtnlich möglich, sich irgendwie das aktuelle pfd von Win zurück geben zu lassen (DescribePixelformat machts ja schießlich doch nicht :( )?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 24, 2006 08:17 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Zitat:
Ist es eiegtnlich möglich, sich irgendwie das aktuelle pfd von Win zurück geben zu lassen

Öhhhh. Diese Frage ist witzig. Um sie zu beantworten brauche ich nur ein Stück Quellcode von DIR zu zitieren.

Code:
  1. DescribePixelFormat(FDC, GetPixelFormat(FDC), SizeOf(PIXELFORMATDESCRIPTOR), pfd);

Die Methode die du suchst heist GetPixelFormat.

Aber in deinem Code hast du noch einen Fehler eingebaut.

Code:
  1.     DescribePixelFormat(FDC, ChoosePixelFormat(FDC, @pfd), SizeOf(PIXELFORMATDESCRIPTOR), pfd);

Es ist ja schön, dass du dir das Pixelformat beschreiben lässt aber das von dir gewählte Pixelformat (aufruf von ChoosePixelFormat) ignorierst du bzw dessen Ergebniss davon. Du musst das Ergebniss speichern und dann später auch mit SetPixelFormat auf deinen DC zuweisen. Sonst bleibt alles beim Alten. Soll bedeuten es müsste eigentlich so aussehen.

Code:
  1. FDC:=GetDC(Handle);
  2.  
  3. DescribePixelFormat(FDC, GetPixelFormat(FDC), SizeOf(PIXELFORMATDESCRIPTOR), pfd);
  4. pfd.dwFlags:= PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;
  5. PixelFormat := ChoosePixelFormat(FDC, @pfd);
  6. SetPixelFormat(FDC, PixelFormat);
  7. DescribePixelFormat(FDC, PixelFormat, SizeOf(PIXELFORMATDESCRIPTOR), pfd);
  8.  
  9. InitOpenGL;


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.012s | 15 Queries | GZIP : On ]