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

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

11

06.07.2003, 14:59

Ich sagte ja: kleine Ruckler. Natürlich muss immer gewartet werden. Aber diese Wartezeit schwankt. Z.B. bei 80 Hz. Minimale Wartezeit ist immer null - wenn er nämlich gerade mit Rendern fertig ist, wenn der V-Sync beginnt. Und die maximale Wartezeit wäre 1/80 Sekunde. Natürlich ist das so gut wie nichts, aber es ist immerhin ein bisschen was ;)
Die großen Ruckler kann das natürlich nicht erklären.

12

06.07.2003, 16:27

Hi,

deine kleinen Ruckler entstehen nur dann, wenn die Renderung nicht binnen eines einzigen Refreshzyklus erfolgen kann. Da dein rotierendes Dreieck aber mit > 1000 FPS gerendert wird, tritt dies niemals auf !

Frage: Treten diese grossen, absolut unakzeptablen Ruckler auch bei dir auf ?
(im Beispiel: "Environment mapping" deutlichst sichtbar !)

ciao,
TomCat :)

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

13

06.07.2003, 16:47

Ich meinte eigentlich auch nicht das Triangle-Programm sondern das Environment-Mapping-Programm bei voller Auflösung und 4x Multi-Sampling. Ist aber auch egal. Das ist jedenfalls nicht die Ursache.
Ja, das passierte bei mir auch, mit der alten Einstellung. Jetzt aber nicht mehr.

14

06.07.2003, 17:27

Hi,

mit der "neuen" Einstellung erkennt man aber eine minimale Verschiebung, da der VSync nicht berücksichtigt wird.

Der Fehler im Buch ist, dass
1. D3DPRESENT_INTERVAL_DEFAULT statt
D3DPRESENT_INTERVAL_ONE genommen wird. (im Gegensatz zu _IMMEDIATE ist hier der VSYNC eingeschaltet, und dann läuft alles astrein.

2. Sollte man das Backpufferformat dem Clientbereich des Fensters
anpassen, da sonst die GraKa bei jedem Flip oder Copy erst eine Grössenanpassung, und dann eine Farbtiefenanpassung vornehmen muss. Dies sollte auch bei OnPaint jedesmal neu berechnet werden, da sich zur Run-time der Clientbereich ändern kann. ;)

Das Ganze sollte man vielleicht in der 2. Buchauflage einbauen. ;)

Was hältst Du davon ?

ciao,
TomCat :)

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

15

06.07.2003, 17:41

Hallo,

also ich erkenne absolut keine "minimalen Verschiebungen". Die sollte es im Fenstermodus auch eigentlich garnicht geben, da Windows sich um all das Zeugs kümmern müsste, habe ich zumindest mal so gelesen.

Zu 1) Mit D3DPRESENT_INTERVAL_ONE kommt es bei mir im Fenstermodus ebenfalls zu Rucklern, also ist D3DPRESENT_INTERVAL_IMMEDIATE die einzige sinnvolle Möglichkeit. Im Vollbildmodus läuft D3DPRESENT_INTERVAL_ONE korrekt.

Zu 2) Ich passe das Back-Buffer-Format sowieso schon an die Desktop-Einstellungen an, da ist also nichts verkehrt. Den minimalen - wenn überhaupt vorhandenen - Zeitverlust beim Strecken oder Stauchen des Bildes kann man sicher ohne Bedenken in Kauf nehmen und kriegt dazu noch gleich eine kleine Filterung.
Vielleicht ändere ich es noch.

16

06.07.2003, 17:51

Hi,

den Clientbereich sollte man nicht ändern, da dieser ja vom User in seiner Grösse(wie das ganze Fenster selbst) veränderbar sein soll.
Wenn Du den gesamten Clientbereich(wie jetzt auch) nutzt, brauchst du die Backpuffergrösse ganz einfach nur an den Clientbereich (GetClientRect) anpassen. Fertig. Wichtig ist aber, dass Du dies
auch bei OnPaint machst, da das Fenster ja zur Run-Time dynamisch veränderbar ist.

Alles Roger ? :)

Übrigens ist bei mir tatsächlich so, dass "_ONE" ein optimales Ergebnis bringt. Allerdings passe ich den Backpuffer jeweils an.
Ich schau mir das nochmal an. ;)

ciao,
TomCat :)

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

17

06.07.2003, 17:56

Du hast mich wohl falsch verstanden.
Ich meinte: Wenn ich die Größe des Fensters in CreateWindow angebe, dann hat ja der Client-Bereich NICHT diese Größe, der ist ja etwas kleiner. Ich habe jetzt AdjustWindowRect benutzt, um die korrekte Fenstergröße einzustellen.
Ich lass den Rest erstmal so. Wenn ich das Device resette, müssen soweit ich weiß auch alle Texturen neu geladen werden.

18

06.07.2003, 18:07

Hi,

Moment mal, Du präsentierst ja nicht in die gesamte Fenstergrösse (Titelleiste etc.), sondern nur in Clientbereich. Mit dem Fensterhandle kannst du doch sehr simpel die Grösse des Clientbereichs, wie ich schon geschrieben habe, mit GetClientRect abfragen.

Soll ich den Code posten ? :)

ciao,
TomCat :)

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

19

06.07.2003, 18:09

ICH will das Fenster der Back-Buffer-Größe anpassen.
DU willst das Umgekehrte!
:)

20

06.07.2003, 18:18

Hi,

aber der User kann doch das Fenster, und damit auch den Clientbereich
grösser oder auch keiner "ziehen". Macht ja auch Sinn.

Da ist es doch wesentlich sinnvoller, den Backpuffer anzupassen.
Das SDK-Frame-Work, das sehr leicht zu verstehen ist, macht übrigens genau dies. ;)

ciao,
TomCat:)

Werbeanzeige