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>2013-05-12 21:16:43 +0400
committerTon Roosendaal <ton@blender.org>2013-05-12 21:16:43 +0400
commit1ea1f21b63d71b1acb25f734e2c0a4b00f694502 (patch)
tree56a2c18ccf701d6baf554ecd3b80ff9a3c945c24
parentd46480377c733405554237adf64e1bce32b324fc (diff)
Viewport Render Internal:
Animated characters were not rendering yet, the render code for it caused a signal for re-draw and re-render, in eternal loop. Solved by forcing viewport render to use the same derivedmesh data as for 3d viewport drawing. Faster too.
-rw-r--r--source/blender/editors/render/render_internal.c1
-rw-r--r--source/blender/render/intern/source/convertblender.c15
2 files changed, 12 insertions, 4 deletions
diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c
index 41dfaf82f6b..424af022366 100644
--- a/source/blender/editors/render/render_internal.c
+++ b/source/blender/editors/render/render_internal.c
@@ -1008,7 +1008,6 @@ static int render_view3d_changed(RenderEngine *engine, const bContext *C)
engine->flag |= RE_ENGINE_DO_UPDATE;
// if (update)
// printf("changed ma %d res %d view %d\n", update & PR_UPDATE_MATERIAL, update & PR_UPDATE_RENDERSIZE, update & PR_UPDATE_VIEW);
-
}
return update;
diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c
index eceeebc3814..a941cde37aa 100644
--- a/source/blender/render/intern/source/convertblender.c
+++ b/source/blender/render/intern/source/convertblender.c
@@ -3379,7 +3379,10 @@ static void init_render_mesh(Render *re, ObjectRen *obr, int timeoffset)
mask |= CD_MASK_ORIGINDEX | CD_MASK_FREESTYLE_EDGE | CD_MASK_FREESTYLE_FACE;
#endif
- dm= mesh_create_derived_render(re->scene, ob, mask);
+ if (re->r.scemode & R_PREVIEWBUTS)
+ dm = mesh_get_derived_final(re->scene, ob, mask);
+ else
+ dm= mesh_create_derived_render(re->scene, ob, mask);
if (dm==NULL) return; /* in case duplicated object fails? */
if (mask & CD_MASK_ORCO) {
@@ -4686,7 +4689,10 @@ static void init_render_object_data(Render *re, ObjectRen *obr, int timeoffset)
/* the emitter mesh wasn't rendered so the modifier stack wasn't
* evaluated with render settings */
DerivedMesh *dm;
- dm = mesh_create_derived_render(re->scene, ob, CD_MASK_BAREMESH|CD_MASK_MTFACE|CD_MASK_MCOL);
+ if (re->r.scemode & R_PREVIEWBUTS)
+ dm = mesh_get_derived_final(re->scene, ob, CD_MASK_BAREMESH|CD_MASK_MTFACE|CD_MASK_MCOL);
+ else
+ dm = mesh_create_derived_render(re->scene, ob, CD_MASK_BAREMESH|CD_MASK_MTFACE|CD_MASK_MCOL);
dm->release(dm);
}
@@ -4972,7 +4978,10 @@ static void dupli_render_particle_set(Render *re, Object *ob, int timeoffset, in
/* this is to make sure we get render level duplis in groups:
* the derivedmesh must be created before init_render_mesh,
* since object_duplilist does dupliparticles before that */
- dm = mesh_create_derived_render(re->scene, ob, CD_MASK_BAREMESH|CD_MASK_MTFACE|CD_MASK_MCOL);
+ if (re->r.scemode & R_PREVIEWBUTS)
+ dm = mesh_get_derived_final(re->scene, ob, CD_MASK_BAREMESH|CD_MASK_MTFACE|CD_MASK_MCOL);
+ else
+ dm = mesh_create_derived_render(re->scene, ob, CD_MASK_BAREMESH|CD_MASK_MTFACE|CD_MASK_MCOL);
dm->release(dm);
for (psys=ob->particlesystem.first; psys; psys=psys->next)