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

Schwarzefee

Treue Seele

  • »Schwarzefee« ist der Autor dieses Themas

Beiträge: 155

Wohnort: Ost-Sachsen

Beruf: Programmierer

  • Private Nachricht senden

1

01.12.2013, 20:54

DX11 - in mehrere Fenster rendern

Hi,

ich habe mir dieses DX11-Tutorial angesehn, und versuche es besser zu verstehn.

Meine Frage: Was muss ich ändern, um in mehrere Fenster gleichzeitig zu rendern. Ich nehme an, ich muss für jedes Fenster eine SwapChain mit einem RenderTargetView erstellen.
Was ich noch nicht verstehe, was muss ich noch beachten, wenn ich später mit swapchain->Present(0, 0); etwas rendere? Was bedeuten die Funktionen

C-/C++-Quelltext

1
deviceContext->OMSetRenderTargets(1, &backbuffer, NULL);
und

C-/C++-Quelltext

1
deviceContext->RSSetViewports(1, &viewport); 

Muss ich vor jedem Present() diese beiden Funktionen aufrufen? Oder habe ich für jedes Fenster einen eigenen DeviceContext?


Gruß

FSA

Community-Fossil

  • Private Nachricht senden

2

01.12.2013, 21:00

Dein DeviceContext bleibt der selbe. OMSetRenderTargets bedeutet, dass du jetzt in eine andere Textur renderst, anstatt in den BackBuffer (bzw. eine Kopie davon).
Nein du musst die beiden Befehle nicht vor jedem Present aufrufen. Du musst sie dann aufrufen, wenn du in ein anderes Ziel rendern willst und RSSetViewports, wenn das Ziel andere Dimensionen hat.
Du musst nur noch beachten, dass du auch den von dir erstellten SwapChain benutzt, um Present aufzurufen.

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Schwarzefee

Treue Seele

  • »Schwarzefee« ist der Autor dieses Themas

Beiträge: 155

Wohnort: Ost-Sachsen

Beruf: Programmierer

  • Private Nachricht senden

3

02.12.2013, 10:07

Hi,

danke für die Antwort.

So richtig verstanden hab ich das noch nicht ... :huh:

Wenn ich das Present() einer Swapchain aufrufe, und vorher das Present() einer anderen Swapchain aufgerufen habe, ändert sich doch eigentlich das RenderTarget, oder nicht?



Gruß

Fireball

Alter Hase

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

4

02.12.2013, 12:20

Hallo,

ich habe mir das Tutorial gerade mal angesehen.

C-/C++-Quelltext

1
D3DRenderView


Ich finde den Ansatz, dass jedes Objekt von der oben genannten Klasse erben soll nicht (mehr) gut. Ich habe glaube ich eine ganze Woche gebraucht, dass wieder aus meinem Code zu entfernen. Ich nutze lieber ein normales Objekt.

Auch den Shader mit dem Objekt zu verwursten finde ich auch nicht (mehr) gut. Denn so muss man immer wieder den Shader neu programmieren, anstatt ihn für ein anderes Objekt einfach erneut zu benutzen.

Also so etwas hier:

C-/C++-Quelltext

1
2
3
4
5
wuerfel->render();
farbverlaufShader->render();

dreieck->render();
farbverlaufShader->render();


Da spart man sich auch etwas Arbeit. :-)

Schöne Grüße

Fb

Schwarzefee

Treue Seele

  • »Schwarzefee« ist der Autor dieses Themas

Beiträge: 155

Wohnort: Ost-Sachsen

Beruf: Programmierer

  • Private Nachricht senden

5

04.12.2013, 20:52

Hi,

ich bin mitlerweile beim letzten Teil des Tutorials angekommen.

Mein Problem liegt im Moment bei

C-/C++-Quelltext

1
D3DX11CompileFromFile(L"shaders.hlsl", 0, 0, "VShader", "vs_4_0", 0, 0, 0, &VS, &l_pBlob_Errors, 0);


Das liefert bei mir immer den Fehler 0x887c0002, was soviel bedeutet wie D3D11_ERROR_FILE_NOT_FOUND.
In welches Verzeichnis muss ich die shaders.hlsl packen? Hab schon alles versucht, wo kann man das Working-Dir einstellen?


Gruß

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

04.12.2013, 21:12

https://www.spieleprogrammierer.de/index…51a13c745ea9b71
Bitte aber den korrekten Wert dort eintragen, rechts im Feld ist zum Suchen sogar ein "..."-Button.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Schwarzefee

Treue Seele

  • »Schwarzefee« ist der Autor dieses Themas

Beiträge: 155

Wohnort: Ost-Sachsen

Beruf: Programmierer

  • Private Nachricht senden

7

07.12.2013, 11:54

Hi,

ich bins nochmal.

Ich hab nochmal eine Frage zum Rendern in mehreren Fenstern.
Es geht immernoch um diese Tutorial.

Ich habe mein Programm jetzt so aufgeteilt, dass man für jedes Fenster verschiedene Pixel-/Vertex-Shader angeben kann. Ich weis leider nicht, welche Funktionen ich am Ende vor dem eigentlichen swapchain->Present() aufrufen muss, damit sich die verschiedenen Swapchains nicht "behindern".
Welche Funktionen muss ich in der RenderFrame() Methode aufrufen? Muss ich für jeden VertexBuffer vor jeder Frame ein InputLayout erstellen? Oder reicht es wenn ich es einmal beim Erstellen des Buffers erstelle?


Gruß

Werbeanzeige