diff options
Diffstat (limited to 'source/blender/editors')
-rw-r--r-- | source/blender/editors/include/ED_uvedit.h | 3 | ||||
-rw-r--r-- | source/blender/editors/interface/interface_node.c | 5 | ||||
-rw-r--r-- | source/blender/editors/sculpt_paint/paint_image.c | 4 | ||||
-rw-r--r-- | source/blender/editors/space_image/space_image.c | 2 | ||||
-rw-r--r-- | source/blender/editors/space_node/drawnode.c | 15 | ||||
-rw-r--r-- | source/blender/editors/space_node/node_draw.c | 3 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/drawmesh.c | 20 | ||||
-rw-r--r-- | source/blender/editors/uvedit/uvedit_ops.c | 4 |
8 files changed, 41 insertions, 15 deletions
diff --git a/source/blender/editors/include/ED_uvedit.h b/source/blender/editors/include/ED_uvedit.h index dd46c5cc7e7..0666884351a 100644 --- a/source/blender/editors/include/ED_uvedit.h +++ b/source/blender/editors/include/ED_uvedit.h @@ -40,6 +40,7 @@ struct Object; struct Scene; struct SpaceImage; struct bContext; +struct bNode; struct wmKeyConfig; /* uvedit_ops.c */ @@ -49,7 +50,7 @@ void ED_keymap_uvedit(struct wmKeyConfig *keyconf); void ED_uvedit_assign_image(struct Main *bmain, struct Scene *scene, struct Object *obedit, struct Image *ima, struct Image *previma); int ED_uvedit_minmax(struct Scene *scene, struct Image *ima, struct Object *obedit, float *min, float *max); -int ED_object_get_active_image(struct Object *ob, int mat_nr, struct Image **ima, struct ImageUser **iuser); +int ED_object_get_active_image(struct Object *ob, int mat_nr, struct Image **ima, struct ImageUser **iuser, struct bNode **node); void ED_object_assign_active_image(struct Main *bmain, struct Object *ob, int mat_nr, struct Image *ima); int ED_uvedit_test_silent(struct Object *obedit); diff --git a/source/blender/editors/interface/interface_node.c b/source/blender/editors/interface/interface_node.c index abf12029b23..982f33bd600 100644 --- a/source/blender/editors/interface/interface_node.c +++ b/source/blender/editors/interface/interface_node.c @@ -252,6 +252,11 @@ static void ui_node_link(bContext *C, void *arg_p, void *event_p) } } + /* also preserve mapping for texture nodes */ + if(node_from->typeinfo->nclass == NODE_CLASS_TEXTURE && + node_prev->typeinfo->nclass == NODE_CLASS_TEXTURE) + memcpy(node_from->storage, node_prev->storage, sizeof(NodeTexBase)); + /* remove node */ ui_node_remove_linked(ntree, node_prev); } diff --git a/source/blender/editors/sculpt_paint/paint_image.c b/source/blender/editors/sculpt_paint/paint_image.c index dc6a647cada..c8c1f083046 100644 --- a/source/blender/editors/sculpt_paint/paint_image.c +++ b/source/blender/editors/sculpt_paint/paint_image.c @@ -489,7 +489,7 @@ static Image *imapaint_face_image(const ImagePaintState *s, int face_index) if(scene_use_new_shading_nodes(s->scene)) { MFace *mf = s->me->mface+face_index; - ED_object_get_active_image(s->ob, mf->mat_nr, &ima, NULL); + ED_object_get_active_image(s->ob, mf->mat_nr, &ima, NULL, NULL); } else { MTFace *tf = s->me->mtface+face_index; @@ -505,7 +505,7 @@ static Image *project_paint_face_image(const ProjPaintState *ps, int face_index) if(scene_use_new_shading_nodes(ps->scene)) { MFace *mf = ps->dm_mface+face_index; - ED_object_get_active_image(ps->ob, mf->mat_nr, &ima, NULL); + ED_object_get_active_image(ps->ob, mf->mat_nr, &ima, NULL, NULL); } else { MTFace *tf = ps->dm_mtface+face_index; diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c index a00adec3dc7..e817565c509 100644 --- a/source/blender/editors/space_image/space_image.c +++ b/source/blender/editors/space_image/space_image.c @@ -597,7 +597,7 @@ static void image_refresh(const bContext *C, ScrArea *UNUSED(sa)) EditFace *efa= EM_get_actFace(em, sloppy); if(efa) - ED_object_get_active_image(obedit, efa->mat_nr, &sima->image, NULL); + ED_object_get_active_image(obedit, efa->mat_nr, &sima->image, NULL, NULL); } else { /* old shading system, we set texface */ diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c index 533d2555b26..45713ff2a8f 100644 --- a/source/blender/editors/space_node/drawnode.c +++ b/source/blender/editors/space_node/drawnode.c @@ -946,28 +946,29 @@ static void node_shader_buts_material(uiLayout *layout, bContext *C, PointerRNA static void node_shader_buts_mapping(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr) { + PointerRNA mappingptr = RNA_pointer_get(ptr, "mapping"); uiLayout *row; uiItemL(layout, "Translation:", ICON_NONE); row= uiLayoutRow(layout, 1); - uiItemR(row, ptr, "location", 0, "", ICON_NONE); + uiItemR(row, &mappingptr, "location", 0, "", ICON_NONE); uiItemL(layout, "Rotation:", ICON_NONE); row= uiLayoutRow(layout, 1); - uiItemR(row, ptr, "rotation", 0, "", ICON_NONE); + uiItemR(row, &mappingptr, "rotation", 0, "", ICON_NONE); uiItemL(layout, "Scale:", ICON_NONE); row= uiLayoutRow(layout, 1); - uiItemR(row, ptr, "scale", 0, "", ICON_NONE); + uiItemR(row, &mappingptr, "scale", 0, "", ICON_NONE); #if 0 row= uiLayoutRow(layout, 1); - uiItemR(row, ptr, "use_min", 0, "Min", ICON_NONE); - uiItemR(row, ptr, "min", 0, "", ICON_NONE); + uiItemR(row, &mappingptr, "use_min", 0, "Min", ICON_NONE); + uiItemR(row, &mappingptr, "min", 0, "", ICON_NONE); row= uiLayoutRow(layout, 1); - uiItemR(row, ptr, "use_max", 0, "Max", ICON_NONE); - uiItemR(row, ptr, "max", 0, "", ICON_NONE); + uiItemR(row, &mappingptr, "use_max", 0, "Max", ICON_NONE); + uiItemR(row, &mappingptr, "max", 0, "", ICON_NONE); #endif } diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c index 5b5f79160a1..a932f1b10d9 100644 --- a/source/blender/editors/space_node/node_draw.c +++ b/source/blender/editors/space_node/node_draw.c @@ -108,7 +108,8 @@ void ED_node_changed_update(ID *id, bNode *node) WM_main_add_notifier(NC_WORLD|ND_WORLD_DRAW, id); } else if(treetype==NTREE_COMPOSIT) { - nodeUpdate(edittree, node); + if(node) + nodeUpdate(edittree, node); /* don't use NodeTagIDChanged, it gives far too many recomposites for image, scene layers, ... */ node= node_tree_get_editgroup(nodetree); diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c index 692d45f8303..e23824a2210 100644 --- a/source/blender/editors/space_view3d/drawmesh.c +++ b/source/blender/editors/space_view3d/drawmesh.c @@ -40,11 +40,12 @@ #include "DNA_material_types.h" #include "DNA_meshdata_types.h" +#include "DNA_node_types.h" +#include "DNA_object_types.h" #include "DNA_property_types.h" #include "DNA_scene_types.h" #include "DNA_screen_types.h" #include "DNA_view3d_types.h" -#include "DNA_object_types.h" #include "BKE_DerivedMesh.h" #include "BKE_effect.h" @@ -703,16 +704,19 @@ static void tex_mat_set_texture_cb(void *userData, int mat_nr, void *attribs) GPUVertexAttribs *gattribs = attribs; Image *ima; ImageUser *iuser; + bNode *node; int texture_set= 0; /* draw image texture if we find one */ - if(ED_object_get_active_image(data->ob, mat_nr, &ima, &iuser)) { + if(ED_object_get_active_image(data->ob, mat_nr, &ima, &iuser, &node)) { /* get openl texture */ int mipmap= 1; int bindcode= (ima)? GPU_verify_image(ima, iuser, 0, 0, mipmap): 0; float zero[4] = {0.0f, 0.0f, 0.0f, 0.0f}; if(bindcode) { + NodeTexBase *texbase= node->storage; + /* disable existing material */ GPU_disable_material(); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, zero); @@ -726,6 +730,10 @@ static void tex_mat_set_texture_cb(void *userData, int mat_nr, void *attribs) glBindTexture(GL_TEXTURE_2D, ima->bindcode); glColor3f(1.0f, 1.0f, 1.0f); + glMatrixMode(GL_TEXTURE); + glLoadMatrixf(texbase->tex_mapping.mat); + glMatrixMode(GL_MODELVIEW); + /* use active UV texture layer */ memset(gattribs, 0, sizeof(*gattribs)); @@ -739,6 +747,10 @@ static void tex_mat_set_texture_cb(void *userData, int mat_nr, void *attribs) } if(!texture_set) { + glMatrixMode(GL_TEXTURE); + glLoadIdentity(); + glMatrixMode(GL_MODELVIEW); + /* disable texture */ glDisable(GL_TEXTURE_2D); glDisable(GL_COLOR_MATERIAL); @@ -834,6 +846,10 @@ void draw_mesh_textured(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *o glBindTexture(GL_TEXTURE_2D, 0); glFrontFace(GL_CCW); + glMatrixMode(GL_TEXTURE); + glLoadIdentity(); + glMatrixMode(GL_MODELVIEW); + /* faceselect mode drawing over textured mesh */ if(!(ob == scene->obedit) && faceselect) draw_mesh_face_select(rv3d, ob->data, dm); diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c index 3019dcf1b8d..02653d29a50 100644 --- a/source/blender/editors/uvedit/uvedit_ops.c +++ b/source/blender/editors/uvedit/uvedit_ops.c @@ -101,7 +101,7 @@ static int is_image_texture_node(bNode *node) return ELEM(node->type, SH_NODE_TEX_IMAGE, SH_NODE_TEX_ENVIRONMENT); } -int ED_object_get_active_image(Object *ob, int mat_nr, Image **ima, ImageUser **iuser) +int ED_object_get_active_image(Object *ob, int mat_nr, Image **ima, ImageUser **iuser, bNode **node_r) { Material *ma= give_current_material(ob, mat_nr); bNode *node= (ma && ma->use_nodes)? nodeGetActiveTexture(ma->nodetree): NULL; @@ -109,11 +109,13 @@ int ED_object_get_active_image(Object *ob, int mat_nr, Image **ima, ImageUser ** if(node && is_image_texture_node(node)) { if(ima) *ima= (Image*)node->id; if(iuser) *iuser= NULL; + if(node_r) *node_r= node; return TRUE; } if(ima) *ima= NULL; if(iuser) *iuser= NULL; + if(node_r) *node_r= node; return FALSE; } |