Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 01.06.2004, 16:21 Titel: Splitscreen |
|
|
Kann ich in DX9 ein Rechteck am Bildschirm festlegen, in das gerendert werden soll? Zum Beispiel um einen Splitscreenmodus, oder einen Rückspielge zu machen. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 01.06.2004, 16:31 Titel: |
|
|
SetViewport() - wenn es mehr als ein Rechteck sein soll, dann Stencil Buffer
Zuletzt bearbeitet von Christian Rousselle am 01.06.2004, 16:34, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 01.06.2004, 16:32 Titel: |
|
|
Müsste entweder durch Locken des betroffenen Bereiches gehen (weiss jezz nicht genau wie das heisst) oder du renderst in eine Textur. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 02.06.2004, 14:09 Titel: |
|
|
Danke, das mit dem Viewport ist genau das, was ich suchte! _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Otscho Super JLI'ler
Alter: 36 Anmeldedatum: 31.08.2006 Beiträge: 338 Wohnort: Gummibären-Gasse Medaillen: Keine
|
Verfasst am: 24.08.2007, 17:32 Titel: |
|
|
Mal ne Zusatzfrage :
Führt das eigentlich zu einem spürbaren Performanceverlust, wenn man SetViewPort in jedem Frame oft verwendet ?
Oder sind grundsätzlich alle (bzw. die meisten) SetXxxx-Methoden von IDirect3DDevice sehr schnell ?
Das würde mich nämlich schon einmal interesieren. Nicht dass ich bei jedem render 50mal das Device verändere und meine Grak damit zum Wahnsinn treibe.
Oder hift das sogar die Graka zu entlasten, wenn man ihr sagt sie soll sich nur auf die Bereiche konzentrieren, wo es auch was zu drawen gibt ? |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 24.08.2007, 21:17 Titel: |
|
|
Sowas belastet eher die CPU, wie es unter Vista abläuft weiss ich nicht genau da ist die Architektur etwas anders, kann auch DX10 gewesen sein.
Wenn du allerdings 50 Teilbereiche brauchst wirst du nur schwer um die 50 Aufrufe hinweg kommen.
Allgemein kann man sagen das jeder SetXXX Aufruf an der performance nagt, je weniger desto besser, aber das hast du sicher selbst schon gewusst. Wenn dich aber wirklich interessieren sollte wie schnell denn ein SetViewport aufruf ist solltest du dir den DX SDK Docu Artikel "Accurately Profiling Direct3D API Calls (Direct3D 9)" einverleiben.
Zitat: |
Oder hift das sogar die Graka zu entlasten, wenn man ihr sagt sie soll sich nur auf die Bereiche konzentrieren, wo es auch was zu drawen gibt ? |
Ja. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
Otscho Super JLI'ler
Alter: 36 Anmeldedatum: 31.08.2006 Beiträge: 338 Wohnort: Gummibären-Gasse Medaillen: Keine
|
Verfasst am: 26.08.2007, 10:43 Titel: |
|
|
Ok, ich hab mal das mit dem SetViePort mal ausprobiert. Allerdings ist es bei Sprites, die bei denen die Drawmethode mehrmals aufgerufen wird, eher unvorteilhaft. Weil das Sprite wird ja nicht beim Aufruf von lpSprite->Draw(...);
gerendert, sondern beim lpSprite->End(); Was das alles sehr kompliziert macht. Anstatt folgendes schreiben zu können
CPP: | lpSprite->Begin(...);
lpD3Device->SetViewport(...);
lpSprite->Draw(...);
lpD3Device->SetViewport(...);
lpSprite->Draw(...);
...
lpSprite->End(); |
Muss mans jetzt so schreiben :
CPP: | lpD3Device->SetViewport(...);
lpSprite->Begin(...);
lpSprite->Draw(...);
lpSprite->End();
lpD3Device->SetViewport(...);
lpSprite->Begin(...);
lpSprite->Draw(...);
lpSprite->End();
... |
Die vielen End()- und Beginn()-Methoden sind besimmt nicht sehr performanceförderlich, oder ? |
|
Nach oben |
|
|
Chriss Senior JLI'ler
Anmeldedatum: 18.08.2004 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 26.08.2007, 10:57 Titel: |
|
|
Wenn du es so sortierst das erst alles für den ersten und dann für den zweiten Viewport gezeichnet wird dürfte es nur eine Verdopplung der Aufrufe sein. |
|
Nach oben |
|
|
Otscho Super JLI'ler
Alter: 36 Anmeldedatum: 31.08.2006 Beiträge: 338 Wohnort: Gummibären-Gasse Medaillen: Keine
|
Verfasst am: 26.08.2007, 11:18 Titel: |
|
|
Jo, dann schon.
Was ist aber wenn ich 20 Viewports verwende ? |
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 26.08.2007, 16:45 Titel: |
|
|
Otscho hat Folgendes geschrieben: | Jo, dann schon.
Was ist aber wenn ich 20 Viewports verwende ? |
Wofür brauchst du 20 viewports? könntest du das dann nicht vielleicht anders regeln? Beschreibe mal den Einsatz.
Gruß DXer |
|
Nach oben |
|
|
Chriss Senior JLI'ler
Anmeldedatum: 18.08.2004 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 26.08.2007, 16:46 Titel: |
|
|
Ich weiß das es nur eine theoretische Frage war aber warum sollte man den Bildschirm in 20 teile zeichnen?
Im Prinziep ist es so als hätte man 20 Programme offen die zeichnen wollen nur das sich diese die GrakaObjekte ( Sufaces etc. ) teilen können.
Ich hab es zwar nie mit so vielen probiert aber ich denke das die vielen Draw anweisungen wesentlich mehr als Begin und End ins Gewicht fallen. |
|
Nach oben |
|
|
Otscho Super JLI'ler
Alter: 36 Anmeldedatum: 31.08.2006 Beiträge: 338 Wohnort: Gummibären-Gasse Medaillen: Keine
|
Verfasst am: 26.08.2007, 18:00 Titel: |
|
|
DirectXer hat Folgendes geschrieben: | Wofür brauchst du 20 viewports? könntest du das dann nicht vielleicht anders regeln? Beschreibe mal den Einsatz.
Gruß DXer |
Wenn ich bei meiner GUI ein Element hab, das mehr Platz brüchte als ihm zur Verfügung steht, soll sich eine Scroll-Funktion einschalten, mit der man dann immer den aktuellen Auschnitt auswählen kann. So wie zum Beispiel ein seitenlanger text im Editor. Oder im Browser: div-Elemente, deren Inhalte größer sind als das div selber. Das sind ja dann quasi auch Splittscreens. Manchmal sogar Splittscreens im Splittscreen. |
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 26.08.2007, 18:17 Titel: |
|
|
naja aber sowas realisiert man eigtl. nicht mit Viewports. Entweder nimmst du gleich die winAPI (bzw. eine andere dafür vorgesehene API) oder du nimmst eine orthogonale Perspektive und ordnest das dann alles richtig an, das wär mit DX die schnellste Mögl.
EDIT: du kannst auch screen (rhw-)vertices nehmen, da kannst du direkt die vertices in screenkoordinaten angeben
Gruß DXer |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 26.08.2007, 18:21 Titel: |
|
|
Ich schätze das dabei Clipping eine wichtige Rolle spielt. Daher wird man nur mit orthogonalen Matrizen das nicht alles erreichen können. Wenn man z.B. einen Text halb darstellt (untere Hälfte einer Zeile abgeschnitten) sollte es 10 mal leichter sein, DX irgendwie klar zu machen, das zu clippen, weil das kann DX ja ohne weiteres, als sich selber darum zu kümmern. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 27.08.2007, 18:16 Titel: |
|
|
Um die Performance hoch zu halten:
Update nur die Bereiche die sich auch verändert haben, UI Elemente werden sich ja nicht oft im Vergleich zur Spielfläche verändern. Und in eine Textur gerendert kannst du auch Blending etc verwenden.
Clipping: Sollte man natürlich schon beachten wenn du aber angst vor Overdraweffekten hast -> SetScissorRect(...) _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
|