Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Berkeley
Anmeldungsdatum: 13.05.2024 Beiträge: 101
|
Verfasst am: 15.05.2024, 19:17 Titel: Vollbildauflösungs-Fragen |
|
|
Bastle gerade an ner Lib, die einen zuverlässigen 640x480 8bpp Canvas erzeugt. Diese sollte normal in den Vollbildmodus wechseln, optional auch Fenster, skaliert die 640x480 sogar automatisch hoch, sodass man sie auch gut sehen kann.
Problem: Windows mag VGA nicht. Direkt 640x480 Fullscreen geht auf nen FullHD-Bildschirm schon mal nicht. Teilweise gehen auch nur 32 bpp Auflösungen - ab 800x600 - 8 bpp aber nicht.
Ich hab' zwar jetzt einfach 1920x1080 mit 8 bpp, und skalier' mir mein Bild für die Ausgabe hoch, aber es ist ja nicht gesagt, dass das auf JEDEM PC "Goldstandard" wäre.
Deshalb bräuchte ich eine Methode um "gültige" Vollbild-Grafikmodi zu erkennen, idealerweise ohne alle durch zu probieren. Gibt es auch ne Möglichkeit zu ermitteln, ob der Canvas im Vollbildmodus läuft ? |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4710 Wohnort: ~/
|
Verfasst am: 15.05.2024, 22:12 Titel: |
|
|
Die Vollbild-Modi zu ermitteln, sollte mit SCREENLIST gehen. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Berkeley
Anmeldungsdatum: 13.05.2024 Beiträge: 101
|
Verfasst am: 16.05.2024, 16:46 Titel: |
|
|
nemored hat Folgendes geschrieben: | Die Vollbild-Modi zu ermitteln, sollte mit SCREENLIST gehen. |
Stimmt. Laut Beschreibung... Funzt allerdings bei mir falsch. Spuckt trotz "SCREENLIST(8)" Auflösungen aus, die nur mit 32 bpp (oder auch 16 bpp) im Vollbildmodus gehen. Immerhin korrekt: 640x480 geht gar nicht, 800x600 mit 32 bpp schon. Und eben die Monitorauflösung geht mit 8 bpp in Fullscreen. PC-Technik halt. Kann ja nicht so ausgereift sein wie der Kathedralenbau im Mittelalter... :-/
Untoll, wenn eine EXE-Datei schon wegen solcher Kleinigkeiten nicht auf anderen Systemen funktioniert... |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4710 Wohnort: ~/
|
Verfasst am: 16.05.2024, 17:32 Titel: |
|
|
Immerhin war der Köllner Dom nach 630 Jahren Bau schon fast fertig.
Was passiert, wenn ein nicht möglicher Vollbildmodus aufgerufen wird? Idealerweise sollte dann gar kein Grafikmodus initialisiert werden, was sich dann über SCREENPTR oder so prüfen lässt, und du könntest den nächsten Eintrag ausprobieren. Wenn allerdings ein Modus initialisiert wird, mit dem du nichts anfangen kannst, ist das nicht so toll. Das müsste sich dann über SCREENINFO prüfen lassen. Optimal ist das natürlich nicht.
Die englische Referenz zu SCREENLIST gibt da leider auch nichts anderes her als die deutsche. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Berkeley
Anmeldungsdatum: 13.05.2024 Beiträge: 101
|
Verfasst am: 16.05.2024, 18:18 Titel: |
|
|
nemored hat Folgendes geschrieben: | Immerhin war der Köllner Dom nach 630 Jahren Bau schon fast fertig. :lol:
Was passiert, wenn ein nicht möglicher Vollbildmodus aufgerufen wird? Idealerweise sollte dann gar kein Grafikmodus initialisiert werden, was sich dann über SCREENPTR oder so prüfen lässt, und du könntest den nächsten Eintrag ausprobieren. Wenn allerdings ein Modus initialisiert wird, mit dem du nichts anfangen kannst, ist das nicht so toll. Das müsste sich dann über SCREENINFO prüfen lassen. Optimal ist das natürlich nicht.
Die englische Referenz zu SCREENLIST gibt da leider auch nichts anderes her als die deutsche. |
Danke, hab' schon recherchiert; wie du schon vermutest, wird einfach ungefragt ein Fenster aufgemacht.
SCREENCONTROL könnte noch was Hilfreiches liefern - Desktop und Canvasauflösung vergleichen; mein Workaround wär' erst mal, dass man notfalls per Programmparameter erzwingen kann, dass Vollbildmodus in Desktopgröße startet. Meine Skalierroutine funktioniert schon perfekt. - Ohne Verzerrung, Unschärfe, und mit breiten schwarzen Rändern, ist halt großes Kino ;-)
Ich fürchte, dass man in Zukunft wohl eine komplette 8-bpp-Emulation aufbauen muss, und dann muss man sich die GFX-Funktionen neu schreiben... |
|
Nach oben |
|
 |
