Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/editors/shaders/image_uv_editor_region_frag.glsl
- This file was added.
| uniform sampler2D image; | |||||
| /* UIResouces.TH_BACK */ | |||||
| uniform vec3 uiColorBackground; | |||||
| uniform vec3 uiColorBackgroundShade; | |||||
| uniform vec4 shuffleChannels; | |||||
| /* Normalize to scene camera far/near plane */ | |||||
| uniform float cameraClipStart = 0.1; | |||||
| uniform float cameraClipEnd = 100.0; | |||||
| uniform float cameraClipScale = 0.01; | |||||
| uniform float gridZoomLevel = 5.0; | |||||
| uniform vec2 halfFragmentSizeUV; | |||||
| in vec2 texCoord_interp; | |||||
| out vec4 fragColor; | |||||
| #ifdef IMAGE_SHADER_FLAG_NORMALIZE_DEPTH | |||||
| float normalize_depth(float input_depth) | |||||
| { | |||||
| float clippedValue = mix(0.0, 1.0, 1.0 - (input_depth - cameraClipStart) * cameraClipScale); | |||||
| clippedValue = clamp(clippedValue, 0.0, 1.0); | |||||
| /* Add a small curvation to show the depth texture better */ | |||||
| clippedValue *= clippedValue; | |||||
| return clippedValue; | |||||
| } | |||||
| #endif /* IMAGE_SHADER_FLAG_NORMALIZE_DEPTH */ | |||||
| #ifndef IMAGE_SHADER_FLAG_VALID_IMAGE | |||||
| float grid_line(vec2 uv, float num_lines) | |||||
| { | |||||
| float inv_num_lines = 64.0; | |||||
| // vec2 line_uv = (mod(((uv * num_lines)), 1.0) - (1.0 - inv_num_lines)) * num_lines; | |||||
| vec2 line_uv = mod(((uv * num_lines)), 1.0); | |||||
| line_uv = abs((line_uv - 0.5) * 2.0); | |||||
| float line = max(line_uv.x, line_uv.y); | |||||
| line = line * inv_num_lines - (inv_num_lines - 1.0); | |||||
| line = clamp(line, 0.0, 1.0); | |||||
| return line; | |||||
| } | |||||
| #endif /* !IMAGE_SHADER_FLAG_VALID_IMAGE */ | |||||
| vec4 sample_texture(vec2 uv) | |||||
| { | |||||
| vec2 clamped_uv; | |||||
| #ifdef IMAGE_SHADER_FLAG_REPEAT_IMAGE | |||||
| clamped_uv = fract(uv); | |||||
| #else /* IMAGE_SHADER_FLAG_REPEAT_IMAGE */ | |||||
| clamped_uv = uv; | |||||
| #endif /* IMAGE_SHADER_FLAG_REPEAT_IMAGE */ | |||||
| return texture(image, clamped_uv); | |||||
| } | |||||
| void main() | |||||
| { | |||||
| vec4 color; | |||||
| #ifndef IMAGE_SHADER_FLAG_REPEAT_IMAGE | |||||
| if (texCoord_interp.x < 0.0 || texCoord_interp.x > 1.0 || texCoord_interp.y < 0.0 || | |||||
| texCoord_interp.y > 1.0) { | |||||
| /* set alpha to 1 so checkerboard does not bleed in */ | |||||
| fragColor = vec4(uiColorBackground, 1.0); | |||||
| return; | |||||
| } | |||||
| #endif /* !IMAGE_SHADER_FLAG_REPEAT_IMAGE */ | |||||
| #ifdef IMAGE_SHADER_FLAG_VALID_IMAGE | |||||
| # ifdef IMAGE_SHADER_FLAG_SMOOTH_DRAW | |||||
| color = (sample_texture(texCoord_interp) + | |||||
| sample_texture(texCoord_interp + vec2(halfFragmentSizeUV.x, -halfFragmentSizeUV.y)) + | |||||
| sample_texture(texCoord_interp + vec2(halfFragmentSizeUV.x, halfFragmentSizeUV.y)) + | |||||
| sample_texture(texCoord_interp + vec2(-halfFragmentSizeUV.x, -halfFragmentSizeUV.y)) + | |||||
| sample_texture(texCoord_interp + vec2(-halfFragmentSizeUV.x, halfFragmentSizeUV.y))) * | |||||
| 0.20; | |||||
| # else /* IMAGE_SHADER_FLAG_SMOOTH_DRAW */ | |||||
| color = sample_texture(image, texCoord_interp); | |||||
| # endif /* IMAGE_SHADER_FLAG_SMOOTH_DRAW */ | |||||
| # ifdef IMAGE_SHADER_FLAG_SHUFFLE_CHANNELS | |||||
| float shuffled_channel = color.r * shuffleChannels.r + color.g * shuffleChannels.g + | |||||
| color.b * shuffleChannels.b + color.a * shuffleChannels.a; | |||||
| # ifdef IMAGE_SHADER_FLAG_NORMALIZE_DEPTH | |||||
| shuffled_channel = normalize_depth(shuffled_channel); | |||||
| # endif /* IMAGE_SHADER_FLAG_NORMALIZE_DEPTH */ | |||||
| color = vec4(shuffled_channel); | |||||
| # endif /* IMAGE_SHADER_FLAG_SHUFFLE_CHANNELS */ | |||||
| # ifndef IMAGE_SHADER_FLAG_USE_ALPHA | |||||
| color.a = 1.0; | |||||
| # endif /* !IMAGE_SHADER_FLAG_USE_ALPHA */ | |||||
| #else /* IMAGE_SHADER_FLAG_VALID_IMAGE */ | |||||
| /* draw grid */ | |||||
| /* TODO: improve render quality */ | |||||
| float zoom_1 = pow(4.0, floor(gridZoomLevel)); | |||||
| float zoom_2 = zoom_1 * 4.0f; | |||||
| float inv_zoom_mix_factor = fract(gridZoomLevel); | |||||
| float line = mix( | |||||
| grid_line(texCoord_interp, zoom_1), grid_line(texCoord_interp, zoom_2), inv_zoom_mix_factor); | |||||
| color.rgb = mix(uiColorBackgroundShade, uiColorBackground, line); | |||||
| color.a = 1.0; | |||||
| #endif /* IMAGE_SHADER_FLAG_VALID_IMAGE */ | |||||
| fragColor = color; | |||||
| } | |||||
| No newline at end of file | |||||