Ik krijg een vreemde fout in m'n tessellation control shader in opengl (4.3):
error C5025: lvalue in assignment too complex
Iets als:
Werkt prima. Waarbij gl_TessLevelOuter impliciet gedefineerd is als:
Echter als ik zelf een patch variable maak, en die index op basis van zelfs alleen invocation id, krijg ik assignment too complex fout, dat aanduidt dat hij blijkbaar geen scattered write kan doen.
Wat vreemd is, want het is exact hetzelfde geval als de TessLevel write, alleen is dat een built-in.
Heeft iemand hier een idee over?
Ik kan ook bijvoorbeeld niet dit doen:
Het werkt alleen als ik echt "testVar[0]" oid schrijf.
Ik los het nu ad-hoc op met een vertex output, dat werkt toevallig omdat er net 3 outputs zijn:
Of iets anders dat werkt is:
Maar dus niet voor vectoren, of met een mat3x3...
error C5025: lvalue in assignment too complex
Iets als:
code:
1
2
| const int edgeId = gl_InvocationID > 0 ? gl_InvocationID - 1 : 2;
gl_TessLevelOuter[edgeId] = lodCalculation(edgeCenter, edgeRadius); |
Werkt prima. Waarbij gl_TessLevelOuter impliciet gedefineerd is als:
code:
1
| patch out float gl_TessLevelOuter[4]; |
Echter als ik zelf een patch variable maak, en die index op basis van zelfs alleen invocation id, krijg ik assignment too complex fout, dat aanduidt dat hij blijkbaar geen scattered write kan doen.
code:
1
2
3
| patch out vec3 testVar[3]; testVar[gl_InvocationID] = vec3(1.0); // error |
Wat vreemd is, want het is exact hetzelfde geval als de TessLevel write, alleen is dat een built-in.
Heeft iemand hier een idee over?
Ik kan ook bijvoorbeeld niet dit doen:
code:
1
2
3
| patch out mat3x3 testVar; testVar[gl_InvocationID] = vec3(1.0); // error |
Het werkt alleen als ik echt "testVar[0]" oid schrijf.
Ik los het nu ad-hoc op met een vertex output, dat werkt toevallig omdat er net 3 outputs zijn:
code:
1
2
3
| layout (location = 3) out vec3 out_testVar[]; testVar[gl_InvocationID] = vec3(1.0); |
Of iets anders dat werkt is:
code:
1
2
| patch out vec3 testVar; testVar[gl_InvocationID] = 1.0; |
Maar dus niet voor vectoren, of met een mat3x3...