Wie viele von euch vielleicht wissen (egal,ob gewollt oder nicht ), bin ich gerade dabei ein Spiel in OpenGL zu schreiben. Selbiges hat (natürlich) auch die Möglichkeit alle Grafikmodi zu zeigen und das Spiel in einem der brauchbaran anzuzeigen. Unter Windows etwas ansich extrem simples, ist es unter SDL schier ein Ding der Unmöglichkeit.
Einige von euch, werden mir nun vielleicht einen wiki-Artikel aufschwatzen wollen, doch glaube ich, dass dieser nicht recht durchdacht war. Um es genauer zu sagen, scheint er 1:1 von der C-Vorlage übernommen zu sein und überhäuft mich deshalb mit Fehlermeldungen. Ich habe nun schon probiert mit Zeigern zu "jounglieren", zu allokieren und den Inhalt mal in einer Datei auszugeben. Doch alles führte zu einem Programmabsturz oder schwachsinnigen Resultaten (21723*2921 scheint mir eine SEHR komisches Auflösung).
Ansich vollkommen sinnlos, da auch dieses %d in der writeln-procedure (was wiederum für meine Theorie der billigen Kopie spricht).
SDL_ListModes mfg Cyberpuer
Registriert: Sa Jan 01, 2005 17:11 Beiträge: 2068
Programmiersprache: C++
Cyberpuer hat geschrieben:
Einige von euch, werden mir nun vielleicht einen wiki-Artikel aufschwatzen wollen, doch glaube ich, dass dieser nicht recht durchdacht war. Um es genauer zu sagen, scheint er 1:1 von der C-Vorlage übernommen zu sein
Fast richtig, da ich mit der Umstetzung der SDL-Konstrukte nach Pascal nicht sicher bin (wie könnte ich mir ein PPrect vorstellen?), habe ich einfach das Beispiel aus der Jedi-Hilfe-Datei übernommen.
Das mit dem Writeln stimmt aber schon, du bekommst die Ehre dies ändern zu dürfen.
Werde jetzt aber auch mal testen
Edit:
Habe ich schon erwähnt, dass ich Pointer hasse.
Besser gesagt nicht hasse, sondern mich nur nicht gut genug im Speicher bewegen können.
Getestet:
Anfangslösung:
Code:
var modes : PPSDL_Rect;
p :Pointer;
i :integer;
begin
// Bekomme mögliche Vollbild/Hardwaremodi
modes := SDL_ListModes(nil, SDL_FULLSCREEN or SDL_HWSURFACE );
// Überprüfung ob es mögliche Modi gibt
if(modes = PPSDL_Rect(0))then
begin
WriteLn('Kein Modus verfügbar!');
end;
// Überprüfung ob die Auflösung beschrenkt ist
if( modes = PPSDL_Rect(-1))then
begin
WriteLn('Alle Auflösungen möglich.');
end
else
begin
// Ausgabe der möglichen Modi
WriteLn('mögliche Modi');
i:=0;
//Funktioniert leider nicht so wie es hier steht, soll die Adresse von modes + i sein.
//daher das i-te Element im Array der PSDL_Rect.
p:=Pointer(PSDL_Rect(modes)+ PSDL_Rect(i));
repeat
//hier dann der Zugriff auf das Element. Könnte auch PSDL_Rect(p) sein
WriteLn('Auflösung: '+InttoStr((SDL_Rect(p^).w));
i:=i+1;
//Auslesen des nächsten Pointers. Das Element nach dem Array ist ein nil-Pointer
p:=Pointer(PSDL_Rect(modes)+ PSDL_Rect(i));
//Überprüfung auf den nil-Pointer
until p=nil;
end;
end;
Jedenfalls gibt das:
Code:
WriteLn('Auflösung: '+InttoStr((modes^).w));
bei mir die hochstmögliche Breite aus.
Also SDL funktioniert schonmal[/pascal]
Zuletzt geändert von i0n0s am So Okt 09, 2005 00:41, insgesamt 1-mal geändert.
@Flash: Hättich, wäre aber wahrscheinlich eh schwachsinnig gewesen
@i0n0s: Danke ich werde ihn mal testen!
@Flash: Ich kenn die aus C, aber in Delphi waren sie mir neu...
Das erstaunt mich gerade etwas.
Könnte es sein, dass 800*600 deine aktuelle Auflösung ist?
Weil ansich sollte 1024*786 der erste Wert sein.
Und diese 640*480 am Ende sind auch verwirrend.
Bei mir sind die Werte wie in der Doku steht der Grösse nach geordnet.
Edit: "Du kannst deinen neuen Betrag nicht so schnell nach dem anderen Absenden"
Ich will aber einen Fehler editieren
Ja, das mit Apptype Console ist mir geläufig, nur war ich mir unsicher, ob es mit SDL funktioniert!
Und in Log.txt ausschreiben is immer praktisch! ^^
Tja, vielleicht ist meine SDL.dll zu alt und die Idee mit dem sinnvollem Ordnen kam erst später?
(1.0 habich glaubich)
Im übrigem ist meine Auflösunge 1024*768, das Maximum meines LCD.
Registriert: Sa Mai 04, 2002 19:48 Beiträge: 3830 Wohnort: Tespe (nahe Hamburg)
Also ich würde die Konsolenausgabe der Textdatei fast immer vorziehen. Liegt vielleicht daran, dass ich in der Konsole entwickel. SDL 1.0 wäre in der Tat bereits ein wenig alt und sollte ggf. durch eine zeitgemäße Version ersetzt werden (dll im Verzeichnis der exe oder System32). Bitte nicht verwechseln mit den Headern der JEDIS, die aktuell bei 1.0 sind, jedoch durchaus neuere SDL-Versionen abdecken.
_________________ "Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."
Ich hoffe es doch mal!
Wäre ja ziemlich dumm, wenn ein Programm auf einmal nich mehr funzen würde, oder?
Achja, was dich wahrscheinlich sehr interessiert:
Habe mir jetzt Ubuntu bestellt und bin soweit (glaub ich) mittlerweile vollkommen WinAPI-frei geworden. Lässt sich nicht genau feststellen, da Delphi ja Fileaccess z.b. immernoch über winapi regelt! Aber ich komme dem Ziel näher mein Programm unter/für Linux compilieren zu können!
Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.