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

Aktuelle Zeit: Do Mai 16, 2024 13:22

Foren-Übersicht » DGL » Feedback
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mo Sep 17, 2007 21:11 
Offline
DGL Member

Registriert: So Sep 16, 2007 20:36
Beiträge: 4
Hallo!

Ich bin 3dfx-Freak und programmiere nebenbei auch ganz gerne in Opengl und Delphi.
Der Hauptteil meines Systems ist eine Voodoo 5.
Bisher habe ich es so gemacht, dass ich die Borland opengl.pas verwende und dann den wickedgl dazukopiere. das funktioniert einwandfrei. jetzt wollte ich allerdings wegen der bugs in der Borland-Datei auf die dglOpenGL.pas wechseln.... allerdings schaffe ich es dabei nicht einmal, die 3d-api zu initialisieren. es kommen lediglich irgendwelche exception errors in adresse....
immerhin konnte ich das problem ungefähr isolieren:

Es tritt in dem gdlHeader in dieser Zeile auf (procedure CreateRenderingContext ):

Result := wglCreateLayerContext(DC, Layer);

das result ist = 0, und er bricht ab :-(

ich verstehe allerdings nicht, wieso es mit den borland-headern geht...

und bitte erzählt mir nichts von wegen "veralteter technik" oder "kauf die eine neue grafikkarte". ich will lediglich mein spiel so kompatibel wie möglich machen.

danke schonmal ;)

gruß,
[3dfx] IceFire


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 17, 2007 22:23 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2067
Programmiersprache: C++
Ich weiss jetzt nicht wie im alten Header ein Renderkontext erstellt wurde. Es klingt aber einfach danach, dass der WGL-Befehl nicht im Umfang des Treibers enthalten ist.
Schau einfach mal ob die Funktion nach InitOpenGL <> nil ist.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 17, 2007 22:49 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Ich geb es ehrlich zu, ich habe keine Ahnung von Glide, 3dfx, Voodoo oder Mesa3D und hab auch keine Ahnung, warum Borlands opengl.pas funktioniert.
Aber ich habe erst neulich etwas Interessantes zu dem erstengenannten Kram gefunden; und wenn ich das richtig interpretiere, müsste man für Glide die wgl-Funktionen eigentlich emulieren?

MfG


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 17, 2007 22:54 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Ersetz wglCreateLayerContext mal mit wglCreateContext und probier obs damit geht. Eigentlich ist das wglCreateLayerContext im Header recht unnötig, Contexte mit Layern werden eh kaum von irgendwelcher Hardware unterstützt.
Sollte auch dass nicht klappen, kannst du dir mit der Windowsfunktion GetLastError nach dem Aufruf von wglCreateContext genauere Informationen zum Fehler holen.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 18, 2007 05:54 
Offline
DGL Member

