Changeset View
Changeset View
Standalone View
Standalone View
source/blender/gpu/shaders/gpu_shader_material.glsl
| Context not available. | |||||
| return x - i; | return x - i; | ||||
| } | } | ||||
| vec4 image_texture_lookup(sampler2D ima, vec2 co, bool use_alpha, int extension) | |||||
| { | |||||
| if (extension == 1 /* SHD_IMAGE_EXTENSION_EXTEND */) { | |||||
| vec2 texel = 1.0 / textureSize(ima, 0); | |||||
| co.x = clamp(co.x, 0.0 + texel.x * 0.5, 1.0 - texel.x * 0.5); | |||||
| co.y = clamp(co.y, 0.0 + texel.y * 0.5, 1.0 - texel.y * 0.5); | |||||
| } | |||||
| else if (extension == 2 /* SHD_IMAGE_EXTENSION_CLIP */) { | |||||
| if (co.x < 0.0 || co.y < 0.0 || co.x > 1.0 || co.y > 1.0) | |||||
| return vec4(0.0); | |||||
| } | |||||
| vec4 color = texture2D(ima, co); | |||||
| if (use_alpha) | |||||
| color.rgb *= color.a; | |||||
| return color; | |||||
| } | |||||
| /*********** NEW SHADER NODES ***************/ | /*********** NEW SHADER NODES ***************/ | ||||
| #define NUM_LIGHTS 3 | #define NUM_LIGHTS 3 | ||||
| Context not available. | |||||
| color = vec4(1.0, 0.0, 1.0, 1.0); | color = vec4(1.0, 0.0, 1.0, 1.0); | ||||
| } | } | ||||
| void node_tex_image(vec3 co, sampler2D ima, out vec4 color, out float alpha) | void node_tex_image(vec3 co, | ||||
| sampler2D ima, | |||||
| float use_alpha, | |||||
| float extension, | |||||
| out vec4 color, | |||||
| out float alpha) | |||||
| { | { | ||||
| color = texture2D(ima, co.xy); | color = image_texture_lookup(ima, co.xy, bool(use_alpha), int(extension)); | ||||
| alpha = color.a; | alpha = color.a; | ||||
| color.a = 1.0; | |||||
| } | } | ||||
| void node_tex_image_box(vec3 texco, | void node_tex_image_box(vec3 texco, | ||||
| vec3 nob, | vec3 nob, | ||||
| sampler2D ima, | sampler2D ima, | ||||
| float use_alpha, | |||||
| float extension, | |||||
| float blend, | float blend, | ||||
| out vec4 color, | out vec4 color, | ||||
| out float alpha) | out float alpha) | ||||
| Context not available. | |||||
| /* Desperate mode, no valid choice anyway, fallback to one side.*/ | /* Desperate mode, no valid choice anyway, fallback to one side.*/ | ||||
| weight.x = 1.0; | weight.x = 1.0; | ||||
| } | } | ||||
| color = vec4(0); | color = vec4(0); | ||||
| if (weight.x > 0.0) { | if (weight.x > 0.0) { | ||||
| color += weight.x * texture2D(ima, texco.yz); | color += weight.x * image_texture_lookup(ima, | ||||
| texco.yz, | |||||
| bool(use_alpha), | |||||
| int(extension)); | |||||
| } | } | ||||
| if (weight.y > 0.0) { | if (weight.y > 0.0) { | ||||
| color += weight.y * texture2D(ima, texco.xz); | color += weight.y * image_texture_lookup(ima, | ||||
| texco.xz, | |||||
| bool(use_alpha), | |||||
| int(extension)); | |||||
| } | } | ||||
| if (weight.z > 0.0) { | if (weight.z > 0.0) { | ||||
| color += weight.z * texture2D(ima, texco.yx); | color += weight.z * image_texture_lookup(ima, | ||||
| texco.yx, | |||||
| bool(use_alpha), | |||||
| int(extension)); | |||||
| } | } | ||||
| alpha = color.a; | alpha = color.a; | ||||
| color.a = 1.0; | |||||
| } | } | ||||
| void node_tex_image_empty(vec3 co, out vec4 color, out float alpha) | void node_tex_image_empty(vec3 co, out vec4 color, out float alpha) | ||||
| Context not available. | |||||
| { | { | ||||
| vec3 normal; | vec3 normal; | ||||
| vec2 tex; | vec2 tex; | ||||
| #ifndef USE_OPENSUBDIV | #ifndef USE_OPENSUBDIV | ||||
| /* remap to 0.0 - 1.0 range. This is done because OpenGL 2.0 clamps colors | /* remap to 0.0 - 1.0 range. This is done because OpenGL 2.0 clamps colors | ||||
| * between shader stages and we want the full range of the normal */ | * between shader stages and we want the full range of the normal */ | ||||
| Context not available. | |||||