höchstwahrscheinlich kein Bug des Programms: im Fullscreen-Modus auf Windows 7 RC 64bit mit zwei Monitoren, ATI 3870 mit Win7 Treiber (ATI Treiber kann ich nicht installieren) gibt's bei mir einen Bluescreen: SYSTEM_SERVICE_EXCEPTION (3b) An exception happened while executing a system service routine. Arguments: Arg1: 00000000c0000005, Exception code that caused the bugcheck Arg2: fffff96000102a4f, Address of the exception record for the exception that caused the bugcheck Arg3: fffff88009212050, Address of the context record for the exception that caused the bugcheck Arg4: 0000000000000000, zero. ... FAULTING_IP: win32k+f2a4f ... DEFAULT_BUCKET_ID: VISTA_DRIVER_FAULT ... FOLLOWUP_IP: win32k+f2a4f fffff960`00102a4f 488b8858010000 mov rcx,qword ptr [rax+158h] ... SYMBOL_NAME: win32k+f2a4f
Kann das vielleicht jemand bestätigen?
Seltsam daran ist jedoch, dass ich das Programm in Version 0.9 einmal starten und spielen konnte, am nächsten Tag trat ohne offensichtliche Änderung das Problem auf. Hmmm. Im Fenster (Standardeinstellung Version 0.95) funktioniert alles.
>im Fullscreen-Modus auf Windows 7 Ich habe letzte Woche mal mit 3 optimierten Compiles für Windows 9x, XP (Skin-support) und Vista (Aero-wasweissich-support) um mich geworfen.
Die Vista-version soll wunderbar auf 7 laufen weil für Vista andere (modernere) DirectC-funktionen verwendet werden. Eine normal compilierte Version lief dort zwar, aber DirectX musste wohl Befehle emulieren, was zu performanceinbußen führe.
Bei mir ist es genau umgekehrt. Die Vista-compilation läuft hier etwas langsamer ab. Der Fenstermodus ist wohl so ein Zwitterwesen zwischen DirectX und Windowsfunktionen.
Ich könnte bei Bedarf grad für Vista ein compile erstellen.
BTW, ein bisschen off-topic zwar, hast Du einen Link zu Informationen bzgl. der angesprochenen Unterschiede im DirectX auf Vista? Geht's da nur um Compileroptimierungen oder Präprozessordirektiven?
Edit: etwas das wohl damit zusammenhängen wird - wenn ich das Programm im Fenster starte, dann deaktiviert Win 7 die Aero-Oberfläche und schaltet auf Standardschema um.
Ich compiliere das Programm für 32-Bit Prozessoren, (habe ja keine 64-bit) und weiss nun nicht, ob das eine untergeordnete Rolle spielen könnte (glaube ich aber eher nicht). Ich vermute das öffnen des DX-Screens ist der Knackpunkt. Aber leide habe ich keine Möglichkeit das auf einem 2-Monitor-system zu testen. Vielleicht müsste ich angeben ob im 1sten oder 2ten?
Normalerweise sollte niemals ein Anwendungsprogramm einen Bluescreen auslösen - das ist immer eine Frage des Treibers oder der Hardware. Letzteres schließe ich mal aus. Treiberfehler können natürlich durch bestimmte Ansteuerung oder "Race conditions" hervorgerufen werden. Dass es an der Wahl des Monitors liegt, glaube ich nicht.
Ich weiß ja nicht, wie Du den Bildschirmmodus umschaltest. Direct3D? Da gibt man beim Initialisieren des Direct3D-Devices den Grafikadapter mit - einfach die Nummer der Grafikkarte (zwei Ausgänge einer Karte gelten als zwei Karten). Nimmt man 0 (oder Default) ist's wohl der primäre Bildschirm (mit der Taskleiste). Nimmt man eine andere, erscheint das Programm auf diesem Monitor. Solange die Anwendung das nicht vorsieht, kann der Anwender aber nicht wählen, auf welchem Monitor das Programm erscheint - es wird wohl immer der primäre sein. Wieviele Adapter es gibt, kann man über die API abfragen.
Momentan würde ich vermuten, dass es einfach an der Vorabversion von Win7 oder dem Grafikkartentreiber liegt - vielleicht kann's ja irgendwann mal jemand bestätigen. Komisch ist nur, dass es mal funktioniert hat...
Edit: Okay - scheint am Firewall/Virenscanner zu liegen - Beta-Version von Outpost. Wenn ich den deaktiviere, gibt's wohl keine Probleme mehr.
Danke für die Infos. Klingt logisch, die ansteuerung als Device. Ich verwende keine 3D-Funktionen sondern normale DX-Sprites. Mich würde noch interessieren, wieso du die ATI Treiber nicht installieren kannst.
Ich könnte zwar eine Abfangroutine einbauen, die dir mit einem Messagerequster mitteilt, das der DX-Screen nicht geöffnet werden konnte, aber das hift bestimmt auch nicht weiter.
Vielleicht liegt das Problem auch daran, das ich einen 1024x768 Screen mit 16 Bit Farbtiefe öffne.
Die Installation der ATI-Treiber mit dem InstallManager geht nicht, weil der crasht. Liegt wohl an einem falschen Mapping der Visual-Studio-Runtimes. Man findet einiges dazu im Internet, aber keine "richtige" Lösung, auch der ATI-Support will nicht helfen und erklärt nur, wie man die Treiber deinstallieren soll, um sie "sauber" neu zu installieren. Es gibt einen "Trick", dieses Problem über eine Kommandozeileninstallation aus den entpackten Treibern zu installieren. Diese Installation läuft dann bei mir zwar durch, meldet aber, dass weder Treiber noch Catalyst Control Center installiert werden konnten. Ohne Fehlermeldung.
Noch zwei Dinge: Oben hatte ich durch Edit ergänzt, dass es wohl mit meinem Outpost zusammenhängt. Ich weiß nicht, ob Du das schon gelesen hast. Weiterhin funktioniert in der 0.95 die Alt-Taste als Pause-Taste. Ist das nur bei mir so? Oder beabsichtigt? Wie werden sonst die Sonderzüge ausgelöst?
>ben hatte ich durch Edit ergänzt, dass es wohl mit meinem Outpost zusammenhängt. Ich weiß nicht, ob Du das schon gelesen hast. Nein, habe ich grad nachgeholt. Wie du schon richtig bemerkt hast, wird das aero-zeugs nicht abgeschaltet. Skinning heisst das wohl. Die verwendetete Compileroption verwendet allerdings modernere DX-funktionen dafür. Das wars auch schon.
>Weiterhin funktioniert in der 0.95 die Alt-Taste als Pause-Taste. Ist das nur bei mir so? >Oder beabsichtigt? Wie werden sonst die Sonderzüge ausgelöst?
In dieser Woche hat es viele kleine Veränderungen gegeben. Am ausführlichsten gehe ich darauf in der Zusammenfassung der 22ten Kalenderwoche ein. (zu finden in den Ankündigungen) In den Täglichen Updates steht nur:
* Die <ALT>Taste wurde durch die Taste <STRG> ersetzt. <SHIFT> kann auch verwendet werden.
Dies ist seit letztem Sonntag so. In einem Fenster werden Keyboard-events der Sondertasten Alt und Shift zwar gesendet, aber die "Taste-losgelassen"-Events scheint es dafür nicht zu geben. STRG arbeitet hingegen einwandfrei, weshalb diese nun verwendet wird.
Für dich könnte dies auch interessant sein. Ich habe weitere Abfangroutinen integriert, die bei Problemen mit DirectX bzw. dem öffnen des Fensters Alarm schlagen, sollte dies nicht klappen...