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.
This commit is contained in:
Ton Roosendaal
2013-05-12 17:16:43 +00:00
parent d46480377c
commit 1ea1f21b63
2 changed files with 12 additions and 4 deletions

View File

@@ -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;

View File

@@ -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)