Fix some issues with showing the current textures when using

material nodes and texture nodes. Made it all use the same
give_current_*_texture functions now.
This commit is contained in:
Brecht Van Lommel 2009-10-09 09:50:49 +00:00
parent 9ebcd9c5e4
commit 2226a5139a
5 changed files with 93 additions and 76 deletions

@ -78,6 +78,8 @@ class TEXTURE_PT_context_texture(TextureButtonsPanel):
if tex.use_nodes:
slot = context.texture_slot
if slot:
split.itemL(text="Output:")
split.itemR(slot, "output_node", text="")

@ -31,17 +31,20 @@
#ifndef BKE_TEXTURE_H
#define BKE_TEXTURE_H
struct Scene;
struct Tex;
struct Brush;
struct ColorBand;
struct EnvMap;
struct HaloRen;
struct Lamp;
struct LampRen;
struct Material;
struct MTex;
struct PluginTex;
struct LampRen;
struct ColorBand;
struct HaloRen;
struct TexMapping;
struct EnvMap;
struct PointDensity;
struct Tex;
struct TexMapping;
struct VoxelData;
struct World;
/* in ColorBand struct */
#define MAXCOLORBAND 32
@ -65,8 +68,12 @@ struct MTex *add_mtex(void);
struct Tex *copy_texture(struct Tex *tex);
void make_local_texture(struct Tex *tex);
void autotexname(struct Tex *tex);
struct Tex *give_current_texture(struct Object *ob, int act);
struct Tex *give_current_world_texture(struct Scene *scene);
struct Tex *give_current_object_texture(struct Object *ob);
struct Tex *give_current_material_texture(struct Material *ma);
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);
struct TexMapping *add_mapping(void);
void init_mapping(struct TexMapping *texmap);

@ -809,36 +809,42 @@ void autotexname(Tex *tex)
/* ------------------------------------------------------------------------- */
Tex *give_current_texture(Object *ob, int act)
Tex *give_current_object_texture(Object *ob)
{
Material ***matarar, *ma;
Lamp *la = 0;
MTex *mtex = 0;
Tex *tex = 0;
bNode *node;
Material *ma;
Tex *tex= NULL;
if(ob==0) return 0;
if(ob->totcol==0 && !(ob->type==OB_LAMP)) return 0;
if(ob->type==OB_LAMP) {
la=(Lamp *)ob->data;
tex= give_current_lamp_texture(ob->data);
} else {
ma= give_current_material(ob, ob->actcol);
tex= give_current_material_texture(ma);
}
return tex;
}
Tex *give_current_lamp_texture(Lamp *la)
{
MTex *mtex= NULL;
Tex *tex= NULL;
if(la) {
mtex= la->mtex[(int)(la->texact)];
if(mtex) tex= mtex->tex;
}
} else {
if(act>ob->totcol) act= ob->totcol;
else if(act==0) act= 1;
if(ob->matbits[act-1]) { /* in object */
ma= ob->mat[act-1];
}
else { /* in data */
matarar= give_matarar(ob);
return tex;
}
if(matarar && *matarar) ma= (*matarar)[act-1];
else ma= 0;
}
Tex *give_current_material_texture(Material *ma)
{
MTex *mtex= NULL;
Tex *tex= NULL;
bNode *node;
if(ma && ma->use_nodes && ma->nodetree) {
node= nodeGetActiveID(ma->nodetree, ID_TE);
@ -857,24 +863,36 @@ Tex *give_current_texture(Object *ob, int act)
mtex= ma->mtex[(int)(ma->texact)];
if(mtex) tex= mtex->tex;
}
}
return tex;
}
Tex *give_current_world_texture(Scene *scene)
Tex *give_current_world_texture(World *world)
{
MTex *mtex = 0;
Tex *tex = 0;
MTex *mtex= NULL;
Tex *tex= NULL;
if(!(scene->world)) return 0;
if(!world) return 0;
mtex= scene->world->mtex[(int)(scene->world->texact)];
mtex= world->mtex[(int)(world->texact)];
if(mtex) tex= mtex->tex;
return tex;
}
Tex *give_current_brush_texture(Brush *br)
{
MTex *mtex= NULL;
Tex *tex= NULL;
if(br) {
mtex= br->mtex[(int)(br->texact)];
if(mtex) tex= mtex->tex;
}
return tex;
}
/* ------------------------------------------------------------------------- */
EnvMap *BKE_add_envmap(void)

