Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2005-03-24 00:20:27 +0300
committerTon Roosendaal <ton@blender.org>2005-03-24 00:20:27 +0300
commit90caa93d6746b9d7e8dfae52f591181be0a5b072 (patch)
tree4a26695558400720b4152ff8a4bb50a546857b38
parentb86dc81cf346a6c54ab60d312169fb4882f44972 (diff)
bug fix 2353
Mesh object with hooks, which was used as duplivertor, didn't render the duplicated objects on correct locations. It did show OK in 3d window though, was due to not synced drawing and render convertor code.
-rw-r--r--source/blender/renderconverter/intern/convertBlenderScene.c29
1 files changed, 23 insertions, 6 deletions
diff --git a/source/blender/renderconverter/intern/convertBlenderScene.c b/source/blender/renderconverter/intern/convertBlenderScene.c
index 5d97d968880..60eaadf29fe 100644
--- a/source/blender/renderconverter/intern/convertBlenderScene.c
+++ b/source/blender/renderconverter/intern/convertBlenderScene.c
@@ -2950,14 +2950,31 @@ void RE_rotateBlenderScene(void)
base= G.scene->base.first;
while(base) {
- clear_object_constraint_status(base->object);
- if (base->object->type==OB_ARMATURE) {
- where_is_armature (base->object);
- }
+ ob= base->object;
+ clear_object_constraint_status(ob);
+ if (ob->type==OB_ARMATURE)
+ where_is_armature (ob);
else
+ where_is_object(ob);
- where_is_object(base->object);
-
+ if(ob->type==OB_MESH) {
+ Mesh *me= ob->data;
+ /* check for need for displist (it's zero when parent, key, or hook changed) */
+ /* this part was added to mimic drawing code better, will be solved with dep graph! (ton) */
+ if(ob->disp.first==NULL) {
+ if(ob->parent && ob->partype==PARSKEL) makeDispList(ob);
+ else if(ob->parent && ob->parent->type==OB_LATTICE) makeDispList(ob);
+ else if(ob->hooks.first) makeDispList(ob);
+ else if(ob->softflag & 0x01) makeDispList(ob);
+ else if(me->disp.first==NULL && mesh_uses_displist(me)) makeDispList(ob);
+ else if(ob->effect.first) { // as last check
+ Effect *eff= ob->effect.first;
+ if(eff->type==EFF_WAVE) makeDispList(ob);
+ }
+ }
+ }
+
+
if(base->next==0 && G.scene->set && base==G.scene->base.last) base= G.scene->set->base.first;
else base= base->next;
}