Seite 1 von 1

[DX9] UpdateTexture - Merkwürdiges Problem

Verfasst: 14.03.2011, 18:54
von DomiOh
Hallo Community,

ich habe ein merkwürdiges Problem. Wozu ich das ganze benötige, will ich jetzt hier nicht so ausschweifend erklären, denn es tut bei dem Problem ansich nichts zur Sache.

Ich bin auf ein merkwürdiges Problem mit der UpdateTexture Funktion des D3D9-Device gestoßen und zwar:
Ich versuche eine Texture von einer Source auf eine Destination-Textur zu kopieren (mit UpdateTexture), das klappt auch.
Versuche ich aber mit einem 2. UpdateTexture Aufruf die GLEICHE Source-Texture auf eine 2. Dest-Textur zu kopieren, wird nichts mehr kopiert. Und zwar von diese Source-Textur NIE mehr.

Um Fragen vorzubeugen: Alle Texturen haben das selbe Format, die Source liegt, wie es sein soll im System-Mem, die beiden Dest im Default-Mem.

Weiß das jemand was drüber?

Re: [DX9] UpdateTexture - Merkwürdiges Problem

Verfasst: 14.03.2011, 19:08
von Schrompf
Rückgabewerte? Fehlercodes? Steht was im DirectX-Debug-Log? Die sind normalerweise sehr geschwätzig, damit sollte sowas zu finden sein. Wird wirklich nichts kopiert? Oder siehst Du evtl. nur nichts davon, weil Du aus Versehen noch ein Lock drauf hast oder der Inhalt sich inzwischen geändert hat?

Re: [DX9] UpdateTexture - Merkwürdiges Problem

Verfasst: 14.03.2011, 19:10
von DomiOh
Keine Fehlermeldungen, keine Logs, keine Rückgabewerte. Nein es wird wirklich nichts kopiert. Das funktioniert danach mit einer anderen Textur als Source - aber wieder nur als kopie auf EINE der Dest-Texturen. Danach nicht mehr.
Kein Lock nichts. Ach und: Im PIX, der ja einen Ref-Renderer nimmt funzt das.
Nur nicht als HAL-Device.

Re: [DX9] UpdateTexture - Merkwürdiges Problem

Verfasst: 14.03.2011, 19:24
von Schrompf
Mein Beileid. Wenn ich gemein wär, würde ich jetzt sagen: kauf Dir ne NVidia-Grafikkarte, da passiert sowas nicht. Allerdings sähe das ganz schön blöd aus, wenn es schon ne NVidia ist :-) Lösungsideen habe ich keine mehr.

Re: [DX9] UpdateTexture - Merkwürdiges Problem

Verfasst: 14.03.2011, 19:29
von Krishty
DomiOh hat geschrieben:Ach und: Im PIX, der ja einen Ref-Renderer nimmt funzt das.
PIX nimmt Ref nur, wenn man es explizit einstellt. Alles andere läuft genau so über die GPU wie im Programm selber auch. (So ist das zumindest unter D3D >=10). Was jedoch bei mir in PIX ständig andere Ergebnisse produziert als in der Anwendung, ist Anti-Aliasing …

Gruß, Ky

Re: [DX9] UpdateTexture - Merkwürdiges Problem

Verfasst: 14.03.2011, 19:35
von DomiOh
Schrompf hat geschrieben:Mein Beileid. Wenn ich gemein wär, würde ich jetzt sagen: kauf Dir ne NVidia-Grafikkarte, da passiert sowas nicht. Allerdings sähe das ganz schön blöd aus, wenn es schon ne NVidia ist :-) Lösungsideen habe ich keine mehr.
Es passiert sowohl bei einer NVidia 8xxx als auch bei einer ATI 4850 und einer ATI 6850 und einer ATI 6950.

Re: [DX9] UpdateTexture - Merkwürdiges Problem

Verfasst: 14.03.2011, 21:20
von Dirk Schulz
Hi,
IDirect3DDevice9::UpdateTexture retrieves the dirty portions of the texture by calculating what has been accumulated since the last update operation.
Da du zweimal dieselbe Source-Textur nimmst, kann es sein, dass er damit Probleme hat bzw. keine Änderung zum letzten Update feststellt?! :?:

Wäre nen Versuch wert, einfach source-tex->UpdateDirtyRect(NULL); vor der zweiten UpdateTexture().

Dirk Schulz

Re: [DX9] UpdateTexture - Merkwürdiges Problem

Verfasst: 15.03.2011, 09:52
von dot
Das dürfte sogar ziemlich sicher das Problem sein dass du das vergessen hast. Die Funktion heißt AddDirtyRect(). Source->AddDirtyRect(0); sollte das Problem beheben...

Re: [DX9] UpdateTexture - Merkwürdiges Problem

Verfasst: 15.03.2011, 13:09
von DomiOh
Ja, das habe ich vergessen. Bin zwar inzwischen selbst drauf gekommen und wollte gerade GELÖST schreiben, aber dennoch danke.
In letzter Zeit arbeite ich mehr mit DX10. Da scheint es sowas wie ein DirtyRect ja nicht mehr zu geben ;)
Daher hatte ich das schlicht und einfach vergessen.