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

Aktuelle Zeit: Mo Jul 21, 2025 08:49

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



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: OpenGL 1.2 und V-sync??
BeitragVerfasst: Mi Nov 13, 2002 21:52 
Offline
DGL Member
Benutzeravatar

Registriert: So Mai 05, 2002 17:33
Beiträge: 48
Wohnort: Kiel
Also ich hab mal probiert V-Sync bei euerm OpenGL1.2-api-template zu deaktivieren. Ich habe es genauso gemacht wie Phobeus es mir gesagt hat, trotzdem kamm es zu der Fehlermeldung:

EAccessViolation....


Das ist der Code....
Code:
  1.  
  2.  
  3. Finished := False;
  4.  
  5.  
  6.  
  7.   InitOpenGL;
  8.  
  9.   wglSetVsyncState(false);
  10.  
  11.   // Das Programm wird initialisiert (Fenster erstellen!)
  12.  
  13.   if not glCreateWnd(200, 200, FALSE, 32) then
  14.  
  15.   begin
  16.  
  17.     Result := 0;
  18.  
  19.     Exit;
  20.  
  21.   end;
  22.  
  23.  


Weiß jemand woran es liegen könnte?

Danke und cu

nino :D

_________________
'noux up your life' at <a href='http://www.noux.de.vu' target='_blank'>noux</a>


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 13, 2002 23:04 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Welche Graka benutzt du denn?

Das Ändern des V-Sync Zustandes geht nur dann, wenn die Graka auch die Extension "WGL_EXT_swap_control" unterstützt...ist dies nicht der Fall, kann es zu Fehler kommen...ob das bis zu einer Zugriffsverletzung geht weiss ich nicht, da meine GF4-Ti4400 diese Extension unterstützt...

Edit :
Ich seh grade in deinem Quelltext, das du dein Fenster erst NACH der OpenGL-Initialisierung erstellst...dann kanns eigentlich nur schief gehen, da man ohne ein gültiges Fensterhandle doch gar keinen gültigen OpenGL-Renderingcontext erstellen kann...erstell also zuerst dein Fenster und initialiser dann mal OpenGL...

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 13, 2002 23:12 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
ansosnten kann man das umschalten des vsyncs, zumindest bei NVidia Karten, deaktivieren, was dazu führt, dass diese extension ganz schnell nicht mehr existiert


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 14, 2002 09:14 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Sorry, aber die wglSetVSyncState-Funktion gibt es meines wissens nach nicht. Keine Ahnung was Phobeus dir Gesagt hat. Ich hab' den Code zum ein- und auschalten des VSyncs mal von C nach Delphi konvertiert. Auf der DGL-Homepage im Bereich Tuts ganze unten steht "Wie aktiviere ich V-Sync". Klick da drauf und du Siehst den Code, wie das ganze geht. So hat das bei mir Funktioniert.

Die Erweiterung, die dafür notwendig ist, lautet: wglSwapIntervalEXT und ist leider nicht default-mässig in der OpenGL12.pas definiert und somit auch nicht geladen.

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 14, 2002 11:22 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
*lach* Hey Schod ;D Die Funktion ist eine von denen, die Du portiert hast ;) Die gehört aber nicht zum Standard-Umfang dazu!

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 14, 2002 11:48 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Naja, ich mein ja nur, dass die Funktion ZU der Extension NICHT per Default bei der OpenGL12.pas dabei ist und DESWEGEN portiert wurde! Oder, naja, wie auch immer, ich ... hmmm. Bin Verwirrt :? :wink:

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 14, 2002 16:05 
Offline
DGL Member
Benutzeravatar

Registriert: So Mai 05, 2002 17:33
Beiträge: 48
Wohnort: Kiel
So nun bin ich erstmal verwirrt!
Ich hab eigentlich nur das Template von DGL runtergeladen und dann den Code zum ausschalten von V-Sync genommen (übrigens auch von DGL) und ihn eingefügt!

Natürlich initialisiere ich OpenGL bevor ich das Fenster erstelle, weil das im Template ja so ist, da hab ich nämlich nix verändert!

Was muss ich denn nun machen?

Grafikkarte :Geforce 2 MX

Danke und cu:

nino :D

_________________
'noux up your life' at <a href='http://www.noux.de.vu' target='_blank'>noux</a>


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 14, 2002 16:33 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Ich weiss leider nicht, welchen Code Du genommen hast, aber wenn es der oben beschreibene ist, musst Du erst mal Init aufrufen, damit den entsprechenden Funktionen auch Adressen zugewiesen werden. Der Fehler sieht mir ganz dannach aus, als wäre irgend etwas NICHT initialisiert.

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 14, 2002 19:40 
Offline
DGL Member
Benutzeravatar

