Differential D13910 Diff 47377 source/blender/draw/engines/workbench/shaders/workbench_material_lib.glsl
Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/engines/workbench/shaders/workbench_material_lib.glsl
| 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( | void workbench_material_data_get( | ||||
| int handle, out vec3 color, out float alpha, out float roughness, out float metallic) | int handle, out vec3 color, out float alpha, out float roughness, out float metallic) | ||||
| { | { | ||||
| handle = (materialIndex != -1) ? materialIndex : handle; | handle = (materialIndex != -1) ? materialIndex : handle; | ||||
| vec4 data = mat_data[uint(handle) & 0xFFFu]; | vec4 data = materials_data[uint(handle) & 0xFFFu]; | ||||
| color = data.rgb; | color = data.rgb; | ||||
| uint encoded_data = floatBitsToUint(data.w); | uint encoded_data = floatBitsToUint(data.w); | ||||
| alpha = float((encoded_data >> 16u) & 0xFFu) * (1.0 / 255.0); | alpha = float((encoded_data >> 16u) & 0xFFu) * (1.0 / 255.0); | ||||
| roughness = float((encoded_data >> 8u) & 0xFFu) * (1.0 / 255.0); | roughness = float((encoded_data >> 8u) & 0xFFu) * (1.0 / 255.0); | ||||
| metallic = float(encoded_data & 0xFFu) * (1.0 / 255.0); | metallic = float(encoded_data & 0xFFu) * (1.0 / 255.0); | ||||
| } | } | ||||