Probleme mit 16:9 & Fake Fullscreen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Iguan

Betreff: Probleme mit 16:9 & Fake Fullscreen

BeitragDo, Mai 03, 2012 14:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Tachwohl

Vielleicht kennt ihr ja eine Lösung zu meinem Problem:

Ich möchte ein Spiel mit Ratio 16:9 machen...

Mein Laptop: Marke Sony Vaio, hat ein Full HD Display, Blu-Ray brenner, OS Vista 64Bit, also nicht gerade allzu altmodisch.

Wenn ich nun eine Auflösung wie:
Code: [AUSKLAPPEN]

Graphics3D, 1920,1080,0,1     ;16:9

oder
Code: [AUSKLAPPEN]

Graphics3D 1280,720,0,1        ; 16:9


setzte, kommt die Fehlermeldung: "Unable to set graphicsmode".
Wie kann das sein? Meine Grafikkarte sollte das doch können... mein Lappi hat ja ein FULL HD Display.. Im Fenstermodus (Modus 2 + 3 klappt das allerdings ohne probleme...) Könnt ihr vielleicht mir weiterhelfen?
Rolling Eyes


Des weiteren wollte ich wissen, was ihr von folgender Idee haltet:
Eine Art "Fake-Fullscreen" zu erstellen. Damit meine ich folgendes: Das Spiel in einer 16:9 Ratio Auflösung im Modus 3 erstellen.
(Beispiel: Graphics3D 1280,720,0,3). Dann beim Spielstart ein WinAPI skript (programmiert z.B mit Autohotkey) starten, welches das Fenster in den Vordergrund rückt (AlwaysOnTop) und
der Bildschirmauflösung ensprechend skaliert und verschiebt. Das skalieren und verschieben müsste dann so geschehen, dass das Fenster grösser als die
Auflösung des Bildschirmes ist, damit die Titelleiste und der Fensterrahmen ausserhalb des Bildschirmes und somit nicht sichtbar sind. Damit könnten theoretisch alle Monitore von der Auflösung her abgedeckt werden.
(Klar sieht es in gewissen Fällen nicht mehr so gut aus, z.B wenn der Bildschirm ein Ratio von 4:3 hat, aber das Spiel möchte ich halt für 16:9 Bildschirme machen.)
Was haltet ihr davon? Müsste doch gehen, oder?

BladeRunner

Moderator

BeitragDo, Mai 03, 2012 14:14
Antworten mit Zitat
Benutzer-Profile anzeigen
CountGfxModes bzw. CountGfxModes3D sollten Dir weiterhelfen- schau mal nach was deine Grafikkarte da so anbietet.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

FireballFlame

Betreff: Re: Probleme mit 16:9 & Fake Fullscreen

BeitragDo, Mai 03, 2012 14:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Iguan hat Folgendes geschrieben:
Klar sieht es in gewissen Fällen nicht mehr so gut aus, z.B wenn der Bildschirm ein Ratio von 4:3 hat, aber das Spiel möchte ich halt für 16:9 Bildschirme machen.

Damit machst du dich bei Spielern wie mir unbeliebt. Es sei denn, das ganze ist nur für dich privat gedacht, versteht sich.
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

Iguan

BeitragDo, Mai 03, 2012 17:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe mich mal an den vorhin beschriebenen Fake-Fullscreen gemacht und bin auf ein Problem gestossen...


Könnt ihr bitte mal ausprobieren, ob ihr das Fenster (von nachfolgendem Code) mit der Maus beinahe zum Fullscreen skalieren könnt. Das bedeutet, die Titelleiste soweit es geht aus dem oberen Bildschirmrand schieben und die Ränder auch so weit es geht links, rechts und unten aus dem Bildbereich ziehen... (Taskleiste am besten ausblenden)

Code: [AUSKLAPPEN]

Graphics3D 1280,720,0,3
AppTitle "WindowTitle"
Line 0,0,100,0
Line 0,0,0,100
Line 0,0,1279,720
Line 1279,719,1180,719
Line 1279,719,1279,620
;ExecFile "e:\ScaleWindow_and_Set_OnTop.ahk"
WaitKey
End



Nachfolgendes Autohotkey-Skript (WinAPI) sollte dies eigentlich automatisch machen...
Autohotkey Code:
Code: [AUSKLAPPEN]

WinMove, WindowTitle, , -5, -30 , A_ScreenWidth + 10, A_ScreenHeight+35
WinSet, AlwaysOnTop, On , WindowTitle


... allerdings kann ich bei mir das Fenster nicht ganz zum unteren Bildschirmrand vergrössern, da fehlen immer etwa 25 Pixel... ich kann zwar mit der Maus ziehen, das Fenster will aber nicht grösser werden. Ist das bei euch auch so? An was könnte das liegen?

aMul

Sieger des Minimalist Compo 01/13

