diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-01-04 09:39:56 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-01-04 09:39:56 +0400 |
commit | 0bdbdc35b09a671220f830a52be8c1ba0cb3db10 (patch) | |
tree | d06ae5fab86ef02a65001c96ef73195f7c07870d /source | |
parent | 520cb6f452abe67492622f93292525870f6807af (diff) |
de-duplicate wave modifier texture function.
cmon - copying large functions between files is obviously stupid, dont do it!
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/makesdna/DNA_modifier_types.h | 22 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_modifier.c | 38 | ||||
-rw-r--r-- | source/blender/modifiers/intern/MOD_wave.c | 87 |
3 files changed, 14 insertions, 133 deletions
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h index 3a9c742fe12..77fa03aeedc 100644 --- a/source/blender/makesdna/DNA_modifier_types.h +++ b/source/blender/makesdna/DNA_modifier_types.h @@ -313,13 +313,13 @@ typedef struct DisplaceModifierData { char uvlayer_name[32]; int uvlayer_tmp; int texmapping; - int pad10; /* end MappingInfoModifierData */ float strength; int direction; char defgrp_name[32]; float midlevel; + int pad; } DisplaceModifierData; /* DisplaceModifierData->direction */ @@ -413,20 +413,22 @@ typedef struct CastModifierData { typedef struct WaveModifierData { ModifierData modifier; - struct Object *objectcenter; - char defgrp_name[32]; + /* keep in sync with MappingInfoModifierData */ struct Tex *texture; struct Object *map_object; + char uvlayer_name[32]; + int uvlayer_tmp; + int texmapping; + /* end MappingInfoModifierData */ + + struct Object *objectcenter; + char defgrp_name[32]; short flag, pad; float startx, starty, height, width; float narrow, speed, damp, falloff; - int texmapping, uvlayer_tmp; - - char uvlayer_name[32]; - float timeoffs, lifetime; float pad1; } WaveModifierData; @@ -815,19 +817,17 @@ typedef struct WarpModifierData { char uvlayer_name[32]; int uvlayer_tmp; int texmapping; - int pad10; /* end MappingInfoModifierData */ - float strength; - struct Object *object_from; struct Object *object_to; struct CurveMapping *curfalloff; char defgrp_name[32]; /* optional vertexgroup name */ + float strength; float falloff_radius; char flag; /* not used yet */ char falloff_type; - char pad[2]; + char pad[6]; } WarpModifierData; #define MOD_WARP_VOLUME_PRESERVE 1 diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c index 270c0e36fe5..3a7d453fa79 100644 --- a/source/blender/makesrna/intern/rna_modifier.c +++ b/source/blender/makesrna/intern/rna_modifier.c @@ -452,12 +452,6 @@ static void RNA_WarpModifier_vgroup_set(PointerRNA *ptr, const char *value) rna_object_vgroup_name_set(ptr, value, tmd->defgrp_name, sizeof(tmd->defgrp_name)); } -static void rna_WaveModifier_uvlayer_set(PointerRNA *ptr, const char *value) -{ - WaveModifierData *wmd= (WaveModifierData*)ptr->data; - rna_object_uvlayer_name_set(ptr, value, wmd->uvlayer_name, sizeof(wmd->uvlayer_name)); -} - static void rna_WeightVGModifier_mask_uvlayer_set(PointerRNA *ptr, const char *value) { ModifierData *md = (ModifierData*)ptr->data; @@ -1125,13 +1119,6 @@ static void rna_def_modifier_wave(BlenderRNA *brna) StructRNA *srna; PropertyRNA *prop; - static EnumPropertyItem prop_texture_coordinates_items[] = { - {MOD_DISP_MAP_LOCAL, "LOCAL", 0, "Local", ""}, - {MOD_DISP_MAP_GLOBAL, "GLOBAL", 0, "Global", ""}, - {MOD_DISP_MAP_OBJECT, "OBJECT", 0, "Object", ""}, - {MOD_DISP_MAP_UV, "MAP_UV", 0, "UV", ""}, - {0, NULL, 0, NULL, NULL}}; - srna= RNA_def_struct(brna, "WaveModifier", "Modifier"); RNA_def_struct_ui_text(srna, "Wave Modifier", "Wave effect modifier"); RNA_def_struct_sdna(srna, "WaveModifierData"); @@ -1223,29 +1210,6 @@ static void rna_def_modifier_wave(BlenderRNA *brna) RNA_def_property_string_funcs(prop, NULL, NULL, "rna_WaveModifier_vgroup_set"); RNA_def_property_update(prop, 0, "rna_Modifier_update"); - prop= RNA_def_property(srna, "texture", PROP_POINTER, PROP_NONE); - RNA_def_property_ui_text(prop, "Texture", "Texture for modulating the wave"); - RNA_def_property_flag(prop, PROP_EDITABLE); - RNA_def_property_update(prop, 0, "rna_Modifier_update"); - - prop= RNA_def_property(srna, "texture_coords", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_sdna(prop, NULL, "texmapping"); - RNA_def_property_enum_items(prop, prop_texture_coordinates_items); - RNA_def_property_ui_text(prop, "Texture Coordinates", "Texture coordinates used for modulating input"); - RNA_def_property_update(prop, 0, "rna_Modifier_update"); - - prop= RNA_def_property(srna, "uv_layer", PROP_STRING, PROP_NONE); - RNA_def_property_string_sdna(prop, NULL, "uvlayer_name"); - RNA_def_property_ui_text(prop, "UV Map", "UV map name"); - RNA_def_property_string_funcs(prop, NULL, NULL, "rna_WaveModifier_uvlayer_set"); - RNA_def_property_update(prop, 0, "rna_Modifier_update"); - - prop= RNA_def_property(srna, "texture_coords_object", PROP_POINTER, PROP_NONE); - RNA_def_property_pointer_sdna(prop, NULL, "map_object"); - RNA_def_property_ui_text(prop, "Texture Coordinates Object", ""); - RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK); - RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update"); - prop= RNA_def_property(srna, "speed", PROP_FLOAT, PROP_NONE); RNA_def_property_range(prop, -FLT_MAX, FLT_MAX); RNA_def_property_ui_range(prop, -1, 1, 10, 2); @@ -1270,6 +1234,8 @@ static void rna_def_modifier_wave(BlenderRNA *brna) RNA_def_property_ui_range(prop, 0, 10, 10, 2); RNA_def_property_ui_text(prop, "Narrowness", "Distance between the top and the base of a wave, the higher the value, the more narrow the wave"); RNA_def_property_update(prop, 0, "rna_Modifier_update"); + + rna_def_modifier_generic_map_info(srna); } static void rna_def_modifier_armature(BlenderRNA *brna) diff --git a/source/blender/modifiers/intern/MOD_wave.c b/source/blender/modifiers/intern/MOD_wave.c index c78f8eebb42..e83aa9e3fb9 100644 --- a/source/blender/modifiers/intern/MOD_wave.c +++ b/source/blender/modifiers/intern/MOD_wave.c @@ -170,91 +170,6 @@ static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) return dataMask; } -static void wavemod_get_texture_coords(WaveModifierData *wmd, Object *ob, - DerivedMesh *dm, - float (*co)[3], float (*texco)[3], - int numVerts) -{ - int i; - int texmapping = wmd->texmapping; - - if(texmapping == MOD_DISP_MAP_OBJECT) { - if(wmd->map_object) - invert_m4_m4(wmd->map_object->imat, wmd->map_object->obmat); - else /* if there is no map object, default to local */ - texmapping = MOD_DISP_MAP_LOCAL; - } - - /* UVs need special handling, since they come from faces */ - if(texmapping == MOD_DISP_MAP_UV) { - if(CustomData_has_layer(&dm->faceData, CD_MTFACE)) { - MFace *mface = dm->getFaceArray(dm); - MFace *mf; - char *done = MEM_callocN(sizeof(*done) * numVerts, - "get_texture_coords done"); - int numFaces = dm->getNumFaces(dm); - char uvname[32]; - MTFace *tf; - - CustomData_validate_layer_name(&dm->faceData, CD_MTFACE, wmd->uvlayer_name, uvname); - tf = CustomData_get_layer_named(&dm->faceData, CD_MTFACE, uvname); - - /* verts are given the UV from the first face that uses them */ - for(i = 0, mf = mface; i < numFaces; ++i, ++mf, ++tf) { - if(!done[mf->v1]) { - texco[mf->v1][0] = tf->uv[0][0]; - texco[mf->v1][1] = tf->uv[0][1]; - texco[mf->v1][2] = 0; - done[mf->v1] = 1; - } - if(!done[mf->v2]) { - texco[mf->v2][0] = tf->uv[1][0]; - texco[mf->v2][1] = tf->uv[1][1]; - texco[mf->v2][2] = 0; - done[mf->v2] = 1; - } - if(!done[mf->v3]) { - texco[mf->v3][0] = tf->uv[2][0]; - texco[mf->v3][1] = tf->uv[2][1]; - texco[mf->v3][2] = 0; - done[mf->v3] = 1; - } - if(!done[mf->v4]) { - texco[mf->v4][0] = tf->uv[3][0]; - texco[mf->v4][1] = tf->uv[3][1]; - texco[mf->v4][2] = 0; - done[mf->v4] = 1; - } - } - - /* remap UVs from [0, 1] to [-1, 1] */ - for(i = 0; i < numVerts; ++i) { - texco[i][0] = texco[i][0] * 2 - 1; - texco[i][1] = texco[i][1] * 2 - 1; - } - - MEM_freeN(done); - return; - } else /* if there are no UVs, default to local */ - texmapping = MOD_DISP_MAP_LOCAL; - } - - for(i = 0; i < numVerts; ++i, ++co, ++texco) { - switch(texmapping) { - case MOD_DISP_MAP_LOCAL: - copy_v3_v3(*texco, *co); - break; - case MOD_DISP_MAP_GLOBAL: - mul_v3_m4v3(*texco, ob->obmat, *co); - break; - case MOD_DISP_MAP_OBJECT: - mul_v3_m4v3(*texco, ob->obmat, *co); - mul_m4_v3(wmd->map_object->imat, *texco); - break; - } - } -} - static void waveModifier_do(WaveModifierData *md, Scene *scene, Object *ob, DerivedMesh *dm, float (*vertexCos)[3], int numVerts) @@ -305,7 +220,7 @@ static void waveModifier_do(WaveModifierData *md, if(wmd->texture) { tex_co = MEM_mallocN(sizeof(*tex_co) * numVerts, "waveModifier_do tex_co"); - wavemod_get_texture_coords(wmd, ob, dm, vertexCos, tex_co, numVerts); + get_texture_coords((MappingInfoModifierData *)wmd, ob, dm, vertexCos, tex_co, numVerts); } if(lifefac != 0.0f) { |