forked from bartvdbraak/blender
Fix T39711: cycles particle motion blur affected by viewport draw method.
This commit is contained in:
parent
ebbeb082d1
commit
27cebb2651
@ -576,7 +576,7 @@ void BlenderSync::sync_motion(BL::SpaceView3D b_v3d, BL::Object b_override, void
|
|||||||
|
|
||||||
/* change frame */
|
/* change frame */
|
||||||
python_thread_state_restore(python_thread_state);
|
python_thread_state_restore(python_thread_state);
|
||||||
b_scene.frame_set(frame, subframe);
|
b_engine.frame_set(frame, subframe);
|
||||||
python_thread_state_save(python_thread_state);
|
python_thread_state_save(python_thread_state);
|
||||||
|
|
||||||
/* sync camera, only supports two times at the moment */
|
/* sync camera, only supports two times at the moment */
|
||||||
@ -591,7 +591,7 @@ void BlenderSync::sync_motion(BL::SpaceView3D b_v3d, BL::Object b_override, void
|
|||||||
* function assumes it is being executed from python and will
|
* function assumes it is being executed from python and will
|
||||||
* try to save the thread state */
|
* try to save the thread state */
|
||||||
python_thread_state_restore(python_thread_state);
|
python_thread_state_restore(python_thread_state);
|
||||||
b_scene.frame_set(frame_center, 0.0f);
|
b_engine.frame_set(frame_center, 0.0f);
|
||||||
python_thread_state_save(python_thread_state);
|
python_thread_state_save(python_thread_state);
|
||||||
|
|
||||||
/* tag camera for motion update */
|
/* tag camera for motion update */
|
||||||
|
@ -492,6 +492,13 @@ static void rna_def_render_engine(BlenderRNA *brna)
|
|||||||
prop = RNA_def_string(func, "info", NULL, 0, "Info", "");
|
prop = RNA_def_string(func, "info", NULL, 0, "Info", "");
|
||||||
RNA_def_property_flag(prop, PROP_REQUIRED);
|
RNA_def_property_flag(prop, PROP_REQUIRED);
|
||||||
|
|
||||||
|
func = RNA_def_function(srna, "frame_set", "RE_engine_frame_set");
|
||||||
|
RNA_def_function_ui_description(func, "Evaluate scene at a different frame (for motion blur)");
|
||||||
|
prop = RNA_def_int(func, "frame", 0, INT_MIN, INT_MAX, "Frame", "", INT_MIN, INT_MAX);
|
||||||
|
RNA_def_property_flag(prop, PROP_REQUIRED);
|
||||||
|
prop = RNA_def_float(func, "subframe", 0.0f, 0.0f, 1.0f, "Subframe", "", 0.0f, 1.0f);
|
||||||
|
RNA_def_property_flag(prop, PROP_REQUIRED);
|
||||||
|
|
||||||
func = RNA_def_function(srna, "update_progress", "RE_engine_update_progress");
|
func = RNA_def_function(srna, "update_progress", "RE_engine_update_progress");
|
||||||
RNA_def_function_ui_description(func, "Update progress percentage of render");
|
RNA_def_function_ui_description(func, "Update progress percentage of render");
|
||||||
prop = RNA_def_float(func, "progress", 0, 0.0f, 1.0f, "", "Percentage of render that's done", 0.0f, 1.0f);
|
prop = RNA_def_float(func, "progress", 0, 0.0f, 1.0f, "", "Percentage of render that's done", 0.0f, 1.0f);
|
||||||
|
@ -147,6 +147,8 @@ int RE_engine_render(struct Render *re, int do_all);
|
|||||||
|
|
||||||
bool RE_engine_is_external(struct Render *re);
|
bool RE_engine_is_external(struct Render *re);
|
||||||
|
|
||||||
|
void RE_engine_frame_set(struct RenderEngine *engine, int frame, float subframe);
|
||||||
|
|
||||||
/* Engine Types */
|
/* Engine Types */
|
||||||
|
|
||||||
void RE_engines_init(void);
|
void RE_engines_init(void);
|
||||||
|
@ -481,6 +481,29 @@ bool RE_bake_engine(
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RE_engine_frame_set(RenderEngine *engine, int frame, float subframe)
|
||||||
|
{
|
||||||
|
Render *re = engine->re;
|
||||||
|
Scene *scene = re->scene;
|
||||||
|
double cfra = (double)frame + (double)subframe;
|
||||||
|
|
||||||
|
CLAMP(cfra, MINAFRAME, MAXFRAME);
|
||||||
|
BKE_scene_frame_set(scene, cfra);
|
||||||
|
|
||||||
|
#ifdef WITH_PYTHON
|
||||||
|
BPy_BEGIN_ALLOW_THREADS;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* It's possible that here we're including layers which were never visible before. */
|
||||||
|
BKE_scene_update_for_newframe_ex(re->eval_ctx, re->main, scene, (1 << 20) - 1, true);
|
||||||
|
|
||||||
|
#ifdef WITH_PYTHON
|
||||||
|
BPy_END_ALLOW_THREADS;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
BKE_scene_camera_switch_update(scene);
|
||||||
|
}
|
||||||
|
|
||||||
/* Render */
|
/* Render */
|
||||||
|
|
||||||
static bool render_layer_exclude_animated(Scene *scene, SceneRenderLayer *srl)
|
static bool render_layer_exclude_animated(Scene *scene, SceneRenderLayer *srl)
|
||||||
|
@ -585,6 +585,7 @@ void RE_engine_free(struct RenderEngine *engine) RET_NONE
|
|||||||
struct RenderEngineType *RE_engines_find(const char *idname) RET_NULL
|
struct RenderEngineType *RE_engines_find(const char *idname) RET_NULL
|
||||||
void RE_engine_update_memory_stats(struct RenderEngine *engine, float mem_used, float mem_peak) RET_NONE
|
void RE_engine_update_memory_stats(struct RenderEngine *engine, float mem_used, float mem_peak) RET_NONE
|
||||||
struct RenderEngine *RE_engine_create(struct RenderEngineType *type) RET_NULL
|
struct RenderEngine *RE_engine_create(struct RenderEngineType *type) RET_NULL
|
||||||
|
void RE_engine_frame_set(struct RenderEngine *engine, int frame, float subframe) RET_NONE
|
||||||
void RE_FreePersistentData(void) RET_NONE
|
void RE_FreePersistentData(void) RET_NONE
|
||||||
|
|
||||||
/* python */
|
/* python */
|
||||||
|
Loading…
Reference in New Issue
Block a user