|
@@ -690,7 +690,7 @@ function setValueV4uiArray( gl, v ) {
|
|
|
}
|
|
|
|
|
|
|
|
|
-// Array of textures (2D / Cube)
|
|
|
+// Array of textures (2D / 3D / Cube / 2DArray)
|
|
|
|
|
|
function setValueT1Array( gl, v, textures ) {
|
|
|
|
|
@@ -708,6 +708,22 @@ function setValueT1Array( gl, v, textures ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
+function setValueT3DArray( gl, v, textures ) {
|
|
|
+
|
|
|
+ const n = v.length;
|
|
|
+
|
|
|
+ const units = allocTexUnits( textures, n );
|
|
|
+
|
|
|
+ gl.uniform1iv( this.addr, units );
|
|
|
+
|
|
|
+ for ( let i = 0; i !== n; ++ i ) {
|
|
|
+
|
|
|
+ textures.setTexture3D( v[ i ] || emptyTexture3d, units[ i ] );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
function setValueT6Array( gl, v, textures ) {
|
|
|
|
|
|
const n = v.length;
|
|
@@ -724,6 +740,23 @@ function setValueT6Array( gl, v, textures ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
+function setValueT2DArrayArray( gl, v, textures ) {
|
|
|
+
|
|
|
+ const n = v.length;
|
|
|
+
|
|
|
+ const units = allocTexUnits( textures, n );
|
|
|
+
|
|
|
+ gl.uniform1iv( this.addr, units );
|
|
|
+
|
|
|
+ for ( let i = 0; i !== n; ++ i ) {
|
|
|
+
|
|
|
+ textures.setTexture2DArray( v[ i ] || emptyTexture2dArray, units[ i ] );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
// Helper to pick the right setter for a pure (bottom-level) array
|
|
|
|
|
|
function getPureArraySetter( type ) {
|
|
@@ -756,12 +789,23 @@ function getPureArraySetter( type ) {
|
|
|
case 0x8b62: // SAMPLER_2D_SHADOW
|
|
|
return setValueT1Array;
|
|
|
|
|
|
+ case 0x8b5f: // SAMPLER_3D
|
|
|
+ case 0x8dcb: // INT_SAMPLER_3D
|
|
|
+ case 0x8dd3: // UNSIGNED_INT_SAMPLER_3D
|
|
|
+ return setValueT3DArray;
|
|
|
+
|
|
|
case 0x8b60: // SAMPLER_CUBE
|
|
|
case 0x8dcc: // INT_SAMPLER_CUBE
|
|
|
case 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE
|
|
|
case 0x8dc5: // SAMPLER_CUBE_SHADOW
|
|
|
return setValueT6Array;
|
|
|
|
|
|
+ case 0x8dc1: // SAMPLER_2D_ARRAY
|
|
|
+ case 0x8dcf: // INT_SAMPLER_2D_ARRAY
|
|
|
+ case 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY
|
|
|
+ case 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW
|
|
|
+ return setValueT2DArrayArray;
|
|
|
+
|
|
|
}
|
|
|
|
|
|
}
|