Registriert: So Mai 05, 2002 17:33
Beiträge: 48
Wohnort: Kiel
Was heißt erstmal die Init aufrufen? Meines Erachtens mache ich das doch!
Code:
  1.  
  2.  
  3. function WinMain(hInstance : HINST; hPrevInstance : HINST;
  4.  
  5.  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lpCmdLine : PChar; nCmdShow : Integer) : Integer; stdcall;
  6.  
  7. var
  8.  
  9.  &nbsp;msg : TMsg;
  10.  
  11.  &nbsp;appStart : DWord;
  12.  
  13. begin
  14.  
  15.  &nbsp;Finished := False;
  16.  
  17.  
  18.  
  19.  &nbsp;InitOpenGL; &nbsp; <------------------------------------------------
  20.  
  21.  &nbsp;wglSetVsyncState(false);
  22.  
  23.  
  24.  
  25.  &nbsp;// Das Programm wird initialisiert (Fenster erstellen!)
  26.  
  27.  &nbsp;if not glCreateWnd(800, 600, false, 32)then
  28.  
  29.  &nbsp;begin
  30.  
  31.  &nbsp; &nbsp;Result := 0;
  32.  
  33.  &nbsp; &nbsp;Exit;
  34.  
  35.  &nbsp;end;
  36.  
  37.  


kann es auch daran liegen, das mein rechner das nicht kann?


So geht der Code nämlich und meines Wissens nach checke ich vorher obs geht oder nicht?
Code:
  1.  
  2.  
  3. function WinMain(hInstance : HINST; hPrevInstance : HINST;
  4.  
  5.  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lpCmdLine : PChar; nCmdShow : Integer) : Integer; stdcall;
  6.  
  7. var
  8.  
  9.  &nbsp;msg : TMsg;
  10.  
  11.  &nbsp;appStart : DWord;
  12.  
  13. begin
  14.  
  15.  &nbsp;Finished := False;
  16.  
  17.  
  18.  
  19.  &nbsp;InitOpenGL;
  20.  
  21.  &nbsp;if wglInitExtSwapControl=true then &nbsp;wglSetVsyncState(false);
  22.  
  23.  
  24.  
  25.  &nbsp;// Das Programm wird initialisiert (Fenster erstellen!)
  26.  
  27.  &nbsp;if not glCreateWnd(800, 600, false, 32)then
  28.  
  29.  &nbsp;begin
  30.  
  31.  &nbsp; &nbsp;Result := 0;
  32.  
  33.  &nbsp; &nbsp;Exit;
  34.  
  35.  &nbsp;end;
  36.  
  37.  


Naja ich weiß auch nicht .........
Bin für alles Dankbar!

cu nino :D

_________________
'noux up your life' at <a href='http://www.noux.de.vu' target='_blank'>noux</a>


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Nov 15, 2002 08:25 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Überprüf mal genauer, ob wglInitExtSwapControl True. Also folgendermaßen:

Code:
  1.  
  2.  
  3.  &nbsp;if wglInitExtSwapControl then
  4.  
  5.  &nbsp; &nbsp;wglSetVsyncState(false)
  6.  
  7.  &nbsp;else
  8.  
  9.  &nbsp; &nbsp;MessageBox(0, 'wglInitExtSwapControl failed!', 'Error', MB_OK or MB_ICONERROR);
  10.  
  11.  


Somit weisst Du dann wenigstens, ob wglInitExtSwapControl erfolgreich war. Wenn ja, müsste wglSetVsyncState funktionieren, wenn nein, wird die Extension nicht unterstützt. Notfalls, wie Delphic sagte, die Settings der Treiber in der Systemsteuerung überprüfen.

Wenn wglInitExtSwapControl fehl schlägt (oder nicht aufgerufen wird) dann ist der Funktion wglSetVsyncState keine Adresse zugewiesen und es kommt zu einer Schutzverletzung (EAccessVolation).

Es wäre natürlich besser, sic den Wert der Init-Funktion zu merken und den Aufruf von diese Wert abhängig zu machen

Code:
  1.  
  2.  
  3. var
  4.  
  5.  &nbsp;CanSetVSync : Boolean;
  6.  
  7. ...
  8.  
  9.  
  10.  
  11.  &nbsp;CanSetVSync := wglInitExtSwapControl;
  12.  
  13.  &nbsp;if CanSetVSync then wglSetVSyncState(false);
  14.  
  15.  


Somit dürfte der Fehler nie mehr auftreten. Wenn Du dann noch bescheid wissen willst, ob die Funktion überhaupt unterstützt wird, einfach 'ne MessageBox je nach Wert von CanSetVSync ausgeben lassen, damit der User bescheid weis.

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Nov 15, 2002 13:21 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 06, 2002 20:27
Beiträge: 479
Wohnort: Bremen
Du erstellst und initialisierst dein OpenGL-Fenster erst nachdem du wglSetVsyncState(false); aufrufst. Das kann eigentlich gar nicht gut gehen, weil da noch kein Rendering-Context erstellt ist.

Was aber noch viel wichtiger ist: es hiflt nichts nur eine Funktion aus den Snippets zu kopieren und zu hoffen das es funzt! Bevor du den VsyncState setzen kannst musst du erstmal wglInitExtSwapControl aufrufen um zu checken ob die Extension zur verfügung steht und den Ext-Funktionen Adressen zuzuweisen. (Wozu hat Schod die wohl sonst portiert?!)

Ich habs nicht getestet... aber wenn du das so machst solltest du deiner Lösung ein ganzes Stück näher sein! ;)

-lith

_________________
Selber Denken macht klug!


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 38 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.012s | 16 Queries | GZIP : On ]