This repository has been archived on 2023-10-09. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
blender-archive/source/blender/draw/engines/overlay/shaders/wireframe_frag.glsl
Jun Mizutani db7d8281c5 Add An Opacity Slider to Overlay Wireframe
This patch adds an opacity slider to the wireframe overlay. The previous
wireframe in dense geometry scenes could be too dark and sometimes the
user just wants an impression of the geometry during modelling.

Reviewed By: Jeroen Bakker

Differential Revision: https://developer.blender.org/D7622
2020-11-13 08:14:56 +01:00

55 lines
1.4 KiB
GLSL

/* Scene Depth texture copy for manual depth test. */
uniform sampler2D depthTex;
flat in vec2 edgeStart;
#ifndef SELECT_EDGES
in vec4 finalColor;
noperspective in vec2 edgePos;
layout(location = 0) out vec4 fragColor;
layout(location = 1) out vec4 lineOutput;
#endif
void main()
{
/* Needed only because of wireframe slider.
* If we could get rid of it would be nice because of performance drain of discard. */
if (edgeStart.r == -1.0) {
discard;
}
#ifndef SELECT_EDGES
lineOutput = pack_line_data(gl_FragCoord.xy, edgeStart, edgePos);
fragColor = finalColor;
# ifdef CUSTOM_DEPTH_BIAS
vec2 dir = lineOutput.xy * 2.0 - 1.0;
bool dir_horiz = abs(dir.x) > abs(dir.y);
vec2 uv = gl_FragCoord.xy * sizeViewportInv.xy;
float depth_occluder = texture(depthTex, uv).r;
float depth_min = depth_occluder;
if (dir_horiz) {
depth_min = min(depth_min, texture(depthTex, uv + vec2(-sizeViewportInv.x, 0.0)).r);
depth_min = min(depth_min, texture(depthTex, uv + vec2(sizeViewportInv.x, 0.0)).r);
}
else {
depth_min = min(depth_min, texture(depthTex, uv + vec2(0, -sizeViewportInv.y)).r);
depth_min = min(depth_min, texture(depthTex, uv + vec2(0, sizeViewportInv.y)).r);
}
float delta = abs(depth_occluder - depth_min);
if (gl_FragCoord.z < (depth_occluder + delta) && gl_FragCoord.z > depth_occluder) {
gl_FragDepth = depth_occluder;
}
else {
gl_FragDepth = gl_FragCoord.z;
}
# endif
#endif
}