Support Cycles's checker texture in GLSL shading

This commit is contained in:
Sergey Sharybin 2016-05-20 15:18:40 +02:00
parent 9d19533117
commit 0405bbeae2
2 changed files with 23 additions and 3 deletions

View File

@ -2310,6 +2310,11 @@ float hypot(float x, float y)
return sqrt(x*x + y*y);
}
void generated_from_orco(vec3 orco, out vec3 generated)
{
generated = orco * 0.5 + vec3(0.5);
}
/*********** NEW SHADER NODES ***************/
#define NUM_LIGHTS 3
@ -2576,8 +2581,21 @@ void node_tex_gradient(vec3 co, out vec4 color, out float fac)
void node_tex_checker(vec3 co, vec4 color1, vec4 color2, float scale, out vec4 color, out float fac)
{
color = vec4(1.0);
fac = 1.0;
vec3 p = co * scale;
/* Prevent precision issues on unit coordinates. */
p.x = (p.x + 0.000001)*0.999999;
p.y = (p.y + 0.000001)*0.999999;
p.z = (p.z + 0.000001)*0.999999;
int xi = abs(int(floor(p.x)));
int yi = abs(int(floor(p.y)));
int zi = abs(int(floor(p.z)));
bool check = ((xi % 2 == yi % 2) == bool(zi % 2));
color = check ? color1 : color2;
fac = check ? 1.0 : 0.0;
}
void node_tex_brick(vec3 co, vec4 color1, vec4 color2, vec4 mortar, float scale, float mortar_size, float bias, float brick_width, float row_height, out vec4 color, out float fac)

View File

@ -54,8 +54,10 @@ static void node_shader_init_tex_checker(bNodeTree *UNUSED(ntree), bNode *node)
static int node_shader_gpu_tex_checker(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
{
if (!in[0].link)
if (!in[0].link) {
in[0].link = GPU_attribute(CD_ORCO, "");
GPU_link(mat, "generated_from_orco", in[0].link, &in[0].link);
}
node_shader_gpu_tex_mapping(mat, node, in, out);