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
Ja, der Fragment Shader ist ziemlich aufwändig. (es wird für jedes Fragment ein Sortieralgorithmus abgearbeitet und eine Funktion minimiert)Ich kenn mich zwar mehr mit DirectX aus, aber ich hab trotzdem ein paar Gedanken dazu:
- Also, bei glDrawArrays muss nicht zwangsweise ein Paket an die GPU übermittelt werden, aber wenn der Treiber es für sinnvoll hält kann er das trotzdem tun.
- Warum rufst du überhaupt glFinish auf?
- Zur GPU Auslastung: Laut dem Code zeichnest du nur ein paar Quads. Damit langweilt sich auch deine iGPU, außer deine Shader sind sehr, sehr aufwendig.
Hmm. Ja, das mit dem commandBuffer deckt sich mit meinem Bild von OpenGL darum frage ich mich auch wieso glDrawArrays so viel Zeit in Anspruch nimmt. Ich hätte eher vermutet, dass glDrawArrays etwa so viel Zeit in Anspruch nimmt wie glBindTexture und nicht das zigfache.Du musst dir OpenGL als CommadBuffer vorstellen, der nur Befehle cached und Sie dann Zeichnet, wenn der Treiber es für richtig hält.
Also das ganze ist Asynchron bis glFinish/glflush aufgerufen wird. Daher dauert der glfinish Call auch so lange.
Das ganze ist dafür, da dass Optimierungen vorgenommen werden können.
Du musst schon mehr ins Detail gehen, was du zeichnest, was du für ne Framerate haben willst usw.
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »SimonTheVillain« (07.06.2015, 14:11)
An das mit den beiden Samplern habe ich auch schon gedacht. Aber dann bräuchte ich einen Uniform, der mir anzeigt welche der beiden Texturen gerade aktiv ist, bzw. einen Wechsel des GLSL Programms. Es ist ein Bubblesort. Aber eine Veränderung der Anzahl der zu sortierenden Elemente wirkt sich nicht so besonders aus..... also denke ich nicht, dass ich mit Quicksort so viel bewirken kann. (es sind ohnehin nur max 14 Elemente die sortiert werden können).Und beide Texturen die ganze Zeit aktiviert zu haben mit 2 samplern geht nicht? Dann würde zumindest das Wechseln wegfallen. Wobei das womöglich nicht so viel ausmacht. Was für ein Sortier-Algo ist das? Kann auch sein dass ein Großteil der GPU-Cores die meiste Zeit nichts tut, und das dann so ausbremst.
Ansonsten wäre OpenCL für sowas wirklich besser - da hast du einfach mehr Flexibilität und kannst in diveser Speicherblöcke schreiben, wie du willst. Hab OpenCL in meiner Masterarbeit für Path Tracing benutzt, wo es auch mehrere Hundert bis Tausend Iterationen braucht, bis man eine einigermaßen gute Konvergenz hat.
Dann kannst du das mit den beiden Samplern ja mal einbauen - schaden sollte es jedenfalls nicht, und vielleicht bringt es ja was. Das extra flag brauchst du dann natürlich, ja. Programwechsel wäre nicht so gut, das ist nochmal viel langsamer als die Texturwechsel.An das mit den beiden Samplern habe ich auch schon gedacht. Aber dann bräuchte ich einen Uniform, der mir anzeigt welche der beiden Texturen gerade aktiv ist, bzw. einen Wechsel des GLSL Programms. Es ist ein Bubblesort. Aber eine Veränderung der Anzahl der zu sortierenden Elemente wirkt sich nicht so besonders aus..... also denke ich nicht, dass ich mit Quicksort so viel bewirken kann. (es sind ohnehin nur max 14 Elemente die sortiert werden können).
Werbeanzeige