| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2010-04-11 23:20:03 +00:00
										 |  |  | * $Id$ | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | * | 
					
						
							|  |  |  | * ***** BEGIN GPL LICENSE BLOCK ***** | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | * This program is free software; you can redistribute it and/or | 
					
						
							|  |  |  | * modify it under the terms of the GNU General Public License | 
					
						
							|  |  |  | * as published by the Free Software Foundation; either version 2 | 
					
						
							|  |  |  | * of the License, or (at your option) any later version. | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | * This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  | * GNU General Public License for more details. | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | * You should have received a copy of the GNU General Public License | 
					
						
							|  |  |  | * along with this program; if not, write to the Free Software  Foundation, | 
					
						
							|  |  |  | * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | * The Original Code is Copyright (C) 2005 by the Blender Foundation. | 
					
						
							|  |  |  | * All rights reserved. | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | * Contributor(s): Daniel Dunbar | 
					
						
							|  |  |  | *                 Ton Roosendaal, | 
					
						
							|  |  |  | *                 Ben Batt, | 
					
						
							|  |  |  | *                 Brecht Van Lommel, | 
					
						
							|  |  |  | *                 Campbell Barton | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | * ***** END GPL LICENSE BLOCK ***** | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-25 13:57:17 +00:00
										 |  |  | /** \file blender/modifiers/intern/MOD_displace.c
 | 
					
						
							|  |  |  |  *  \ingroup modifiers | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-12 00:36:50 +00:00
										 |  |  | #include "DNA_meshdata_types.h"
 | 
					
						
							| 
									
										
										
										
											2010-08-04 04:01:27 +00:00
										 |  |  | #include "DNA_object_types.h"
 | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-12 22:33:43 +00:00
										 |  |  | #include "BLI_math.h"
 | 
					
						
							| 
									
										
										
										
											2011-01-07 18:36:47 +00:00
										 |  |  | #include "BLI_utildefines.h"
 | 
					
						
							| 
									
										
										
										
											2011-09-26 18:51:10 +00:00
										 |  |  | #include "BLI_string.h"
 | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-07 19:18:31 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | #include "BKE_cdderivedmesh.h"
 | 
					
						
							|  |  |  | #include "BKE_modifier.h"
 | 
					
						
							|  |  |  | #include "BKE_texture.h"
 | 
					
						
							|  |  |  | #include "BKE_deform.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-12 22:33:43 +00:00
										 |  |  | #include "depsgraph_private.h"
 | 
					
						
							|  |  |  | #include "MEM_guardedalloc.h"
 | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-12 22:33:43 +00:00
										 |  |  | #include "MOD_util.h"
 | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include "RE_shader_ext.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Displace */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void initData(ModifierData *md) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	DisplaceModifierData *dmd = (DisplaceModifierData*) md; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	dmd->texture = NULL; | 
					
						
							|  |  |  | 	dmd->strength = 1; | 
					
						
							|  |  |  | 	dmd->direction = MOD_DISP_DIR_NOR; | 
					
						
							|  |  |  | 	dmd->midlevel = 0.5; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void copyData(ModifierData *md, ModifierData *target) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	DisplaceModifierData *dmd = (DisplaceModifierData*) md; | 
					
						
							|  |  |  | 	DisplaceModifierData *tdmd = (DisplaceModifierData*) target; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	tdmd->texture = dmd->texture; | 
					
						
							|  |  |  | 	tdmd->strength = dmd->strength; | 
					
						
							|  |  |  | 	tdmd->direction = dmd->direction; | 
					
						
							| 
									
										
										
										
											2011-09-26 18:51:10 +00:00
										 |  |  | 	BLI_strncpy(tdmd->defgrp_name, dmd->defgrp_name, 32); | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | 	tdmd->midlevel = dmd->midlevel; | 
					
						
							|  |  |  | 	tdmd->texmapping = dmd->texmapping; | 
					
						
							|  |  |  | 	tdmd->map_object = dmd->map_object; | 
					
						
							| 
									
										
										
										
											2011-09-26 18:51:10 +00:00
										 |  |  | 	BLI_strncpy(tdmd->uvlayer_name, dmd->uvlayer_name, 32); | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-14 06:29:17 +00:00
										 |  |  | static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	DisplaceModifierData *dmd = (DisplaceModifierData *)md; | 
					
						
							|  |  |  | 	CustomDataMask dataMask = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* ask for vertexgroups if we need them */ | 
					
						
							| 
									
										
										
										
											2010-10-21 01:55:39 +00:00
										 |  |  | 	if(dmd->defgrp_name[0]) dataMask |= CD_MASK_MDEFORMVERT; | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/* ask for UV coordinates if we need them */ | 
					
						
							| 
									
										
										
										
											2010-10-21 01:55:39 +00:00
										 |  |  | 	if(dmd->texmapping == MOD_DISP_MAP_UV) dataMask |= CD_MASK_MTFACE; | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return dataMask; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static int dependsOnTime(ModifierData *md) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	DisplaceModifierData *dmd = (DisplaceModifierData *)md; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if(dmd->texture) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		return BKE_texture_dependsOnTime(dmd->texture); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		return 0; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-30 10:51:36 +00:00
										 |  |  | static int dependsOnNormals(ModifierData *md) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	DisplaceModifierData *dmd = (DisplaceModifierData *)md; | 
					
						
							|  |  |  | 	return (dmd->direction == MOD_DISP_DIR_NOR); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | static void foreachObjectLink(ModifierData *md, Object *ob, | 
					
						
							|  |  |  | 						   ObjectWalkFunc walk, void *userData) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	DisplaceModifierData *dmd = (DisplaceModifierData*) md; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	walk(userData, ob, &dmd->map_object); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void foreachIDLink(ModifierData *md, Object *ob, | 
					
						
							|  |  |  | 					   IDWalkFunc walk, void *userData) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	DisplaceModifierData *dmd = (DisplaceModifierData*) md; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	walk(userData, ob, (ID **)&dmd->texture); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	foreachObjectLink(md, ob, (ObjectWalkFunc)walk, userData); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 18:11:22 +00:00
										 |  |  | static void foreachTexLink(ModifierData *md, Object *ob, | 
					
						
							|  |  |  | 					   TexWalkFunc walk, void *userData) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	walk(userData, ob, md, "texture"); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-14 06:29:17 +00:00
										 |  |  | static int isDisabled(ModifierData *md, int UNUSED(useRenderParams)) | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	DisplaceModifierData *dmd = (DisplaceModifierData*) md; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-06-22 15:08:39 +00:00
										 |  |  | 	return (!dmd->texture || dmd->strength == 0.0f); | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-14 06:29:17 +00:00
										 |  |  | static void updateDepgraph(ModifierData *md, DagForest *forest, | 
					
						
							|  |  |  | 						struct Scene *UNUSED(scene), | 
					
						
							|  |  |  | 						Object *UNUSED(ob), | 
					
						
							|  |  |  | 						DagNode *obNode) | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	DisplaceModifierData *dmd = (DisplaceModifierData*) md; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-23 12:03:34 +00:00
										 |  |  | 	if(dmd->map_object && dmd->texmapping == MOD_DISP_MAP_OBJECT) { | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | 		DagNode *curNode = dag_get_node(forest, dmd->map_object); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		dag_add_relation(forest, curNode, obNode, | 
					
						
							|  |  |  | 				 DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "Displace Modifier"); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2010-12-15 13:08:34 +00:00
										 |  |  | 	 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if(dmd->texmapping == MOD_DISP_MAP_GLOBAL) | 
					
						
							|  |  |  | 		dag_add_relation(forest, obNode, obNode, | 
					
						
							|  |  |  | 						 DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "Displace Modifier"); | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* dm must be a CDDerivedMesh */ | 
					
						
							|  |  |  | static void displaceModifier_do( | 
					
						
							|  |  |  | 				DisplaceModifierData *dmd, Object *ob, | 
					
						
							|  |  |  | 	DerivedMesh *dm, float (*vertexCos)[3], int numVerts) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	int i; | 
					
						
							|  |  |  | 	MVert *mvert; | 
					
						
							| 
									
										
										
										
											2011-07-11 09:15:20 +00:00
										 |  |  | 	MDeformVert *dvert; | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | 	int defgrp_index; | 
					
						
							|  |  |  | 	float (*tex_co)[3]; | 
					
						
							| 
									
										
										
										
											2011-06-30 01:40:20 +00:00
										 |  |  | 	float weight= 1.0f; /* init value unused but some compilers may complain */ | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if(!dmd->texture) return; | 
					
						
							| 
									
										
										
										
											2011-04-25 06:27:32 +00:00
										 |  |  | 	if(dmd->strength == 0.0f) return; | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	mvert = CDDM_get_verts(dm); | 
					
						
							| 
									
										
										
										
											2011-07-11 09:15:20 +00:00
										 |  |  | 	modifier_get_vgroup(ob, dm, dmd->defgrp_name, &dvert, &defgrp_index); | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	tex_co = MEM_callocN(sizeof(*tex_co) * numVerts, | 
					
						
							|  |  |  | 				 "displaceModifier_do tex_co"); | 
					
						
							| 
									
										
										
										
											2011-05-01 15:16:59 +00:00
										 |  |  | 	get_texture_coords((MappingInfoModifierData *)dmd, ob, dm, vertexCos, tex_co, numVerts); | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	for(i = 0; i < numVerts; ++i) { | 
					
						
							|  |  |  | 		TexResult texres; | 
					
						
							|  |  |  | 		float delta = 0, strength = dmd->strength; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if(dvert) { | 
					
						
							| 
									
										
										
										
											2011-06-30 01:40:20 +00:00
										 |  |  | 			weight= defvert_find_weight(dvert + i, defgrp_index); | 
					
						
							|  |  |  | 			if(weight == 0.0f) continue; | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		texres.nor = NULL; | 
					
						
							|  |  |  | 		get_texture_value(dmd->texture, tex_co[i], &texres); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		delta = texres.tin - dmd->midlevel; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-06-30 01:40:20 +00:00
										 |  |  | 		if(dvert) strength *= weight; | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		delta *= strength; | 
					
						
							| 
									
										
										
										
											2011-05-24 11:20:33 +00:00
										 |  |  | 		CLAMP(delta, -10000, 10000); | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		switch(dmd->direction) { | 
					
						
							|  |  |  | 			case MOD_DISP_DIR_X: | 
					
						
							|  |  |  | 				vertexCos[i][0] += delta; | 
					
						
							|  |  |  | 				break; | 
					
						
							|  |  |  | 			case MOD_DISP_DIR_Y: | 
					
						
							|  |  |  | 				vertexCos[i][1] += delta; | 
					
						
							|  |  |  | 				break; | 
					
						
							|  |  |  | 			case MOD_DISP_DIR_Z: | 
					
						
							|  |  |  | 				vertexCos[i][2] += delta; | 
					
						
							|  |  |  | 				break; | 
					
						
							|  |  |  | 			case MOD_DISP_DIR_RGB_XYZ: | 
					
						
							|  |  |  | 				vertexCos[i][0] += (texres.tr - dmd->midlevel) * strength; | 
					
						
							|  |  |  | 				vertexCos[i][1] += (texres.tg - dmd->midlevel) * strength; | 
					
						
							|  |  |  | 				vertexCos[i][2] += (texres.tb - dmd->midlevel) * strength; | 
					
						
							|  |  |  | 				break; | 
					
						
							|  |  |  | 			case MOD_DISP_DIR_NOR: | 
					
						
							| 
									
										
										
										
											2011-05-24 11:20:33 +00:00
										 |  |  | 				vertexCos[i][0] += delta * (mvert[i].no[0] / 32767.0f); | 
					
						
							|  |  |  | 				vertexCos[i][1] += delta * (mvert[i].no[1] / 32767.0f); | 
					
						
							|  |  |  | 				vertexCos[i][2] += delta * (mvert[i].no[2] / 32767.0f); | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	MEM_freeN(tex_co); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-14 06:29:17 +00:00
										 |  |  | static void deformVerts(ModifierData *md, Object *ob, | 
					
						
							|  |  |  | 						DerivedMesh *derivedData, | 
					
						
							|  |  |  | 						float (*vertexCos)[3], | 
					
						
							|  |  |  | 						int numVerts, | 
					
						
							|  |  |  | 						int UNUSED(useRenderParams), | 
					
						
							|  |  |  | 						int UNUSED(isFinalCalc)) | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2010-10-14 06:29:17 +00:00
										 |  |  | 	DerivedMesh *dm= get_cddm(ob, NULL, derivedData, vertexCos); | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	displaceModifier_do((DisplaceModifierData *)md, ob, dm, | 
					
						
							|  |  |  | 				 vertexCos, numVerts); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if(dm != derivedData) | 
					
						
							|  |  |  | 		dm->release(dm); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void deformVertsEM( | 
					
						
							| 
									
										
										
										
											2010-04-12 00:36:50 +00:00
										 |  |  | 					   ModifierData *md, Object *ob, struct EditMesh *editData, | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | 	DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2010-10-14 06:29:17 +00:00
										 |  |  | 	DerivedMesh *dm= get_cddm(ob, editData, derivedData, vertexCos); | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	displaceModifier_do((DisplaceModifierData *)md, ob, dm, | 
					
						
							|  |  |  | 				 vertexCos, numVerts); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if(dm != derivedData) | 
					
						
							|  |  |  | 		dm->release(dm); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ModifierTypeInfo modifierType_Displace = { | 
					
						
							|  |  |  | 	/* name */              "Displace", | 
					
						
							|  |  |  | 	/* structName */        "DisplaceModifierData", | 
					
						
							|  |  |  | 	/* structSize */        sizeof(DisplaceModifierData), | 
					
						
							|  |  |  | 	/* type */              eModifierTypeType_OnlyDeform, | 
					
						
							|  |  |  | 	/* flags */             eModifierTypeFlag_AcceptsMesh | 
					
						
							|  |  |  | 							| eModifierTypeFlag_SupportsEditmode, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* copyData */          copyData, | 
					
						
							|  |  |  | 	/* deformVerts */       deformVerts, | 
					
						
							| 
									
										
										
										
											2011-03-05 10:29:10 +00:00
										 |  |  | 	/* deformMatrices */    NULL, | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | 	/* deformVertsEM */     deformVertsEM, | 
					
						
							| 
									
										
										
										
											2011-03-05 10:29:10 +00:00
										 |  |  | 	/* deformMatricesEM */  NULL, | 
					
						
							|  |  |  | 	/* applyModifier */     NULL, | 
					
						
							|  |  |  | 	/* applyModifierEM */   NULL, | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | 	/* initData */          initData, | 
					
						
							|  |  |  | 	/* requiredDataMask */  requiredDataMask, | 
					
						
							| 
									
										
										
										
											2011-03-05 10:29:10 +00:00
										 |  |  | 	/* freeData */          NULL, | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | 	/* isDisabled */        isDisabled, | 
					
						
							|  |  |  | 	/* updateDepgraph */    updateDepgraph, | 
					
						
							|  |  |  | 	/* dependsOnTime */     dependsOnTime, | 
					
						
							| 
									
										
										
										
											2010-09-30 10:51:36 +00:00
										 |  |  | 	/* dependsOnNormals */	dependsOnNormals, | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | 	/* foreachObjectLink */ foreachObjectLink, | 
					
						
							|  |  |  | 	/* foreachIDLink */     foreachIDLink, | 
					
						
							| 
									
										
										
										
											2011-08-12 18:11:22 +00:00
										 |  |  | 	/* foreachTexLink */    foreachTexLink, | 
					
						
							| 
									
										
										
										
											2010-04-11 22:12:30 +00:00
										 |  |  | }; |