diff options
author | Sergej Reich <sergej.reich@googlemail.com> | 2013-11-23 20:17:12 +0400 |
---|---|---|
committer | Sergej Reich <sergej.reich@googlemail.com> | 2013-11-23 20:17:12 +0400 |
commit | 39dc956f593b3406bf1d81fb83c557b7b51f5327 (patch) | |
tree | 50b59815aad48902a6563aefc8b944daf34c401e /source/blender/gpu | |
parent | 5d5176095e82b34499e15d74f1fb76d56f4d9508 (diff) | |
parent | d846c9a3b75c3d6f20bc7ab7d2da6cdd18bbbef2 (diff) |
Merge branch 'master' into soc-2013-rigid_body_simsoc-2013-rigid_body_sim
Conflicts:
intern/rigidbody/CMakeLists.txt
release/datafiles/splash.png
source/blender/editors/space_view3d/drawobject.c
source/blender/makesdna/DNA_view3d_types.h
Diffstat (limited to 'source/blender/gpu')
-rw-r--r-- | source/blender/gpu/intern/gpu_codegen.c | 2 | ||||
-rw-r--r-- | source/blender/gpu/shaders/gpu_shader_material.glsl | 45 |
2 files changed, 45 insertions, 2 deletions
diff --git a/source/blender/gpu/intern/gpu_codegen.c b/source/blender/gpu/intern/gpu_codegen.c index d7919125fee..8e0d0e55709 100644 --- a/source/blender/gpu/intern/gpu_codegen.c +++ b/source/blender/gpu/intern/gpu_codegen.c @@ -65,7 +65,7 @@ static char *glsl_material_library = NULL; /* structs and defines */ -static const char* GPU_DATATYPE_STR[17] = {"", "float", "vec2", "vec3", "vec4", +static const char *GPU_DATATYPE_STR[17] = {"", "float", "vec2", "vec3", "vec4", NULL, NULL, NULL, NULL, "mat3", NULL, NULL, NULL, NULL, NULL, NULL, "mat4"}; #define LINK_IMAGE_BLENDER 1 diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl index 633112095a7..f5881cdc923 100644 --- a/source/blender/gpu/shaders/gpu_shader_material.glsl +++ b/source/blender/gpu/shaders/gpu_shader_material.glsl @@ -393,11 +393,21 @@ void set_rgb_zero(out vec3 outval) outval = vec3(0.0); } +void set_rgb_one(out vec3 outval) +{ + outval = vec3(1.0); +} + void set_rgba_zero(out vec4 outval) { outval = vec4(0.0); } +void set_rgba_one(out vec4 outval) +{ + outval = vec4(1.0); +} + void brightness_contrast(vec4 col, float brightness, float contrast, out vec4 outcol) { float a = 1.0 + contrast; @@ -725,6 +735,21 @@ void combine_rgb(float r, float g, float b, out vec4 col) col = vec4(r, g, b, 1.0); } +void separate_hsv(vec4 col, out float h, out float s, out float v) +{ + vec4 hsv; + + rgb_to_hsv(col, hsv); + h = hsv[0]; + s = hsv[1]; + v = hsv[2]; +} + +void combine_hsv(float h, float s, float v, out vec4 col) +{ + hsv_to_rgb(vec4(h, s, v, 1.0), col); +} + void output_node(vec4 rgb, float alpha, out vec4 outrgb) { outrgb = vec4(rgb.rgb, alpha); @@ -2131,7 +2156,25 @@ void node_add_shader(vec4 shader1, vec4 shader2, out vec4 shader) void node_fresnel(float ior, vec3 N, vec3 I, out float result) { float eta = max(ior, 0.00001); - result = fresnel_dielectric(I, N, (gl_FrontFacing)? eta: 1.0/eta); + result = fresnel_dielectric(normalize(I), N, (gl_FrontFacing)? eta: 1.0/eta); +} + +/* layer_weight */ + +void node_layer_weight(float blend, vec3 N, vec3 I, out float fresnel, out float facing) +{ + /* fresnel */ + float eta = max(1.0 - blend, 0.00001); + fresnel = fresnel_dielectric(normalize(I), N, (gl_FrontFacing)? 1.0/eta : eta ); + + /* facing */ + facing = abs(dot(normalize(I), N)); + if(blend != 0.5) { + blend = clamp(blend, 0.0, 0.99999); + blend = (blend < 0.5)? 2.0*blend: 0.5/(1.0 - blend); + facing = pow(facing, blend); + } + facing = 1.0 - facing; } /* gamma */ |