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

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

11

08.05.2014, 06:40

Der Immediate Mode hat nichts mit Shadern zu tun.
Das ist doch genau das, was ich gesagt habe.
Dennoch ist man noch immer in der Lage ohne einen eigenen Shader zu arbeiten (der ja doch gern mal Verständnisprobleme und zusätzlichen Aufwand der Initialisierung bedeutet) und trotzdem keinen Immediate Mode zu verwenden. Ob man das sollte sei mal dahin gestellt, aber wenn man das tut, gibt es halt einen default-Shader.
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]

LukasBanana

Alter Hase

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

12

08.05.2014, 09:51

Dieser Ansatz ist jedoch unperformant, da jeder API Call (DrawObject()) warten muss, bis die GPU mit dem aktuellen Vorgang fertig ist.

Aufgrund der Pipeline muss die GPU nicht nach jedem API Call warten, bis der Vorgang abgeschlossen ist.
GPUs haben dadurch einen sehr hohen Durchsatz.
Aber natürlich ist Hardware Instancing besser, als jedes Objekt einzeln zu rendern.
Gruß,
Lukas

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

13

08.05.2014, 10:32

Im Gegenteil sogar. Oft braucht ein Entwickler oder eine Engine ein Ergebnis vorheriger Operationen (Multi-GPU macht hier gern Probleme) um mit den Ergebnissen weiter zu arbeiten. Oft z.B. bei Post-Effekten.
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]

LukasBanana

Alter Hase

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

14

08.05.2014, 11:18

In diesem Fall ja, z.B. bei Gaussian Blur, oder noch schlimmer 'Occlusion Culling' wo die CPU auf Resultate der GPU warten muss.

Aber solange das nicht der Fall ist - und im Beispiel von iSmokiieZz sehe ich das nicht - kann man vom Throughput der GPU gut Gebrauch machen.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

15

08.05.2014, 11:35

Definitiv, ja.
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]

SlinDev

Treue Seele

Beiträge: 142

Wohnort: Lübeck

Beruf: Programmierer

  • Private Nachricht senden

16

08.05.2014, 12:21

Um noch ein bisschen mehr zu klugscheißen: Ich sehe ein, dass es mit multi-gpu alles etwas komplizierter wird, aber da sollten sich eigentlich Treiber und Hardware um die meisten Dinge kümmern. Meistens ist es aber so, dass wenn es tatsächlich mal außer beim Buffer Swap vorkommt, dass die CPU auf die GPU warten muss man etwas falsch macht, denn wirklich gerechtfertigt ist es fast nie. Das Beispiel mit dem Gaussian Blur verstehe ich nicht, denn da hat die Grafikkarte doch das original Bild, rendert mit horizontalem Blur in eine neue Textur und rendert das mit vertikalem Blur entweder wieder in die erste oder noch eine neue Textur. Dabei bleibt das aber alles auf der Grafikkarte und die CPU muss auf nichts warten.
Occlusion culling ist tatsächlich problematisch, aber genau aus diesem Grund wird es in richtigen Anwendungen dann auch nicht so naiv implementiert, denn dann wäre es meistens deutlich langsamer als ohne. Meistens ist der Ansatz bei solchen Problemen, asynchron zu die Daten zurück zu bekommen, mit dem Nachteil, dass die Daten dann mindestens einen Frame hinterher hängen, was man dann wenn nötig wieder versuchen kann auszugleichen.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

17

08.05.2014, 12:25

Du hast schon bei vielen Post-Effekten ein Problem, wenn Du irgendwas in eine Textur renderst, eventuell Teile aus ihr heraus woanders hinkopierst und davon dann lesen willst. Ich hatte den Ärger schon, da waren bei vielen Spielern plötzlich gewisse Shader/Post-Filter Effekte eben nur schwarze Quads. GLFlush und alles lief wie erwartet. Dasselbe Problem findet sich oft. Auch im Zusammenhang mit der SFML und RenderTextures schon gesehen.
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]

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

18

08.05.2014, 12:29

Und wie lautet die Lösung zum Multi-GPU Problem?
Jetzt habt ihr mich neugierig gemacht :D Kennen Shader soetwas wie Mutex?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

19

08.05.2014, 12:34

GLFlush.
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]

20

08.05.2014, 14:04

Zitat

Aufgrund der Pipeline muss die GPU nicht nach jedem API Call warten, bis der Vorgang abgeschlossen ist.
GPUs haben dadurch einen sehr hohen Durchsatz.


Es ist richtig, dass die CPU nicht auf die Beendung eines Draw-API Calls warten muss. Der Einfachkeit und ohne das Buffering bis zum Flush in betracht zu ziehen, hab ich das so jedoch formuliert, da auch die Anzahl der DrawCalls (hochkomplexe und moderne Optimierungen durch den Software Driver außer Betracht gelassen), und somit die Größe des Command buffers, auf die Ausführungszeit vom Flush Einfluss hat ;)
EnvisionGame(); EnableGame(); AchieveGame(); - Visionen kann man viele haben. Sie umzusetzen und auf das Ergebnis stolz zu sein ist die eigentliche Kunst.

Werbeanzeige