Registriert: So Sep 16, 2007 20:36
Beiträge: 4
wglCreateContext() ist auf jeden fall in der wickedgl implementiert... habs probiert zu ändern. ohne erfolg - der fehler bleibt... :-(
wickedgl ist eine opengl32.dll, die die opengl-befehle für glide übersetzt.
ich hab hier mal n bissl quelltext:

Das ist der teil, der mit den borland headern geht:
Code:
  1. h_DC := GetDC(Mode.WindowHWND);
  2.  
  3.   // Das Pixelformat einstellen
  4.   with pfd do
  5.   begin
  6.     nSize           := SizeOf(TPIXELFORMATDESCRIPTOR); // Größe des Pixel Format Descriptor
  7.     nVersion        := 1;                    // Version des Daten Structs
  8.     dwFlags         := PFD_DRAW_TO_WINDOW    // Buffer erlaubt zeichenen auf Fenster
  9.                        or PFD_SUPPORT_OPENGL // Buffer unterstützt OpenGL drawing
  10.                        or PFD_DOUBLEBUFFER;  // Double Buffering benutzen
  11.     iPixelType      := PFD_TYPE_RGBA;        // RGBA Farbformat
  12.     cColorBits      := Mode.ColorDepth;      // OpenGL Farbtiefe
  13.     cRedBits        := 0;
  14.     cRedShift       := 0;
  15.     cGreenBits      := 0;
  16.     cGreenShift     := 0;
  17.     cBlueBits       := 0;
  18.     cBlueShift      := 0;
  19.     cAlphaBits      := 0;                    // Not supported
  20.     cAlphaShift     := 0;                    // Not supported
  21.     cAccumBits      := 0;            
  22.     cAccumRedBits   := 0;
  23.     cAccumGreenBits := 0;
  24.     cAccumBlueBits  := 0;
  25.     cAccumAlphaBits := 0;
  26.     cDepthBits      := 16;                   // Genauigkeit des Depth-Buffers
  27.     cStencilBits    := Mode.StencilBits;     // Stencil Buffer
  28.     cAuxBuffers     := 0;  
  29.     iLayerType      := PFD_MAIN_PLANE;      
  30.     bReserved       := 0;                
  31.     dwLayerMask     := 0;                    
  32.     dwVisibleMask   := 0;                    
  33.     dwDamageMask    := 0;                    
  34.   end;
  35.   PixelFormat := ChoosePixelFormat(h_DC, @pfd);
  36.   SetPixelFormat(h_DC, PixelFormat, @pfd);
  37.  
  38.   h_RC := wglCreateContext(h_DC);
  39.   wglMakeCurrent(h_DC, h_RC);



wenn ich diese zeilen allerdings ersetze durch diese hier und den header ändere, geht nix mehr \":-(\" :
Code:
  1.   // use this for dglOpenGL.pas
  2.   //initOpenGl();
  3.   //h_RC := CreateRenderingContext(h_DC, [opDoubleBuffered], Mode.ColorDepth, 16, Mode.StencilBits,0,0,0);
  4.   //ActivateRenderingContext(h_DC, h_RC);
  5.  

€dit:
bleibt zu erwähnen, dass die lange initialisierungsmethode mit der dglopengl.dll auch nicht funktioniert....

€dit2:
http://www.koders.com/c/fidEE6E358DE8D4 ... AF440.aspx ist aber wirklich interessant ^^ danke für den link!


Edit Lossy: Pascaltags hinzugefügt


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 18, 2007 07:57 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Na ja de einzige wirkliche Unterschied zwischen den beiden Codes ist das Flag PFD_SUPPORT_OPENGL.

Würde es denn gehen, wenn du die manuelle Erstellung des Kontextes der Methode CreateRenderingContext vorziehst? Also in etwa folgendes.
Code:
  1. InitOpenGL();
  2.  
  3. // manuelles Erstellen wie mit der opengl.pas
  4.  
  5. ReadExtensions;
  6. ReadImplementationProperties;


Da ist zwar eigentlich kein wirklicher Unterschied aber du musst nicht zwingend den Kontext mit der dglOpenGL.pas erstellen lassen.

PS: Zu denen von dir im ersten Post genannten Zugriffsverletzungen. An welcher Stelle treten die denn genau auf?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 18, 2007 15:27 
Offline
DGL Member

Registriert: So Sep 16, 2007 20:36
Beiträge: 4
mh, das problem hängt nicht mit der initialisierungsart zusammen, es geht ja leider mit beiden nicht, wie ich heute morgen herausgefunden hab...

demnach hat das problem nichts mit dem source code ansich zu tun... das problem scheint demnach irgendwie im header verankert zu sein...
ist der header definitiv opengl 1.1 kompatibel? die voodoo 5 bietet zwar glaubich bis 1.4, bin mir da allerdings nicht sicher.

das auftreten des fehlers kann ich leider nicht zurückverfolgen... es kommt einfach zugriffsverletztung an adresse 00000000.
merkwürdig...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 19, 2007 11:25 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Die Frage die sich mir da stellt ist die ob 3dfx einen echten OpenGL Treiber im System installiert? Bzw laufen auch andere echte opengl programme?

Denn normal installiert ein Treiber eine DLL und registriert diese im System. Die OpenGL32.dll spricht diese dann an und leitet alle Aufrufe weiter. Und unser Header sprich ohne weiteres Zutun nur die OpenGL32.dll an.

Ich vermute mal, dass da irgendwo etwas schief gegangen ist. Denn die OpenGL32.dll sollte eigentlich OpenGL 1.1 per Software anbieten sofern nichts installiert wurde. Und das funktierte bisher immer recht gut. Selbst unter 98 in einer virtuellen Maschine.


Ich kenne mich leider mit 3dfx auch nicht aus. Das liegt vor meiner Zeit. Habe zwar noch eine Voodoo 1 irgendwo rumliegen aber na ja. ;) Von daher kann ich dir so auch nur bedingt helfen. Du solltest mal mit dem Debugger Stück für Stück durch dein Programm steppen und schauen welche Methode nicht geladen werden konnte. Ich könnte mir auch gut vorstellen, dass das OpenGL bei 3dfx eher aus einer anderen DLL kommt.

Was mich daran allerdings etwas sehr irritiert ist die Sache, dass es mit der ollen OpenGL.pas keine Probleme gab. Und bis auf, dass wir die DLL dynamisch laden gibt es dort keinen Unterschied und das sollte eigentlich auch kein Unterschied machen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Sep 23, 2007 10:49 
Offline
DGL Member

Registriert: So Sep 16, 2007 20:36
Beiträge: 4
ich benutze als opengl-treiber der voodoo den wickedgl, der opengl praktisch emuliert und an das glide-interface weiterleitet.
mh, keine ahnung. ich werde wohl noch einige zeit daran zu knabbern haben...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 05, 2007 10:06 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Unterstützt die Voodoo 5 eigentlich 32 Bit Farbtiefe ? Also 24 RGB + 8 Alpha bits ?

Liegt es eventuell daran, das der DGLOpenGL Header die Alphabits standardmässig benutzt ?
Vielleicht kann das die voodoo 5 ja nicht. (hast ja in deinem working source dazu geschrieben das es nicht supported wird)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Foren-Übersicht » DGL » Feedback


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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.022s | 17 Queries | GZIP : On ]