diff options
-rw-r--r-- | source/blender/blenkernel/BKE_texture.h | 5 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/texture.c | 105 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_brush.c | 18 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_lamp.c | 20 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_material.c | 18 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_world.c | 22 |
6 files changed, 119 insertions, 69 deletions
diff --git a/source/blender/blenkernel/BKE_texture.h b/source/blender/blenkernel/BKE_texture.h index 407dc94adfa..c7a6e20cc8b 100644 --- a/source/blender/blenkernel/BKE_texture.h +++ b/source/blender/blenkernel/BKE_texture.h @@ -75,6 +75,11 @@ struct Tex *give_current_lamp_texture(struct Lamp *la); struct Tex *give_current_world_texture(struct World *world); struct Tex *give_current_brush_texture(struct Brush *br); +void set_current_brush_texture(struct Brush *br, struct Tex *tex); +void set_current_world_texture(struct World *wo, struct Tex *tex); +void set_current_material_texture(struct Material *ma, struct Tex *tex); +void set_current_lamp_texture(struct Lamp *la, struct Tex *tex); + struct TexMapping *add_mapping(void); void init_mapping(struct TexMapping *texmap); diff --git a/source/blender/blenkernel/intern/texture.c b/source/blender/blenkernel/intern/texture.c index f09abf93bb8..d1c26b5a1b4 100644 --- a/source/blender/blenkernel/intern/texture.c +++ b/source/blender/blenkernel/intern/texture.c @@ -840,6 +840,28 @@ Tex *give_current_lamp_texture(Lamp *la) return tex; } +void set_current_lamp_texture(Lamp *la, Tex *newtex) +{ + int act= la->texact; + + if(la->mtex[act] && la->mtex[act]->tex) + id_us_min(&la->mtex[act]->tex->id); + + if(newtex) { + if(!la->mtex[act]) { + la->mtex[act]= add_mtex(); + la->mtex[act]->texco= TEXCO_GLOB; + } + + la->mtex[act]->tex= newtex; + id_us_plus(&newtex->id); + } + else if(la->mtex[act]) { + MEM_freeN(la->mtex[act]); + la->mtex[act]= NULL; + } +} + Tex *give_current_material_texture(Material *ma) { MTex *mtex= NULL; @@ -867,6 +889,47 @@ Tex *give_current_material_texture(Material *ma) return tex; } +void set_current_material_texture(Material *ma, Tex *newtex) +{ + Tex *tex= NULL; + bNode *node; + + if(ma && ma->use_nodes && ma->nodetree) { + node= nodeGetActiveID(ma->nodetree, ID_TE); + + if(node) { + tex= (Tex *)node->id; + id_us_min(&tex->id); + node->id= &newtex->id; + id_us_plus(&newtex->id); + ma= NULL; + } + else { + node= nodeGetActiveID(ma->nodetree, ID_MA); + if(node) + ma= (Material*)node->id; + } + } + if(ma) { + int act= (int)ma->texact; + + tex= (ma->mtex[act])? ma->mtex[act]->tex: NULL; + id_us_min(&tex->id); + + if(newtex) { + if(!ma->mtex[act]) + ma->mtex[act]= add_mtex(); + + ma->mtex[act]->tex= newtex; + id_us_plus(&newtex->id); + } + else if(ma->mtex[act]) { + MEM_freeN(ma->mtex[act]); + ma->mtex[act]= NULL; + } + } +} + Tex *give_current_world_texture(World *world) { MTex *mtex= NULL; @@ -880,6 +943,28 @@ Tex *give_current_world_texture(World *world) return tex; } +void set_current_world_texture(World *wo, Tex *newtex) +{ + int act= wo->texact; + + if(wo->mtex[act] && wo->mtex[act]->tex) + id_us_min(&wo->mtex[act]->tex->id); + + if(newtex) { + if(!wo->mtex[act]) { + wo->mtex[act]= add_mtex(); + wo->mtex[act]->texco= TEXCO_VIEW; + } + + wo->mtex[act]->tex= newtex; + id_us_plus(&newtex->id); + } + else if(wo->mtex[act]) { + MEM_freeN(wo->mtex[act]); + wo->mtex[act]= NULL; + } +} + Tex *give_current_brush_texture(Brush *br) { MTex *mtex= NULL; @@ -893,6 +978,26 @@ Tex *give_current_brush_texture(Brush *br) return tex; } +void set_current_brush_texture(Brush *br, Tex *newtex) +{ + int act= br->texact; + + if(br->mtex[act] && br->mtex[act]->tex) + id_us_min(&br->mtex[act]->tex->id); + + if(newtex) { + if(!br->mtex[act]) + br->mtex[act]= add_mtex(); + + br->mtex[act]->tex= newtex; + id_us_plus(&newtex->id); + } + else if(br->mtex[act]) { + MEM_freeN(br->mtex[act]); + br->mtex[act]= NULL; + } +} + /* ------------------------------------------------------------------------- */ EnvMap *BKE_add_envmap(void) diff --git a/source/blender/makesrna/intern/rna_brush.c b/source/blender/makesrna/intern/rna_brush.c index e87c8434a7d..e9744c7f5ed 100644 --- a/source/blender/makesrna/intern/rna_brush.c +++ b/source/blender/makesrna/intern/rna_brush.c @@ -65,29 +65,15 @@ static PointerRNA rna_Brush_active_texture_get(PointerRNA *ptr) Brush *br= (Brush*)ptr->data; Tex *tex; - tex= (br->mtex[(int)br->texact])? br->mtex[(int)br->texact]->tex: NULL; + tex= give_current_brush_texture(br); return rna_pointer_inherit_refine(ptr, &RNA_Texture, tex); } static void rna_Brush_active_texture_set(PointerRNA *ptr, PointerRNA value) { Brush *br= (Brush*)ptr->data; - int act= br->texact; - if(br->mtex[act] && br->mtex[act]->tex) - id_us_min(&br->mtex[act]->tex->id); - - if(value.data) { - if(!br->mtex[act]) - br->mtex[act]= add_mtex(); - - br->mtex[act]->tex= value.data; - id_us_plus(&br->mtex[act]->tex->id); - } - else if(br->mtex[act]) { - MEM_freeN(br->mtex[act]); - br->mtex[act]= NULL; - } + set_current_brush_texture(br, value.data); } static void rna_Brush_update(bContext *C, PointerRNA *ptr) diff --git a/source/blender/makesrna/intern/rna_lamp.c b/source/blender/makesrna/intern/rna_lamp.c index 3d3333a7eed..88d9a496840 100644 --- a/source/blender/makesrna/intern/rna_lamp.c +++ b/source/blender/makesrna/intern/rna_lamp.c @@ -69,31 +69,15 @@ static PointerRNA rna_Lamp_active_texture_get(PointerRNA *ptr) Lamp *la= (Lamp*)ptr->data; Tex *tex; - tex= (la->mtex[(int)la->texact])? la->mtex[(int)la->texact]->tex: NULL; + tex= give_current_lamp_texture(la); return rna_pointer_inherit_refine(ptr, &RNA_Texture, tex); } static void rna_Lamp_active_texture_set(PointerRNA *ptr, PointerRNA value) { Lamp *la= (Lamp*)ptr->data; - int act= la->texact; - if(la->mtex[act] && la->mtex[act]->tex) - id_us_min(&la->mtex[act]->tex->id); - - if(value.data) { - if(!la->mtex[act]) { - la->mtex[act]= add_mtex(); - la->mtex[act]->texco= TEXCO_GLOB; - } - - la->mtex[act]->tex= value.data; - id_us_plus(&la->mtex[act]->tex->id); - } - else if(la->mtex[act]) { - MEM_freeN(la->mtex[act]); - la->mtex[act]= NULL; - } + set_current_lamp_texture(la, value.data); } static StructRNA* rna_Lamp_refine(struct PointerRNA *ptr) diff --git a/source/blender/makesrna/intern/rna_material.c b/source/blender/makesrna/intern/rna_material.c index 3366bc04c70..b05cf1afa84 100644 --- a/source/blender/makesrna/intern/rna_material.c +++ b/source/blender/makesrna/intern/rna_material.c @@ -130,29 +130,15 @@ static PointerRNA rna_Material_active_texture_get(PointerRNA *ptr) Material *ma= (Material*)ptr->data; Tex *tex; - tex= (ma->mtex[(int)ma->texact])? ma->mtex[(int)ma->texact]->tex: NULL; + tex= give_current_material_texture(ma); return rna_pointer_inherit_refine(ptr, &RNA_Texture, tex); } static void rna_Material_active_texture_set(PointerRNA *ptr, PointerRNA value) { Material *ma= (Material*)ptr->data; - int act= ma->texact; - if(ma->mtex[act] && ma->mtex[act]->tex) - id_us_min(&ma->mtex[act]->tex->id); - - if(value.data) { - if(!ma->mtex[act]) - ma->mtex[act]= add_mtex(); - - ma->mtex[act]->tex= value.data; - id_us_plus(&ma->mtex[act]->tex->id); - } - else if(ma->mtex[act]) { - MEM_freeN(ma->mtex[act]); - ma->mtex[act]= NULL; - } + set_current_material_texture(ma, value.data); } static PointerRNA rna_Material_active_node_material_get(PointerRNA *ptr) diff --git a/source/blender/makesrna/intern/rna_world.c b/source/blender/makesrna/intern/rna_world.c index b2ed90eef03..c0c9c1d6568 100644 --- a/source/blender/makesrna/intern/rna_world.c +++ b/source/blender/makesrna/intern/rna_world.c @@ -71,31 +71,15 @@ static PointerRNA rna_World_active_texture_get(PointerRNA *ptr) World *wo= (World*)ptr->data; Tex *tex; - tex= (wo->mtex[(int)wo->texact])? wo->mtex[(int)wo->texact]->tex: NULL; + tex= give_current_world_texture(wo); return rna_pointer_inherit_refine(ptr, &RNA_Texture, tex); } static void rna_World_active_texture_set(PointerRNA *ptr, PointerRNA value) { World *wo= (World*)ptr->data; - int act= wo->texact; - - if(wo->mtex[act] && wo->mtex[act]->tex) - id_us_min(&wo->mtex[act]->tex->id); - - if(value.data) { - if(!wo->mtex[act]) { - wo->mtex[act]= add_mtex(); - wo->mtex[act]->texco= TEXCO_VIEW; - } - - wo->mtex[act]->tex= value.data; - id_us_plus(&wo->mtex[act]->tex->id); - } - else if(wo->mtex[act]) { - MEM_freeN(wo->mtex[act]); - wo->mtex[act]= NULL; - } + + set_current_world_texture(wo, value.data); } static void rna_World_update(bContext *C, PointerRNA *ptr) |