diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2019-12-11 02:26:52 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2019-12-11 02:26:52 +0300 |
commit | e0fbea9c0d52744c082454a90487768f406bff5a (patch) | |
tree | 259f9782fee9311ebb6913c1df5da879ad54aa35 | |
parent | e760972221e68d3c81f2ee3687cc71836dde8ae9 (diff) |
Overlay Engine: Armature: Fix bones disapearing with custom bone color
This seems to only affect some drivers. Rendering to multiple targets
without all output variables defined seems to be undefined behavior.
Thanks to gaiaclary for reporting on blendercoders.
4 files changed, 12 insertions, 4 deletions
diff --git a/source/blender/draw/engines/overlay/shaders/armature_envelope_solid_frag.glsl b/source/blender/draw/engines/overlay/shaders/armature_envelope_solid_frag.glsl index d0a8e48657e..1be9a46e8c7 100644 --- a/source/blender/draw/engines/overlay/shaders/armature_envelope_solid_frag.glsl +++ b/source/blender/draw/engines/overlay/shaders/armature_envelope_solid_frag.glsl @@ -6,7 +6,8 @@ flat in vec3 finalStateColor; flat in vec3 finalBoneColor; in vec3 normalView; -out vec4 fragColor; +layout(location = 0) out vec4 fragColor; +layout(location = 1) out vec4 lineOutput; void main() { @@ -22,4 +23,5 @@ void main() fragColor.rgb = mix(finalStateColor, finalBoneColor, fac); fragColor.a = alpha; } + lineOutput = vec4(0.0); } diff --git a/source/blender/draw/engines/overlay/shaders/armature_shape_solid_frag.glsl b/source/blender/draw/engines/overlay/shaders/armature_shape_solid_frag.glsl index 39963344dd8..54cd807edaa 100644 --- a/source/blender/draw/engines/overlay/shaders/armature_shape_solid_frag.glsl +++ b/source/blender/draw/engines/overlay/shaders/armature_shape_solid_frag.glsl @@ -3,9 +3,11 @@ uniform float alpha = 0.6; in vec4 finalColor; -out vec4 fragColor; +layout(location = 0) out vec4 fragColor; +layout(location = 1) out vec4 lineOutput; void main() { fragColor = vec4(finalColor.rgb, alpha); + lineOutput = vec4(0.0); } diff --git a/source/blender/draw/engines/overlay/shaders/armature_sphere_solid_frag.glsl b/source/blender/draw/engines/overlay/shaders/armature_sphere_solid_frag.glsl index 94f339c4561..0ff0fdf0870 100644 --- a/source/blender/draw/engines/overlay/shaders/armature_sphere_solid_frag.glsl +++ b/source/blender/draw/engines/overlay/shaders/armature_sphere_solid_frag.glsl @@ -11,7 +11,8 @@ in vec3 viewPosition; layout(depth_greater) out float gl_FragDepth; #endif -out vec4 fragColor; +layout(location = 0) out vec4 fragColor; +layout(location = 1) out vec4 lineOutput; #define cameraPos ViewMatrixInverse[3].xyz @@ -70,6 +71,7 @@ void main() dither *= (1.0 / 255.0); /* Assume 8bit per color buffer. */ fragColor = vec4(fragColor.rgb + dither, alpha); + lineOutput = vec4(0.0); t /= ray_len; gl_FragDepth = get_depth_from_view_z(ray_dir_view.z * t + ray_ori_view.z); diff --git a/source/blender/draw/engines/overlay/shaders/armature_stick_frag.glsl b/source/blender/draw/engines/overlay/shaders/armature_stick_frag.glsl index ba89619e051..e7696c1ea7d 100644 --- a/source/blender/draw/engines/overlay/shaders/armature_stick_frag.glsl +++ b/source/blender/draw/engines/overlay/shaders/armature_stick_frag.glsl @@ -3,11 +3,13 @@ noperspective in float colorFac; flat in vec4 finalWireColor; flat in vec4 finalInnerColor; -out vec4 fragColor; +layout(location = 0) out vec4 fragColor; +layout(location = 1) out vec4 lineOutput; void main() { float fac = smoothstep(1.0, 0.2, colorFac); fragColor.rgb = mix(finalInnerColor.rgb, finalWireColor.rgb, fac); fragColor.a = 1.0; + lineOutput = vec4(0.0); } |