Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/draw/engines/gpencil/shaders/gpencil_antialiasing_frag.glsl')
-rw-r--r--source/blender/draw/engines/gpencil/shaders/gpencil_antialiasing_frag.glsl64
1 files changed, 64 insertions, 0 deletions
diff --git a/source/blender/draw/engines/gpencil/shaders/gpencil_antialiasing_frag.glsl b/source/blender/draw/engines/gpencil/shaders/gpencil_antialiasing_frag.glsl
new file mode 100644
index 00000000000..b512b54e392
--- /dev/null
+++ b/source/blender/draw/engines/gpencil/shaders/gpencil_antialiasing_frag.glsl
@@ -0,0 +1,64 @@
+
+uniform sampler2D edgesTex;
+uniform sampler2D areaTex;
+uniform sampler2D searchTex;
+uniform sampler2D blendTex;
+uniform sampler2D colorTex;
+uniform sampler2D revealTex;
+uniform bool onlyAlpha;
+uniform bool doAntiAliasing;
+
+in vec2 uvs;
+in vec2 pixcoord;
+in vec4 offset[3];
+
+#if SMAA_STAGE == 0
+out vec2 fragColor;
+#elif SMAA_STAGE == 1
+out vec4 fragColor;
+#elif SMAA_STAGE == 2
+/* Reminder: Blending func is fragRevealage * DST + fragColor .*/
+layout(location = 0, index = 0) out vec4 outColor;
+layout(location = 0, index = 1) out vec4 outReveal;
+#endif
+
+void main()
+{
+#if SMAA_STAGE == 0
+ /* Detect edges in color and revealage buffer. */
+ fragColor = SMAALumaEdgeDetectionPS(uvs, offset, colorTex);
+ fragColor = max(fragColor, SMAALumaEdgeDetectionPS(uvs, offset, revealTex));
+ /* Discard if there is no edge. */
+ if (dot(fragColor, float2(1.0, 1.0)) == 0.0) {
+ discard;
+ }
+
+#elif SMAA_STAGE == 1
+ fragColor = SMAABlendingWeightCalculationPS(
+ uvs, pixcoord, offset, edgesTex, areaTex, searchTex, vec4(0));
+
+#elif SMAA_STAGE == 2
+ /* Resolve both buffers. */
+ if (doAntiAliasing) {
+ outColor = SMAANeighborhoodBlendingPS(uvs, offset[0], colorTex, blendTex);
+ outReveal = SMAANeighborhoodBlendingPS(uvs, offset[0], revealTex, blendTex);
+ }
+ else {
+ outColor = texture(colorTex, uvs);
+ outReveal = texture(revealTex, uvs);
+ }
+
+ /* Revealage, how much light passes through. */
+ /* Average for alpha channel. */
+ outReveal.a = clamp(dot(outReveal.rgb, vec3(0.333334)), 0.0, 1.0);
+ /* Color buf is already premultiplied. Just add it to the color. */
+ /* Add the alpha. */
+ outColor.a = 1.0 - outReveal.a;
+
+ if (onlyAlpha) {
+ /* Special case in wireframe xray mode. */
+ outColor = vec4(0.0);
+ outReveal.rgb = outReveal.aaa;
+ }
+#endif
+}