Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: So Jul 20, 2025 18:32

Foren-Übersicht » Programmierung » Shader
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: ShaderManagment und ShaderProgram
BeitragVerfasst: Do Dez 13, 2012 16:46 
Offline
DGL Member

Registriert: Do Dez 13, 2012 15:34
Beiträge: 3
Programmiersprache: C, C++, C#
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.

Bild



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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Dez 13, 2012 17:38 
Offline
DGL Member
Benutzeravatar

Registriert: So Sep 26, 2010 12:54
Beiträge: 238
Wohnort: wieder in Berlin
Programmiersprache: Englisch
Ahoi Stefan,

http://arcsynthesis.org/gltut/ solltest Du Dir zu Gemüte führen, wenn Du in die OpenGL Welt eintauchen möchtest; unabhängig vom Shader"Management".


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Dez 13, 2012 21:56 
Offline
DGL Member
Benutzeravatar

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.

mfg FrenK


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Dez 13, 2012 23:26 
Offline
DGL Member

Registriert: Do Dez 13, 2012 15:34
Beiträge: 3
Programmiersprache: C, C++, C#
@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.

lg Stefan


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Dez 14, 2012 14:26 
Offline
DGL Member
Benutzeravatar

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.

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Dez 14, 2012 15:26 
Offline
DGL Member
Benutzeravatar

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.

mfg FrenK


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Dez 14, 2012 15:38 
Offline
DGL Member
Benutzeravatar

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 <.<).

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Foren-Übersicht » Programmierung » Shader


Wer ist online?

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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.025s | 15 Queries | GZIP : On ]