BeitragDo, Mai 03, 2012 17:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Woran es exakt liegt dass du dein Fenster nicht so groß kriegst weiß ich nicht.
Was ich dir allerdings empfehlen würde ist, da du ja eh schon in der WinAPI bist, einfach den Style deines Fensters zu ändern und den Rahmen komplett abzuschalten.
Code: [AUSKLAPPEN]
SetWindowLong(hwnd, -16, $10000000)


Das ist auch keine allzu neue Idee muss ich dich eventuel enttäuschen.
Einige Spiele(zum Beispiel alle die die neuste Version der Source Engine benutzten, oder auch alle meine neueren Programme) unterstützen rahmenlosen Fenstermodus.
Das hat vor allem den Vorteil, gerade in Spielen, dass man zum einen den gesammten Bildschirm für sien Programm zur Verfügung hat(wer will schon ein athmosphärisches Rollenspiel im Fenster spielen), aber dass man auch einfach zu anderen Programmen wechseln kann.
Viele Vollbild-Spiele kommen damit zwar auch relativ gut klar, aber oft dauert es mindestens ein Paar Sekunden bis der Grafiktreiber(oder wer auch immer hier zuständig ist) umgeschaltet hat, oder, in seltenen Fällen stürzt das Spiel auch einfach ab.
Diese Probleme gibt es im Fenstermodus nicht, und mir wären auch sonst keine großartigen Nachteile bekannt.
Man hat zwar als Programierer ein bisschen weniger Kontrolle im Fenstermodus, und es wird sicherlich auch minimal mehr Leistung brauchen, aber im Endeffekt sind die Vorteile deutlich überwiegend finde ich.
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

Iguan

BeitragDo, Mai 03, 2012 20:36
Antworten mit Zitat
Benutzer-Profile anzeigen
@ aMul: Danke, und ich dachte ich könnte mit dieser Idee die Welt verändern... *scherz* Laughing

...konntest du es bis zu Fullscreen skalieren oder geht das bei dir auch nicht?

Jamagin

BeitragDo, Mai 03, 2012 20:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Und wieso passt du das Fenster nicht einfach der Desktopgröße an?

Code: [AUSKLAPPEN]

ScreenBreite = apiGetSystemMetrics(0)
ScreenHoehe = apiGetSystemMetrics(1) - 60
TempFaktor1# = 1024.0 / 708.0
TempFaktor2 = ScreenHoehe * TempFaktor1#
Graphics3D TempFaktor2, ScreenHoehe, 0, 2
Graphics3D 1024, 708, 0, 3


Du mußt aber noch eine user32.decls dazu machen und in den ordner userlibs im Blitz3D Ordner reinspeichern!

Code: [AUSKLAPPEN]

.lib "user32.dll"
apiGetSystemMetrics%(nIndex) : "GetSystemMetrics"


lg. Jamagin
  • Zuletzt bearbeitet von Jamagin am Do, Mai 03, 2012 20:54, insgesamt einmal bearbeitet

Iguan

BeitragDo, Mai 03, 2012 20:52
Antworten mit Zitat
Benutzer-Profile anzeigen
zitat:
... allerdings kann ich bei mir das Fenster nicht ganz zum unteren Bildschirmrand vergrössern, da fehlen immer etwa 25 Pixel... ich kann zwar mit der Maus ziehen, das Fenster will aber nicht grösser werden...

Jamagin

BeitragDo, Mai 03, 2012 20:57
Antworten mit Zitat
Benutzer-Profile anzeigen
... wegen der Taskleiste!

lg. Jamagin
Bevor du etwas neues beginnst, erledige das alte

Addi

BeitragDo, Mai 03, 2012 22:11
Antworten mit Zitat
Benutzer-Profile anzeigen
@Jamagin
Ich glaube es geht noch viel leichter

BlitzBasic: [AUSKLAPPEN]

Graphics 0,0,32,0


Bin gerade nich am Pc und kann es nicht testen, aber es sollte so gehen Very Happy
BP/B3D/BMax : Lerne Java : Früher mal Lite-C : Gewinner BCC 62

Iguan

BeitragDo, Mai 03, 2012 22:23
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, danke für die Antworten! Ich hab ein Autohotkey skript im i-net gefunden, mit dem es funktioniert... das mit der userlib werde ich auch noch probieren...

Hier das Script falls Interesse vorhanden:

Code: [AUSKLAPPEN]


; Fake-Fullscreen (Win+F)

#f::

WinGet, WindowID, ID, A
; oder    WinGet, WindowID, ID, Name_Des_BlitzbasicFensters_Im_Fenstermodus3
WinGet, Style, Style, ahk_id %WindowID%

; If true, blow up the window, otherwise restore it.
If (Style & 0xC40000)

