Cycles: Use depsgraph instead of layers
This commit is contained in:
@@ -19,7 +19,7 @@
|
|||||||
bl_info = {
|
bl_info = {
|
||||||
"name": "Cycles Render Engine",
|
"name": "Cycles Render Engine",
|
||||||
"author": "",
|
"author": "",
|
||||||
"blender": (2, 76, 0),
|
"blender": (2, 80, 0),
|
||||||
"location": "Info header, render engine menu",
|
"location": "Info header, render engine menu",
|
||||||
"description": "Cycles Render Engine integration",
|
"description": "Cycles Render Engine integration",
|
||||||
"warning": "",
|
"warning": "",
|
||||||
@@ -66,21 +66,21 @@ class CyclesRender(bpy.types.RenderEngine):
|
|||||||
engine.free(self)
|
engine.free(self)
|
||||||
|
|
||||||
# final render
|
# final render
|
||||||
def update(self, data, scene):
|
def update(self, data, depsgraph, scene):
|
||||||
if not self.session:
|
if not self.session:
|
||||||
if self.is_preview:
|
if self.is_preview:
|
||||||
cscene = bpy.context.scene.cycles
|
cscene = bpy.context.scene.cycles
|
||||||
use_osl = cscene.shading_system and cscene.device == 'CPU'
|
use_osl = cscene.shading_system and cscene.device == 'CPU'
|
||||||
|
|
||||||
engine.create(self, data, scene,
|
engine.create(self, data, depsgraph, scene,
|
||||||
None, None, None, use_osl)
|
None, None, None, use_osl)
|
||||||
else:
|
else:
|
||||||
engine.create(self, data, scene)
|
engine.create(self, data, depsgraph, scene)
|
||||||
else:
|
else:
|
||||||
engine.reset(self, data, scene)
|
engine.reset(self, data, scene)
|
||||||
|
|
||||||
def render(self, scene):
|
def render(self, depsgraph):
|
||||||
engine.render(self)
|
engine.render(self, depsgraph)
|
||||||
|
|
||||||
def bake(self, scene, obj, pass_type, pass_filter, object_id, pixel_array, num_pixels, depth, result):
|
def bake(self, scene, obj, pass_type, pass_filter, object_id, pixel_array, num_pixels, depth, result):
|
||||||
engine.bake(self, obj, pass_type, pass_filter, object_id, pixel_array, num_pixels, depth, result)
|
engine.bake(self, obj, pass_type, pass_filter, object_id, pixel_array, num_pixels, depth, result)
|
||||||
@@ -88,12 +88,12 @@ class CyclesRender(bpy.types.RenderEngine):
|
|||||||
# viewport render
|
# viewport render
|
||||||
def view_update(self, context):
|
def view_update(self, context):
|
||||||
if not self.session:
|
if not self.session:
|
||||||
engine.create(self, context.blend_data, context.scene,
|
engine.create(self, context.blend_data, context.depsgraph, context.scene,
|
||||||
context.region, context.space_data, context.region_data)
|
context.region, context.space_data, context.region_data)
|
||||||
engine.update(self, context.blend_data, context.scene)
|
engine.update(self, context.blend_data, context.scene)
|
||||||
|
|
||||||
def view_draw(self, context):
|
def view_draw(self, context):
|
||||||
engine.draw(self, context.region, context.space_data, context.region_data)
|
engine.draw(self, context.depsgraph, context.region, context.space_data, context.region_data)
|
||||||
|
|
||||||
def update_script_node(self, node):
|
def update_script_node(self, node):
|
||||||
if engine.with_osl():
|
if engine.with_osl():
|
||||||
|
@@ -123,12 +123,13 @@ def exit():
|
|||||||
_cycles.exit()
|
_cycles.exit()
|
||||||
|
|
||||||
|
|
||||||
def create(engine, data, scene, region=None, v3d=None, rv3d=None, preview_osl=False):
|
def create(engine, data, depsgraph, scene, region=None, v3d=None, rv3d=None, preview_osl=False):
|
||||||
import bpy
|
import bpy
|
||||||
import _cycles
|
import _cycles
|
||||||
|
|
||||||
data = data.as_pointer()
|
data = data.as_pointer()
|
||||||
userpref = bpy.context.user_preferences.as_pointer()
|
userpref = bpy.context.user_preferences.as_pointer()
|
||||||
|
depsgraph = depsgraph.as_pointer()
|
||||||
scene = scene.as_pointer()
|
scene = scene.as_pointer()
|
||||||
if region:
|
if region:
|
||||||
region = region.as_pointer()
|
region = region.as_pointer()
|
||||||
@@ -142,7 +143,8 @@ def create(engine, data, scene, region=None, v3d=None, rv3d=None, preview_osl=Fa
|
|||||||
else:
|
else:
|
||||||
_cycles.debug_flags_reset()
|
_cycles.debug_flags_reset()
|
||||||
|
|
||||||
engine.session = _cycles.create(engine.as_pointer(), userpref, data, scene, region, v3d, rv3d, preview_osl)
|
engine.session = _cycles.create(
|
||||||
|
engine.as_pointer(), userpref, data, depsgraph, scene, region, v3d, rv3d, preview_osl)
|
||||||
|
|
||||||
|
|
||||||
def free(engine):
|
def free(engine):
|
||||||
@@ -153,7 +155,7 @@ def free(engine):
|
|||||||
del engine.session
|
del engine.session
|
||||||
|
|
||||||
|
|
||||||
def render(engine):
|
def render(engine, depsgraph):
|
||||||
import _cycles
|
import _cycles
|
||||||
if hasattr(engine, "session"):
|
if hasattr(engine, "session"):
|
||||||
_cycles.render(engine.session)
|
_cycles.render(engine.session)
|
||||||
@@ -178,13 +180,14 @@ def update(engine, data, scene):
|
|||||||
_cycles.sync(engine.session)
|
_cycles.sync(engine.session)
|
||||||
|
|
||||||
|
|
||||||
def draw(engine, region, v3d, rv3d):
|
def draw(engine, depsgraph, region, v3d, rv3d):
|
||||||
import _cycles
|
import _cycles
|
||||||
|
depsgraph = depsgraph.as_pointer()
|
||||||
v3d = v3d.as_pointer()
|
v3d = v3d.as_pointer()
|
||||||
rv3d = rv3d.as_pointer()
|
rv3d = rv3d.as_pointer()
|
||||||
|
|
||||||
# draw render image
|
# draw render image
|
||||||
_cycles.draw(engine.session, v3d, rv3d)
|
_cycles.draw(engine.session, depsgraph, v3d, rv3d)
|
||||||
|
|
||||||
|
|
||||||
def available_devices():
|
def available_devices():
|
||||||
|
@@ -469,19 +469,11 @@ static bool object_render_hide(BL::Object& b_ob,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool object_render_hide_duplis(BL::Object& b_ob)
|
|
||||||
{
|
|
||||||
BL::Object parent = b_ob.parent();
|
|
||||||
|
|
||||||
return (parent && object_render_hide_original(b_ob.type(), parent.dupli_type()));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Object Loop */
|
/* Object Loop */
|
||||||
|
|
||||||
void BlenderSync::sync_objects(BL::SpaceView3D& b_v3d, float motion_time)
|
void BlenderSync::sync_objects(float motion_time)
|
||||||
{
|
{
|
||||||
/* layer data */
|
/* layer data */
|
||||||
uint scene_layer = render_layer.scene_layer;
|
|
||||||
bool motion = motion_time != 0.0f;
|
bool motion = motion_time != 0.0f;
|
||||||
|
|
||||||
if(!motion) {
|
if(!motion) {
|
||||||
@@ -500,100 +492,37 @@ void BlenderSync::sync_objects(BL::SpaceView3D& b_v3d, float motion_time)
|
|||||||
BlenderObjectCulling culling(scene, b_scene);
|
BlenderObjectCulling culling(scene, b_scene);
|
||||||
|
|
||||||
/* object loop */
|
/* object loop */
|
||||||
BL::Scene::object_bases_iterator b_base;
|
|
||||||
BL::Scene b_sce = b_scene;
|
|
||||||
/* modifier result type (not exposed as enum in C++ API)
|
|
||||||
* 1 : DAG_EVAL_PREVIEW
|
|
||||||
* 2 : DAG_EVAL_RENDER
|
|
||||||
*/
|
|
||||||
int dupli_settings = preview ? 1 : 2;
|
|
||||||
|
|
||||||
bool cancel = false;
|
bool cancel = false;
|
||||||
bool use_portal = false;
|
bool use_portal = false;
|
||||||
|
|
||||||
uint layer_override = get_layer(b_engine.layer_override());
|
BL::Depsgraph::objects_iterator b_ob_iter;
|
||||||
for(; b_sce && !cancel; b_sce = b_sce.background_set()) {
|
|
||||||
/* Render layer's scene_layer is affected by local view already,
|
|
||||||
* which is not a desired behavior here.
|
|
||||||
*/
|
|
||||||
uint scene_layers = layer_override ? layer_override : get_layer(b_scene.layers());
|
|
||||||
for(b_sce.object_bases.begin(b_base); b_base != b_sce.object_bases.end() && !cancel; ++b_base) {
|
|
||||||
BL::Object b_ob = b_base->object();
|
|
||||||
bool hide = (render_layer.use_viewport_visibility)? b_ob.hide(): b_ob.hide_render();
|
|
||||||
uint ob_layer = get_layer(b_base->layers(),
|
|
||||||
b_base->layers_local_view(),
|
|
||||||
object_is_light(b_ob),
|
|
||||||
scene_layers);
|
|
||||||
hide = hide || !(ob_layer & scene_layer);
|
|
||||||
|
|
||||||
if(!hide) {
|
for(b_depsgraph.objects.begin(b_ob_iter); b_ob_iter != b_depsgraph.objects.end() && !cancel; ++b_ob_iter) {
|
||||||
progress.set_sync_status("Synchronizing object", b_ob.name());
|
BL::Object b_ob = *b_ob_iter;
|
||||||
|
progress.set_sync_status("Synchronizing object", b_ob.name());
|
||||||
|
|
||||||
/* load per-object culling data */
|
/* load per-object culling data */
|
||||||
culling.init_object(scene, b_ob);
|
culling.init_object(scene, b_ob);
|
||||||
|
|
||||||
if(b_ob.is_duplicator() && !object_render_hide_duplis(b_ob)) {
|
/* test if object needs to be hidden */
|
||||||
/* dupli objects */
|
bool hide_tris;
|
||||||
b_ob.dupli_list_create(b_scene, dupli_settings);
|
|
||||||
|
|
||||||
BL::Object::dupli_list_iterator b_dup;
|
if(!object_render_hide(b_ob, true, true, hide_tris)) {
|
||||||
|
/* object itself */
|
||||||
|
Transform tfm = get_transform(b_ob.matrix_world());
|
||||||
|
BL::DupliObject b_empty_dupli_ob(PointerRNA_NULL);
|
||||||
|
sync_object(b_ob,
|
||||||
|
NULL,
|
||||||
|
b_empty_dupli_ob,
|
||||||
|
tfm,
|
||||||
|
~(0), /* until we get rid of layers */
|
||||||
|
motion_time,
|
||||||
|
hide_tris,
|
||||||
|
culling,
|
||||||
|
&use_portal);
|
||||||
|
}
|
||||||
|
|
||||||
for(b_ob.dupli_list.begin(b_dup); b_dup != b_ob.dupli_list.end(); ++b_dup) {
|
cancel = progress.get_cancel();
|
||||||
Transform tfm = get_transform(b_dup->matrix());
|
|
||||||
BL::Object b_dup_ob = b_dup->object();
|
|
||||||
bool dup_hide = (b_v3d)? b_dup_ob.hide(): b_dup_ob.hide_render();
|
|
||||||
bool in_dupli_group = (b_dup->type() == BL::DupliObject::type_GROUP);
|
|
||||||
bool hide_tris;
|
|
||||||
|
|
||||||
if(!(b_dup->hide() || dup_hide || object_render_hide(b_dup_ob, false, in_dupli_group, hide_tris))) {
|
|
||||||
/* the persistent_id allows us to match dupli objects
|
|
||||||
* between frames and updates */
|
|
||||||
BL::Array<int, OBJECT_PERSISTENT_ID_SIZE> persistent_id = b_dup->persistent_id();
|
|
||||||
|
|
||||||
/* sync object and mesh or light data */
|
|
||||||
Object *object = sync_object(b_ob,
|
|
||||||
persistent_id.data,
|
|
||||||
*b_dup,
|
|
||||||
tfm,
|
|
||||||
ob_layer,
|
|
||||||
motion_time,
|
|
||||||
hide_tris,
|
|
||||||
culling,
|
|
||||||
&use_portal);
|
|
||||||
|
|
||||||
/* sync possible particle data, note particle_id
|
|
||||||
* starts counting at 1, first is dummy particle */
|
|
||||||
if(!motion && object) {
|
|
||||||
sync_dupli_particle(b_ob, *b_dup, object);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
b_ob.dupli_list_clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* test if object needs to be hidden */
|
|
||||||
bool hide_tris;
|
|
||||||
|
|
||||||
if(!object_render_hide(b_ob, true, true, hide_tris)) {
|
|
||||||
/* object itself */
|
|
||||||
Transform tfm = get_transform(b_ob.matrix_world());
|
|
||||||
BL::DupliObject b_empty_dupli_ob(PointerRNA_NULL);
|
|
||||||
sync_object(b_ob,
|
|
||||||
NULL,
|
|
||||||
b_empty_dupli_ob,
|
|
||||||
tfm,
|
|
||||||
ob_layer,
|
|
||||||
motion_time,
|
|
||||||
hide_tris,
|
|
||||||
culling,
|
|
||||||
&use_portal);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
cancel = progress.get_cancel();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
progress.set_sync_status("");
|
progress.set_sync_status("");
|
||||||
@@ -617,7 +546,6 @@ void BlenderSync::sync_objects(BL::SpaceView3D& b_v3d, float motion_time)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void BlenderSync::sync_motion(BL::RenderSettings& b_render,
|
void BlenderSync::sync_motion(BL::RenderSettings& b_render,
|
||||||
BL::SpaceView3D& b_v3d,
|
|
||||||
BL::Object& b_override,
|
BL::Object& b_override,
|
||||||
int width, int height,
|
int width, int height,
|
||||||
void **python_thread_state)
|
void **python_thread_state)
|
||||||
@@ -654,7 +582,7 @@ void BlenderSync::sync_motion(BL::RenderSettings& b_render,
|
|||||||
b_engine.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_motion(b_render, b_cam, width, height, 0.0f);
|
sync_camera_motion(b_render, b_cam, width, height, 0.0f);
|
||||||
sync_objects(b_v3d, 0.0f);
|
sync_objects(0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* always sample these times for camera motion */
|
/* always sample these times for camera motion */
|
||||||
@@ -688,7 +616,7 @@ void BlenderSync::sync_motion(BL::RenderSettings& b_render,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* sync object */
|
/* sync object */
|
||||||
sync_objects(b_v3d, relative_time);
|
sync_objects(relative_time);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* we need to set the python thread state again because this
|
/* we need to set the python thread state again because this
|
||||||
|
@@ -199,10 +199,10 @@ static PyObject *exit_func(PyObject * /*self*/, PyObject * /*args*/)
|
|||||||
|
|
||||||
static PyObject *create_func(PyObject * /*self*/, PyObject *args)
|
static PyObject *create_func(PyObject * /*self*/, PyObject *args)
|
||||||
{
|
{
|
||||||
PyObject *pyengine, *pyuserpref, *pydata, *pyscene, *pyregion, *pyv3d, *pyrv3d;
|
PyObject *pyengine, *pyuserpref, *pydata, *pygraph, *pyscene, *pyregion, *pyv3d, *pyrv3d;
|
||||||
int preview_osl;
|
int preview_osl;
|
||||||
|
|
||||||
if(!PyArg_ParseTuple(args, "OOOOOOOi", &pyengine, &pyuserpref, &pydata, &pyscene,
|
if(!PyArg_ParseTuple(args, "OOOOOOOOi", &pyengine, &pyuserpref, &pydata, &pygraph, &pyscene,
|
||||||
&pyregion, &pyv3d, &pyrv3d, &preview_osl))
|
&pyregion, &pyv3d, &pyrv3d, &preview_osl))
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -221,6 +221,10 @@ static PyObject *create_func(PyObject * /*self*/, PyObject *args)
|
|||||||
RNA_main_pointer_create((Main*)PyLong_AsVoidPtr(pydata), &dataptr);
|
RNA_main_pointer_create((Main*)PyLong_AsVoidPtr(pydata), &dataptr);
|
||||||
BL::BlendData data(dataptr);
|
BL::BlendData data(dataptr);
|
||||||
|
|
||||||
|
PointerRNA graphptr;
|
||||||
|
RNA_id_pointer_create((ID*)PyLong_AsVoidPtr(pygraph), &graphptr);
|
||||||
|
BL::Depsgraph graph(graphptr);
|
||||||
|
|
||||||
PointerRNA sceneptr;
|
PointerRNA sceneptr;
|
||||||
RNA_id_pointer_create((ID*)PyLong_AsVoidPtr(pyscene), &sceneptr);
|
RNA_id_pointer_create((ID*)PyLong_AsVoidPtr(pyscene), &sceneptr);
|
||||||
BL::Scene scene(sceneptr);
|
BL::Scene scene(sceneptr);
|
||||||
@@ -245,7 +249,7 @@ static PyObject *create_func(PyObject * /*self*/, PyObject *args)
|
|||||||
int width = region.width();
|
int width = region.width();
|
||||||
int height = region.height();
|
int height = region.height();
|
||||||
|
|
||||||
session = new BlenderSession(engine, userpref, data, scene, v3d, rv3d, width, height);
|
session = new BlenderSession(engine, userpref, data, graph, scene, v3d, rv3d, width, height);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* override some settings for preview */
|
/* override some settings for preview */
|
||||||
@@ -257,7 +261,7 @@ static PyObject *create_func(PyObject * /*self*/, PyObject *args)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* offline session or preview render */
|
/* offline session or preview render */
|
||||||
session = new BlenderSession(engine, userpref, data, scene);
|
session = new BlenderSession(engine, userpref, data, graph, scene);
|
||||||
}
|
}
|
||||||
|
|
||||||
python_thread_state_save(&session->python_thread_state);
|
python_thread_state_save(&session->python_thread_state);
|
||||||
@@ -323,9 +327,9 @@ static PyObject *bake_func(PyObject * /*self*/, PyObject *args)
|
|||||||
|
|
||||||
static PyObject *draw_func(PyObject * /*self*/, PyObject *args)
|
static PyObject *draw_func(PyObject * /*self*/, PyObject *args)
|
||||||
{
|
{
|
||||||
PyObject *pysession, *pyv3d, *pyrv3d;
|
PyObject *pysession, *pygraph, *pyv3d, *pyrv3d;
|
||||||
|
|
||||||
if(!PyArg_ParseTuple(args, "OOO", &pysession, &pyv3d, &pyrv3d))
|
if(!PyArg_ParseTuple(args, "OOOO", &pysession, &pygraph, &pyv3d, &pyrv3d))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
BlenderSession *session = (BlenderSession*)PyLong_AsVoidPtr(pysession);
|
BlenderSession *session = (BlenderSession*)PyLong_AsVoidPtr(pysession);
|
||||||
|
@@ -52,11 +52,13 @@ int BlenderSession::end_resumable_chunk = 0;
|
|||||||
BlenderSession::BlenderSession(BL::RenderEngine& b_engine,
|
BlenderSession::BlenderSession(BL::RenderEngine& b_engine,
|
||||||
BL::UserPreferences& b_userpref,
|
BL::UserPreferences& b_userpref,
|
||||||
BL::BlendData& b_data,
|
BL::BlendData& b_data,
|
||||||
|
BL::Depsgraph& b_depsgraph,
|
||||||
BL::Scene& b_scene)
|
BL::Scene& b_scene)
|
||||||
: b_engine(b_engine),
|
: b_engine(b_engine),
|
||||||
b_userpref(b_userpref),
|
b_userpref(b_userpref),
|
||||||
b_data(b_data),
|
b_data(b_data),
|
||||||
b_render(b_engine.render()),
|
b_render(b_engine.render()),
|
||||||
|
b_depsgraph(b_depsgraph),
|
||||||
b_scene(b_scene),
|
b_scene(b_scene),
|
||||||
b_v3d(PointerRNA_NULL),
|
b_v3d(PointerRNA_NULL),
|
||||||
b_rv3d(PointerRNA_NULL),
|
b_rv3d(PointerRNA_NULL),
|
||||||
@@ -76,6 +78,7 @@ BlenderSession::BlenderSession(BL::RenderEngine& b_engine,
|
|||||||
BlenderSession::BlenderSession(BL::RenderEngine& b_engine,
|
BlenderSession::BlenderSession(BL::RenderEngine& b_engine,
|
||||||
BL::UserPreferences& b_userpref,
|
BL::UserPreferences& b_userpref,
|
||||||
BL::BlendData& b_data,
|
BL::BlendData& b_data,
|
||||||
|
BL::Depsgraph& b_depsgraph,
|
||||||
BL::Scene& b_scene,
|
BL::Scene& b_scene,
|
||||||
BL::SpaceView3D& b_v3d,
|
BL::SpaceView3D& b_v3d,
|
||||||
BL::RegionView3D& b_rv3d,
|
BL::RegionView3D& b_rv3d,
|
||||||
@@ -84,6 +87,7 @@ BlenderSession::BlenderSession(BL::RenderEngine& b_engine,
|
|||||||
b_userpref(b_userpref),
|
b_userpref(b_userpref),
|
||||||
b_data(b_data),
|
b_data(b_data),
|
||||||
b_render(b_scene.render()),
|
b_render(b_scene.render()),
|
||||||
|
b_depsgraph(b_depsgraph),
|
||||||
b_scene(b_scene),
|
b_scene(b_scene),
|
||||||
b_v3d(b_v3d),
|
b_v3d(b_v3d),
|
||||||
b_rv3d(b_rv3d),
|
b_rv3d(b_rv3d),
|
||||||
@@ -141,7 +145,7 @@ void BlenderSession::create_session()
|
|||||||
session->set_pause(session_pause);
|
session->set_pause(session_pause);
|
||||||
|
|
||||||
/* create sync */
|
/* create sync */
|
||||||
sync = new BlenderSync(b_engine, b_data, b_scene, scene, !background, session->progress, is_cpu);
|
sync = new BlenderSync(b_engine, b_data, b_depsgraph, b_scene, scene, !background, session->progress, is_cpu);
|
||||||
BL::Object b_camera_override(b_engine.camera_override());
|
BL::Object b_camera_override(b_engine.camera_override());
|
||||||
if(b_v3d) {
|
if(b_v3d) {
|
||||||
if(session_pause == false) {
|
if(session_pause == false) {
|
||||||
@@ -211,7 +215,7 @@ void BlenderSession::reset_session(BL::BlendData& b_data_, BL::Scene& b_scene_)
|
|||||||
session->stats.mem_peak = session->stats.mem_used;
|
session->stats.mem_peak = session->stats.mem_used;
|
||||||
|
|
||||||
/* sync object should be re-created */
|
/* sync object should be re-created */
|
||||||
sync = new BlenderSync(b_engine, b_data, b_scene, scene, !background, session->progress, is_cpu);
|
sync = new BlenderSync(b_engine, b_data, b_depsgraph, b_scene, scene, !background, session->progress, is_cpu);
|
||||||
|
|
||||||
/* for final render we will do full data sync per render layer, only
|
/* for final render we will do full data sync per render layer, only
|
||||||
* do some basic syncing here, no objects or materials for speed */
|
* do some basic syncing here, no objects or materials for speed */
|
||||||
|
@@ -36,11 +36,13 @@ public:
|
|||||||
BlenderSession(BL::RenderEngine& b_engine,
|
BlenderSession(BL::RenderEngine& b_engine,
|
||||||
BL::UserPreferences& b_userpref,
|
BL::UserPreferences& b_userpref,
|
||||||
BL::BlendData& b_data,
|
BL::BlendData& b_data,
|
||||||
|
BL::Depsgraph& b_depsgraph,
|
||||||
BL::Scene& b_scene);
|
BL::Scene& b_scene);
|
||||||
|
|
||||||
BlenderSession(BL::RenderEngine& b_engine,
|
BlenderSession(BL::RenderEngine& b_engine,
|
||||||
BL::UserPreferences& b_userpref,
|
BL::UserPreferences& b_userpref,
|
||||||
BL::BlendData& b_data,
|
BL::BlendData& b_data,
|
||||||
|
BL::Depsgraph& b_depsgraph,
|
||||||
BL::Scene& b_scene,
|
BL::Scene& b_scene,
|
||||||
BL::SpaceView3D& b_v3d,
|
BL::SpaceView3D& b_v3d,
|
||||||
BL::RegionView3D& b_rv3d,
|
BL::RegionView3D& b_rv3d,
|
||||||
@@ -104,6 +106,7 @@ public:
|
|||||||
BL::UserPreferences b_userpref;
|
BL::UserPreferences b_userpref;
|
||||||
BL::BlendData b_data;
|
BL::BlendData b_data;
|
||||||
BL::RenderSettings b_render;
|
BL::RenderSettings b_render;
|
||||||
|
BL::Depsgraph b_depsgraph;
|
||||||
BL::Scene b_scene;
|
BL::Scene b_scene;
|
||||||
BL::SpaceView3D b_v3d;
|
BL::SpaceView3D b_v3d;
|
||||||
BL::RegionView3D b_rv3d;
|
BL::RegionView3D b_rv3d;
|
||||||
|
@@ -44,6 +44,7 @@ CCL_NAMESPACE_BEGIN
|
|||||||
|
|
||||||
BlenderSync::BlenderSync(BL::RenderEngine& b_engine,
|
BlenderSync::BlenderSync(BL::RenderEngine& b_engine,
|
||||||
BL::BlendData& b_data,
|
BL::BlendData& b_data,
|
||||||
|
BL::Depsgraph& b_depsgraph,
|
||||||
BL::Scene& b_scene,
|
BL::Scene& b_scene,
|
||||||
Scene *scene,
|
Scene *scene,
|
||||||
bool preview,
|
bool preview,
|
||||||
@@ -51,6 +52,7 @@ BlenderSync::BlenderSync(BL::RenderEngine& b_engine,
|
|||||||
bool is_cpu)
|
bool is_cpu)
|
||||||
: b_engine(b_engine),
|
: b_engine(b_engine),
|
||||||
b_data(b_data),
|
b_data(b_data),
|
||||||
|
b_depsgraph(b_depsgraph),
|
||||||
b_scene(b_scene),
|
b_scene(b_scene),
|
||||||
shader_map(&scene->shaders),
|
shader_map(&scene->shaders),
|
||||||
object_map(&scene->objects),
|
object_map(&scene->objects),
|
||||||
@@ -210,10 +212,9 @@ void BlenderSync::sync_data(BL::RenderSettings& b_render,
|
|||||||
scene->need_motion() == Scene::MOTION_NONE ||
|
scene->need_motion() == Scene::MOTION_NONE ||
|
||||||
scene->camera->motion_position == Camera::MOTION_POSITION_CENTER)
|
scene->camera->motion_position == Camera::MOTION_POSITION_CENTER)
|
||||||
{
|
{
|
||||||
sync_objects(b_v3d);
|
sync_objects();
|
||||||
}
|
}
|
||||||
sync_motion(b_render,
|
sync_motion(b_render,
|
||||||
b_v3d,
|
|
||||||
b_override,
|
b_override,
|
||||||
width, height,
|
width, height,
|
||||||
python_thread_state);
|
python_thread_state);
|
||||||
|
@@ -51,6 +51,7 @@ class BlenderSync {
|
|||||||
public:
|
public:
|
||||||
BlenderSync(BL::RenderEngine& b_engine,
|
BlenderSync(BL::RenderEngine& b_engine,
|
||||||
BL::BlendData& b_data,
|
BL::BlendData& b_data,
|
||||||
|
BL::Depsgraph& b_graph,
|
||||||
BL::Scene& b_scene,
|
BL::Scene& b_scene,
|
||||||
Scene *scene,
|
Scene *scene,
|
||||||
bool preview,
|
bool preview,
|
||||||
@@ -97,9 +98,8 @@ private:
|
|||||||
/* sync */
|
/* sync */
|
||||||
void sync_lamps(bool update_all);
|
void sync_lamps(bool update_all);
|
||||||
void sync_materials(bool update_all);
|
void sync_materials(bool update_all);
|
||||||
void sync_objects(BL::SpaceView3D& b_v3d, float motion_time = 0.0f);
|
void sync_objects(float motion_time = 0.0f);
|
||||||
void sync_motion(BL::RenderSettings& b_render,
|
void sync_motion(BL::RenderSettings& b_render,
|
||||||
BL::SpaceView3D& b_v3d,
|
|
||||||
BL::Object& b_override,
|
BL::Object& b_override,
|
||||||
int width, int height,
|
int width, int height,
|
||||||
void **python_thread_state);
|
void **python_thread_state);
|
||||||
@@ -156,6 +156,7 @@ private:
|
|||||||
/* variables */
|
/* variables */
|
||||||
BL::RenderEngine b_engine;
|
BL::RenderEngine b_engine;
|
||||||
BL::BlendData b_data;
|
BL::BlendData b_data;
|
||||||
|
BL::Depsgraph b_depsgraph;
|
||||||
BL::Scene b_scene;
|
BL::Scene b_scene;
|
||||||
|
|
||||||
id_map<void*, Shader> shader_map;
|
id_map<void*, Shader> shader_map;
|
||||||
|
@@ -24,6 +24,7 @@ set(INC
|
|||||||
../../blenlib
|
../../blenlib
|
||||||
../../blentranslation
|
../../blentranslation
|
||||||
../../bmesh
|
../../bmesh
|
||||||
|
../../depsgraph
|
||||||
../../gpu
|
../../gpu
|
||||||
../../ikplugin
|
../../ikplugin
|
||||||
../../imbuf
|
../../imbuf
|
||||||
|
@@ -58,6 +58,8 @@
|
|||||||
#include "BKE_screen.h"
|
#include "BKE_screen.h"
|
||||||
#include "BKE_depsgraph.h"
|
#include "BKE_depsgraph.h"
|
||||||
|
|
||||||
|
#include "DEG_depsgraph.h"
|
||||||
|
|
||||||
#include "RE_engine.h"
|
#include "RE_engine.h"
|
||||||
#include "RE_pipeline.h"
|
#include "RE_pipeline.h"
|
||||||
|
|
||||||
@@ -82,6 +84,7 @@ static void bake_set_props(wmOperator *op, Scene *scene);
|
|||||||
typedef struct BakeAPIRender {
|
typedef struct BakeAPIRender {
|
||||||
Object *ob;
|
Object *ob;
|
||||||
Main *main;
|
Main *main;
|
||||||
|
Depsgraph *depsgraph;
|
||||||
Scene *scene;
|
Scene *scene;
|
||||||
ReportList *reports;
|
ReportList *reports;
|
||||||
ListBase selected_objects;
|
ListBase selected_objects;
|
||||||
@@ -630,7 +633,7 @@ static Mesh *bake_mesh_new_from_object(Main *bmain, Scene *scene, Object *ob)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int bake(
|
static int bake(
|
||||||
Render *re, Main *bmain, Scene *scene, Object *ob_low, ListBase *selected_objects, ReportList *reports,
|
Render *re, Main *bmain, Depsgraph *graph, Scene *scene, Object *ob_low, ListBase *selected_objects, ReportList *reports,
|
||||||
const ScenePassType pass_type, const int pass_filter, const int margin,
|
const ScenePassType pass_type, const int pass_filter, const int margin,
|
||||||
const BakeSaveMode save_mode, const bool is_clear, const bool is_split_materials,
|
const BakeSaveMode save_mode, const bool is_clear, const bool is_split_materials,
|
||||||
const bool is_automatic_name, const bool is_selected_to_active, const bool is_cage,
|
const bool is_automatic_name, const bool is_selected_to_active, const bool is_cage,
|
||||||
@@ -669,7 +672,7 @@ static int bake(
|
|||||||
size_t num_pixels;
|
size_t num_pixels;
|
||||||
int tot_materials;
|
int tot_materials;
|
||||||
|
|
||||||
RE_bake_engine_set_engine_parameters(re, bmain, scene);
|
RE_bake_engine_set_engine_parameters(re, bmain, graph, scene);
|
||||||
|
|
||||||
if (!RE_bake_has_engine(re)) {
|
if (!RE_bake_has_engine(re)) {
|
||||||
BKE_report(reports, RPT_ERROR, "Current render engine does not support baking");
|
BKE_report(reports, RPT_ERROR, "Current render engine does not support baking");
|
||||||
@@ -1117,6 +1120,7 @@ static void bake_init_api_data(wmOperator *op, bContext *C, BakeAPIRender *bkr)
|
|||||||
|
|
||||||
bkr->ob = CTX_data_active_object(C);
|
bkr->ob = CTX_data_active_object(C);
|
||||||
bkr->main = CTX_data_main(C);
|
bkr->main = CTX_data_main(C);
|
||||||
|
bkr->depsgraph = CTX_data_depsgraph(C);
|
||||||
bkr->scene = CTX_data_scene(C);
|
bkr->scene = CTX_data_scene(C);
|
||||||
bkr->sa = sc ? BKE_screen_find_big_area(sc, SPACE_IMAGE, 10) : NULL;
|
bkr->sa = sc ? BKE_screen_find_big_area(sc, SPACE_IMAGE, 10) : NULL;
|
||||||
|
|
||||||
@@ -1197,7 +1201,7 @@ static int bake_exec(bContext *C, wmOperator *op)
|
|||||||
|
|
||||||
if (bkr.is_selected_to_active) {
|
if (bkr.is_selected_to_active) {
|
||||||
result = bake(
|
result = bake(
|
||||||
bkr.render, bkr.main, bkr.scene, bkr.ob, &bkr.selected_objects, bkr.reports,
|
bkr.render, bkr.main, bkr.depsgraph, bkr.scene, bkr.ob, &bkr.selected_objects, bkr.reports,
|
||||||
bkr.pass_type, bkr.pass_filter, bkr.margin, bkr.save_mode,
|
bkr.pass_type, bkr.pass_filter, bkr.margin, bkr.save_mode,
|
||||||
bkr.is_clear, bkr.is_split_materials, bkr.is_automatic_name, true, bkr.is_cage,
|
bkr.is_clear, bkr.is_split_materials, bkr.is_automatic_name, true, bkr.is_cage,
|
||||||
bkr.cage_extrusion, bkr.normal_space, bkr.normal_swizzle,
|
bkr.cage_extrusion, bkr.normal_space, bkr.normal_swizzle,
|
||||||
@@ -1210,7 +1214,7 @@ static int bake_exec(bContext *C, wmOperator *op)
|
|||||||
for (link = bkr.selected_objects.first; link; link = link->next) {
|
for (link = bkr.selected_objects.first; link; link = link->next) {
|
||||||
Object *ob_iter = link->ptr.data;
|
Object *ob_iter = link->ptr.data;
|
||||||
result = bake(
|
result = bake(
|
||||||
bkr.render, bkr.main, bkr.scene, ob_iter, NULL, bkr.reports,
|
bkr.render, bkr.main, bkr.depsgraph, bkr.scene, ob_iter, NULL, bkr.reports,
|
||||||
bkr.pass_type, bkr.pass_filter, bkr.margin, bkr.save_mode,
|
bkr.pass_type, bkr.pass_filter, bkr.margin, bkr.save_mode,
|
||||||
is_clear, bkr.is_split_materials, bkr.is_automatic_name, false, bkr.is_cage,
|
is_clear, bkr.is_split_materials, bkr.is_automatic_name, false, bkr.is_cage,
|
||||||
bkr.cage_extrusion, bkr.normal_space, bkr.normal_swizzle,
|
bkr.cage_extrusion, bkr.normal_space, bkr.normal_swizzle,
|
||||||
@@ -1254,7 +1258,7 @@ static void bake_startjob(void *bkv, short *UNUSED(stop), short *do_update, floa
|
|||||||
|
|
||||||
if (bkr->is_selected_to_active) {
|
if (bkr->is_selected_to_active) {
|
||||||
bkr->result = bake(
|
bkr->result = bake(
|
||||||
bkr->render, bkr->main, bkr->scene, bkr->ob, &bkr->selected_objects, bkr->reports,
|
bkr->render, bkr->main, bkr->depsgraph, bkr->scene, bkr->ob, &bkr->selected_objects, bkr->reports,
|
||||||
bkr->pass_type, bkr->pass_filter, bkr->margin, bkr->save_mode,
|
bkr->pass_type, bkr->pass_filter, bkr->margin, bkr->save_mode,
|
||||||
bkr->is_clear, bkr->is_split_materials, bkr->is_automatic_name, true, bkr->is_cage,
|
bkr->is_clear, bkr->is_split_materials, bkr->is_automatic_name, true, bkr->is_cage,
|
||||||
bkr->cage_extrusion, bkr->normal_space, bkr->normal_swizzle,
|
bkr->cage_extrusion, bkr->normal_space, bkr->normal_swizzle,
|
||||||
@@ -1267,7 +1271,7 @@ static void bake_startjob(void *bkv, short *UNUSED(stop), short *do_update, floa
|
|||||||
for (link = bkr->selected_objects.first; link; link = link->next) {
|
for (link = bkr->selected_objects.first; link; link = link->next) {
|
||||||
Object *ob_iter = link->ptr.data;
|
Object *ob_iter = link->ptr.data;
|
||||||
bkr->result = bake(
|
bkr->result = bake(
|
||||||
bkr->render, bkr->main, bkr->scene, ob_iter, NULL, bkr->reports,
|
bkr->render, bkr->main, bkr->depsgraph, bkr->scene, ob_iter, NULL, bkr->reports,
|
||||||
bkr->pass_type, bkr->pass_filter, bkr->margin, bkr->save_mode,
|
bkr->pass_type, bkr->pass_filter, bkr->margin, bkr->save_mode,
|
||||||
is_clear, bkr->is_split_materials, bkr->is_automatic_name, false, bkr->is_cage,
|
is_clear, bkr->is_split_materials, bkr->is_automatic_name, false, bkr->is_cage,
|
||||||
bkr->cage_extrusion, bkr->normal_space, bkr->normal_swizzle,
|
bkr->cage_extrusion, bkr->normal_space, bkr->normal_swizzle,
|
||||||
|
@@ -24,6 +24,7 @@ set(INC
|
|||||||
../../blenlib
|
../../blenlib
|
||||||
../../blenloader
|
../../blenloader
|
||||||
../../blentranslation
|
../../blentranslation
|
||||||
|
../../depsgraph
|
||||||
../../gpu
|
../../gpu
|
||||||
../../imbuf
|
../../imbuf
|
||||||
../../bmesh
|
../../bmesh
|
||||||
|
@@ -967,6 +967,7 @@ static int screen_render_invoke(bContext *C, wmOperator *op, const wmEvent *even
|
|||||||
RE_current_scene_update_cb(re, rj, current_scene_update);
|
RE_current_scene_update_cb(re, rj, current_scene_update);
|
||||||
RE_stats_draw_cb(re, rj, image_renderinfo_cb);
|
RE_stats_draw_cb(re, rj, image_renderinfo_cb);
|
||||||
RE_progress_cb(re, rj, render_progress_update);
|
RE_progress_cb(re, rj, render_progress_update);
|
||||||
|
RE_SetDepsgraph(re, CTX_data_depsgraph(C));
|
||||||
|
|
||||||
rj->re = re;
|
rj->re = re;
|
||||||
G.is_break = false;
|
G.is_break = false;
|
||||||
|
@@ -79,6 +79,8 @@
|
|||||||
#include "BKE_texture.h"
|
#include "BKE_texture.h"
|
||||||
#include "BKE_world.h"
|
#include "BKE_world.h"
|
||||||
|
|
||||||
|
#include "DEG_depsgraph_build.h"
|
||||||
|
|
||||||
#include "IMB_imbuf.h"
|
#include "IMB_imbuf.h"
|
||||||
#include "IMB_imbuf_types.h"
|
#include "IMB_imbuf_types.h"
|
||||||
#include "IMB_thumbs.h"
|
#include "IMB_thumbs.h"
|
||||||
@@ -278,7 +280,7 @@ static Scene *preview_get_scene(Main *pr_main)
|
|||||||
static Scene *preview_prepare_scene(Main *bmain, Scene *scene, ID *id, int id_type, ShaderPreview *sp)
|
static Scene *preview_prepare_scene(Main *bmain, Scene *scene, ID *id, int id_type, ShaderPreview *sp)
|
||||||
{
|
{
|
||||||
Scene *sce;
|
Scene *sce;
|
||||||
BaseLegacy *base;
|
Base *base;
|
||||||
Main *pr_main = sp->pr_main;
|
Main *pr_main = sp->pr_main;
|
||||||
|
|
||||||
memcpy(pr_main->name, bmain->name, sizeof(pr_main->name));
|
memcpy(pr_main->name, bmain->name, sizeof(pr_main->name));
|
||||||
@@ -534,6 +536,7 @@ static Scene *preview_prepare_scene(Main *bmain, Scene *scene, ID *id, int id_ty
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEG_scene_relations_rebuild(pr_main, sce);
|
||||||
return sce;
|
return sce;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -32,6 +32,8 @@
|
|||||||
#include "BLI_utildefines.h"
|
#include "BLI_utildefines.h"
|
||||||
#include "BLI_path_util.h"
|
#include "BLI_path_util.h"
|
||||||
|
|
||||||
|
#include "DEG_depsgraph.h"
|
||||||
|
|
||||||
#include "RNA_define.h"
|
#include "RNA_define.h"
|
||||||
#include "RNA_enum_types.h"
|
#include "RNA_enum_types.h"
|
||||||
|
|
||||||
@@ -146,7 +148,7 @@ static void engine_unbind_display_space_shader(RenderEngine *UNUSED(engine))
|
|||||||
IMB_colormanagement_finish_glsl_draw();
|
IMB_colormanagement_finish_glsl_draw();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void engine_update(RenderEngine *engine, Main *bmain, Scene *scene)
|
static void engine_update(RenderEngine *engine, Main *bmain, Depsgraph *graph, Scene *scene)
|
||||||
{
|
{
|
||||||
extern FunctionRNA rna_RenderEngine_update_func;
|
extern FunctionRNA rna_RenderEngine_update_func;
|
||||||
PointerRNA ptr;
|
PointerRNA ptr;
|
||||||
@@ -158,13 +160,14 @@ static void engine_update(RenderEngine *engine, Main *bmain, Scene *scene)
|
|||||||
|
|
||||||
RNA_parameter_list_create(&list, &ptr, func);
|
RNA_parameter_list_create(&list, &ptr, func);
|
||||||
RNA_parameter_set_lookup(&list, "data", &bmain);
|
RNA_parameter_set_lookup(&list, "data", &bmain);
|
||||||
|
RNA_parameter_set_lookup(&list, "depsgraph", &graph);
|
||||||
RNA_parameter_set_lookup(&list, "scene", &scene);
|
RNA_parameter_set_lookup(&list, "scene", &scene);
|
||||||
engine->type->ext.call(NULL, &ptr, func, &list);
|
engine->type->ext.call(NULL, &ptr, func, &list);
|
||||||
|
|
||||||
RNA_parameter_list_free(&list);
|
RNA_parameter_list_free(&list);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void engine_render(RenderEngine *engine, struct Scene *scene)
|
static void engine_render(RenderEngine *engine, struct Depsgraph *depsgraph)
|
||||||
{
|
{
|
||||||
extern FunctionRNA rna_RenderEngine_render_func;
|
extern FunctionRNA rna_RenderEngine_render_func;
|
||||||
PointerRNA ptr;
|
PointerRNA ptr;
|
||||||
@@ -175,7 +178,7 @@ static void engine_render(RenderEngine *engine, struct Scene *scene)
|
|||||||
func = &rna_RenderEngine_render_func;
|
func = &rna_RenderEngine_render_func;
|
||||||
|
|
||||||
RNA_parameter_list_create(&list, &ptr, func);
|
RNA_parameter_list_create(&list, &ptr, func);
|
||||||
RNA_parameter_set_lookup(&list, "scene", &scene);
|
RNA_parameter_set_lookup(&list, "depsgraph", &depsgraph);
|
||||||
engine->type->ext.call(NULL, &ptr, func, &list);
|
engine->type->ext.call(NULL, &ptr, func, &list);
|
||||||
|
|
||||||
RNA_parameter_list_free(&list);
|
RNA_parameter_list_free(&list);
|
||||||
@@ -459,12 +462,13 @@ static void rna_def_render_engine(BlenderRNA *brna)
|
|||||||
RNA_def_function_ui_description(func, "Export scene data for render");
|
RNA_def_function_ui_description(func, "Export scene data for render");
|
||||||
RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL | FUNC_ALLOW_WRITE);
|
RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL | FUNC_ALLOW_WRITE);
|
||||||
RNA_def_pointer(func, "data", "BlendData", "", "");
|
RNA_def_pointer(func, "data", "BlendData", "", "");
|
||||||
|
RNA_def_pointer(func, "depsgraph", "Depsgraph", "", "");
|
||||||
RNA_def_pointer(func, "scene", "Scene", "", "");
|
RNA_def_pointer(func, "scene", "Scene", "", "");
|
||||||
|
|
||||||
func = RNA_def_function(srna, "render", NULL);
|
func = RNA_def_function(srna, "render", NULL);
|
||||||
RNA_def_function_ui_description(func, "Render scene into an image");
|
RNA_def_function_ui_description(func, "Render scene into an image");
|
||||||
RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL | FUNC_ALLOW_WRITE);
|
RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL | FUNC_ALLOW_WRITE);
|
||||||
RNA_def_pointer(func, "scene", "Scene", "", "");
|
RNA_def_pointer(func, "desgraph", "Depsgraph", "", "");
|
||||||
|
|
||||||
func = RNA_def_function(srna, "bake", NULL);
|
func = RNA_def_function(srna, "bake", NULL);
|
||||||
RNA_def_function_ui_description(func, "Bake passes");
|
RNA_def_function_ui_description(func, "Bake passes");
|
||||||
|
12
source/blender/render/extern/include/RE_engine.h
vendored
12
source/blender/render/extern/include/RE_engine.h
vendored
@@ -39,6 +39,7 @@
|
|||||||
|
|
||||||
struct bNode;
|
struct bNode;
|
||||||
struct bNodeTree;
|
struct bNodeTree;
|
||||||
|
struct Depsgraph;
|
||||||
struct IDProperty;
|
struct IDProperty;
|
||||||
struct Main;
|
struct Main;
|
||||||
struct Object;
|
struct Object;
|
||||||
@@ -91,9 +92,11 @@ typedef struct RenderEngineType {
|
|||||||
char name[64];
|
char name[64];
|
||||||
int flag;
|
int flag;
|
||||||
|
|
||||||
void (*update)(struct RenderEngine *engine, struct Main *bmain, struct Scene *scene);
|
void (*update)(struct RenderEngine *engine, struct Main *bmain, struct Depsgraph *depsgraph, struct Scene *scene);
|
||||||
void (*render)(struct RenderEngine *engine, struct Scene *scene);
|
void (*render)(struct RenderEngine *engine, struct Depsgraph *depsgraph);
|
||||||
void (*bake)(struct RenderEngine *engine, struct Scene *scene, struct Object *object, const int pass_type, const int pass_filter, const int object_id, const struct BakePixel *pixel_array, const int num_pixels, const int depth, void *result);
|
void (*bake)(struct RenderEngine *engine, struct Scene *scene, struct Object *object, const int pass_type,
|
||||||
|
const int pass_filter, const int object_id, const struct BakePixel *pixel_array, const int num_pixels,
|
||||||
|
const int depth, void *result);
|
||||||
|
|
||||||
void (*view_update)(struct RenderEngine *engine, const struct bContext *context);
|
void (*view_update)(struct RenderEngine *engine, const struct bContext *context);
|
||||||
void (*view_draw)(struct RenderEngine *engine, const struct bContext *context);
|
void (*view_draw)(struct RenderEngine *engine, const struct bContext *context);
|
||||||
@@ -177,7 +180,8 @@ RenderEngineType *RE_engines_find(const char *idname);
|
|||||||
|
|
||||||
rcti* RE_engine_get_current_tiles(struct Render *re, int *r_total_tiles, bool *r_needs_free);
|
rcti* RE_engine_get_current_tiles(struct Render *re, int *r_total_tiles, bool *r_needs_free);
|
||||||
struct RenderData *RE_engine_get_render_data(struct Render *re);
|
struct RenderData *RE_engine_get_render_data(struct Render *re);
|
||||||
void RE_bake_engine_set_engine_parameters(struct Render *re, struct Main *bmain, struct Scene *scene);
|
void RE_bake_engine_set_engine_parameters(
|
||||||
|
struct Render *re, struct Main *bmain, struct Depsgraph *graph, struct Scene *scene);
|
||||||
|
|
||||||
#endif /* __RE_ENGINE_H__ */
|
#endif /* __RE_ENGINE_H__ */
|
||||||
|
|
||||||
|
@@ -37,6 +37,7 @@
|
|||||||
|
|
||||||
struct bMovieHandle;
|
struct bMovieHandle;
|
||||||
struct bNodeTree;
|
struct bNodeTree;
|
||||||
|
struct Depsgraph;
|
||||||
struct Image;
|
struct Image;
|
||||||
struct ImageFormatData;
|
struct ImageFormatData;
|
||||||
struct Main;
|
struct Main;
|
||||||
@@ -252,6 +253,7 @@ void RE_ChangeModeFlag(struct Render *re, int flag, bool clear);
|
|||||||
struct Object *RE_GetCamera(struct Render *re); /* return camera override if set */
|
struct Object *RE_GetCamera(struct Render *re); /* return camera override if set */
|
||||||
void RE_SetOverrideCamera(struct Render *re, struct Object *camera);
|
void RE_SetOverrideCamera(struct Render *re, struct Object *camera);
|
||||||
void RE_SetCamera(struct Render *re, struct Object *camera);
|
void RE_SetCamera(struct Render *re, struct Object *camera);
|
||||||
|
void RE_SetDepsgraph(struct Render *re, struct Depsgraph *graph);
|
||||||
void RE_SetEnvmapCamera(struct Render *re, struct Object *cam_ob, float viewscale, float clipsta, float clipend);
|
void RE_SetEnvmapCamera(struct Render *re, struct Object *cam_ob, float viewscale, float clipsta, float clipend);
|
||||||
void RE_SetWindow(struct Render *re, const rctf *viewplane, float clipsta, float clipend);
|
void RE_SetWindow(struct Render *re, const rctf *viewplane, float clipsta, float clipend);
|
||||||
void RE_SetOrtho(struct Render *re, const rctf *viewplane, float clipsta, float clipend);
|
void RE_SetOrtho(struct Render *re, const rctf *viewplane, float clipsta, float clipend);
|
||||||
|
@@ -185,6 +185,8 @@ struct Render {
|
|||||||
/* shadow counter, detect shadow-reuse for shaders */
|
/* shadow counter, detect shadow-reuse for shaders */
|
||||||
int shadowsamplenr[BLENDER_MAX_THREADS];
|
int shadowsamplenr[BLENDER_MAX_THREADS];
|
||||||
|
|
||||||
|
struct Depsgraph *depsgraph;
|
||||||
|
|
||||||
/* main, scene, and its full copy of renderdata and world */
|
/* main, scene, and its full copy of renderdata and world */
|
||||||
struct Main *main;
|
struct Main *main;
|
||||||
Scene *scene;
|
Scene *scene;
|
||||||
|
@@ -49,6 +49,8 @@
|
|||||||
#include "BKE_report.h"
|
#include "BKE_report.h"
|
||||||
#include "BKE_scene.h"
|
#include "BKE_scene.h"
|
||||||
|
|
||||||
|
#include "DEG_depsgraph.h"
|
||||||
|
|
||||||
#include "RNA_access.h"
|
#include "RNA_access.h"
|
||||||
|
|
||||||
#ifdef WITH_PYTHON
|
#ifdef WITH_PYTHON
|
||||||
@@ -494,8 +496,9 @@ RenderData *RE_engine_get_render_data(Render *re)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Bake */
|
/* Bake */
|
||||||
void RE_bake_engine_set_engine_parameters(Render *re, Main *bmain, Scene *scene)
|
void RE_bake_engine_set_engine_parameters(Render *re, Main *bmain, Depsgraph *graph, Scene *scene)
|
||||||
{
|
{
|
||||||
|
re->depsgraph = graph;
|
||||||
re->scene = scene;
|
re->scene = scene;
|
||||||
re->main = bmain;
|
re->main = bmain;
|
||||||
render_copy_renderdata(&re->r, &scene->r);
|
render_copy_renderdata(&re->r, &scene->r);
|
||||||
@@ -545,7 +548,7 @@ bool RE_bake_engine(
|
|||||||
|
|
||||||
/* update is only called so we create the engine.session */
|
/* update is only called so we create the engine.session */
|
||||||
if (type->update)
|
if (type->update)
|
||||||
type->update(engine, re->main, re->scene);
|
type->update(engine, re->main, re->depsgraph, re->scene);
|
||||||
|
|
||||||
if (type->bake) {
|
if (type->bake) {
|
||||||
type->bake(
|
type->bake(
|
||||||
@@ -696,16 +699,18 @@ int RE_engine_render(Render *re, int do_all)
|
|||||||
if (re->result->do_exr_tile)
|
if (re->result->do_exr_tile)
|
||||||
render_result_exr_file_begin(re);
|
render_result_exr_file_begin(re);
|
||||||
|
|
||||||
if (type->update)
|
if (type->update) {
|
||||||
type->update(engine, re->main, re->scene);
|
type->update(engine, re->main, re->depsgraph, re->scene);
|
||||||
|
}
|
||||||
|
|
||||||
/* Clear UI drawing locks. */
|
/* Clear UI drawing locks. */
|
||||||
if (re->draw_lock) {
|
if (re->draw_lock) {
|
||||||
re->draw_lock(re->dlh, 0);
|
re->draw_lock(re->dlh, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type->render)
|
if (type->render) {
|
||||||
type->render(engine, re->scene);
|
type->render(engine, re->depsgraph);
|
||||||
|
}
|
||||||
|
|
||||||
engine->tile_x = 0;
|
engine->tile_x = 0;
|
||||||
engine->tile_y = 0;
|
engine->tile_y = 0;
|
||||||
|
@@ -48,6 +48,8 @@
|
|||||||
|
|
||||||
#include "BKE_camera.h"
|
#include "BKE_camera.h"
|
||||||
|
|
||||||
|
#include "DEG_depsgraph.h"
|
||||||
|
|
||||||
#ifdef WITH_QUICKTIME
|
#ifdef WITH_QUICKTIME
|
||||||
#include "quicktime_export.h"
|
#include "quicktime_export.h"
|
||||||
#endif
|
#endif
|
||||||
@@ -503,6 +505,11 @@ void RE_SetCamera(Render *re, Object *cam_ob)
|
|||||||
re_camera_params_get(re, ¶ms, cam_ob);
|
re_camera_params_get(re, ¶ms, cam_ob);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RE_SetDepsgraph(Render *re, Depsgraph *graph)
|
||||||
|
{
|
||||||
|
re->depsgraph = graph;
|
||||||
|
}
|
||||||
|
|
||||||
void RE_SetPixelSize(Render *re, float pixsize)
|
void RE_SetPixelSize(Render *re, float pixsize)
|
||||||
{
|
{
|
||||||
re->viewdx = pixsize;
|
re->viewdx = pixsize;
|
||||||
|
@@ -551,6 +551,7 @@ void RE_FreeRender(Render *re)
|
|||||||
/* main dbase can already be invalid now, some database-free code checks it */
|
/* main dbase can already be invalid now, some database-free code checks it */
|
||||||
re->main = NULL;
|
re->main = NULL;
|
||||||
re->scene = NULL;
|
re->scene = NULL;
|
||||||
|
re->depsgraph = NULL;
|
||||||
|
|
||||||
RE_Database_Free(re); /* view render can still have full database */
|
RE_Database_Free(re); /* view render can still have full database */
|
||||||
free_sample_tables(re);
|
free_sample_tables(re);
|
||||||
@@ -1933,6 +1934,7 @@ static void render_scene(Render *re, Scene *sce, int cfra)
|
|||||||
|
|
||||||
/* still unsure entity this... */
|
/* still unsure entity this... */
|
||||||
resc->main = re->main;
|
resc->main = re->main;
|
||||||
|
resc->depsgraph = re->depsgraph;
|
||||||
resc->scene = sce;
|
resc->scene = sce;
|
||||||
resc->lay = sce->lay;
|
resc->lay = sce->lay;
|
||||||
resc->scene_color_manage = BKE_scene_check_color_management_enabled(sce);
|
resc->scene_color_manage = BKE_scene_check_color_management_enabled(sce);
|
||||||
@@ -3804,6 +3806,7 @@ void RE_PreviewRender(Render *re, Main *bmain, Scene *sce)
|
|||||||
re->scene = sce;
|
re->scene = sce;
|
||||||
re->scene_color_manage = BKE_scene_check_color_management_enabled(sce);
|
re->scene_color_manage = BKE_scene_check_color_management_enabled(sce);
|
||||||
re->lay = sce->lay;
|
re->lay = sce->lay;
|
||||||
|
re->depsgraph = sce->depsgraph;
|
||||||
|
|
||||||
camera = RE_GetCamera(re);
|
camera = RE_GetCamera(re);
|
||||||
RE_SetCamera(re, camera);
|
RE_SetCamera(re, camera);
|
||||||
|
Reference in New Issue
Block a user