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

LGs0pHT

Frischling

  • »LGs0pHT« ist der Autor dieses Themas

Beiträge: 19

Wohnort: Hamburg, Germany

  • Private Nachricht senden

1

21.07.2004, 18:45

[DIRECTX] Direct3D und die States

Moin moin ihr, ich bin neu hier im Forum und hätte mal ne Frage:

Scherfgen hat ja in seiner TriBase Engine eine Klasse für Direct3D Management gemacht. Nun hat er sich auch der einzelnen States angenommen und das wohl haupstächlich aus dem Grund, dass verhindert werden soll, dass doppelte Aufrufe an die Grafikkarte gehen.
Dazu verwendet er eine interne Tabelle die praktische eine Liste aller States beinhaltet. Zu dieser Liste habe ich folgende Frage:

1. Laut der DirectX Dokumentation gibt es einige States nicht in dem enum Block.
2. Das State 0 existiert in keinem der drei Fälle

Ist es nicht als Speicherverwendung zu sehen wenn man trotzdem so ein großes Array aufmacht?

Mir ist konkret keine bessere Lösung eingefallen, weil ja schließlich ein kleineres Array mit einem Umrechnungscode verbunden wäre was ähnlichen Aufwand bedeutet.

Meine Vermutung ist jetzt allerdings, dass das Abfragen eines Arrays genau den gleichen Aufwand bedeuten würde wie wenn man das einzelne State direkt an DirectX abfragen würde, da ich mal unterstelle, dass DirectX sich sowieso eine Kopie aller States gezogen hat. Sonst würde der Weg natürlich an die Grafikkarte gehen, was ein bisschen länger dauern würde.

Habt ihr eine Idee, wie man das optimieren kann?

lg

EDIT: Hat zwar nichts konkret mit der Topic zu tun, ist aber keinen eigenen Thread wert. In der Klasse tbMatrix.h wird ab Zeile 121 für den Operator += jedes einzelne Element "ge+=t". Könnte man nicht einfach den weiter oben deklarierten Operator + verwenden?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

21.07.2004, 20:15

Zitat

Ist es nicht als Speicherverwendung zu sehen wenn man trotzdem so ein großes Array aufmacht?


Speicherverwendung isses schon ;D
ich rat jetzt mal du meintest speicherverschwendung...
das isses imho aber nicht, da du auf einem modernen rechner genug RAM zur verfügung hast und es evtl. ein wenig performance bringt.

Zitat

Mir ist konkret keine bessere Lösung eingefallen, weil ja schließlich ein kleineres Array mit einem Umrechnungscode verbunden wäre was ähnlichen Aufwand bedeutet.


wie meinen!?

Zitat

EDIT: Hat zwar nichts konkret mit der Topic zu tun, ist aber keinen eigenen Thread wert. In der Klasse tbMatrix.h wird ab Zeile 121 für den Operator += jedes einzelne Element "ge+=t". Könnte man nicht einfach den weiter oben deklarierten Operator + verwenden?


ich würd mal sagen, den + operator zu verwenden bedeutet ein wenig overhead den er hier vermeiden wollte.

LGs0pHT

Frischling

  • »LGs0pHT« ist der Autor dieses Themas

Beiträge: 19

Wohnort: Hamburg, Germany

  • Private Nachricht senden

3

21.07.2004, 20:42

Ja... Speicherverwendung wär ja schon verwerflich :D
Nein aber mal im Ernst: Ich hab immer gelernt dass man so wenig Speicher wie möglich in Anspruch nehmen sollte. Klar, hier ist es eine Kleinigkeit, dennoch könnte ich nicht ruhig schlafen, wenn ich wüsste, dass gut ein halbes Kilobyte da im Arbeitsspeicher ungenutzt rumhängt.

Was das andere betrifft: Ich würde es einfach als weniger Schreibarbeit verstehen, denn weil es eine inline Funktion ist, kommt es doch aufs gleiche raus (zumal es an anderen Stellen so gemacht wurde).

DrthM2001

Alter Hase

Beiträge: 721

Wohnort: Karlsruhe

  • Private Nachricht senden

4

21.07.2004, 21:24

Ich, also der durschnittsgamer von heute, habe *rechne* 2000000 halbe Kilobytes in meinem RAM. Da kommt es doch wohl auf ein einziges nicht an...

Till

Alter Hase

Beiträge: 378

Wohnort: Lincoln College, Oxford

Beruf: Student

  • Private Nachricht senden

5

21.07.2004, 21:54

Außerdem sollte man im Echtzeitspieleentwicklungsgebiet Performance immer der Speicherkomprimierung vorziehen. Ein (wenn überhaupt halbes) kilobyte Speicherverschwendung lohnt sich überhaupt nicht zu verhindern, wenn man dadurch auch nur ein paar CPU-cycles bezahlen muss...
Oder gibt's so auf die Schnelle 'ne Lösung mit GENAU der gleichen CPU-Schonung und 'nem kleineren Array?
DOMINVS ILLVMINATIO MEA
---
Es lebe unmanaged Code!
---
>> Meine Uni <<

LGs0pHT

Frischling

  • »LGs0pHT« ist der Autor dieses Themas

Beiträge: 19

Wohnort: Hamburg, Germany

  • Private Nachricht senden

6

21.07.2004, 21:58

Meine Idee war eben (s.o.) dass es keine interne Tabelle gibt:

Zitat

Meine Vermutung ist jetzt allerdings, dass das Abfragen eines Arrays genau den gleichen Aufwand bedeuten würde wie wenn man das einzelne State direkt an DirectX abfragen würde, da ich mal unterstelle, dass DirectX sich sowieso eine Kopie aller States gezogen hat. Sonst würde der Weg natürlich an die Grafikkarte gehen, was ein bisschen länger dauern würde.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

21.07.2004, 22:17

Microsoft wird schon einen Grund dafür haben, zu empfehlen, genau dies nicht zu tun.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

22.07.2004, 00:06

wenn directx diese interne tabelle nicht hat ( und das denk ich mir, schließlich gehen die davon aus, dass der coder weis was er tut... ), dann ist jedes abfragen und setzen von renderstates viel wert, denn ich schätze mal dazu muss directx den graka treiber konsultieren und je weniger oft das passiert, desto besser ( sagt z.b. nVidia recht oft in irgendwelchen papers )...

Werbeanzeige