Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

06.09.2004, 21:19

Enumeration & Caps kapseln?

Hi!
Hat jemand von euch schon mal in seine/ihre Engine Enumeration eingebaut? Ich habe da noch ein paar Designprobleme :( Und wie kapselt man die Caps am besten? Ist es überhaupt sinnvoll, eine Engine zu programmieren, die alle API-Abhängigkeiten komplett vor dem User versteckt?
THX im Voraus!

2

07.09.2004, 02:09

Ja baue grundsätzlich die Enumeration in allen Projekten ein. Das hat auch seinen guten Grund.
1) Man kann eine schöne Liste mit möglichen Einstellungen ausgeben, die von der Hardware auch unterstützt werden (GUI).
2) Man ist sicher das man keine Einstellung vornimmt, die von der Hardware nicht Unterstützt wird.

Die Enumeration ist das was ich auch immer am meisten hasse. Sie ist umständlich und langwierig. Aber muss halt sein :) Ich hab die Enumeration in eine Klasse gesteckt. Die beim erzeugen die Enumeration startet. Danach brauch ich dann nur noch alles abfragen. Es werden dann noch Aktivierungs-Methoden bereit gestellt, über die man dann eine Einstellung z.B. die Auflösung oder eine Farbtiefe aktiveren kann. Diese kann dann direkt abgefragt werden.

Also die Caps hab ich gar nicht gekapselt. Ich hab es nur hinter einer etwas allgemeineren Methode versteckt :) Schließlich macht man ja keine D3D Enumeration wenn man mit OGL Arbeitet.

Zitat

Ist es überhaupt sinnvoll, eine Engine zu programmieren, die alle API-Abhängigkeiten komplett vor dem User versteckt?

Also wenn die Engine API Unabhängig sein soll, wird dir nichts anderes übrig bleiben ;) Ansonsten ist es nicht sooo wichtig. Hier reicht es wenn man die Dinge nur Automatisiert.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

3

07.09.2004, 09:34

Also eigentlich habe ich nur DX vorgesehen, aber ich werd' die Engine ja auch mal auf DirectX 10 usw portieren, und Abwärtskompatibilität bereitstellen. Dass ich Enumeration einbauen sollte, weiss ich auch, aber das Problem ist, WIE am besten?

4

07.09.2004, 12:23

Das ist eine gute Frage ;)


Da sich die Enumerationsmethoden gegenüber von DX9 sich nicht in DX10 verändern werden, könnte man es so machen.

Anhand von D3D9:
Die Enumeration erfolgt in mehereren Stufen. Die jeweils von einer eigenen Klasse Repräsentiert werden. Die Oberste Identifiziert die Grafikkarte, holt sich die Caps und prüft welche Farbtiefen möglich sind (Für den Videomodus).
Die nächste Ebene prüft dann, ausgehend von der Farbtiefe, welche Auflösungen möglich sind, usw....

Dieses verfahren hat den Vorteil das der Code übersichtlich bleibt und das man relativ schnell noch etwas dazwischen schieben kann. Der Nachteil dabei ist, das eine Klasse nicht alle Informationen hält sondern immer nur einen Teil. Wenn man also was haben will muss man die Anfrage immer an die unteren Klassen weitereichen.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

5

07.09.2004, 12:28

Ich hab mir das so ausgedacht:
- Die GraphDevice-Klasse enthält:
-- Display-Modes-Objekt
-- Caps-Objekt
-- Info-Objekt
Das Info-Objekt ist der Name der Grafikkarte und so.
Das Caps-Objekt enthält unterstützte Formate und die ganzen D3D-Caps *schauder*
Ist das sinnvoll?

6

07.09.2004, 12:58

So kann man es auch machen :)

Solange du die Methoden recht Allgemein hälst, ist das Modell auf jeden fall auch gut Anwendbar. Nur das Display-Modes Objekt sollte noch ein wenig Unterteilt werden. Je nachdem was da alles Enumeriert werden soll.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

07.09.2004, 14:11

Zitat von »"@uzingLG"«

Also eigentlich habe ich nur DX vorgesehen, aber ich werd' die Engine ja auch mal auf DirectX 10 usw portieren, und Abwärtskompatibilität bereitstellen. Dass ich Enumeration einbauen sollte, weiss ich auch, aber das Problem ist, WIE am besten?


afaik wirds kein DirectX 10 mehr geben...

directx 9 unterstützt laut ATI und nVidia alles was in den nächsten jahren kommen wird.

unter longhorn is z.b. D3D im system eingebaut und nennt sich WGF ( Windows Graphics Foundation )

8

07.09.2004, 14:40

Na solange da nicht so was wie die MFC bei raus kommt, ist es in Ordnung ;D
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

9

07.09.2004, 15:03

Ja ich hab gedacht D3D ist dann halt nicht mehr dabei und heisst WGF. Hm, Shader für den Sound wären noch nett, aber das wär dann alles auf meiner "Wunschliste". Und man sollte die Grafikpipeline vllt. mal KOMPLETT umprogrammieren können...

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

07.09.2004, 15:25

afaik werden mit WGF shader 4.0 und sog. geometry shader oder so eingeführt, die auch geometrie erzeugen können...

sexy oder ;)

Werbeanzeige