diff options
Diffstat (limited to 'source/blender/draw/engines/workbench/shaders/workbench_material_lib.glsl')
-rw-r--r-- | source/blender/draw/engines/workbench/shaders/workbench_material_lib.glsl | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_material_lib.glsl b/source/blender/draw/engines/workbench/shaders/workbench_material_lib.glsl new file mode 100644 index 00000000000..1d8950e34b3 --- /dev/null +++ b/source/blender/draw/engines/workbench/shaders/workbench_material_lib.glsl @@ -0,0 +1,21 @@ + +layout(std140) uniform material_block +{ + vec4 mat_data[4096]; +}; + +/* If set to -1, the resource handle is used instead. */ +uniform int materialIndex; + +void workbench_material_data_get( + int handle, out vec3 color, out float alpha, out float roughness, out float metallic) +{ + handle = (materialIndex != -1) ? materialIndex : handle; + vec4 data = mat_data[uint(handle) & 0xFFFu]; + color = data.rgb; + + uint encoded_data = floatBitsToUint(data.w); + alpha = float((encoded_data >> 16u) & 0xFFu) * (1.0 / 255.0); + roughness = float((encoded_data >> 8u) & 0xFFu) * (1.0 / 255.0); + metallic = float(encoded_data & 0xFFu) * (1.0 / 255.0); +} |