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

28.10.2011, 14:09

DirectX Initialisierung

Paar Fragen zum Thema DirectX Initialisierung

1. Ist es eigentlich notwendig, abzufragen ob der Benutzer den Referenzrasterizer verwenden möchte?
Weil in der Endbenutzerform von DirectX ist er ja garnicht enthalten.

2.Wenn ich den Benutzer für das Bildbufferformat abfrage, wäre es doch von Vorteil, ihm nur die Auswahl zwischen 16-,24- und 32-Bit zu lassen, alles andere verwirrt ihn ja nur :D .

3.Beim Z-Stencil-Buffer, soll ich hier überhaupt nachfragen, weil wer, der kein (DirectX-)Programmierer ist, kann sich hierunter was vorstellen :lol:
Soll ich hier einfach gucken, was ich brauche? Was, wenn meine benötigte Technik nicht unterstützt wird? (Gleiches beim Bildpufferformat, vorallem im Beuzg auf den Alphawert)

4.Muss ich, wenn ich mit der Methode GetAdapterModeCount bereits alle Videomodi mit den Bildpufferformaten ausgesiebt habe, wirklich nochmal mit CheckDeviceFormat und CheckDeviceType prüfen?

5.Seh ich das richtig, dass ich in der D3DPRESENT_PARAMERTERS Struktur das Flag D3DPRESTENTFLAG_LOCKABLE_BACKBUFFER angeben muss, wenn ich Multi-Sampling verwenden möchte?

Hm, das wars erstmal, obwohl ich glaube, irgendwas vergessen zu haben :lol:

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

28.10.2011, 14:22

1. Ist es eigentlich notwendig, abzufragen ob der Benutzer den Referenzrasterizer verwenden möchte?
Weil in der Endbenutzerform von DirectX ist er ja garnicht enthalten.

Der Reference-Rasterizer dient eigentlich eher zu Debugzwecken, um z.B. überprüfen, ob bestimmte Artefakte am momentan aktiven Grafiktreiber liegen, oder ob man wirklich selber schuld ist. Für den Endbenutzer ist der völlig uninteressant (schon allein wegen der grottigen Performance).

2.Wenn ich den Benutzer für das Bildbufferformat abfrage, wäre es doch von Vorteil, ihm nur die Auswahl zwischen 16-,24- und 32-Bit zu lassen, alles andere verwirrt ihn ja nur .

Von der Farbtiefe her würd ich mal sagen, dass man heute wirklich einfach 32bit nehmen kann und fertig. Ich persönlich würd eigentlich überhaupt einfach nur den momentan eingestellten Display-Mode verwenden und gut ist. Von dem weiß man, dass er funktioniert. Und wer stellt schon wirklich jemals was andres ein als er am normalen Desktop hat?
Statt komplizierter Auswahlmöglichkeiten für Auflösung und Farbtiefe, würd ich es sehr viel wichtiger empfinden, ein Häkchen zu haben, dass es mir erlaubt das Programm im Fenstermodus zu betreiben. Das geht mir bei vielen Spielen wirklich ab.


3.Beim Z-Stencil-Buffer, soll ich hier überhaupt nachfragen, weil wer, der kein (DirectX-)Programmierer ist, kann sich hierunter was vorstellen
Soll ich hier einfach gucken, was ich brauche? Was, wenn meine benötigte Technik nicht unterstützt wird? (Gleiches beim Bildpufferformat, vorallem im Beuzg auf den Alphawert)

Ich würd sagen: Einfach D24S8 und fertig. Außer du brauchst aus irgendeinem Grund wirklich was andes.

4.Muss ich, wenn ich mit der Methode GetAdapterModeCount bereits alle Videomodi mit den Bildpufferformaten ausgesiebt habe, wirklich nochmal mit CheckDeviceFormat und CheckDeviceType prüfen?

Was genau willst du denn damit prüfen?

5.Seh ich das richtig, dass ich in der D3DPRESENT_PARAMERTERS Struktur das Flag D3DPRESTENTFLAG_LOCKABLE_BACKBUFFER angeben muss, wenn ich Multi-Sampling verwenden möchte?

Nope, das hat nichts miteinander zu tun.

3

28.10.2011, 15:13

Hm, wenn man es sich so einfach machen kann :D

Zitat

Was genau willst du denn damit prüfen?

Ob ein Bildpufferformat verfügbar ist, was ja eigentlich schon mit der ersten Methode geprüft haben müsste, oder?
Wäre aber unwichtig, wenn man eh den aktuellen Modus nimmt :P

Fenstermodus ist natürlich obligatorisch ;)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

28.10.2011, 17:29

