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:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2018-04-06 13:07:27 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2018-04-16 20:55:33 +0300
commit34ab90f546f097cada951b2c9ca22bf271996980 (patch)
treeebcdb3d37120ac1d8fb16462b9104badd1800329 /source/blender/render
parent0c495005dd83913864acb510c1d4194a2275dbb0 (diff)
Depsgraph: remove EvaluationContext, pass Depsgraph instead.
The depsgraph was always created within a fixed evaluation context. Passing both risks the depsgraph and evaluation context not matching, and it complicates the Python API where we'd have to expose both which is not so easy to understand. This also removes the global evaluation context in main, which assumed there to be a single active scene and view layer. Differential Revision: https://developer.blender.org/D3152
Diffstat (limited to 'source/blender/render')
-rw-r--r--source/blender/render/extern/include/RE_engine.h2
-rw-r--r--source/blender/render/extern/include/RE_pipeline.h5
-rw-r--r--source/blender/render/extern/include/RE_render_ext.h10
-rw-r--r--source/blender/render/intern/include/pointdensity.h6
-rw-r--r--source/blender/render/intern/include/render_types.h2
-rw-r--r--source/blender/render/intern/include/renderdatabase.h4
-rw-r--r--source/blender/render/intern/source/convertblender.c108
-rw-r--r--source/blender/render/intern/source/pipeline.c9
-rw-r--r--source/blender/render/intern/source/pointdensity.c48
-rw-r--r--source/blender/render/intern/source/render_texture.c4
10 files changed, 94 insertions, 104 deletions
diff --git a/source/blender/render/extern/include/RE_engine.h b/source/blender/render/extern/include/RE_engine.h
index d5230f74316..8e9d005df9c 100644
--- a/source/blender/render/extern/include/RE_engine.h
+++ b/source/blender/render/extern/include/RE_engine.h
@@ -42,7 +42,7 @@ struct bNodeTree;
struct BakePixel;
struct Depsgraph;
struct Depsgraph;
-struct EvaluationContext;
+struct Depsgraph;
struct IDProperty;
struct Main;
struct Object;
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h
index c5e8443374a..802413f3580 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -39,7 +39,6 @@
struct bMovieHandle;
struct bNodeTree;
struct Depsgraph;
-struct EvaluationContext;
struct Image;
struct ImageFormatData;
struct Main;
@@ -123,8 +122,6 @@ typedef struct RenderLayer {
/* optional saved endresult on disk */
void *exrhandle;
- struct EvaluationContext eval_ctx;
-
ListBase passes;
} RenderLayer;
@@ -274,7 +271,7 @@ void RE_Database_FromScene(
void RE_Database_CameraOnly(
struct Render *re, struct Main *bmain, struct Scene *scene,
unsigned int lay, int use_camera_view);
-void RE_Database_Preprocess(struct EvaluationContext *eavl_ctx, struct Render *re);
+void RE_Database_Preprocess(struct Depsgraph *depsgraph, struct Render *re);
void RE_Database_Free(struct Render *re);
/* project dbase again, when viewplane/perspective changed */
diff --git a/source/blender/render/extern/include/RE_render_ext.h b/source/blender/render/extern/include/RE_render_ext.h
index 0021687efbd..cf0ff009190 100644
--- a/source/blender/render/extern/include/RE_render_ext.h
+++ b/source/blender/render/extern/include/RE_render_ext.h
@@ -38,7 +38,7 @@
/* called by meshtools */
struct DerivedMesh;
-struct EvaluationContext;
+struct Depsgraph;
struct ImagePool;
struct MTex;
struct Scene;
@@ -56,7 +56,7 @@ float texture_value_blend(float tex, float out, float fact, float facg, int blen
void RE_texture_rng_init(void);
void RE_texture_rng_exit(void);
-struct Material *RE_sample_material_init(const struct EvaluationContext *eval_ctx, struct Material *orig_mat, struct Scene *scene);
+struct Material *RE_sample_material_init(struct Depsgraph *depsgraph, struct Material *orig_mat, struct Scene *scene);
void RE_sample_material_free(struct Material *mat);
void RE_sample_material_color(
struct Material *mat, float color[3], float *alpha, const float volume_co[3], const float surface_co[3],
@@ -69,16 +69,16 @@ void ibuf_sample(struct ImBuf *ibuf, float fx, float fy, float dx, float dy, flo
struct PointDensity;
void RE_point_density_cache(
- const struct EvaluationContext *eval_ctx,
+ struct Depsgraph *depsgraph,
struct PointDensity *pd);
void RE_point_density_minmax(
- const struct EvaluationContext *eval_ctx,
+ struct Depsgraph *depsgraph,
struct PointDensity *pd,
float r_min[3], float r_max[3]);
void RE_point_density_sample(
- const struct EvaluationContext *eval_ctx,
+ struct Depsgraph *depsgraph,
struct PointDensity *pd,
const int resolution,
float *values);
diff --git a/source/blender/render/intern/include/pointdensity.h b/source/blender/render/intern/include/pointdensity.h
index f122b3dc4c1..263fa44f9c4 100644
--- a/source/blender/render/intern/include/pointdensity.h
+++ b/source/blender/render/intern/include/pointdensity.h
@@ -37,14 +37,14 @@
* Make point density kd-trees for all point density textures in the scene
*/
-struct EvaluationContext;
+struct Depsgraph;
struct PointDensity;
struct Render;
struct TexResult;
void free_pointdensity(struct PointDensity *pd);
-void cache_pointdensity(const struct EvaluationContext *eval_ctx, struct Render *re, struct PointDensity *pd);
-void make_pointdensities(const struct EvaluationContext *eval_ctx, struct Render *re);
+void cache_pointdensity(struct Depsgraph *depsgraph, struct Render *re, struct PointDensity *pd);
+void make_pointdensities(struct Depsgraph *depsgraph, struct Render *re);
void free_pointdensities(struct Render *re);
int pointdensitytex(struct Tex *tex, const float texvec[3], struct TexResult *texres);
diff --git a/source/blender/render/intern/include/render_types.h b/source/blender/render/intern/include/render_types.h
index 2c46138c7ea..9b0206fd05d 100644
--- a/source/blender/render/intern/include/render_types.h
+++ b/source/blender/render/intern/include/render_types.h
@@ -52,7 +52,7 @@
#include "BLI_sys_types.h" // for intptr_t support
-struct EvaluationContext;
+struct Depsgraph;
struct Object;
struct MemArena;
struct VertTableNode;
diff --git a/source/blender/render/intern/include/renderdatabase.h b/source/blender/render/intern/include/renderdatabase.h
index 1d1af7092c8..6b2deea57d8 100644
--- a/source/blender/render/intern/include/renderdatabase.h
+++ b/source/blender/render/intern/include/renderdatabase.h
@@ -40,7 +40,7 @@ extern "C" {
struct Object;
struct VlakRen;
struct VertRen;
-struct EvaluationContext;
+struct Depsgraph;
struct HaloRen;
struct Main;
struct Material;
@@ -165,7 +165,7 @@ void area_lamp_vectors(struct LampRen *lar);
/* convertblender.c */
void init_render_world(Render *re);
-void RE_Database_FromScene_Vectors(struct EvaluationContext *eval_ctx, Render *re, struct Main *bmain, struct Scene *sce, unsigned int lay);
+void RE_Database_FromScene_Vectors(struct Depsgraph *depsgraph, Render *re, struct Main *bmain, struct Scene *sce, unsigned int lay);
#ifdef __cplusplus
}
diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c
index c358f0388a4..67869ec541d 100644
--- a/source/blender/render/intern/source/convertblender.c
+++ b/source/blender/render/intern/source/convertblender.c
@@ -1292,7 +1292,7 @@ static void get_particle_uvco_mcol(short from, DerivedMesh *dm, float *fuv, int
}
}
}
-static int render_new_particle_system(const EvaluationContext *eval_ctx, Render *re,
+static int render_new_particle_system(Depsgraph *depsgraph, Render *re,
ObjectRen *obr, ParticleSystem *psys, int timeoffset)
{
Object *ob= obr->ob;
@@ -1354,7 +1354,7 @@ static int render_new_particle_system(const EvaluationContext *eval_ctx, Render
if (!(psmd->modifier.mode & eModifierMode_Render))
return 0;
- sim.eval_ctx = eval_ctx;
+ sim.depsgraph = depsgraph;
sim.scene = re->scene;
sim.ob = ob;
sim.psys = psys;
@@ -2171,7 +2171,7 @@ static void displace(Render *re, ObjectRen *obr)
/* Metaball */
/* ------------------------------------------------------------------------- */
-static void init_render_mball(const EvaluationContext *eval_ctx, Render *re, ObjectRen *obr)
+static void init_render_mball(Depsgraph *depsgraph, Render *re, ObjectRen *obr)
{
Object *ob= obr->ob;
DispList *dl;
@@ -2197,7 +2197,7 @@ static void init_render_mball(const EvaluationContext *eval_ctx, Render *re, Obj
need_orco= 1;
}
- BKE_displist_make_mball_forRender(eval_ctx, re->scene, ob, &dispbase);
+ BKE_displist_make_mball_forRender(depsgraph, re->scene, ob, &dispbase);
dl= dispbase.first;
if (dl == NULL) return;
@@ -2564,7 +2564,7 @@ static void init_render_dm(DerivedMesh *dm, Render *re, ObjectRen *obr,
}
-static void init_render_surf(const EvaluationContext *eval_ctx, Render *re, ObjectRen *obr, int timeoffset)
+static void init_render_surf(Depsgraph *depsgraph, Render *re, ObjectRen *obr, int timeoffset)
{
Object *ob= obr->ob;
Nurb *nu = NULL;
@@ -2597,13 +2597,13 @@ static void init_render_surf(const EvaluationContext *eval_ctx, Render *re, Obje
if (ob->parent && (ob->parent->type==OB_LATTICE)) need_orco= 1;
- BKE_displist_make_surf(eval_ctx, re->scene, ob, &displist, &dm, 1, 0, 1);
+ BKE_displist_make_surf(depsgraph, re->scene, ob, &displist, &dm, 1, 0, 1);
if (dm) {
if (need_orco) {
orco = get_object_orco(re, ob);
if (!orco) {
- orco= BKE_displist_make_orco(eval_ctx, re->scene, ob, dm, true, true);
+ orco= BKE_displist_make_orco(depsgraph, re->scene, ob, dm, true, true);
if (orco) {
set_object_orco(re, ob, orco);
}
@@ -2635,7 +2635,7 @@ static void init_render_surf(const EvaluationContext *eval_ctx, Render *re, Obje
MEM_freeN(matar);
}
-static void init_render_curve(const EvaluationContext *eval_ctx, Render *re, ObjectRen *obr, int timeoffset)
+static void init_render_curve(Depsgraph *depsgraph, Render *re, ObjectRen *obr, int timeoffset)
{
Object *ob= obr->ob;
Curve *cu;
@@ -2655,7 +2655,7 @@ static void init_render_curve(const EvaluationContext *eval_ctx, Render *re, Obj
if (ob->type==OB_FONT && cu->str==NULL) return;
else if (ob->type==OB_CURVE && cu->nurb.first==NULL) return;
- BKE_displist_make_curveTypes_forRender(eval_ctx, re->scene, ob, &disp, &dm, false, true);
+ BKE_displist_make_curveTypes_forRender(depsgraph, re->scene, ob, &disp, &dm, false, true);
dl= disp.first;
if (dl==NULL) return;
@@ -2682,7 +2682,7 @@ static void init_render_curve(const EvaluationContext *eval_ctx, Render *re, Obj
if (need_orco) {
orco = get_object_orco(re, ob);
if (!orco) {
- orco = BKE_displist_make_orco(eval_ctx, re->scene, ob, dm, true, true);
+ orco = BKE_displist_make_orco(depsgraph, re->scene, ob, dm, true, true);
if (orco) {
set_object_orco(re, ob, orco);
}
@@ -2696,7 +2696,7 @@ static void init_render_curve(const EvaluationContext *eval_ctx, Render *re, Obj
if (need_orco) {
orco = get_object_orco(re, ob);
if (!orco) {
- orco = BKE_curve_make_orco(eval_ctx, re->scene, ob, NULL);
+ orco = BKE_curve_make_orco(depsgraph, re->scene, ob, NULL);
set_object_orco(re, ob, orco);
}
}
@@ -3107,7 +3107,7 @@ static bool has_freestyle_edge_mark(EdgeHash *edge_hash, int v1, int v2)
}
#endif
-static void init_render_mesh(const EvaluationContext *eval_ctx, Render *re, ObjectRen *obr, int timeoffset)
+static void init_render_mesh(Depsgraph *depsgraph, Render *re, ObjectRen *obr, int timeoffset)
{
Object *ob= obr->ob;
Mesh *me;
@@ -3196,9 +3196,9 @@ static void init_render_mesh(const EvaluationContext *eval_ctx, Render *re, Obje
#endif
if (re->r.scemode & R_VIEWPORT_PREVIEW)
- dm= mesh_create_derived_view(eval_ctx, re->scene, ob, mask);
+ dm= mesh_create_derived_view(depsgraph, re->scene, ob, mask);
else
- dm= mesh_create_derived_render(eval_ctx, re->scene, ob, mask);
+ dm= mesh_create_derived_render(depsgraph, re->scene, ob, mask);
if (dm==NULL) return; /* in case duplicated object fails? */
mvert= dm->getVertArray(dm);
@@ -4601,7 +4601,7 @@ static void set_dupli_tex_mat(Render *re, ObjectInstanceRen *obi, DupliObject *d
copy_v2_v2(obi->dupliuv, dob->uv);
}
-static void init_render_object_data(const EvaluationContext *eval_ctx, Render *re, ObjectRen *obr, int timeoffset)
+static void init_render_object_data(Depsgraph *depsgraph, Render *re, ObjectRen *obr, int timeoffset)
{
Object *ob= obr->ob;
ParticleSystem *psys;
@@ -4615,26 +4615,26 @@ static void init_render_object_data(const EvaluationContext *eval_ctx, Render *r
const CustomDataMask mask = CD_MASK_RENDER_INTERNAL;
if (re->r.scemode & R_VIEWPORT_PREVIEW)
- dm = mesh_create_derived_view(eval_ctx, re->scene, ob, mask);
+ dm = mesh_create_derived_view(depsgraph, re->scene, ob, mask);
else
- dm = mesh_create_derived_render(eval_ctx, re->scene, ob, mask);
+ dm = mesh_create_derived_render(depsgraph, re->scene, ob, mask);
dm->release(dm);
}
for (psys=ob->particlesystem.first, i=0; i<obr->psysindex-1; i++)
psys= psys->next;
- render_new_particle_system(eval_ctx, re, obr, psys, timeoffset);
+ render_new_particle_system(depsgraph, re, obr, psys, timeoffset);
}
else {
if (ELEM(ob->type, OB_FONT, OB_CURVE))
- init_render_curve(eval_ctx, re, obr, timeoffset);
+ init_render_curve(depsgraph, re, obr, timeoffset);
else if (ob->type==OB_SURF)
- init_render_surf(eval_ctx, re, obr, timeoffset);
+ init_render_surf(depsgraph, re, obr, timeoffset);
else if (ob->type==OB_MESH)
- init_render_mesh(eval_ctx, re, obr, timeoffset);
+ init_render_mesh(depsgraph, re, obr, timeoffset);
else if (ob->type==OB_MBALL)
- init_render_mball(eval_ctx, re, obr);
+ init_render_mball(depsgraph, re, obr);
}
finalize_render_object(re, obr, timeoffset);
@@ -4645,7 +4645,7 @@ static void init_render_object_data(const EvaluationContext *eval_ctx, Render *r
re->totstrand += obr->totstrand;
}
-static void add_render_object(const EvaluationContext *eval_ctx, Render *re, Object *ob, Object *par, DupliObject *dob,
+static void add_render_object(Depsgraph *depsgraph, Render *re, Object *ob, Object *par, DupliObject *dob,
float omat[4][4], int timeoffset)
{
ObjectRen *obr;
@@ -4672,7 +4672,7 @@ static void add_render_object(const EvaluationContext *eval_ctx, Render *re, Obj
obr->flag |= R_INSTANCEABLE;
copy_m4_m4(obr->obmat, ob->obmat);
}
- init_render_object_data(eval_ctx, re, obr, timeoffset);
+ init_render_object_data(depsgraph, re, obr, timeoffset);
/* only add instance for objects that have not been used for dupli */
if (!(ob->transflag & OB_RENDER_DUPLI)) {
@@ -4703,7 +4703,7 @@ static void add_render_object(const EvaluationContext *eval_ctx, Render *re, Obj
}
if (dob)
psys->flag |= PSYS_USE_IMAT;
- init_render_object_data(eval_ctx, re, obr, timeoffset);
+ init_render_object_data(depsgraph, re, obr, timeoffset);
psys->flag &= ~PSYS_USE_IMAT;
/* only add instance for objects that have not been used for dupli */
@@ -4719,7 +4719,7 @@ static void add_render_object(const EvaluationContext *eval_ctx, Render *re, Obj
/* par = pointer to duplicator parent, needed for object lookup table */
/* index = when duplicater copies same object (particle), the counter */
-static void init_render_object(const EvaluationContext *eval_ctx, Render *re, Object *ob, Object *par, DupliObject *dob,
+static void init_render_object(Depsgraph *depsgraph, Render *re, Object *ob, Object *par, DupliObject *dob,
float omat[4][4], int timeoffset)
{
static double lasttime= 0.0;
@@ -4729,7 +4729,7 @@ static void init_render_object(const EvaluationContext *eval_ctx, Render *re, Ob
if (ob->type==OB_LAMP)
add_render_lamp(re, ob);
else if (render_object_type(ob->type))
- add_render_object(eval_ctx, re, ob, par, dob, omat, timeoffset);
+ add_render_object(depsgraph, re, ob, par, dob, omat, timeoffset);
else {
mul_m4_m4m4(mat, re->viewmat, ob->obmat);
invert_m4_m4(ob->imat, mat);
@@ -4890,7 +4890,7 @@ static int get_vector_viewlayers(Scene *UNUSED(sce))
return 0;
}
-static void add_group_render_dupli_obs(const EvaluationContext *eval_ctx, Render *re, Group *group, int nolamps,
+static void add_group_render_dupli_obs(Depsgraph *depsgraph, Render *re, Group *group, int nolamps,
int onlyselected, Object *actob, int timeoffset, int level)
{
/* Simple preventing of too deep nested groups. */
@@ -4903,11 +4903,11 @@ static void add_group_render_dupli_obs(const EvaluationContext *eval_ctx, Render
if (ob->flag & OB_DONE) {
if (ob->transflag & OB_RENDER_DUPLI) {
if (allow_render_object(re, ob, nolamps, onlyselected, actob)) {
- init_render_object(eval_ctx, re, ob, NULL, NULL, NULL, timeoffset);
+ init_render_object(depsgraph, re, ob, NULL, NULL, NULL, timeoffset);
ob->transflag &= ~OB_RENDER_DUPLI;
if (ob->dup_group) {
- add_group_render_dupli_obs(eval_ctx, re, ob->dup_group, nolamps, onlyselected, actob, timeoffset, level+1);
+ add_group_render_dupli_obs(depsgraph, re, ob->dup_group, nolamps, onlyselected, actob, timeoffset, level+1);
}
}
}
@@ -4916,7 +4916,7 @@ static void add_group_render_dupli_obs(const EvaluationContext *eval_ctx, Render
FOREACH_GROUP_OBJECT_END;
}
-static void database_init_objects(const EvaluationContext *eval_ctx, Render *re, unsigned int UNUSED(renderlay),
+static void database_init_objects(Depsgraph *depsgraph, Render *re, unsigned int UNUSED(renderlay),
int nolamps, int onlyselected, Object *actob, int timeoffset)
{
Base *base;
@@ -4970,7 +4970,7 @@ static void database_init_objects(const EvaluationContext *eval_ctx, Render *re,
* it still needs to create the ObjectRen containing the data */
if (ob->transflag & OB_RENDER_DUPLI) {
if (allow_render_object(re, ob, nolamps, onlyselected, actob)) {
- init_render_object(eval_ctx, re, ob, NULL, NULL, NULL, timeoffset);
+ init_render_object(depsgraph, re, ob, NULL, NULL, NULL, timeoffset);
ob->transflag &= ~OB_RENDER_DUPLI;
}
}
@@ -4984,8 +4984,8 @@ static void database_init_objects(const EvaluationContext *eval_ctx, Render *re,
/* create list of duplis generated by this object, particle
* system need to have render settings set for dupli particles */
- duplilist = object_duplilist(eval_ctx, re->scene, ob);
- duplilist_apply_data = duplilist_apply(eval_ctx, ob, NULL, duplilist);
+ duplilist = object_duplilist(depsgraph, re->scene, ob);
+ duplilist_apply_data = duplilist_apply(depsgraph, ob, NULL, duplilist);
for (dob= duplilist->first, i = 0; dob; dob= dob->next, ++i) {
DupliExtraData *dob_extra = &duplilist_apply_data->extra[i];
@@ -5065,7 +5065,7 @@ static void database_init_objects(const EvaluationContext *eval_ctx, Render *re,
if (obi==NULL)
/* can't instance, just create the object */
- init_render_object(eval_ctx, re, obd, ob, dob, dob_extra->obmat, timeoffset);
+ init_render_object(depsgraph, re, obd, ob, dob, dob_extra->obmat, timeoffset);
if (dob->type != OB_DUPLIGROUP) {
obd->flag |= OB_DONE;
@@ -5073,7 +5073,7 @@ static void database_init_objects(const EvaluationContext *eval_ctx, Render *re,
}
}
else
- init_render_object(eval_ctx, re, obd, ob, dob, dob_extra->obmat, timeoffset);
+ init_render_object(depsgraph, re, obd, ob, dob, dob_extra->obmat, timeoffset);
if (re->test_break(re->tbh)) break;
}
@@ -5085,10 +5085,10 @@ static void database_init_objects(const EvaluationContext *eval_ctx, Render *re,
free_object_duplilist(duplilist);
if (allow_render_object(re, ob, nolamps, onlyselected, actob))
- init_render_object(eval_ctx, re, ob, NULL, NULL, NULL, timeoffset);
+ init_render_object(depsgraph, re, ob, NULL, NULL, NULL, timeoffset);
}
else if (allow_render_object(re, ob, nolamps, onlyselected, actob))
- init_render_object(eval_ctx, re, ob, NULL, NULL, NULL, timeoffset);
+ init_render_object(depsgraph, re, ob, NULL, NULL, NULL, timeoffset);
}
if (re->test_break(re->tbh)) break;
@@ -5097,7 +5097,7 @@ static void database_init_objects(const EvaluationContext *eval_ctx, Render *re,
/* objects in groups with OB_RENDER_DUPLI set still need to be created,
* since they may not be part of the scene */
for (group= re->main->group.first; group; group=group->id.next)
- add_group_render_dupli_obs(eval_ctx, re, group, nolamps, onlyselected, actob, timeoffset, 0);
+ add_group_render_dupli_obs(depsgraph, re, group, nolamps, onlyselected, actob, timeoffset, 0);
if (!re->test_break(re->tbh))
RE_makeRenderInstances(re);
@@ -5204,12 +5204,12 @@ void RE_Database_FromScene(Render *re, Main *bmain, Scene *scene, unsigned int l
set_node_shader_lamp_loop(shade_material_loop);
/* MAKE RENDER DATA */
- EvaluationContext *eval_ctx = NULL;
- BLI_assert(eval_ctx);
+ Depsgraph *depsgraph = NULL;
+ BLI_assert(depsgraph);
/* This will break things, and it should because honestly this function is deprecated and no one uses it.
* maybe freestyle? But even so, this need to change. Even freestyle need to get data from depsgraph
* so we can't create the database only once. */
- database_init_objects(eval_ctx, re, lay, 0, 0, NULL, 0);
+ database_init_objects(depsgraph, re, lay, 0, 0, NULL, 0);
if (!re->test_break(re->tbh)) {
set_material_lightgroups(re);
@@ -5224,7 +5224,7 @@ void RE_Database_FromScene(Render *re, Main *bmain, Scene *scene, unsigned int l
}
}
-void RE_Database_Preprocess(EvaluationContext *eval_ctx, Render *re)
+void RE_Database_Preprocess(Depsgraph *depsgraph, Render *re)
{
if (!re->test_break(re->tbh)) {
int tothalo;
@@ -5254,7 +5254,7 @@ void RE_Database_Preprocess(EvaluationContext *eval_ctx, Render *re)
/* point density texture */
if (!re->test_break(re->tbh))
- make_pointdensities(eval_ctx, re);
+ make_pointdensities(depsgraph, re);
/* voxel data texture */
if (!re->test_break(re->tbh))
make_voxeldata(re);
@@ -5325,7 +5325,7 @@ void RE_DataBase_GetView(Render *re, float mat[4][4])
/* Speed Vectors */
/* ------------------------------------------------------------------------- */
-static void database_fromscene_vectors(EvaluationContext *eval_ctx,
+static void database_fromscene_vectors(Depsgraph *depsgraph,
Render *re,
Scene *scene,
unsigned int lay,
@@ -5346,7 +5346,7 @@ static void database_fromscene_vectors(EvaluationContext *eval_ctx,
/* applies changes fully */
scene->r.cfra += timeoffset;
- BKE_scene_graph_update_for_newframe(eval_ctx->depsgraph, re->main);
+ BKE_scene_graph_update_for_newframe(depsgraph, re->main);
/* if no camera, viewmat should have been set! */
if (camera) {
@@ -5357,7 +5357,7 @@ static void database_fromscene_vectors(EvaluationContext *eval_ctx,
}
/* MAKE RENDER DATA */
- database_init_objects(eval_ctx, re, lay, 0, 0, NULL, timeoffset);
+ database_init_objects(depsgraph, re, lay, 0, 0, NULL, timeoffset);
if (!re->test_break(re->tbh))
project_renderdata(re, projectverto, (re->r.mode & R_PANORAMA) != 0, 0, 1);
@@ -5714,7 +5714,7 @@ static void free_dbase_object_vectors(ListBase *lb)
BLI_freelistN(lb);
}
-void RE_Database_FromScene_Vectors(EvaluationContext *eval_ctx, Render *re, Main *bmain, Scene *sce, unsigned int lay)
+void RE_Database_FromScene_Vectors(Depsgraph *depsgraph, Render *re, Main *bmain, Scene *sce, unsigned int lay)
{
ObjectInstanceRen *obi, *oldobi;
StrandSurface *mesh;
@@ -5729,7 +5729,7 @@ void RE_Database_FromScene_Vectors(EvaluationContext *eval_ctx, Render *re, Main
speedvector_project(re, NULL, NULL, NULL); /* initializes projection code */
/* creates entire dbase */
- database_fromscene_vectors(eval_ctx, re, sce, lay, -1);
+ database_fromscene_vectors(depsgraph, re, sce, lay, -1);
/* copy away vertex info */
copy_dbase_object_vectors(re, &oldtable);
@@ -5745,7 +5745,7 @@ void RE_Database_FromScene_Vectors(EvaluationContext *eval_ctx, Render *re, Main
/* creates entire dbase */
re->i.infostr = IFACE_("Calculating next frame vectors");
- database_fromscene_vectors(eval_ctx, re, sce, lay, +1);
+ database_fromscene_vectors(depsgraph, re, sce, lay, +1);
}
/* copy away vertex info */
copy_dbase_object_vectors(re, &newtable);
@@ -5759,7 +5759,7 @@ void RE_Database_FromScene_Vectors(EvaluationContext *eval_ctx, Render *re, Main
if (!re->test_break(re->tbh)) {
RE_Database_FromScene(re, bmain, sce, lay, 1);
- RE_Database_Preprocess(eval_ctx, re);
+ RE_Database_Preprocess(depsgraph, re);
}
if (!re->test_break(re->tbh)) {
@@ -5872,9 +5872,7 @@ void RE_Database_Baking(Render *re, Main *bmain, Scene *scene, ViewLayer *view_l
RE_init_threadcount(re);
- EvaluationContext *eval_ctx = DEG_evaluation_context_new(DAG_EVAL_RENDER);
Depsgraph *depsgraph = DEG_graph_new(scene, view_layer, DAG_EVAL_RENDER);
- DEG_evaluation_context_init_from_view_layer_for_render(eval_ctx, depsgraph, scene, view_layer);
DEG_graph_build_from_view_layer(depsgraph, bmain, scene, view_layer);
BKE_scene_graph_update_tagged(depsgraph, bmain);
@@ -5948,7 +5946,7 @@ void RE_Database_Baking(Render *re, Main *bmain, Scene *scene, ViewLayer *view_l
set_node_shader_lamp_loop(shade_material_loop);
/* MAKE RENDER DATA */
- database_init_objects(eval_ctx, re, lay, nolamps, onlyselected, actob, 0);
+ database_init_objects(depsgraph, re, lay, nolamps, onlyselected, actob, 0);
set_material_lightgroups(re);
@@ -5964,7 +5962,7 @@ void RE_Database_Baking(Render *re, Main *bmain, Scene *scene, ViewLayer *view_l
/* point density texture */
if (!re->test_break(re->tbh))
- make_pointdensities(eval_ctx, re);
+ make_pointdensities(depsgraph, re);
/* voxel data texture */
if (!re->test_break(re->tbh))
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index 9ad9c653e54..c42f85ef017 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -867,7 +867,7 @@ void RE_InitState(Render *re, Render *source, RenderData *rd,
}
eEvaluationMode mode = (re->r.scemode & R_VIEWPORT_PREVIEW) ? DAG_EVAL_PREVIEW : DAG_EVAL_RENDER;
- /* If we had a consistent EvaluationContext now would be the time to update it. */
+ /* This mode should have been set in the Depsgraph immediately when it was created. */
(void)mode;
/* ensure renderdatabase can use part settings correct */
@@ -2733,11 +2733,10 @@ static void do_render_seq(Render *re)
tot_views = BKE_scene_multiview_num_views_get(&re->r);
ibuf_arr = MEM_mallocN(sizeof(ImBuf *) * tot_views, "Sequencer Views ImBufs");
- EvaluationContext *eval_ctx = DEG_evaluation_context_new(DAG_EVAL_RENDER);
BKE_sequencer_new_render_data(
- eval_ctx, re->main, re->scene,
- re_x, re_y, 100,
+ re->main, re->scene,
+ re_x, re_y, 100, true,
&context);
/* the renderresult gets destroyed during the rendering, so we first collect all ibufs
@@ -2758,8 +2757,6 @@ static void do_render_seq(Render *re)
}
}
- DEG_evaluation_context_free(eval_ctx);
-
rr = re->result;
BLI_rw_mutex_lock(&re->resultmutex, THREAD_LOCK_WRITE);
diff --git a/source/blender/render/intern/source/pointdensity.c b/source/blender/render/intern/source/pointdensity.c
index bba422345e0..6d0cd52544b 100644
--- a/source/blender/render/intern/source/pointdensity.c
+++ b/source/blender/render/intern/source/pointdensity.c
@@ -170,7 +170,7 @@ static void alloc_point_data(PointDensity *pd)
}
}
-static void pointdensity_cache_psys(const EvaluationContext *eval_ctx, Scene *scene,
+static void pointdensity_cache_psys(Depsgraph *depsgraph, Scene *scene,
PointDensity *pd,
Object *ob,
ParticleSystem *psys,
@@ -196,12 +196,12 @@ static void pointdensity_cache_psys(const EvaluationContext *eval_ctx, Scene *sc
data_used = point_data_used(pd);
if (use_render_params) {
- dm = mesh_create_derived_render(eval_ctx, scene,
+ dm = mesh_create_derived_render(depsgraph, scene,
ob,
CD_MASK_BAREMESH | CD_MASK_MTFACE | CD_MASK_MCOL);
}
else {
- dm = mesh_get_derived_final(eval_ctx, scene,
+ dm = mesh_get_derived_final(depsgraph, scene,
ob,
CD_MASK_BAREMESH | CD_MASK_MTFACE | CD_MASK_MCOL);
}
@@ -210,7 +210,7 @@ static void pointdensity_cache_psys(const EvaluationContext *eval_ctx, Scene *sc
return;
}
- sim.eval_ctx = eval_ctx;
+ sim.depsgraph = depsgraph;
sim.scene = scene;
sim.ob = ob;
sim.psys = psys;
@@ -391,7 +391,7 @@ static void pointdensity_cache_vertex_normal(PointDensity *pd, Object *UNUSED(ob
}
}
-static void pointdensity_cache_object(const EvaluationContext *eval_ctx, Scene *scene,
+static void pointdensity_cache_object(Depsgraph *depsgraph, Scene *scene,
PointDensity *pd,
Object *ob,
const bool use_render_params)
@@ -412,10 +412,10 @@ static void pointdensity_cache_object(const EvaluationContext *eval_ctx, Scene *
}
if (use_render_params) {
- dm = mesh_create_derived_render(eval_ctx, scene, ob, mask);
+ dm = mesh_create_derived_render(depsgraph, scene, ob, mask);
}
else {
- dm = mesh_get_derived_final(eval_ctx, scene, ob, mask);
+ dm = mesh_get_derived_final(depsgraph, scene, ob, mask);
}
mvert = dm->getVertArray(dm); /* local object space */
@@ -466,7 +466,7 @@ static void pointdensity_cache_object(const EvaluationContext *eval_ctx, Scene *
}
-static void cache_pointdensity_ex(const EvaluationContext *eval_ctx,
+static void cache_pointdensity_ex(Depsgraph *depsgraph,
Scene *scene,
PointDensity *pd,
const bool use_render_params)
@@ -493,7 +493,7 @@ static void cache_pointdensity_ex(const EvaluationContext *eval_ctx,
return;
}
- pointdensity_cache_psys(eval_ctx,
+ pointdensity_cache_psys(depsgraph,
scene,
pd,
ob,
@@ -503,13 +503,13 @@ static void cache_pointdensity_ex(const EvaluationContext *eval_ctx,
else if (pd->source == TEX_PD_OBJECT) {
Object *ob = pd->object;
if (ob && ob->type == OB_MESH)
- pointdensity_cache_object(eval_ctx, scene, pd, ob, use_render_params);
+ pointdensity_cache_object(depsgraph, scene, pd, ob, use_render_params);
}
}
-void cache_pointdensity(const EvaluationContext *eval_ctx, Render *re, PointDensity *pd)
+void cache_pointdensity(Depsgraph *depsgraph, Render *re, PointDensity *pd)
{
- cache_pointdensity_ex(eval_ctx,
+ cache_pointdensity_ex(depsgraph,
re->scene,
pd,
true);
@@ -533,7 +533,7 @@ void free_pointdensity(PointDensity *pd)
pd->totpoints = 0;
}
-void make_pointdensities(const EvaluationContext *eval_ctx, Render *re)
+void make_pointdensities(Depsgraph *depsgraph, Render *re)
{
Tex *tex;
@@ -546,7 +546,7 @@ void make_pointdensities(const EvaluationContext *eval_ctx, Render *re)
for (tex = re->main->tex.first; tex != NULL; tex = tex->id.next) {
if (tex->id.us && tex->type == TEX_POINTDENSITY) {
- cache_pointdensity(eval_ctx, re, tex->pd);
+ cache_pointdensity(depsgraph, re, tex->pd);
}
}
@@ -863,7 +863,7 @@ static void sample_dummy_point_density(int resolution, float *values)
memset(values, 0, sizeof(float) * 4 * resolution * resolution * resolution);
}
-static void particle_system_minmax(const EvaluationContext *eval_ctx,
+static void particle_system_minmax(Depsgraph *depsgraph,
Scene *scene,
Object *object,
ParticleSystem *psys,
@@ -887,7 +887,7 @@ static void particle_system_minmax(const EvaluationContext *eval_ctx,
unit_m4(mat);
- sim.eval_ctx = eval_ctx;
+ sim.depsgraph = depsgraph;
sim.scene = scene;
sim.ob = object;
sim.psys = psys;
@@ -918,26 +918,24 @@ static void particle_system_minmax(const EvaluationContext *eval_ctx,
}
void RE_point_density_cache(
- const struct EvaluationContext *eval_ctx,
+ struct Depsgraph *depsgraph,
PointDensity *pd)
{
- const bool use_render_params = (eval_ctx->mode == DAG_EVAL_RENDER);
+ const bool use_render_params = (DEG_get_mode(depsgraph) == DAG_EVAL_RENDER);
- Depsgraph *depsgraph = eval_ctx->depsgraph;
Scene *scene = DEG_get_evaluated_scene(depsgraph);
/* Same matricies/resolution as dupli_render_particle_set(). */
BLI_mutex_lock(&sample_mutex);
- cache_pointdensity_ex(eval_ctx, scene, pd, use_render_params);
+ cache_pointdensity_ex(depsgraph, scene, pd, use_render_params);
BLI_mutex_unlock(&sample_mutex);
}
void RE_point_density_minmax(
- const struct EvaluationContext *eval_ctx,
+ struct Depsgraph *depsgraph,
struct PointDensity *pd,
float r_min[3], float r_max[3])
{
- Depsgraph *depsgraph = eval_ctx->depsgraph;
Scene *scene = DEG_get_evaluated_scene(depsgraph);
Object *object = pd->object;
if (object == NULL) {
@@ -960,7 +958,7 @@ void RE_point_density_minmax(
return;
}
- particle_system_minmax(eval_ctx,
+ particle_system_minmax(depsgraph,
scene,
object,
psys,
@@ -1032,7 +1030,7 @@ static void point_density_sample_func(
* NOTE 2: Frees point density structure after sampling.
*/
void RE_point_density_sample(
- const EvaluationContext *eval_ctx,
+ Depsgraph *depsgraph,
PointDensity *pd,
const int resolution,
float *values)
@@ -1050,7 +1048,7 @@ void RE_point_density_sample(
}
BLI_mutex_lock(&sample_mutex);
- RE_point_density_minmax(eval_ctx,
+ RE_point_density_minmax(depsgraph,
pd,
min,
max);
diff --git a/source/blender/render/intern/source/render_texture.c b/source/blender/render/intern/source/render_texture.c
index cefa739a796..929fc3cc9c3 100644
--- a/source/blender/render/intern/source/render_texture.c
+++ b/source/blender/render/intern/source/render_texture.c
@@ -3745,7 +3745,7 @@ static void textured_face_generate_uv(
}
/* Generate an updated copy of material to use for color sampling. */
-Material *RE_sample_material_init(const EvaluationContext *eval_ctx, Material *orig_mat, Scene *scene)
+Material *RE_sample_material_init(Depsgraph *depsgraph, Material *orig_mat, Scene *scene)
{
Tex *tex = NULL;
Material *mat;
@@ -3821,7 +3821,7 @@ Material *RE_sample_material_init(const EvaluationContext *eval_ctx, Material *o
unit_m4(dummy_re.viewmat);
unit_m4(dummy_re.winmat);
dummy_re.winx = dummy_re.winy = 128;
- cache_pointdensity(eval_ctx, &dummy_re, tex->pd);
+ cache_pointdensity(depsgraph, &dummy_re, tex->pd);
}
/* update image sequences and movies */