diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-09-30 16:11:27 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-09-30 16:11:27 +0400 |
commit | ae25238f41a949696cd95d1aeecd778ddb7cdce1 (patch) | |
tree | a5c0e8796f62c9920a5494c30eb3574d2a4aef56 /source | |
parent | 31e6181187926f4dfb1bf3c62605b0e2b5bc237c (diff) |
Fix #36882: cycles gamma node not working with glsl materials.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/gpu/shaders/gpu_shader_material.glsl | 14 | ||||
-rw-r--r-- | source/blender/nodes/shader/nodes/node_shader_gamma.c | 6 |
2 files changed, 20 insertions, 0 deletions
diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl index bab677da842..633112095a7 100644 --- a/source/blender/gpu/shaders/gpu_shader_material.glsl +++ b/source/blender/gpu/shaders/gpu_shader_material.glsl @@ -2134,6 +2134,20 @@ void node_fresnel(float ior, vec3 N, vec3 I, out float result) result = fresnel_dielectric(I, N, (gl_FrontFacing)? eta: 1.0/eta); } +/* gamma */ + +void node_gamma(vec4 col, float gamma, out vec4 outcol) +{ + outcol = col; + + if(col.r > 0.0) + outcol.r = compatible_pow(col.r, gamma); + if(col.g > 0.0) + outcol.g = compatible_pow(col.g, gamma); + if(col.b > 0.0) + outcol.b = compatible_pow(col.b, gamma); +} + /* geometry */ void node_attribute(vec3 attr_uv, out vec4 outcol, out vec3 outvec, out float outf) diff --git a/source/blender/nodes/shader/nodes/node_shader_gamma.c b/source/blender/nodes/shader/nodes/node_shader_gamma.c index fad1a69d364..9956fd712c8 100644 --- a/source/blender/nodes/shader/nodes/node_shader_gamma.c +++ b/source/blender/nodes/shader/nodes/node_shader_gamma.c @@ -41,6 +41,11 @@ static bNodeSocketTemplate sh_node_gamma_out[] = { { -1, 0, "" } }; +static int node_shader_gpu_gamma(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out) +{ + return GPU_stack_link(mat, "node_gamma", in, out); +} + void register_node_type_sh_gamma(void) { static bNodeType ntype; @@ -50,6 +55,7 @@ void register_node_type_sh_gamma(void) node_type_socket_templates(&ntype, sh_node_gamma_in, sh_node_gamma_out); node_type_init(&ntype, NULL); node_type_storage(&ntype, "", NULL, NULL); + node_type_gpu(&ntype, node_shader_gpu_gamma); nodeRegisterType(&ntype); } |