Genesis 3D Windows Vista:Rendering scheitert!



  • HI!
    ich hab mir das Buch"Spieleprogrammierung mit C++ und Genesis3d gekauft"
    beim compilen und linken alles wunderbar doch es kommt beim spielstart immer die messagebox :
    rendering gescheitert

    da ich es so programmiert hab, dass wenn beim rendern irgendwas schief geht also

    if (!geEngine_RenderWorld
        (Engine, World, Camera, 0.0)) ExitError
          ("Rendering gescheitert!");
    

    kommt diese messagebox!hab jetzt keine anhnung an was das liegt!vllt. ist der DIRECTX treiber oder sogar die Engine einfach nur zu alt für Vista!

    ich poste jetzt mal den ganzen Quelltext(bis auf die Header Datei GAME1.h)
    und hoff, dass ihr mir helfen könnt weil schließlich soll das spiel ja auch gehn! 🙂 🙂 🙂

    //---------------------------------------------------
    // Game1.cpp :
    // Nur Anzeige von BSP-Welt (ohne Bewegungen)
    //---------------------------------------------------
    
    #include "Game1.h"
    
    // Spielobjekt
    TGame Game;
    
    // Vorwärtsdeklaration (für Fensterereignisse)
    LRESULT CALLBACK WndProc (HWND hWnd,
      UINT iMessage, WPARAM wParam, LPARAM lParam);
    
    // Windows-Hauptfunktion mit Game-Schleife
    int WINAPI WinMain
      (HINSTANCE hInstance, HINSTANCE hPrevInstance,
       LPSTR lpCmdLine, int nCmdShow)
    {
      // Fensterklasse initialisieren
      WNDCLASS Win;     // Objekt der Fensterklasse
      MSG      msg;     // Aktuelle Meldung
      // Extrabytes für Klassen/Fensterinstanz
      Win.cbClsExtra = 0;
      Win.cbWndExtra = 0;
      // Instanz der Fensterklasse
      Win.hInstance  = hInstance;    
      // Symbol und Cursor der Fensterklasse
      Win.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
      Win.hCursor = LoadCursor(NULL, IDC_ARROW);
      // Hintergrundfarbe (schwarz) und Fensterstil
      Win.hbrBackground =
        (HBRUSH)GetStockObject(BLACK_BRUSH);
      Win.style = CS_HREDRAW | CS_VREDRAW;
      // Verknüpfung mit Ereignis-Routine
      Win.lpfnWndProc = WndProc;
      // Name der Fensterklasse
      Win.lpszClassName = GVersion;
      Win.lpszMenuName = NULL;    // kein Menü
      // Registrierung der Fensterklasse
      RegisterClass (&Win);
      // Fenster erzeugen
      GHandle = CreateWindow (Win.lpszClassName,
        "Genesis3D - [Esc]=Ende", WS_TILED,
        CW_USEDEFAULT, CW_USEDEFAULT, MaxWidth,
        MaxHeight, NULL, NULL, hInstance, NULL);
      if (!GHandle)
      {
        return 0;  // nicht ok
      }
      // Mauszeiger verbergen
      ShowCursor (false);
      // Fenster zeigen und "auffrischen"
      ShowWindow   (GHandle, nCmdShow);
      UpdateWindow (GHandle);
      // Spielinitialisierung
      Game.CreateGame ();
      // Spielmodus auf "Laufen" einstellen
      Game.isRunning = true;
      // Solange Spiel "läuft"
      while (Game.isRunning)
      {
        // evtl. Fenstereignisse abfragen
        while (PeekMessage
          (&msg, NULL, 0, 0, PM_NOREMOVE))
        {
          // Spielverlauf 
          Game.RunGame ();
          if (!GetMessage(&msg, NULL, 0, 0))
          {
            Game.isRunning = false;
            break;
          }
          // Ereignisdaten auswerten (lassen)
          TranslateMessage (&msg);
          DispatchMessage  (&msg);
        }
      }
      // Programm-/Spielende
      Game.FreeGame ();
      return 1;  // ok
    }
    
    // Verarbeitung der Fensterereignisse
    LRESULT CALLBACK WndProc (HWND hWnd,
      UINT iMessage, WPARAM wParam, LPARAM lParam)
    {
      // Ereignis auswerten
      switch (iMessage)
      {
        case WM_KEYDOWN:
        {
          switch (wParam)
          {
            case VK_ESCAPE:  // Spielende mit [Esc]-Taste
            {
              PostMessage(hWnd, WM_QUIT, 0, 0);
            }
          }
        }
        // ansonsten Ereignis an "Default-Handler"
        default:
          return DefWindowProc 
            (hWnd, iMessage, wParam, lParam);
      }
      return 0;
    }
    
    //---------------------------------------------------
    
    // Spiel initialisieren/"aufbauen"
    void TGame::CreateGame (void)
    {
      geRect   WorldScreen;    // Anzeigefläche
      char     WorldName[64];  // Name der Welt/Level
      geVFile *WorldFile;      // BSP-Datei (Welt/Level)
    
      // 3D-Engine initialisieren
      Engine = geEngine_Create (GHandle, GVersion, ".");
      if (!Engine) ExitError
        ("3D-Engine kann nicht gestartet werden!");
      // Anzeigedaten für Engine ausschalten
      geEngine_EnableFrameRateCounter(Engine, GE_FALSE);
      // Treiber auswählen
      SetDriver ();
      // Anzeigefläche festlegen
      WorldScreen.Left   = 0;
      WorldScreen.Right  = MaxWidth  - 1;
      WorldScreen.Top    = 0;
      WorldScreen.Bottom = MaxHeight - 1;
      // Koordinaten-Matrix setzen
      geXForm3d_SetIdentity (&XForm);
      // Kamera initialisieren
      Camera = geCamera_Create (2.0, &WorldScreen);
      if (!Camera) ExitError
        ("Kamera kann nicht installiert werden!");
      // BSP-Datei laden
      strcpy (WorldName, Pfad); 
      strcat (WorldName, BSP_Datei);
      WorldFile = geVFile_OpenNewSystem (NULL,
        GE_VFILE_TYPE_DOS, WorldName, NULL,
        GE_VFILE_OPEN_READONLY);
      // Wenn Datei ok, Welt/Level erzeugen
      if (WorldFile)
      {
        World = geWorld_Create(WorldFile);
        geVFile_Close(WorldFile);
      };
      if (!World) ExitError
        ("Welt/Level lässt sich nicht erzeugen!");
      // Welt/Level mit 3D-Engine verknüpfen
      if (!geEngine_AddWorld(Engine, World)) ExitError
        ("Welt/Level lässt sich nicht einbinden!");
    }
    
    //---------------------------------------------------
    
    // Spiel "in Szene setzen"
    void TGame::RunGame (void)
    {
      // Koordinaten und Winkel ausrichten
      geXForm3d_SetIdentity (&XForm);
      geXForm3d_RotateX (&XForm, 0.0);
      geXForm3d_RotateY (&XForm, 0.0);
      geXForm3d_RotateZ (&XForm, 0.0);
      geXForm3d_Translate (&XForm, 0.0, 0.0, 0.0);
      geCamera_SetWorldSpaceXForm (Camera, &XForm);
      // Rendering starten
      if (!geEngine_BeginFrame(Engine, Camera, GE_TRUE))
        ExitError ("BeginFrame gescheitert!");
      // Welt/Level rendern und darstellen
    
      // Rendering beenden
      if (!geEngine_EndFrame(Engine)) ExitError
        ("EndFrame gescheitert!");
    }
    
    //---------------------------------------------------
    
    // Spiel "abbauen"
    void TGame::FreeGame (void)
    {
      // Kamera, Welt und Engine freigeben
      if (Camera) geCamera_Destroy (&Camera);
      if (World) geWorld_Free (World);
      if (Engine) 
      {
         geEngine_ShutdownDriver(Engine);
         geEngine_Free (Engine);
      }
      // Zeiger "nullen"
      Camera = NULL; World = NULL; Engine = NULL;
    }
    
    //--------------------------------------------------
    
    // Grafiktreiber/modus wählen/setzen
    void TGame::SetDriver (void)
    {
      geDriver_System *DriverSystem; long Breite, Hoehe;
      // Treibersystem "einbetten"
      DriverSystem = geEngine_GetDriverSystem (Engine);
      if (!DriverSystem)
        ExitError ("Kein Treibersystem gefunden!");
      // DirectX-Grafiktreiber aufnehmen
      Driver = geDriver_SystemGetNextDriver
        (DriverSystem, NULL);
      if (!Driver) ExitError ("Treiber nicht gefunden!");
      // Suchschleife für Grafikmodus
      DMode = geDriver_GetNextMode (Driver, NULL);
      // Liste nach passendem Modus durchsuchen
      while(true)
      {
        if (!DMode) ExitError ("Falscher Treibermodus!");
        // Auflösungswerte ermitteln
        geDriver_ModeGetWidthHeight
          (DMode, &Breite, &Hoehe);
        // Wenn Maße passen, Schleife verlassen
        if (Breite == MaxWidth && Hoehe == MaxHeight) break;
        // Ansonsten weitersuchen
        DMode = geDriver_GetNextMode (Driver, DMode);
      }
      // Grafiktreiber/modus überprüfen
      if ((!Driver) || (!DMode)) ExitError
        ("Kein passender Grafiktreiber/modus!");
      // Grafiktreiber/modus initialisieren
      if (!geEngine_SetDriverAndMode
        (Engine, Driver, DMode)) ExitError
          ("Grafikinitialisierung fehlgeschlagen!");
    }
    
    //--------------------------------------------------
    
    // Spielabbruch bei Fehler
    void TGame::ExitError (char *Txt)
    {
      // Fehlermeldung anzeigen, Programm abbrechen
      MessageBox (NULL, Txt, "Fehler", 48);
      FreeGame();
      _exit (EXIT_FAILURE);
    }
    


  • Sorry!
    Hat sich erledigt!hab die GAME1.cpp und die GAME1.h dateien von der mitgelieferten CD genommen und dann hat alles geklappt(nach dem linken!)


Anmelden zum Antworten