float layer0 = bitfield0 & 3; // extract array texture layer 0 to 7
float layer1 = bitfield1 & 3; // extract array texture layer 0 to 7
float layer2 = bitfield2 & 3; // extract array texture layer 0 to 7
float layer3 = bitfield3 & 3; // extract array texture layer 0 to 7
int tx0 = (bitfield0 >> 3) & 31; // extract value from texture-unit number 0 to 31
int tx1 = (bitfield1 >> 3) & 31; // extract value from texture-unit number 0 to 31
int tx2 = (bitfield2 >> 3) & 31; // extract value from texture-unit number 0 to 31
int tx3 = (bitfield3 >> 3) & 31; // extract value from texture-unit number 0 to 31
vec4 value0, value1, value2, value3; // value.rgba or value.xyzw from specified image/texture/etc
switch (tx0) {
case : value0 = texture (tu00, vec3(tcoord,xy, layer0)); break;
case : value0 = texture (tu01, vec3(tcoord,xy, layer0)); break;
case : value0 = texture (tu02, vec3(tcoord,xy, layer0)); break;
case : value0 = texture (tu03, vec3(tcoord,xy, layer0)); break;
case : value0 = texture (tu04, vec3(tcoord,xy, layer0)); break;
case : value0 = texture (tu05, vec3(tcoord,xy, layer0)); break;
case : value0 = texture (tu06, vec3(tcoord,xy, layer0)); break;
case : value0 = texture (tu07, vec3(tcoord,xy, layer0)); break;
case : value0 = texture (tu08, vec3(tcoord,xy, layer0)); break;
case : value0 = texture (tu09, vec3(tcoord,xy, layer0)); break;
case : value0 = texture (tu10, vec3(tcoord,xy, layer0)); break;
case : value0 = texture (tu11, vec3(tcoord,xy, layer0)); break;
case : value0 = texture (tu12, vec3(tcoord,xy, layer0)); break;
case : value0 = texture (tu13, vec3(tcoord,xy, layer0)); break;
case : value0 = texture (tu14, vec3(tcoord,xy, layer0)); break;
case : value0 = texture (tu15, vec3(tcoord,xy, layer0)); break;
case : value0 = texture (tu16, vec3(tcoord,xy, layer0)); break;
case : value0 = texture (tu17, vec3(tcoord,xy, layer0)); break;
case : value0 = texture (tu18, vec3(tcoord,xy, layer0)); break;
case : value0 = texture (tu19, vec3(tcoord,xy, layer0)); break;
case : value0 = texture (tu20, vec3(tcoord,xy, layer0)); break;
case : value0 = texture (tu21, vec3(tcoord,xy, layer0)); break;
case : value0 = texture (tu22, vec3(tcoord,xy, layer0)); break;
case : value0 = texture (tu23, vec3(tcoord,xy, layer0)); break;
case : value0 = texture (tu24, vec3(tcoord,xy, layer0)); break;
case : value0 = texture (tu25, vec3(tcoord,xy, layer0)); break;
case : value0 = texture (tu26, vec3(tcoord,xy, layer0)); break;
case : value0 = texture (tu27, vec3(tcoord,xy, layer0)); break;
case : value0 = texture (tu28, vec3(tcoord,xy, layer0)); break;
case : value0 = texture (tu29, vec3(tcoord,xy, layer0)); break;
case : value0 = texture (tu30, vec3(tcoord,xy, layer0)); break;
case : value0 = texture (tu31, vec3(tcoord,xy, layer0)); break;
}
switch (tx1) {
case : value1 = texture (tu00, vec3(tcoord,xy, layer1)); break;
case : value1 = texture (tu01, vec3(tcoord,xy, layer1)); break;
case : value1 = texture (tu02, vec3(tcoord,xy, layer1)); break;
case : value1 = texture (tu03, vec3(tcoord,xy, layer1)); break;
case : value1 = texture (tu04, vec3(tcoord,xy, layer1)); break;
case : value1 = texture (tu05, vec3(tcoord,xy, layer1)); break;
case : value1 = texture (tu06, vec3(tcoord,xy, layer1)); break;
case : value1 = texture (tu07, vec3(tcoord,xy, layer1)); break;
case : value1 = texture (tu08, vec3(tcoord,xy, layer1)); break;
case : value1 = texture (tu09, vec3(tcoord,xy, layer1)); break;
case : value1 = texture (tu10, vec3(tcoord,xy, layer1)); break;
case : value1 = texture (tu11, vec3(tcoord,xy, layer1)); break;
case : value1 = texture (tu12, vec3(tcoord,xy, layer1)); break;
case : value1 = texture (tu13, vec3(tcoord,xy, layer1)); break;
case : value1 = texture (tu14, vec3(tcoord,xy, layer1)); break;
case : value1 = texture (tu15, vec3(tcoord,xy, layer1)); break;
case : value1 = texture (tu16, vec3(tcoord,xy, layer1)); break;
case : value1 = texture (tu17, vec3(tcoord,xy, layer1)); break;
case : value1 = texture (tu18, vec3(tcoord,xy, layer1)); break;
case : value1 = texture (tu19, vec3(tcoord,xy, layer1)); break;
case : value1 = texture (tu20, vec3(tcoord,xy, layer1)); break;
case : value1 = texture (tu21, vec3(tcoord,xy, layer1)); break;
case : value1 = texture (tu22, vec3(tcoord,xy, layer1)); break;
case : value1 = texture (tu23, vec3(tcoord,xy, layer1)); break;
case : value1 = texture (tu24, vec3(tcoord,xy, layer1)); break;
case : value1 = texture (tu25, vec3(tcoord,xy, layer1)); break;
case : value1 = texture (tu26, vec3(tcoord,xy, layer1)); break;
case : value1 = texture (tu27, vec3(tcoord,xy, layer1)); break;
case : value1 = texture (tu28, vec3(tcoord,xy, layer1)); break;
case : value1 = texture (tu29, vec3(tcoord,xy, layer1)); break;
case : value1 = texture (tu30, vec3(tcoord,xy, layer1)); break;
case : value1 = texture (tu31, vec3(tcoord,xy, layer1)); break;
}
switch (tx2) {
case : value2 = texture (tu00, vec3(tcoord,xy, layer2)); break;
case : value2 = texture (tu01, vec3(tcoord,xy, layer2)); break;
case : value2 = texture (tu02, vec3(tcoord,xy, layer2)); break;
case : value2 = texture (tu03, vec3(tcoord,xy, layer2)); break;
case : value2 = texture (tu04, vec3(tcoord,xy, layer2)); break;
case : value2 = texture (tu05, vec3(tcoord,xy, layer2)); break;
case : value2 = texture (tu06, vec3(tcoord,xy, layer2)); break;
case : value2 = texture (tu07, vec3(tcoord,xy, layer2)); break;
case : value2 = texture (tu08, vec3(tcoord,xy, layer2)); break;
case : value2 = texture (tu09, vec3(tcoord,xy, layer2)); break;
case : value2 = texture (tu10, vec3(tcoord,xy, layer2)); break;
case : value2 = texture (tu11, vec3(tcoord,xy, layer2)); break;
case : value2 = texture (tu12, vec3(tcoord,xy, layer2)); break;
case : value2 = texture (tu13, vec3(tcoord,xy, layer2)); break;
case : value2 = texture (tu14, vec3(tcoord,xy, layer2)); break;
case : value2 = texture (tu15, vec3(tcoord,xy, layer2)); break;
case : value2 = texture (tu16, vec3(tcoord,xy, layer2)); break;
case : value2 = texture (tu17, vec3(tcoord,xy, layer2)); break;
case : value2 = texture (tu18, vec3(tcoord,xy, layer2)); break;
case : value2 = texture (tu19, vec3(tcoord,xy, layer2)); break;
case : value2 = texture (tu20, vec3(tcoord,xy, layer2)); break;
case : value2 = texture (tu21, vec3(tcoord,xy, layer2)); break;
case : value2 = texture (tu22, vec3(tcoord,xy, layer2)); break;
case : value2 = texture (tu23, vec3(tcoord,xy, layer2)); break;
case : value2 = texture (tu24, vec3(tcoord,xy, layer2)); break;
case : value2 = texture (tu25, vec3(tcoord,xy, layer2)); break;
case : value2 = texture (tu26, vec3(tcoord,xy, layer2)); break;
case : value2 = texture (tu27, vec3(tcoord,xy, layer2)); break;
case : value2 = texture (tu28, vec3(tcoord,xy, layer2)); break;
case : value2 = texture (tu29, vec3(tcoord,xy, layer2)); break;
case : value2 = texture (tu30, vec3(tcoord,xy, layer2)); break;
case : value2 = texture (tu31, vec3(tcoord,xy, layer2)); break;
}
switch (tx3) {
case : value3 = texture (tu00, vec3(tcoord,xy, layer3)); break;
case : value3 = texture (tu01, vec3(tcoord,xy, layer3)); break;
case : value3 = texture (tu02, vec3(tcoord,xy, layer3)); break;
case : value3 = texture (tu03, vec3(tcoord,xy, layer3)); break;
case : value3 = texture (tu04, vec3(tcoord,xy, layer3)); break;
case : value3 = texture (tu05, vec3(tcoord,xy, layer3)); break;
case : value3 = texture (tu06, vec3(tcoord,xy, layer3)); break;
case : value3 = texture (tu07, vec3(tcoord,xy, layer3)); break;
case : value3 = texture (tu08, vec3(tcoord,xy, layer3)); break;
case : value3 = texture (tu09, vec3(tcoord,xy, layer3)); break;
case : value3 = texture (tu10, vec3(tcoord,xy, layer3)); break;
case : value3 = texture (tu11, vec3(tcoord,xy, layer3)); break;
case : value3 = texture (tu12, vec3(tcoord,xy, layer3)); break;
case : value3 = texture (tu13, vec3(tcoord,xy, layer3)); break;
case : value3 = texture (tu14, vec3(tcoord,xy, layer3)); break;
case : value3 = texture (tu15, vec3(tcoord,xy, layer3)); break;
case : value3 = texture (tu16, vec3(tcoord,xy, layer3)); break;
case : value3 = texture (tu17, vec3(tcoord,xy, layer3)); break;
case : value3 = texture (tu18, vec3(tcoord,xy, layer3)); break;
case : value3 = texture (tu19, vec3(tcoord,xy, layer3)); break;
case : value3 = texture (tu20, vec3(tcoord,xy, layer3)); break;
case : value3 = texture (tu21, vec3(tcoord,xy, layer3)); break;
case : value3 = texture (tu22, vec3(tcoord,xy, layer3)); break;
case : value3 = texture (tu23, vec3(tcoord,xy, layer3)); break;
case : value3 = texture (tu24, vec3(tcoord,xy, layer3)); break;
case : value3 = texture (tu25, vec3(tcoord,xy, layer3)); break;
case : value3 = texture (tu26, vec3(tcoord,xy, layer3)); break;
case : value3 = texture (tu27, vec3(tcoord,xy, layer3)); break;
case : value3 = texture (tu28, vec3(tcoord,xy, layer3)); break;
case : value3 = texture (tu29, vec3(tcoord,xy, layer3)); break;
case : value3 = texture (tu30, vec3(tcoord,xy, layer3)); break;
case : value3 = texture (tu31, vec3(tcoord,xy, layer3)); break;
}