{
        ; Get the window geometry and save it with the window ID for later.
        WinGetPos, PosX_%WindowID%, PosY_%WindowID%, W_%WindowID%, H_%WindowID%, ahk_id %WindowID%
   
        ; Figure out the center.
        xc := PosX_%WindowID% + W_%WindowID%/2
        yc := PosY_%WindowID% + H_%WindowID%/2

        ; Now get the monitor the window center is on.
        MID := FindMonitor(xc, yc)
        SysGet, mn, Monitor, %MID%
       
        ; Calculate monitor size.
        mnWidth := mnRight - mnLeft
     
        mnHeight := mnBottom - mnTop

        ; Now, remove the window caption and border, and move the window to fill
        ; the whole monitor.
        WinSet, Style, -0xC40000, ahk_id %WindowID%
        WinMove, ahk_id %WindowID%, , %mnLeft%, %mnTop%, %mnWidth%, %mnHeight%
}
Else
{
        ; First, get back the caption and border.
        WinSet, Style, +0xC40000, ahk_id %WindowID%     

        ; Now, if we have variables for the window, restore its position, otherwise
        ; fall back to moving it to a visible spot. This should never happen though.

        If (H_%WindowID% <> 0)
        {
                WinMove, ahk_id %WindowID%, , PosX_%WindowID%, PosY_%WindowID%, W_%WindowID%, H_%WindowID%
        }
        Else
   
        {
                WinMove, ahk_id %WindowID%, , 50, 50, 500, 500     
        }
}

return

 

; Helper Functions

FindMonitor(xc, yc)
{
        SysGet, mc, MonitorCount 
        Loop, %mc%     
        {   
                SysGet, moni, Monitor, %A_Index%
                if (xc >= moniLeft and xc <= moniRight and yc >= moniTop and yc <= moniBottom)
                {
                        return %A_Index%
                        return %A_Index%
                }
        }
        return 0
}
  • Zuletzt bearbeitet von Iguan am Fr, Mai 04, 2012 11:49, insgesamt 2-mal bearbeitet

Jamagin

BeitragFr, Mai 04, 2012 9:16
Antworten mit Zitat
Benutzer-Profile anzeigen
@Addi,

das geht schon mal gar nicht!

Fehlermeldung: Unable to set graphic mode


lg. Jamagin
Bevor du etwas neues beginnst, erledige das alte

BladeRunner

Moderator

BeitragFr, Mai 04, 2012 10:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Was gab dir denn countgraphicmodes aus? wird Full HD denn unterstützt?
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

aMul

Sieger des Minimalist Compo 01/13

BeitragFr, Mai 04, 2012 12:47
Antworten mit Zitat
Benutzer-Profile anzeigen
@Iguan:
Ja, mit meiner Methode kann man das Fenster über den kompletten Bildschirm ziehen.

Da es mir scheint, dass man meinen Vorschlag allerdings komplett ignoriert hat, hier noch mal ein ausführlicher und lauffähiger Code:
BlitzBasic: [AUSKLAPPEN]
; get window handle
Local hwnd = SystemProperty("AppHWND")

; set graphics mode
Graphics3D(1920, 1080, 0, 2)

; disable window border
SetWindowLong(hwnd, -16, $10000000)

; move window to correct position
MoveWindow(hwnd, 0, 0, 1920, 1080, True)

; from here on, random program code
SetBuffer(BackBuffer())

Repeat

Local c = (Sin(MilliSecs() * 0.1) + 1) * 127

ClsColor(c, c, c)

Cls

Flip(0)
Delay(5)

Until KeyHit(1)

End

Mit der entsprechenden *.decls:
Code: [AUSKLAPPEN]
.lib "user32.dll"

SetWindowLong% (hwnd%, nIndex%, dwNewLong%) : "SetWindowLongA"
MoveWindow% (hwnd%, x%, y%, nWidth%, nHeight%, bRepaint%) : "MoveWindow"


Dieser Code erstellt bei mir ein Fenster welches den ganzen Bildschirm bedeckt(inclusive Taskleiste) und keinen Rahmen hat.
Vorsicht:
Das gilt natürlich nur für FullHD 1080p Auflösung, andererseits müssen die Parameter im Code angepasst werden!

Wenn das so nicht klappt verweise ich in letzter Instanz auf Bladerunner, welcher ja bisher auch fleißig ignoriert wurde.
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

Addi

BeitragFr, Mai 04, 2012 13:41
Antworten mit Zitat
Benutzer-Profile anzeigen
@Jamagin
Ok tut mir leid. Very Happy
Ich hatte nur irg. wo mal gelesen das das auch einfach so über Graphics geht.
BP/B3D/BMax : Lerne Java : Früher mal Lite-C : Gewinner BCC 62
 

BIG BUG

BeitragSa, Mai 05, 2012 0:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Das mit dem Graphics-Befehl funktioniert schon, Du hast nur einen Parameter falsch belegt.
So sollte es klappen:
Code: [AUSKLAPPEN]
Graphics3D 0,0, 32, 1


Ich meine dann müsste der die Desktop-Auflösung im Fullscreen nehmen...
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group