/* clumsy checking... should do dynamic outputs once */
static void force_hidden_passes(bNode *node, int passflag)
{
	bNodeSocket *sock;
	
	for (sock= node->outputs.first; sock; sock= sock->next)
		sock->flag &= ~SOCK_UNAVAIL;
	
	set_output_visible(node, passflag, RRES_OUT_IMAGE,            SCE_PASS_COMBINED);
	set_output_visible(node, passflag, RRES_OUT_ALPHA,            SCE_PASS_COMBINED);
	
	set_output_visible(node, passflag, RRES_OUT_Z,                SCE_PASS_Z);
	set_output_visible(node, passflag, RRES_OUT_NORMAL,           SCE_PASS_NORMAL);
	set_output_visible(node, passflag, RRES_OUT_VEC,              SCE_PASS_VECTOR);
	set_output_visible(node, passflag, RRES_OUT_UV,               SCE_PASS_UV);
	set_output_visible(node, passflag, RRES_OUT_RGBA,             SCE_PASS_RGBA);
	set_output_visible(node, passflag, RRES_OUT_DIFF,             SCE_PASS_DIFFUSE);
	set_output_visible(node, passflag, RRES_OUT_SPEC,             SCE_PASS_SPEC);
	set_output_visible(node, passflag, RRES_OUT_SHADOW,           SCE_PASS_SHADOW);
	set_output_visible(node, passflag, RRES_OUT_AO,               SCE_PASS_AO);
	set_output_visible(node, passflag, RRES_OUT_REFLECT,          SCE_PASS_REFLECT);
	set_output_visible(node, passflag, RRES_OUT_REFRACT,          SCE_PASS_REFRACT);
	set_output_visible(node, passflag, RRES_OUT_INDIRECT,         SCE_PASS_INDIRECT);
	set_output_visible(node, passflag, RRES_OUT_INDEXOB,          SCE_PASS_INDEXOB);
	set_output_visible(node, passflag, RRES_OUT_INDEXMA,          SCE_PASS_INDEXMA);
	set_output_visible(node, passflag, RRES_OUT_MIST,             SCE_PASS_MIST);
	set_output_visible(node, passflag, RRES_OUT_EMIT,             SCE_PASS_EMIT);
	set_output_visible(node, passflag, RRES_OUT_ENV,              SCE_PASS_ENVIRONMENT);
	set_output_visible(node, passflag, RRES_OUT_DIFF_DIRECT,      SCE_PASS_DIFFUSE_DIRECT);
	set_output_visible(node, passflag, RRES_OUT_DIFF_INDIRECT,    SCE_PASS_DIFFUSE_INDIRECT);
	set_output_visible(node, passflag, RRES_OUT_DIFF_COLOR,       SCE_PASS_DIFFUSE_COLOR);
	set_output_visible(node, passflag, RRES_OUT_GLOSSY_DIRECT,    SCE_PASS_GLOSSY_DIRECT);
	set_output_visible(node, passflag, RRES_OUT_GLOSSY_INDIRECT,  SCE_PASS_GLOSSY_INDIRECT);
	set_output_visible(node, passflag, RRES_OUT_GLOSSY_COLOR,     SCE_PASS_GLOSSY_COLOR);
	set_output_visible(node, passflag, RRES_OUT_TRANSM_DIRECT,    SCE_PASS_TRANSM_DIRECT);
	set_output_visible(node, passflag, RRES_OUT_TRANSM_INDIRECT,  SCE_PASS_TRANSM_INDIRECT);
	set_output_visible(node, passflag, RRES_OUT_TRANSM_COLOR,     SCE_PASS_TRANSM_COLOR);
}
/* clumsy checking... should do dynamic outputs once */
void node_cmp_rlayers_force_hidden_passes(bNode *node)
{
	Scene *scene = (Scene *)node->id;
	SceneRenderLayer *srl;
	int passflag;
	bNodeSocket *sock;
	
	/* must always have valid scene pointer */
	if (!scene)
		return;
	
	srl = BLI_findlink(&scene->r.layers, node->custom1);
	if (!srl)
		return;
	
	passflag = srl->passflag;
	
	for (sock = node->outputs.first; sock; sock = sock->next)
		sock->flag &= ~SOCK_UNAVAIL;
	
	set_output_visible(node, passflag, RRES_OUT_IMAGE,                  SCE_PASS_COMBINED);
	set_output_visible(node, passflag, RRES_OUT_ALPHA,                  SCE_PASS_COMBINED);

	set_output_visible(node, passflag, RRES_OUT_Z,                      SCE_PASS_Z);
	set_output_visible(node, passflag, RRES_OUT_NORMAL,                 SCE_PASS_NORMAL);
	set_output_visible(node, passflag, RRES_OUT_VEC,                    SCE_PASS_VECTOR);
	set_output_visible(node, passflag, RRES_OUT_UV,                     SCE_PASS_UV);
	set_output_visible(node, passflag, RRES_OUT_RGBA,                   SCE_PASS_RGBA);
	set_output_visible(node, passflag, RRES_OUT_DIFF,                   SCE_PASS_DIFFUSE);
	set_output_visible(node, passflag, RRES_OUT_SPEC,                   SCE_PASS_SPEC);
	set_output_visible(node, passflag, RRES_OUT_SHADOW,                 SCE_PASS_SHADOW);
	set_output_visible(node, passflag, RRES_OUT_AO,                     SCE_PASS_AO);
	set_output_visible(node, passflag, RRES_OUT_REFLECT,                SCE_PASS_REFLECT);
	set_output_visible(node, passflag, RRES_OUT_REFRACT,                SCE_PASS_REFRACT);
	set_output_visible(node, passflag, RRES_OUT_INDIRECT,               SCE_PASS_INDIRECT);
	set_output_visible(node, passflag, RRES_OUT_INDEXOB,                SCE_PASS_INDEXOB);
	set_output_visible(node, passflag, RRES_OUT_INDEXMA,                SCE_PASS_INDEXMA);
	set_output_visible(node, passflag, RRES_OUT_MIST,                   SCE_PASS_MIST);
	set_output_visible(node, passflag, RRES_OUT_EMIT,                   SCE_PASS_EMIT);
	set_output_visible(node, passflag, RRES_OUT_ENV,                    SCE_PASS_ENVIRONMENT);
	set_output_visible(node, passflag, RRES_OUT_DIFF_DIRECT,            SCE_PASS_DIFFUSE_DIRECT);
	set_output_visible(node, passflag, RRES_OUT_DIFF_INDIRECT,          SCE_PASS_DIFFUSE_INDIRECT);
	set_output_visible(node, passflag, RRES_OUT_DIFF_COLOR,             SCE_PASS_DIFFUSE_COLOR);
	set_output_visible(node, passflag, RRES_OUT_GLOSSY_DIRECT,          SCE_PASS_GLOSSY_DIRECT);
	set_output_visible(node, passflag, RRES_OUT_GLOSSY_INDIRECT,        SCE_PASS_GLOSSY_INDIRECT);
	set_output_visible(node, passflag, RRES_OUT_GLOSSY_COLOR,           SCE_PASS_GLOSSY_COLOR);
	set_output_visible(node, passflag, RRES_OUT_TRANSM_DIRECT,          SCE_PASS_TRANSM_DIRECT);
	set_output_visible(node, passflag, RRES_OUT_TRANSM_INDIRECT,        SCE_PASS_TRANSM_INDIRECT);
	set_output_visible(node, passflag, RRES_OUT_TRANSM_COLOR,           SCE_PASS_TRANSM_COLOR);
	set_output_visible(node, passflag, RRES_OUT_SUBSURFACE_DIRECT,      SCE_PASS_SUBSURFACE_DIRECT);
	set_output_visible(node, passflag, RRES_OUT_SUBSURFACE_INDIRECT,    SCE_PASS_SUBSURFACE_INDIRECT);
	set_output_visible(node, passflag, RRES_OUT_SUBSURFACE_COLOR,       SCE_PASS_SUBSURFACE_COLOR);
}