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:
authorJeroen Bakker <jeroen@blender.org>2022-01-28 17:00:26 +0300
committerJeroen Bakker <jeroen@blender.org>2022-01-28 17:03:45 +0300
commit75e61e5a6dc70107eaf784a369f225ca062fdcd5 (patch)
tree7a18887c86233f25cb7fc40a0f65635dd91f9257 /source/blender/draw/engines/image/shaders/image_engine_frag.glsl
parent430f71fce289e876602178330ac725c46c043abf (diff)
Image Engine: Use GPUShaderCreateInfo.
Ported the image engine shaders to use the GPUShaderCreateInfo struct. No functional changes.
Diffstat (limited to 'source/blender/draw/engines/image/shaders/image_engine_frag.glsl')
-rw-r--r--source/blender/draw/engines/image/shaders/image_engine_frag.glsl45
1 files changed, 45 insertions, 0 deletions
diff --git a/source/blender/draw/engines/image/shaders/image_engine_frag.glsl b/source/blender/draw/engines/image/shaders/image_engine_frag.glsl
new file mode 100644
index 00000000000..bcdc8445b26
--- /dev/null
+++ b/source/blender/draw/engines/image/shaders/image_engine_frag.glsl
@@ -0,0 +1,45 @@
+#pragma BLENDER_REQUIRE(common_colormanagement_lib.glsl)
+
+/* Keep in sync with image_engine.c */
+#define IMAGE_DRAW_FLAG_SHOW_ALPHA (1 << 0)
+#define IMAGE_DRAW_FLAG_APPLY_ALPHA (1 << 1)
+#define IMAGE_DRAW_FLAG_SHUFFLING (1 << 2)
+#define IMAGE_DRAW_FLAG_DEPTH (1 << 3)
+
+#define Z_DEPTH_BORDER 1.0
+#define Z_DEPTH_IMAGE 0.75
+
+#define FAR_DISTANCE farNearDistances.x
+#define NEAR_DISTANCE farNearDistances.y
+
+bool is_border(vec2 uv)
+{
+ return (uv.x < 0.0 || uv.y < 0.0 || uv.x > maxUv.x || uv.y > maxUv.y);
+}
+
+void main()
+{
+ ivec2 uvs_clamped = ivec2(uv_screen);
+ vec4 tex_color = texelFetch(imageTexture, uvs_clamped, 0);
+
+ bool border = is_border(uv_image);
+ if (!border) {
+ if ((drawFlags & IMAGE_DRAW_FLAG_APPLY_ALPHA) != 0) {
+ if (!imgPremultiplied) {
+ tex_color.rgb *= tex_color.a;
+ }
+ }
+ if ((drawFlags & IMAGE_DRAW_FLAG_DEPTH) != 0) {
+ tex_color = smoothstep(FAR_DISTANCE, NEAR_DISTANCE, tex_color);
+ }
+
+ if ((drawFlags & IMAGE_DRAW_FLAG_SHUFFLING) != 0) {
+ tex_color = col * dot(tex_color, shuffle);
+ }
+ if ((drawFlags & IMAGE_DRAW_FLAG_SHOW_ALPHA) == 0) {
+ tex_color.a = 1.0;
+ }
+ }
+ fragColor = tex_color;
+ gl_FragDepth = border ? Z_DEPTH_BORDER : Z_DEPTH_IMAGE;
+}