Fix T40795: Dot output is inverted in viewport with Cycles

This commit is contained in:
Sergey Sharybin 2014-06-30 16:24:03 +06:00
parent cb95544e41
commit 7dbedf6d4a
Notes: blender-bot 2023-02-14 10:26:02 +01:00
Referenced by issue #40795, Dot output from normal node does work differently in material and rendered viewport shading mode
3 changed files with 12 additions and 1 deletions

View File

@ -147,6 +147,7 @@ void GPU_material_vertex_attributes(GPUMaterial *material,
struct GPUVertexAttribs *attrib);
bool GPU_material_do_color_management(GPUMaterial *mat);
bool GPU_material_use_new_shading_nodes(GPUMaterial *mat);
/* Exported shading */

View File

@ -417,6 +417,11 @@ bool GPU_material_do_color_management(GPUMaterial *mat)
return !((mat->scene->gm.flag & GAME_GLSL_NO_COLOR_MANAGEMENT));
}
bool GPU_material_use_new_shading_nodes(GPUMaterial *mat)
{
return BKE_scene_use_new_shading_nodes(mat->scene);
}
static GPUNodeLink *lamp_get_visibility(GPUMaterial *mat, GPULamp *lamp, GPUNodeLink **lv, GPUNodeLink **dist)
{
GPUNodeLink *visifac, *inpr;

View File

@ -61,7 +61,12 @@ static void node_shader_exec_normal(void *UNUSED(data), int UNUSED(thread), bNod
static int gpu_shader_normal(GPUMaterial *mat, bNode *UNUSED(node), bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
GPUNodeLink *vec = GPU_uniform(out[0].vec);
return GPU_stack_link(mat, "normal", in, out, vec);
int ret = GPU_stack_link(mat, "normal", in, out, vec);
if (ret && GPU_material_use_new_shading_nodes(mat)) {
float fac[3] = {1.0f, 0.0f, 0.0f};
GPU_link(mat, "invert", GPU_uniform(fac), out[1].link, &out[1].link);
}
return ret;
}
void register_node_type_sh_normal(void)