Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

GLSL tessellation

Pagina: 1
Acties:

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Topicstarter
Ik krijg een vreemde fout in m'n tessellation control shader in opengl (4.3):

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