Quote
Hi!
Ich hatte auch kurz Probleme mit mehreren Lichtquellen. Wie übergebt ihr denn dem Shader die Daten? Wenn ihr einen Struct Array in einem Uniform Block verwendet, müssen die Daten in einem bestimmten Layout ausgelegt werden, ansonsten kommt OpenGL durcheinander, welches Byte wohin gehört. In der Superbible ist es recht gut erklärt, sonst schauts mal hier zB https://www.opengl.org/wiki/Interfac...#Memory_layout.
Falls ihr zufällig das selbe Problem habt, seit ihr auf der sicheren Seite, wenn ihr st140 verwendet und im struct alles als vec4 deklariert. So siehts bei mir aus:
[FONT=&]const int maxLights = 6;
struct LightInfo{
vec4 pos;
vec4 diffuse;
vec4 specular;
vec4 att;
};
layout(std140, binding = 1) uniform LightInfoBlock{
LightInfo lights[maxLights];
};
[/FONT]
Ansonsten habe ich gDEBugger verwendet, um mir die Buffer Daten anzusehen. Dort hab ich dann gemerkt, dass das Array nicht gepasst hat und so schräge Ergebnisse produziert wurden. Außerdem muss man immer vorsichtig sein mit debugging tools. Bei mir war zum Beispiel das Problem, dass mir gDEBugger immer nur ein Face einer CubeMap richtig angezeigt hat und der Rest schwarz war, obwohls eh gepasst hat. Aber ja, so low level debuggen ist wirklich ein Luder 
EDIT: Grad erst den Link zum Shaderpost gesehen. Das Problem könnte auf euch zutreffen.
Display More
Bei uns sieht es ähnlich aus:
- struct Light
- {
- vec4 position;
- vec4 ambient;
- vec4 diffuse;
- vec4 specular;
- vec4 shiConLinQua; // x = shininess, y = constant attentuation, z = linear attentuation, w = quadratic attentuation value
- };
- //const unsigned int MAX_LIGHTS = 1;
- layout (std140, binding = 1, index = 1) uniform LightBlock {
- Light light;
- }light;
Display More
Was bisher mal nur ein light zum debuggen ist.
Quote
Auf NVidia Graphikkarten dürfte es mit der aktuellesten Version von NSight möglich sein GLSL-Shader direkt mit Breakpoints zu debuggen
Wissen wir, leider sind wir eine der wenigen AMD Gruppen wie in der Mail erwähnt.
Den Fehler wieso es nicht geht, da sind wir drauf gekommen, nur an der Behebung bzw. an der Begründung scheitern wir:
Error.jpg
Ganz links seht ihr unser light struct was für alle Lichter hergenommen wird, ambient ist blau, rest schwarz wegen debugging. in der mitte habt ihr wie wir verlinken und das ganze dann zeichnen in der draw methode. Rechts ist unser fragment shader code wo nur mal die diffuseColor wegen debugging ausgegeben wird. Sollte ja schwar sein nicht? Denkste! Es ist blau wie die ambient color, das lustige is das wenn man ambient im fragment shader nutzt ist es grün. Klarer Fall das da was falsch rein geschrieben wird, nur was und Wie? wir nutzten doch nur sizeof(light), &light? das muss doch passen?
Danke für eure Anworten
Kann jemand vielleicht jemand was zum http://glsl-debugger.github.io/ sagen? Der wurde bisher nicht erwähnt und sollte das durch steppen ja mehr oder weniger können, was sie selbst sagen. Wenn en Tutor mal rein schaun will nur zu, MultipleLights branch, letzter commit.