Differential D13910 Diff 47467 source/blender/draw/engines/workbench/shaders/workbench_effect_outline_frag.glsl
Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/engines/workbench/shaders/workbench_effect_outline_frag.glsl
| #pragma BLENDER_REQUIRE(workbench_data_lib.glsl) | |||||
| uniform usampler2D objectIdBuffer; | |||||
| in vec4 uvcoordsvar; | |||||
| out vec4 fragColor; | |||||
| void main() | void main() | ||||
| { | { | ||||
| vec3 offset = vec3(world_data.viewport_size_inv, 0.0) * world_data.ui_scale; | vec3 offset = vec3(world_data.viewport_size_inv, 0.0) * world_data.ui_scale; | ||||
| vec2 uv = uvcoordsvar.st; | vec2 uv = uvcoordsvar.st; | ||||
| uint center_id = texture(objectIdBuffer, uv).r; | uint center_id = texture(objectIdBuffer, uv).r; | ||||
| uvec4 adjacent_ids = uvec4(texture(objectIdBuffer, uv + offset.zy).r, | uvec4 adjacent_ids = uvec4(texture(objectIdBuffer, uv + offset.zy).r, | ||||
| texture(objectIdBuffer, uv - offset.zy).r, | texture(objectIdBuffer, uv - offset.zy).r, | ||||
| texture(objectIdBuffer, uv + offset.xz).r, | texture(objectIdBuffer, uv + offset.xz).r, | ||||
| texture(objectIdBuffer, uv - offset.xz).r); | texture(objectIdBuffer, uv - offset.xz).r); | ||||
| float outline_opacity = 1.0 - dot(vec4(equal(uvec4(center_id), adjacent_ids)), vec4(0.25)); | float outline_opacity = 1.0 - dot(vec4(equal(uvec4(center_id), adjacent_ids)), vec4(0.25)); | ||||
| fragColor = world_data.object_outline_color * outline_opacity; | fragColor = world_data.object_outline_color * outline_opacity; | ||||
| } | } | ||||