Hallo, bin neu hier und programmiere eigentlich in erster Linie C++ und wollte jetzt mit OpenGL-Programmierung beginnen.
Dazu wollt ich mir jetzt erst mal ein paar Klassen für das ShaderManagment schreiben, bin mir aber unschlüssig ob das so ein guter Entwurf ist.
Also meine Fragen dazu. 1. Ich habe mir gedacht das ich jeden Shader in einem Object "Shader" speichere und dort mit Refcount zähle wieviele Programme diesen Shader nutzen um ihn in dem Fall dass ich ihn nicht mehr brauche wieder lösche.
Dazu würde mich interessieren wie begrenzt der Speicher für Shader ist und ob es nötig ist die Shader wieder zu löschen oder ob es in Ordnung ist diese bis zum Ende des Programms im Speicher zu halten.
2. Beim ShaderProgam habe ich mir gedacht dass ich immer ein neues Programm erstelle und die benötigten Shader hinzufüge. (Also kein Refcount und Manager, sondern immer ein neues Programm selbst wenn es die gleichen Shader hat)
Meine Gedanken dazu waren: - Shader sind bereits compiliert im Speicher der Grafikkarte. (größte mengen an Daten sind bereits dort) - ShaderProgram hat nur referenzen zu den einzelnen Shadern. Ist das Richtig oder wird beim linken des ShaderPrograms der komplette Code von den Shadern in das ShaderProgram kopiert? Habe dazu keine Informationen finden können.
Sollte jemand noch anregungen haben was man noch wichtig für das ShaderManagment ist könnt ihr dies hier gerne auch schreiben.
Ich bedanke mich schon mal für die Informationen LG Stefan
Registriert: Mi Jan 31, 2007 18:32 Beiträge: 150
Programmiersprache: Pascal
Was bei der Modellierung zu beachten ist, ist die Version auf die du abziehlst. Mit höherer version kommen noch ShaderPipelines dazu und je nach dem ob du GL_ARB_separate_shader_objects verwendest sieht das ganze wieder ein wenig anders aus. Aber für eine 3.x implementierung sollte diese Modellierung funktionieren.
@phlegmatiker Danke für den Link zu dem Tutorial werde ich mir anschauen wenn ich Zeit habe, hab aber momentan noch andere Lektüre zu lesen.
@FrenK Auch dir Danke für die Antwort Also ich würde das schon gerne so schreiben das ich das später (neuere OpenGL-Version) auch noch verwenden kann.
Mit wie vielen unterschiedlichen Shadern müsste man denn da dann rechnen? In allem was ich so gelesen habe waren nämlich immer nur von den fünf die Rede: GL_VERTEX_SHADER or GL_FRAGMENT_SHADER GL_TESS_CONTROL_SHADER GL_TESS_EVALUATION_SHADER GL_GEOMETRY_SHADER
Von GL_ARB_separate_shader_objects hab ich bisher auch noch nichts gehört und muss mich damit erst mal beschäftigen. Aber ich wollte eigentlich erstmal in erster Linie nur Core Elemente von OpenGL verwenden. Würde aber jetzt gerne mal wissen ob es zu empfehlen ist sich als Anfänger in OpenGL mit GL_ARB_separate_shader_objects zu beschäftigen.
Registriert: Mo Nov 08, 2010 18:41 Beiträge: 769
Programmiersprache: Gestern
Ich empfehl dir mal dich in die Programme (nicht Shader) einzuarbeiten. Die scheinen mir etwas besser geeignet fuer dein Vorhaben. Zum Beispiel ist es hier wesentlich einfacher flow und branching zu verarbeiten als in Shadern.
Registriert: Mi Jan 31, 2007 18:32 Beiträge: 150
Programmiersprache: Pascal
@Stefan Zusätzlich gibt es jetzt mit der neuen Version noch GL_COMPUTE_SHADER(Funktioniert nicht mit den anderen Shadern Stages zusammen) und das war warscheinlich auch nicht die letzte Änderung in der Richtung.
Als Anfänger ist es nicht empfehlenswert sich mit Extensions auseinander zu setzen, zunächst ist es wichtig sicher mit der core funktionalität umgehen können, da die Extensions sofern sie nicht teil der core funktionalität sind, nicht auf allen System und Grafikkarten verfügbar sind.
Wenn du jedoch eine Modellierung die auch in den neueren Versionen alle use-cases abdeckt haben willst, kommst du nicht drum rum dir die Extensions und Äderungen in den einzelnen Versionen genau anzuschauen. GL_ARB_separate_shader_objects war auch nur als Beispiel gedacht, denn es gibt eine ganze Reihe von Extensions und Unterschiede zwischen den Versionen, die die Modellierung beeinflussen. (z.B GL_EXT_direct_state_access)
Ich perönlich würde dir empfehlen implementier das ganze zunächst erst einmal wie du es vor hattest. Setz eine minimum core version vorraus(hier würde ich momentan 3.3 nehmen da die unterschiede vorallem zu den 1.x und 2.x Versionen relativ groß sind). Versuch erstmal nicht neuere Funktionalität zu unterstützen, dass hat zumindest für mich erst Sinn gemacht nachdem ich ein wenig standfester mit OpenGL umgehen konnte.
@yunharla Wenn du damit die Variante vor GLSL meinst kann ich davon nur abraten. Der lernaufwand ist nicht gerade gering und der aktuelle standart sind GLSL basierte Shader. Der ganze Bereich GLSL ist ebenfalls gut durch tutorials und Bespiele auf etlichen Seiten.
Was branching angeht, dafür sind Shader oder besser GPU programme egal ob GPGPU oder OpenGL Shader auch nicht vorgeshen. Die GPU ist numal eine SMID Architektur.
Registriert: Mo Nov 08, 2010 18:41 Beiträge: 769
Programmiersprache: Gestern
FrenK hat geschrieben:
@yunharla Wenn du damit die Variante vor GLSL meinst kann ich davon nur abraten. Der lernaufwand ist nicht gerade gering und der aktuelle standart sind GLSL basierte Shader. Der ganze Bereich GLSL ist ebenfalls gut durch tutorials und Bespiele auf etlichen Seiten.
Was branching angeht, dafür sind Shader oder besser GPU programme egal ob GPGPU oder OpenGL Shader auch nicht vorgeshen. Die GPU ist numal eine SMID Architektur.
mfg FrenK
seh auch gerade das ATI gar keinen Zugriff darauf erlaubt (mal wieder typisch <.<).
Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.