Matthias Gast
|
Verfasst am: 18.07.2025, 08:25 Titel: |
|
|
Hallo! Windows unterstützt in modernen Grafikkarten meist keine klassischen 8bpp Vollbildmodi mehr, besonders bei niedrigen Auflösungen wie 640x480. Deine Lösung mit 1920x1080 und Skalierung ist daher oft die praktikabelste. Um gültige Vollbildmodi zu ermitteln, kannst du die DirectX-API (IDXGIOutput::GetDisplayModeList) nutzen – damit bekommst du eine Liste unterstützter Modi ohne Raten. Ob der Canvas im Vollbildmodus läuft, kannst du z.B. über das Fensterstil-Flag und den Monitor überprüfen. |
|
Nach oben |
|
 |
Monika
Anmeldungsdatum: 03.07.2025 Beiträge: 9
|
Verfasst am: 12.10.2025, 17:38 Titel: |
|
|
Hi, du kannst unter Windows mit EnumDisplaySettings alle verfügbaren Display-Modi abfragen, ohne sie durchzuprobieren. Für Gültigkeit am besten auf die von EnumDisplaySettings gelieferten Modi beschränken. Ob dein Canvas im Vollbild läuft, könntest du z.B. am Fenstertyp oder durch Vergleichen von Fenster- und Bildschirmauflösung erkennen. Viele moderne Grafikkarten und Treiber unterstützen 8bpp aber nicht mehr nativ im Vollbild, daher ist Hochskalieren meist der bessere Weg. |
|
Nach oben |
|
 |
hhr
Anmeldungsdatum: 15.07.2020 Beiträge: 116
|
Verfasst am: 12.10.2025, 20:18 Titel: |
|
|
Bei mir wird vieles doppelt angezeigt. Was bedeutet das?
Code: | #include "windows.bi"
Dim As DEVMODE dm
Dim As Long mode
dm.dmSize = Sizeof(DEVMODE)
Do
If EnumDisplaySettings(NULL, mode, @dm) = 0 Then Exit Do
Print dm.dmBitsPerPel, dm.dmPelsWidth, dm.dmPelsHeight, dm.dmDisplayFlags, dm.dmDisplayFrequency
mode += 1
Loop
Sleep
|
|
|
Nach oben |
|
 |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1283 Wohnort: Ruhrpott
|
Verfasst am: 13.10.2025, 12:14 Titel: |
|
|
Kann ich nicht bestätigen. Bei mir wird jeder Modus nur einmal aufgelistet.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4710 Wohnort: ~/
|
Verfasst am: 13.10.2025, 13:59 Titel: |
|
|
Bei mir sind ebenfalls Mehrfachnennungen dabei:
Code: | 32 1024 768 0 75
32 1152 870 0 75
32 1152 870 0 60
32 1152 870 0 60
32 1152 870 0 60
32 1280 720 0 59
32 1280 720 0 60
32 1280 1024 0 60
32 1280 1024 0 75
32 1440 480 0 59
32 1440 480 0 59
32 1440 480 0 59
32 1440 480 0 60
32 1440 480 0 60
32 1440 480 0 60
32 1440 576 0 59
32 1440 576 0 59
32 1440 576 0 59
32 1440 576 0 60
32 1440 576 0 60
32 1440 576 0 60
32 1680 1050 0 59
32 1680 1050 0 59
32 1680 1050 0 59
32 1680 1050 0 60
32 1680 1050 0 60
32 1680 1050 0 60
32 1920 1080 0 59
32 1920 1080 0 60 |
Kann sein, dass die Liste unvollständig ist, denn meine Konsolenausgabe schneidet weggescrollte Zeilen ganz gern ab. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Berkeley
Anmeldungsdatum: 13.05.2024 Beiträge: 101
|
Verfasst am: 13.10.2025, 22:53 Titel: |
|
|
Eigentlich sollte FreeBASIC völlig plattformunabhängig sein und funktionieren. Man also auf sämtliche Windows-Funktionen verzichten können und entsprechend auch einheitliche Ergebnisse erzielen. |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 958 Wohnort: Austria
|
Verfasst am: 14.10.2025, 02:43 Titel: |
|
|
Falls jemand genauer reinschauen mag, kann man sich hier die Implementierungen in FBs gfxlib2 ansehen:
Die letzeren beiden verwenden auch EnumDisplaySettings, der D2D driver IDXGIOutput::GetDisplayModeList, der DX driver verwendet legacy IDirectDraw2_EnumDisplayModes. _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1283 Wohnort: Ruhrpott
|
Verfasst am: 14.10.2025, 12:18 Titel: |
|
|
Berkeley hat Folgendes geschrieben: | Eigentlich sollte FreeBASIC völlig plattformunabhängig sein und funktionieren. Man also auf sämtliche Windows-Funktionen verzichten können und entsprechend auch einheitliche Ergebnisse erzielen. |
Na ja, ich denke mal, dass die Grafikmodi vom Grafikkartentreiber kommen. Und der ist nun mal nicht plattformunabhängig.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
 |
|