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

Aktuelle Zeit: Fr Jul 18, 2025 11:55

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Fr Jul 22, 2005 16:08 
Offline
DGL Member

Registriert: Mi Apr 27, 2005 19:24
Beiträge: 24
Hi zusammen,
ich habe folgendes Problem:

Mein GL-Programm wird im windowed mode gestartet und soll durch Tastendrück (z.B F1)
in den fullscreen mode wechseln. Die Anzeige im windowed mode wird vollständig angezeigt, aber nach umschalten in dem fullscreen mode ist nur noch alles Schwarz und nicht mehr. (Die Auflösung von Win-Mode 800x600 habe ich auf Full-Mode gelassen) .Den Fullscreen mode habe ich auch schon direkt getestet (also ohne vorher win-mode) und da ist meine Texture wieder sichtbar! Was muss ich machen, dass beim umschalten in Full-Mode wieder alles sichtbar bleibt?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 22, 2005 17:35 
Offline
DGL Member

Registriert: Mi Apr 27, 2005 19:24
Beiträge: 24
Mir ist jetzt noch was aufgefallen, und zwar beim rendern habe ich mal statt einen schwarzen hintergrund eine andere Farbe benutzt. Beim umschalten von windowed-Mode zum fullscreen-Mode ist der hintergrund plötzlich schwarz!

Für den Fullscreen-Mode benutzte ich:
Code:
  1. procedure TGLForm.ShowFullScreen(pWidth, pHeight, pBPP, pFrequency : Word);
  2. var
  3.   dmScreenSettings : DevMode;
  4. begin
  5.   WindowState := wsMaximized;
  6.   BorderStyle := bsNone;
  7.   ZeroMemory(@dmScreenSettings, SizeOf(dmScreenSettings));
  8.   with dmScreenSettings do begin
  9.     dmSize              := SizeOf(dmScreenSettings);
  10.     dmPelsWidth         := pWidth;
  11.     dmPelsHeight        := pHeight;
  12.     dmBitsPerPel        := pBPP;
  13.     dmDisplayFrequency  := pFrequency;
  14.     dmFields            := DM_PELSWIDTH or DM_PELSHEIGHT or DM_BITSPERPEL or DM_DISPLAYFREQUENCY;
  15.   end;
  16.   if (ChangeDisplaySettings(dmScreenSettings, CDS_FULLSCREEN) = DISP_CHANGE_FAILED) then
  17.   begin
  18.     Log.AddLine('Could not switch to desired fullscreen mode!');
  19.     exit
  20.   end;
  21. end;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 22, 2005 19:08 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also du kannst nicht so ohne weiteres den BorderStyle deines Fensters ändern und hoffen, dass alles gut wird. Denn das wird es nicht, da durch das Ändern des BorderStyles das Fenster neu erstellt wird. Und entsprechend bekommt dein Fenster ein neues Handle und der Alte RC zeigt auf ein ungültiges Handle. Du müsstest also entweder den Rand mit etwas anderem Wegbekommen. SetWindowLong und dann die Styles verändern. Oder du musst nachdem du den BorderStyle verändert hast OpenGL neu Initialisieren und auch alles neu Laden, da du entsprechend ja auch einen neuen RC bekommst. Das Beste wäre wenn du vor dem Ändern auch den alten RC löscht. Die Sache mit dem SetWindowLong habe ich bisher noch nicht ausprobiert könnte aber Theoretisch fnktionieren. Die Auflösung ändern ist inkritisch. Zu SetWindowLong schau am Besten in den msdns nach. http://msdn.microsoft.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 22, 2005 23:13 
Offline
DGL Member

Registriert: Mi Apr 27, 2005 19:24
Beiträge: 24
Ich habe OpenGL neu Initialisieren und auch alles neu geladen und davor wollte ich den alten RC löschen aber

Code:
  1. DeactivateRenderingContext;
  2. wglDeleteContext(rc);
  3. ReleaseDC(Handle, dc);


so kommt ein AccessError!

Wie bekomme ich dann den alten RC los?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 22, 2005 23:25 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
SetWindowLong geht auch ohne
Code:
  1. DeactivateRenderingContext;
  2. wglDeleteContext(rc);
  3. ReleaseDC(Handle, dc);


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jul 23, 2005 10:13 
Offline
DGL Member

Registriert: Mi Apr 27, 2005 19:24
Beiträge: 24
Habe das mit SetWindowLong jetzt hinbekommen.
Aber wie bekommt man von Fullscreen wieder das Fenster?

Window-Mode-> FullscreenMode
Code:
  1.  
  2.    SetWindowLong(Handle, GWL_STYLE, GetWindowLong(Handle, GWL_STYLE) and not WS_CAPTION);
  3.    WindowState := wsMaximized;
  4.    ShowFullScreen(...);


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jul 23, 2005 13:17 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
statt AND NOT WS_CAPTION dann OR WS_CAPTION nehmen.


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 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.007s | 15 Queries | GZIP : On ]