Create wird bei jeder Mesh 2x aufgerufen, einaml für Light und einmal für Material. UpdateBuffer bei jeder Änderung des Lichtes/Material. Destroy beim entfernen der Mesh.
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
Programmiersprache: C++
mathias hat geschrieben:
Zitat:
Wie sehen die IDs aus?
Wen du damit die programObj, dann etwa so: 1, 4, 7, 10 ,13 usw.
Ich glaube Sascha meint, welchen Wert hat die Variable BindingPoint in deinen Instanzen der Klasse TUBO?
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Genau, wie die Binding Points aussehen. Ich kann mir nicht vorstellen dass du für jeden der 800 Meshes eindeutige Binding Points benötigst die alle gleichzeitig aktiv sind. Genau das sagt die Meldung ja, aber so komplex sind deine Shader ja wohl nicht, oder?
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
mathias hat geschrieben:
Zitat:
Genau, wie die Binding Points aussehen.
Der erste Wert hat 0, anschliessend wird fortlaufen Inkrementiert.
Dies passiert hier:
Code:
const
BPInc: GLuint =0;
...
BindingPoint := BPInc;
Inc(BPInc);
So wie es aussieht, gibt es Probleme, wen dieser Wert etwas über 200 kommt.
Klar, du hast dann über 200 simultan aktive Binding Points und dass liegt über dem Hardwarelimit. Ich gehe aber nicht davon aus dass du auch nur eine Shaderpipeline aktiv hast die 200+ Binding Points verwendet, also musst du die halt einfach wiederverwenden. Wenn dein umfangreichstes Shaderset also 20 Binding Points hat (was viel wäre, sogar für ein Set dass die komplette Pipeline aus Vertex, Geometry, Tess Control, Tess Eval und Fragment umfasst) musst du die erneut nutzen wenn ein anderer Shader aktiviert wird.
Du meinst, ich sollte in meinem Beispiel nur 2 UBOs erzeugen, einmal für Light und einmal für Material, und diese beiden dann in allen Shadern verwenden.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
mathias hat geschrieben:
Du meinst, ich sollte in meinem Beispiel nur 2 UBOs erzeugen, einmal für Light und einmal für Material, und diese beiden dann in allen Shadern verwenden.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Leg die Bindings doch direkt im Shader fest :
Code:
layout (binding = 0) uniform UBO {
mat4 projection;
mat4 model;
mat4 viewM
float tessInner;
float tessOuter;
} ubo;
Mach ich auch nur noch so. Wobei es bei der API die ich grade verwende sowas wie das ermitteln von Uniform locations zum Glück nicht mehr gibt. Da steuert man alles über bindings und locations im Shader, aber das geht bei modernem OpenGL ja auch und ist viel schicker als das Suchen der Locations / Binding Points.
Mitglieder in diesem Forum: 0 Mitglieder und 2 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.