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

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

1

19.01.2011, 18:01

Direct3D9: Multisampled RenderTargets

Hi,
ich will jetzt noch multisampled-rendertargets in meine Engine einbauen. Warum gibt es aber bei D3D9 die Funktion "IDirect3DDevice9::CreateRenderTarget",
wenn man doch schon bei "IDirect3DDevice9::CreateTexture" eine RenderTarget Texture erstellen kann?

Das mit dem Multisampled-Rendertarget geht wie's aussieht nur über die CreateRenderTarget funktion.
Muss man dann darauf verzichten, bei CreateTexture eine RenderTarget Texture zu erstellen, oder muss man beide Funktion nutzen??

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »LukasBanana« (19.01.2011, 18:47)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

19.01.2011, 18:04

In D3D9 ist es nicht möglich eine Textur als Multisampled Rendertarget zu verwenden. Du musst eine normale Surface als Rendertarget nehmen und dann per StretchRect() in deine Textur kopieren. Der einfache Grund: In D3D9 ist es nicht möglich das Multisampling im Shader zu resolven, das geht erst ab D3D10.

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

3

19.01.2011, 18:24

Und das ist ziehmlich langsam schätze ich mal. Das StretchRect? Also wird das bei D3D9 nativ nicht unterstützt

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

19.01.2011, 18:31

Wieso nicht nativ!? Eigentlich ist das das Standardvorgehen in D3D9, StretchRect() wird rein von der GPU in Hardware ausgeführt, natürlich ist es nicht ganz gratis (benötigt einen zusätzlichen Buffer und das kopieren) aber du hast ja wohl nicht erwartet dass Multisampling komplett ohne Konsequenzen für die Performance kommt!? ;)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (19.01.2011, 18:40)


LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

5

19.01.2011, 18:40

Ok, aber warum dann diese Zwei mechanismen: einmal mit CreateRenderTarget und einaml über CreateTexture? Bzw. warum ein RenderTarget erstellen und dann nochmal per CreateRenderTarget das ganze für ein spezielles Surface?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

19.01.2011, 18:47

Weil das eine (CreateRenderTarget) eine Surface und das andere (CreateTexture) eine Textur erstellt!?

EDIT: Oh, mir scheint du hast da ein Missverständnis was CreateRenderTarget macht. Du rufst CreateRenderTarget nicht für eine schon vorhandene Surface auf, CreateRenderTarget erzeugt eine Surface die du als entsprechendes Rendertarget benutzen kannst ^^

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (19.01.2011, 18:53)


LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

7

19.01.2011, 18:55

Nun gut, aber dises Surface wird genau so groß Dimensioniert wie die Texture - zumindest wenn's das Surface des 0ten MIP-map Levels ist. Oder muss das größer sein, wenn man's später noch strecken/stauchen muss?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

19.01.2011, 18:58

Naja, je nachdem was du anstellen willst, die Textur kann z.B. auch kleiner sein dann kannst du beim StretchRect() gleichzeitig schon auch noch downsamplen falls du das sowieso vorhaben solltest (für fullscreen Blur etc). Der Unterschied zur Textur ist eben dass deine RenderTarget Surface Multisampled sein kann was für Texturen aufgrund der schon genannten Einschränkungen unmöglich ist...

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

9

19.01.2011, 19:04

Okey danke schon mal für die bisherige Erläuterungen :)
Mal gucken wie ich das am besten anstelle ^^

Werbeanzeige