Skip to content

Commit dde3494

Browse files
committed
Implement constant wrap mode in shader source to ensure portability across languages.
1 parent f611f6d commit dde3494

File tree

6 files changed

+48
-0
lines changed

6 files changed

+48
-0
lines changed

libraries/stdlib/genglsl/mx_image_color3.glsl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,13 @@
33
void mx_image_color3($texSamplerSignature, int layer, vec3 defaultval, vec2 texcoord, int uaddressmode, int vaddressmode, int filtertype, int framerange, int frameoffset, int frameendaction, vec2 uv_scale, vec2 uv_offset, out vec3 result)
44
{
55
vec2 uv = mx_transform_uv(texcoord, uv_scale, uv_offset);
6+
7+
// "constant" wrap mode directly implemented in shader source because MSL and GLSL implementations don't align
8+
if ((uaddressmode == 0 && (uv[0] < 0 || uv[0] > 1)) || (vaddressmode == 0 && (uv[1] < 0 || uv[1] > 1)))
9+
{
10+
result = defaultval;
11+
return;
12+
}
13+
614
result = texture($texSamplerSampler2D, uv).rgb;
715
}

libraries/stdlib/genglsl/mx_image_color4.glsl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,13 @@
33
void mx_image_color4($texSamplerSignature, int layer, vec4 defaultval, vec2 texcoord, int uaddressmode, int vaddressmode, int filtertype, int framerange, int frameoffset, int frameendaction, vec2 uv_scale, vec2 uv_offset, out vec4 result)
44
{
55
vec2 uv = mx_transform_uv(texcoord, uv_scale, uv_offset);
6+
7+
// "constant" wrap mode directly implemented in shader source because MSL and GLSL implementations don't align
8+
if ((uaddressmode == 0 && (uv[0] < 0 || uv[0] > 1)) || (vaddressmode == 0 && (uv[1] < 0 || uv[1] > 1)))
9+
{
10+
result = defaultval;
11+
return;
12+
}
13+
614
result = texture($texSamplerSampler2D, uv);
715
}

libraries/stdlib/genglsl/mx_image_float.glsl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,13 @@
33
void mx_image_float($texSamplerSignature, int layer, float defaultval, vec2 texcoord, int uaddressmode, int vaddressmode, int filtertype, int framerange, int frameoffset, int frameendaction, vec2 uv_scale, vec2 uv_offset, out float result)
44
{
55
vec2 uv = mx_transform_uv(texcoord, uv_scale, uv_offset);
6+
7+
// "constant" wrap mode directly implemented in shader source because MSL and GLSL implementations don't align
8+
if ((uaddressmode == 0 && (uv[0] < 0 || uv[0] > 1)) || (vaddressmode == 0 && (uv[1] < 0 || uv[1] > 1)))
9+
{
10+
result = defaultval;
11+
return;
12+
}
13+
614
result = texture($texSamplerSampler2D, uv).r;
715
}

libraries/stdlib/genglsl/mx_image_vector2.glsl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,13 @@
33
void mx_image_vector2($texSamplerSignature, int layer, vec2 defaultval, vec2 texcoord, int uaddressmode, int vaddressmode, int filtertype, int framerange, int frameoffset, int frameendaction, vec2 uv_scale, vec2 uv_offset, out vec2 result)
44
{
55
vec2 uv = mx_transform_uv(texcoord, uv_scale, uv_offset);
6+
7+
// "constant" wrap mode directly implemented in shader source because MSL and GLSL implementations don't align
8+
if ((uaddressmode == 0 && (uv[0] < 0 || uv[0] > 1)) || (vaddressmode == 0 && (uv[1] < 0 || uv[1] > 1)))
9+
{
10+
result = defaultval;
11+
return;
12+
}
13+
614
result = texture($texSamplerSampler2D, uv).rg;
715
}

libraries/stdlib/genglsl/mx_image_vector3.glsl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,13 @@
33
void mx_image_vector3($texSamplerSignature, int layer, vec3 defaultval, vec2 texcoord, int uaddressmode, int vaddressmode, int filtertype, int framerange, int frameoffset, int frameendaction, vec2 uv_scale, vec2 uv_offset, out vec3 result)
44
{
55
vec2 uv = mx_transform_uv(texcoord, uv_scale, uv_offset);
6+
7+
// "constant" wrap mode directly implemented in shader source because MSL and GLSL implementations don't align
8+
if ((uaddressmode == 0 && (uv[0] < 0 || uv[0] > 1)) || (vaddressmode == 0 && (uv[1] < 0 || uv[1] > 1)))
9+
{
10+
result = defaultval;
11+
return;
12+
}
13+
614
result = texture($texSamplerSampler2D, uv).rgb;
715
}

libraries/stdlib/genglsl/mx_image_vector4.glsl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,13 @@
33
void mx_image_vector4($texSamplerSignature, int layer, vec4 defaultval, vec2 texcoord, int uaddressmode, int vaddressmode, int filtertype, int framerange, int frameoffset, int frameendaction, vec2 uv_scale, vec2 uv_offset, out vec4 result)
44
{
55
vec2 uv = mx_transform_uv(texcoord, uv_scale, uv_offset);
6+
7+
// "constant" wrap mode directly implemented in shader source because MSL and GLSL implementations don't align
8+
if ((uaddressmode == 0 && (uv[0] < 0 || uv[0] > 1)) || (vaddressmode == 0 && (uv[1] < 0 || uv[1] > 1)))
9+
{
10+
result = defaultval;
11+
return;
12+
}
13+
614
result = texture($texSamplerSampler2D, uv);
715
}

0 commit comments

Comments
 (0)