@ -52,6 +52,7 @@
#include "BKE_paint.h"
#include "BKE_particle.h"
#include "BKE_screen.h"
#include "BKE_texture.h"
#include "BKE_utildefines.h"
#include "BKE_world.h"
@ -342,7 +343,6 @@ static int buttons_context_path_texture(const bContext *C, ButsContextPath *path
Lamp *la;
Brush *br;
World *wo;
MTex *mtex;
Tex *tex;
PointerRNA *ptr= &path->ptr[path->len-1];
@ -355,8 +355,7 @@ static int buttons_context_path_texture(const bContext *C, ButsContextPath *path
br= path->ptr[path->len-1].data;
if(br) {
mtex= br->mtex[(int)br->texact];
tex= (mtex)? mtex->tex: NULL;
tex= give_current_brush_texture(br);
RNA_id_pointer_create(&tex->id, &path->ptr[path->len]);
path->len++;
@ -368,8 +367,7 @@ static int buttons_context_path_texture(const bContext *C, ButsContextPath *path
wo= path->ptr[path->len-1].data;
if(wo) {
mtex= wo->mtex[(int)wo->texact];
tex= (mtex)? mtex->tex: NULL;
give_current_world_texture(wo);
RNA_id_pointer_create(&tex->id, &path->ptr[path->len]);
path->len++;
@ -381,8 +379,7 @@ static int buttons_context_path_texture(const bContext *C, ButsContextPath *path
ma= path->ptr[path->len-1].data;
if(ma) {
mtex= ma->mtex[(int)ma->texact];
tex= (mtex)? mtex->tex: NULL;
tex= give_current_material_texture(ma);
RNA_id_pointer_create(&tex->id, &path->ptr[path->len]);
path->len++;
@ -394,8 +391,7 @@ static int buttons_context_path_texture(const bContext *C, ButsContextPath *path
la= path->ptr[path->len-1].data;
if(la) {
mtex= la->mtex[(int)la->texact];
tex= (mtex)? mtex->tex: NULL;
tex= give_current_lamp_texture(la);
RNA_id_pointer_create(&tex->id, &path->ptr[path->len]);
path->len++;

@ -645,7 +645,7 @@ void snode_set_context(SpaceNode *snode, Scene *scene)
if(snode->texfrom==SNODE_TEX_OBJECT) {
if(ob) {
tx= give_current_texture(ob, ob->actcol);
tx= give_current_object_texture(ob);
if(ob->type == OB_LAMP)
snode->from= (ID*)ob->data;
@ -656,11 +656,10 @@ void snode_set_context(SpaceNode *snode, Scene *scene)
}
}
else if(snode->texfrom==SNODE_TEX_WORLD) {
tx= give_current_world_texture(scene);
tx= give_current_world_texture(scene->world);
snode->from= (ID *)scene->world;
}
else {
MTex *mtex= NULL;
Brush *brush= NULL;
if(ob && (ob->mode & OB_MODE_SCULPT))
@ -668,13 +667,8 @@ void snode_set_context(SpaceNode *snode, Scene *scene)
else
brush= paint_brush(&scene->toolsettings->imapaint.paint);
if(brush && brush->texact != -1)
mtex= brush->mtex[brush->texact];
snode->from= (ID *)brush;
if(mtex)
tx= mtex->tex;
tx= give_current_brush_texture(brush);
}
snode->id= &tx->id;