Umschalten zwischen Fenster- und Vollbildmodus in DirectDraw



  • da kann ich dir auf anhieb nicht weiterhelfen

    müsste ich auch mal in ner ruhigen (kühlen) minute mich hinsetzen und was rumwerkeln

    aber andererseits sollte das nicht schwer sein

    um directx zu initialisieren muss man im grunde eine fenster erstellen und ein direct3d device zu dem fenster erzeugen

    also kannste dir in ne klasse schreiben:

    class D3DDraw
    {
    private:
         LPD3DDEVICE fenster, vollbild;
         WNDCLASSEX  window, fullscreen;
         HINSTANCE hInstance;
         HWND hWnd;
    public:
         init()
         {
              // window erstellen
              // fullscreen fenster erstellen
    
              // die beiden d3d devices erstellen
              showwindow(dein beliebiges fenster);
          }
    };
    

    also ich müsste das mal durch denken aber auf grössere probleme stosse ich so spontan nicht
    ich würde da mit einem function pointer arbeiten oder einer methode die das aktuelle d3ddevice zurückgibt um auch auf das richtige fenster zu zeichnen
    um den fenstermodus zu ändern würde es dann einfach reichen das jeweils andere fenster zu focussen und den pointer umzustellen

    PS: den kram mit front und backbuffer den du erwähnst versteh ich nicht, vllt reden wir aber auch aneinander vorbei und ich meine was vollkommen anderes
    zu dem punkt: directdraw ist doch directx oder?
    der kram mit dem streambuffer drawPrimitives() vertex(buffern) und so weiter?!?

    wenn nicht dann vergiss alles was ich geschrieben hab



  • O.k., nochmal: Ich brauche keine Hilfe beim Klassen oder Funktionen erstellen. Programmieren kann ich selbst. Du mußt also nichts rumwerkeln. Wie ich das ganze Zeug kapsele, das weiß ich auch. Ich bin auch in der Lage, so ein Programm im Fenster oder im Vollbild auf die Beine zu stellen, so daß ich auch keine Hilfe bei der Frage "Wie initialisiert man DirectX?" brauche. Meine Frage war schlicht und ergreifend: Beinhaltet das DirectX-Framework irgendwo die Möglichkeit, bewußt zwischen Fenster und Vollbild umzuschalten oder muß man diesen Wechsel wirklich dadurch simulieren, indem man jeweils die Variablen löscht und neu erstellt?

    P.S.: DirectDraw ist zwar das mit der Grafik, aber das alte Zeug mit der Grafik. Du gehst wohl von Direct3D, dem neuen Zeug mit der Grafik, aus.



  • @NES-Spieler:
    Bei DirectDraw ist der Support ziemlich mies, bzw. so-gut-wie nicht vorhanden.
    Also ja, alles niederfahren, alles neu anlegen.

    Bei Direct3D, zumindest ab Version 9, ist es einfacher, da dann einige Dinge gleich sind. Du hast dann z.B. immer deine Flipping-Chain, die Unterschiede zwischen Fullscreen und Windowed werden von Direct3D weitestgehend "versteckt".

    Wenn man beim Programmierern von vornherein darauf Rücksicht nimmt, kann allerdings mit beiden Varianten halbwegs vernünftig arbeiten.



  • NES-Spieler schrieb:

    P.S.: DirectDraw ist zwar das mit der Grafik, aber das alte Zeug mit der Grafik. Du gehst wohl von Direct3D, dem neuen Zeug mit der Grafik, aus.

    Hehe, du hast eine interessante Definition von "neu". Hier gibts bestimmt Mitglieder, die noch nicht mal geboren waren als Direct3D erschien. 😃

    Quälst du dich eigentlich freiwillig mit so vorsintflutlichem Kram ab? Wenn ja, warum?



  • vielleicht ist er ja archäologe doer historiker...

    mit direct3d erstellt mein ein device und legt da schon fest ob fullscreen oder fenster modus

    d3dpresentparameters.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpresentparameters.hDeviceWindow = hWnd;
    d3dpresentparameters.Windowed = TRUE;
    d3dpresentparameters.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
    
    d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, 
    					  hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, 
    					  &d3dpresentparameters, &this->d3ddevice);
    

    daher meine überlegungen
    dachte halt directdraw und d3d wären das gleiche...



  • Nukularfüsiker schrieb:

    Quälst du dich eigentlich freiwillig mit so vorsintflutlichem Kram ab? Wenn ja, warum?

    Damit mein Spiel auch auf alten Mähren läuft, ohne daß da erst das neueste DirectX installiert werden muß. Außerdem empfinde ich DirectDraw als einfacher als Direct3D. Ich hab mal in so ein Buch Direct3D für 2D-Programmierer reingeguckt, und irgendwie scheint das alles noch komplizierter zu sein als DirectDraw. Was man da erst alles abfragen und initialisieren muß.
    Am liebsten würde ich ja mit GDI arbeiten, aber wenn man das Spielefenster vergößert, geht die GDI wegen dem StretchBlt ganz schön in die Knie und auf Computern, die nicht mehr die allerneuesten sind, kann man das Spiel dann nur noch in Zeitlupe verfolgen.



  • NES-Spieler schrieb:

    Damit mein Spiel auch auf alten Mähren läuft, ohne daß da erst das neueste DirectX installiert werden muß.

    Ok, das verstehe ich. Aber so alte Mähren, über 10 Jahre alt, gibts die überhaupt noch? Wer spielt denn auf sowas? Und für DirectDraw muss man auch DirectX installiert haben.

    Außerdem empfinde ich DirectDraw als einfacher als Direct3D. Ich hab mal in so ein Buch Direct3D für 2D-Programmierer reingeguckt, und irgendwie scheint das alles noch komplizierter zu sein als DirectDraw. Was man da erst alles abfragen und initialisieren muß.

    Direct3D ab Version 8 ist sehr einfach und komfortabel zu benutzen, einfacher als DDraw IIRC. Alleine schon dein gewünschtes Umschalte-Feature ist einfacher umzusetzen, womit dieses Argument ja schon entkräftet wäre.

    Dazu kommt noch die Hardware-Beschleunigung, wovon auch "alte Mähren" profitieren.



  • Nukularfüsiker schrieb:

    Ok, das verstehe ich. Aber so alte Mähren, über 10 Jahre alt, gibts die überhaupt noch?

    Bis vor kurzem hatte ich selbst noch so einen PC.

    Nukularfüsiker schrieb:

    Wer spielt denn auf sowas?

    Keine Ahnung, aber da mein Spiel inhaltlich nicht so anspruchsvoll ist, soll es auch technisch nicht so anspruchsvoll sein. Ich hasse es zum Beispiel, wenn ein Programm das .NET Framework 3.5 und mindestens Windows XP SP 3 verlangt, und dann stellt sich heraus, daß das nur ne popelige GUI-Anwendung mit ein paar Checkboxen ist, die ohne weiteres auch auf Windows 95 hätte laufen können. Mein Spiel wird ungefähr auf dem Level eines NES-Spiels sein. Und dementsprechend gering sollen die Anforderungen sein. Oder fändest Du es prickelnd, wenn Du für'n 1:1 Pac-Man-Remake (Nein, das ist nicht mein Spiel, ich programmiere keine Remakes.) erstmal 1 GB Arbeitsspeicher, DirectX 10 und mindestens Windows 7 Ultimate Edition benötigen würdest? (Überspritzt ausgedrückt.)

    Nukularfüsiker schrieb:

    Und für DirectDraw muss man auch DirectX installiert haben.

    Aber ich linke mein Programm gegen das DirectX 2 SDK, somit müssen nur die, die gar kein DirectX drauf haben, was nachinstallieren.

    Nukularfüsiker schrieb:

    Direct3D ab Version 8 ist sehr einfach und komfortabel zu benutzen, einfacher als DDraw IIRC. Alleine schon dein gewünschtes Umschalte-Feature ist einfacher umzusetzen, womit dieses Argument ja schon entkräftet wäre.

    Ja, aber ich hab das Grundgerüst soweit schonmal aufgebaut, also ist es jetzt auch egal. Außerdem ist das mit dem Umschalten ja nicht in dem Sinne schwerer, man muß nur etwas mehr programmieren, aber vom Anspruch ist es ja nichts weiter als: Ein paar Werte merken (welche Grafiken gerade geladen waren etc.), alles rausschmeißen, alles neu machen. Langwieriger, aber inhaltlich leichter als wenn ich erstmal irgendwelche was-weiß-ich-nicht Structs durchsuchen und mich auf alle möglichen Eventualitäten gefaßt machen muß.

    Nukularfüsiker schrieb:

    Dazu kommt noch die Hardware-Beschleunigung, wovon auch "alte Mähren" profitieren.

    Hardwarebeschleunigung hat doch DirectDraw auch. Wenn nicht, wär's ja genauso lahm wie GDI.



  • NES-Spieler schrieb:

    Oder fändest Du es prickelnd, wenn Du für'n 1:1 Pac-Man-Remake (Nein, das ist nicht mein Spiel, ich programmiere keine Remakes.) erstmal 1 GB Arbeitsspeicher, DirectX 10 und mindestens Windows 7 Ultimate Edition benötigen würdest? (Überspritzt ausgedrückt.)

    1 GB ist ein bissl knapp für einen modernen PC mit Windows 7. 🙂

    Ich verstehe worauf du hinaus willst und es hat ja auch einen gewissen Reiz, wenn man sich auf ein Minimum beschränkt. Es soll ja auch Leute geben, die noch für den C64 programmieren.
    Ich denke nur, dass es am Ende niemanden kratzt, ob das jetzt mit DX2 oder DX8 läuft, und es sich deshalb auch nicht lohnt, sich krumm zu machen.
    DX8 als Target (das war vor 10 Jahren!) halte ich noch für vernünftig, alles davor nicht mehr. Wenn man es nicht um der Sache selbst willen macht.

    Mein Spiel wird ungefähr auf dem Level eines NES-Spiels sein.

    Dann sollte es auch auf so einer Hardware laufen. Wenn schon old school, dann richtig. Dann weiß man es auch zu schätzen 🙂

    Hardwarebeschleunigung hat doch DirectDraw auch. Wenn nicht, wär's ja genauso lahm wie GDI.

    Ja stimmt, das hatte ich anders in Erinnerung. Ist halt schon sooo lange her.

    Auf jeden Fall wünsche ich viel Erfolg! Wie weit bist du denn mit dem Spiel, und gibts das irgendwann mal zum Download?



  • Nukularfüsiker schrieb:

    Ich verstehe worauf du hinaus willst und es hat ja auch einen gewissen Reiz, wenn man sich auf ein Minimum beschränkt.

    Vor allem, da ich ja gar nicht mehr als dieses Minimum brauche. Also, es ist jetzt nicht so, daß ich irgendwas bei DirectDraw 2 vermissen würde, was ich unbedingt haben will. Es reicht eben, Bilder auf einen Back-Buffer zu kopieren und den dann auf dem Bildschirm auszugeben.

    Nukularfüsiker schrieb:

    Dann sollte es auch auf so einer Hardware laufen. Wenn schon old school, dann richtig. Dann weiß man es auch zu schätzen 🙂

    Naja, es soll ja kein authentisches NES-Spiel sein, sondern nur ungefähr auf diesem Level. Besser wäre wohl die Beschreibung als Arcadespiel aus den 80ern. Die Figuren haben zum Beispiel mehr als drei Farben pro Sprite. Ich hab mir mal die Programmierung auf dem NES angeguckt, aber das ist alles in Assembler, und das macht mir keinen Spaß.

    Nukularfüsiker schrieb:

    Wie weit bist du denn mit dem Spiel

    Naja, wie dieser Thread hier schon sagt: Im Moment bin ich so weit, daß im wesentlichen erstmal die Grafikausgabe funktioniert. Spielspezifisches gibt es noch nicht, erstmal muß ich ja DirectDraw komplett zum Laufen bringen, so wie es soll.

    Nukularfüsiker schrieb:

    und gibts das irgendwann mal zum Download?

    Wenn's jemals fertig werden sollte, dann ja. Das Problem ist, daß mir im Moment noch eine Idee fehlt. 😃 Das ganze soll eine Spieleumsetzung des Films "A Nightmare on Elm Street" sein. Und zwar soll das Spiel direkt auf dem ersten Teil basieren. Es gibt ja schon ein NES-Spiel mit einer eigenen Storyline und ein DOS- und C64-Spiel, das auf Teil 3 basiert. Und ich will nun eine Filmumsetzung direkt vom ersten Teil machen. Programmiertechnisch ist das'n Klacks. Ein bißchen durch DirectX durchwuseln und dann schön von dem Grafikframework gekapselt Spriteklassen und das ganze Zeug, so daß man ganz allgemein in der Lage ist, Männchen über den Bildschirm zu bewegen. Das Problem ist nur: Wie wandle ich die Handlung des Films in ein Spiel um? Hast Du da irgendwelche Ideen? Ach ja: Gespielt wird übrigens mit Nancy. Ich hasse diese Fanspiele, wo man Freddy ist und nichts weiter zu tun hat, als seine hilflosen Opfer zu töten, vor allem, weil das kein richtiges Spiel, sondern eine bessere Grafikdemo ist.


Anmelden zum Antworten