Naja, mit CheckDeviceType() überprüfst du ja, ob für den jeweiligen DisplayMode ein entsprechendes Device mit dem angegebenen BackBuffer Format möglich ist. Also z.B. ob du für einen DisplayMode mit D3DFMT_X8R8G8B8 einen BackBuffer mit D3DFMT_A8R8G8B8 erzeugen kannst.
Mit CheckDeviceFormat() dagegen überprüfst du, ob im jeweiligen DisplayMode ein bestimmtes Format für eine bestimmte Art von Ressource unterstützt wird. Also z.B. ob für einen DisplayMode mit D3DFMT_X8R8G8B8 ein D3DUSAGE_RENDERTARGET mit dem Format D3DFMT_A8R8G8B8 unterstützt wird. Oder ein DepthBuffer mit D3DFMT_D24S8 etc.
Mit GetAdapterModeCount() holst du dir ja nur die verfügbaren Display-Modes. Aber das macht noch keine Aussage darüber, was z.B. für BackBuffer oder DepthBuffer Formate zum jeweiligen Display-Mode passen...

5

29.10.2011, 23:24

Hm, mal ne andere Frage.

Was sollte ich den Benutzer überhaupt abfragen?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

30.10.2011, 01:32

Was sollte ich den Benutzer überhaupt abfragen?

Gute Frage ;)

7

30.10.2011, 01:59

Gibts auch ne gute Antwort ? :lol:

Aufgrund des Smileys geh ich mal davon aus, dass man am besten garnichts abfragt, äh richtig?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

30.10.2011, 02:11

Naja, das hängt eben davon ab. Ein einfaches Spiel, wo es jetzt nicht unbedingt irgendwelche größeren Performance-Tweaks gäbe, braucht imo garnichts abzufragen. Wenn ich mit Alt + Enter zwischen Vollbild und Fenstermodus wechseln kann, das Spiel sich meine letzte Einstellung diesbezüglich merkt und im Vollbild einfach der momentane Display-Mode des Desktop verwendet wird, dann ist das imo völlig ausreichend. Gerade ein einfaches Spiel will ich als Benutzer einfach staren und spielen, ohne mich groß mit irgendwelchen Settings rumzuschlagen. Und für weniger erfahrene Computerbenutzer, gibts automatisch weniger, was man falsch machen könnte ;)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (30.10.2011, 02:19)


9

30.10.2011, 13:28

Ok, dann noch ein paar andere Fragen:

1.) Eigentlich ist es doch technisch gesehen egal ob ich D3DFMT_A8R8G8B8 oder D3DFMT_X8R8G8B8 verwende?
Wenn nicht, was mache ich, wenn ich den Alphawert trotzdem benötige?

2.) Muss ich bei den BehaviorFLags noch irgendwas prüfen?
Oder kann ich hier einfach D3DCREATE_HARDWARE_VERTEXPROCESSING wählen?
Werden hier trotzdem noch fehlende Fähigkeiten emuliert, wenn ich D3DCREATE_PUREDEVICE nicht angebe?

Achja, Danke für die Hilfe :thumbup:

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

30.10.2011, 13:36

Das ist halt meine Meinung, wär natürlich interessant, wie andere darüber denken.

1.) Eigentlich ist es doch technisch gesehen egal ob ich D3DFMT_A8R8G8B8 oder D3DFMT_X8R8G8B8 verwende?

Nein. Als DisplayMode geht sowieso nur X8R8G8B8 und als BackBuffer-Format unterstützen nicht unbedingt alle Karten A8R8G8B8. Ich würde also A8R8G8B8 nicht benutzen, wenn ich es nicht brauche. Und ich persönlich habs noch nie gebraucht.

Wenn nicht, was mache ich, wenn ich den Alphawert trotzdem benötige?

Wofür würdest du den denn benötigen?

2.) Muss ich bei den BehaviorFLags noch irgendwas prüfen?
Oder kann ich hier einfach D3DCREATE_HARDWARE_VERTEXPROCESSING wählen?

Da solltest du aufpassen. Viele Intel-GPUs, die in Laptops allgegenwärtig sind, unterstützen kein HARDWARE_VERTEXPROCESSING. Ich würde einfach versuchen, ein HARDWARE_VERTEXPROCESSING Device zu erzeugen und wenn das fehlschlägt, versuch ich ein SOFTWARE_VERTEXPROCESSING Device zu erzeugen.

Werden hier trotzdem noch fehlende Fähigkeiten emuliert, wenn ich D3DCREATE_PUREDEVICE nicht angebe?

Ich denke PUREDEVICE kann man heutzutage vergessen. Hab noch nie gehört, dass das tatsächlich jemals was gebracht hätte.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (30.10.2011, 13:41)


Werbeanzeige