![]() |
Genesis problem
Hallo Leute,
ich habe ein großes Problem. Ich habe ein ![]() Aber wenn ich die Anwendung starte kommt immer der Fehler: Kein Grafiktreiber/modus ausgewählt. Quellencode:
Delphi-Quellcode:
Kann mir jemand bitte sagen, was ich falsch mache? :gruebel: unit G4DGame1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, // Genesis_for_Delphi-Units G4D_Genesis, G4D_BaseType, G4D_XForm3D, G4D_geTypes, G4D_Vfile, G4DDriver; type TForm1 = class(TForm) procedure FormCreate (Sender: TObject); procedure FormActivate (Sender: TObject); procedure FormDestroy (Sender: TObject); procedure FormClick (Sender: TObject); private { Private-Deklarationen } Engine : pgeEngine; // 3D-Engine World : pgeWorld; // World/Level Camera : pgeCamera; // Kamera/Betrachter Driver : pgeDriver; // Grafiktreiber DMode : pgeDriver_Mode; // Grafikmodus XForm : geXForm3D; // Matrix für Welt->Betrachter isRunning: Boolean; // Schalter für Spiel (ein/aus) CW8087 : DWord; // FPU-Kontrollwert procedure ExitError (Txt: String); procedure CreateGame; procedure RunGame; procedure FreeGame; public { Public-Deklarationen } end; const Pfad = '.\'; BSP_Datei = 'G4DWorld.bsp'; GVersion = 'G4DPlay1'; OK = GE_TRUE; // Kontrollwert für Engine-Methoden MaxWidth = 640; // Max. Screenbreite MaxHeight = 480; // Max. Screenhöhe MCW_EM = DWORD($133f); // für evtl. Division-durch-Null-Fehler var Form1 : TForm1; // Spiel-"Unterlage" GHandle : HWnd; // Handle des Formulars GInstance : LongInt; // Handle der Applikation implementation {$R *.DFM} procedure TForm1.ExitError (Txt: String); begin // Fehlermeldung anzeigen, Programm abbrechen ShowMessage (Txt); halt; end; procedure TForm1.CreateGame; var WorldScreen: geRect; // Anzeigefläche WorldName: String; // Name der BSP-Datei (Welt/Level) WorldFile: pgeVFile; // BSP-Datei (Welt/Level) begin // Anzeigefläche festlegen with WorldScreen do begin Left := 0; Right := MaxWidth - 1; Top := 0; Bottom := MaxHeight - 1; end; // Koordinaten-Matrix setzen geXForm3D_SetIdentity (@XForm); // Kamera initialisieren Camera:= geCamera_Create (2.0, @WorldScreen); if Camera = nil then ExitError('Kamera kann nicht installiert werden!'); // BSP-Datei laden WorldName := Pfad + BSP_Datei; WorldFile := geVFile_OpenNewSystem (nil, GE_VFILE_TYPE_DOS, PChar(WorldName), nil, GE_VFILE_OPEN_READONLY); // Wenn Datei ok, Welt/Level erzeugen if WorldFile <> nil then begin World := geWorld_Create(WorldFile); geVFile_Close(WorldFile); end; if World = nil then ExitError ('Welt/Level lässt sich nicht erzeugen!'); // Welt/Level mit 3D-Engine verknüpfen if geEngine_AddWorld(Engine, World) <> OK then ExitError ('Welt/Level lässt sich nicht einbinden!'); end; procedure TForm1.RunGame; begin // Spielmodus auf "Laufen" einstellen isRunning := true; // Solange Spiel "läuft" while isRunning do begin // ggf. auf Ereignisse reagieren (z.B. Tastatur/Maus) Application.ProcessMessages; // 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) <> OK then ExitError ('BeginFrame gescheitert!'); // Welt/Level rendern und darstellen if geEngine_RenderWorld (Engine, World, Camera, 0.0) <> OK then ExitError ('Rendering gescheitert!'); // Rendering beenden if geEngine_EndFrame(Engine) <> OK then ExitError ('EndFrame gescheitert!'); end; end; procedure TForm1.FreeGame; begin // Kamera, Welt und Engine freigeben if Camera <> nil then geCamera_Destroy (@Camera); if World <> nil then geWorld_Free (World); if Engine <> nil then geEngine_Free (Engine); // Zeiger "nullen" Camera := nil; World := nil; Engine := nil; end; procedure TForm1.FormCreate(Sender: TObject); var AppDir: String; begin // Wert von ControlWord speichern, Division durch Null "ausschalten" CW8087 := Default8087CW; Set8087CW(MCW_EM); // Handle/Instanz von Formular/Applikation für 3D-Engine festlegen GHandle := Self.Handle; GInstance := hInstance; // Pfad der Applikation ermitteln AppDir := ExtractFilePath (Application.Exename); // 3D-Engine initialisieren Engine := geEngine_CreateWithVersion (GHandle, GVersion, PChar(AppDir), GE_VERSION); if Engine = nil then ExitError ('3D-Engine kann nicht gestartet werden!'); // Treiber auswählen (Methode aus Unit G4DDriver) SetDriver (GInstance, GHandle, Engine, Driver, DMode); end; procedure TForm1.FormActivate(Sender: TObject); begin // Grafiktreiber/modus überprüfen if (Driver = nil) or (DMode = nil) then ExitError ('Kein Grafiktreiber/modus ausgewählt!'); // Grafiktreiber/modus initialisieren if geEngine_SetDriverAndMode(Engine, Driver, DMode) <> OK then ExitError ('Grafikinitialisierung fehlgeschlagen!'); // Anzeigedaten für Engine ausschalten geEngine_EnableFrameRateCounter(Engine, GE_FALSE); // Spiel initialisieren CreateGame; // Wiederholungs-Schleife für Spielverlauf RunGame; // Formular (bei Spielende) schließen Close; end; procedure TForm1.FormDestroy(Sender: TObject); begin // Spiel "freigeben" FreeGame; // Alten FPU-Kontrollwert wiederherstellen Set8087CW (CW8087); end; procedure TForm1.FormClick(Sender: TObject); begin isRunning := false; end; end. Ich benutze Delphi7 mit Windows XP. |
Re: Genesis problem
Hallo, ich hab zwar keine Ahnung von Genesis aber ich hab mal gegoogelt und folgendes gefunden
Code:
void TGame::SetDriver (void)
{ geDriver_System *DriverSystem; long Breite, Hoehe; DriverSystem = geEngine_GetDriverSystem (Engine); if (!DriverSystem) ExitError ("kein Treibersystem gefunden!"); Driver = geDriver_SystemGetNextDriver (DriverSystem, NULL); if (!Driver) ExitError ("Treiber nicht gefunden!"); DMode = geDriver_GetNextMode (Driver, NULL); while(true) { if (!DMode) ExitError ("Falscher Treibermodus!"); geDriver_ModeGetWidthHeight (DMode, &Breite, &Hoehe); if (Breite == MaxWidth && Hoehe == MaxHeight) break; DMode = geDriver_GetNextMode (Driver, DMode); } if ((!Driver) || (!DMode)) ExitError ("kein passender Grafiktreiber/modus!"); if (!geEngine_SetDriverAndMode (Engine, Driver, DMode)) ExitError ("Grafikinitialisierung fehlgeschlagen!"); } DMode ist denke ich ein Teil des Problems wenn Du Dir den Code aus dem Link anschaust siehst Du dass der Driver und der Mode in Abhängigkeit der Auflösung gesucht werden. Vielleicht klappt es wenn Du Dich an das Vorgehen in dem C Programm hältst. |
Re: Genesis problem
Wo soll ich das denn einsetzen (habe noch nicht viel mit Treiber gemacht)?
Bei Create? Und was soll ich wegstreichen? |
Re: Genesis problem
Aber vielen Dank schonmal dafür!!! :)
|
Re: Genesis problem
Hallo mb1996,
habe mir mal erlaubt deinem Link entsprechend die Dateien zu laden und ein Blick rüber 'geworfen'. Da ist doch eine Demo dabei und in der steht ganz genau, wie der User über in einem Dialog aufgefordert wird einen Treiber zu laden. Warum machst du es nicht so ähnlich? Mfg Alter Mann |
Re: Genesis problem
Wenn du G4DPlay1 meinst, dann weiß ich nicht was du meinst.
Denn da ist es das selbe Problem. Ausserdem erscheint kein Dialog, wo man den Grafikmodus, -treiber, -karte... auswählen kann. :gruebel: Wenn es eine andere Demo ist, dann wär es nett, wenn du sie als Anhang hinzufügst. |
Re: Genesis problem
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
ich habe mal die Demo anghängt. |
Re: Genesis problem
Nur mal so. Geht bei euch die Demo? Bei mir findet er nicht die Units.
|
Re: Genesis problem
Kann mir jemand helfen?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz