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:
authorDalai Felinto <dfelinto@gmail.com>2018-02-28 19:54:00 +0300
committerDalai Felinto <dfelinto@gmail.com>2018-02-28 19:55:56 +0300
commit382218beb29f52e1ea5c10803edf95a937878308 (patch)
treef435025a91e8cce8627898f2f269db4fa48a6f3b /source/blender/render
parent4a892adac5937fdaa19d0309e5195a83bdb14e72 (diff)
Point cache: Pass EvaluationContext for all the related functions
Now the only missing bit seems to be in Cycles to pass depsgraph to builtin_image_float_pixels(). Ideally we could get evaluation context instead of using depsgraph + settings. But for the other rna EvaluationContext functions this is how we are doing. Reviewers: sergey, brecht Differential Revision: https://developer.blender.org/D3087
Diffstat (limited to 'source/blender/render')
-rw-r--r--source/blender/render/extern/include/RE_render_ext.h14
-rw-r--r--source/blender/render/intern/source/pointdensity.c43
2 files changed, 19 insertions, 38 deletions
diff --git a/source/blender/render/extern/include/RE_render_ext.h b/source/blender/render/extern/include/RE_render_ext.h
index 4e3430c2892..1a1f455712e 100644
--- a/source/blender/render/extern/include/RE_render_ext.h
+++ b/source/blender/render/extern/include/RE_render_ext.h
@@ -72,24 +72,18 @@ void antialias_tagbuf(int xsize, int ysize, char *rectmove);
struct PointDensity;
void RE_point_density_cache(
- struct Scene *scene,
- struct ViewLayer *view_layer,
- struct PointDensity *pd,
- const bool use_render_params);
+ const struct EvaluationContext *eval_ctx,
+ struct PointDensity *pd);
void RE_point_density_minmax(
- struct Scene *scene,
- struct ViewLayer *view_layer,
+ const struct EvaluationContext *eval_ctx,
struct PointDensity *pd,
- const bool use_render_params,
float r_min[3], float r_max[3]);
void RE_point_density_sample(
- struct Scene *scene,
- struct ViewLayer *view_layer,
+ const struct EvaluationContext *eval_ctx,
struct PointDensity *pd,
const int resolution,
- const bool use_render_params,
float *values);
void RE_point_density_free(struct PointDensity *pd);
diff --git a/source/blender/render/intern/source/pointdensity.c b/source/blender/render/intern/source/pointdensity.c
index 71145cfa4b7..49738aa5f96 100644
--- a/source/blender/render/intern/source/pointdensity.c
+++ b/source/blender/render/intern/source/pointdensity.c
@@ -59,6 +59,7 @@
#include "BKE_colortools.h"
#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_query.h"
#include "render_types.h"
#include "texture.h"
@@ -882,7 +883,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(EvaluationContext *eval_ctx,
+static void particle_system_minmax(const EvaluationContext *eval_ctx,
Scene *scene,
Object *object,
ParticleSystem *psys,
@@ -945,33 +946,30 @@ static void particle_system_minmax(EvaluationContext *eval_ctx,
}
void RE_point_density_cache(
- Scene *scene,
- ViewLayer *view_layer,
- PointDensity *pd,
- const bool use_render_params)
+ const struct EvaluationContext *eval_ctx,
+ PointDensity *pd)
{
- EvaluationContext eval_ctx = {0};
float mat[4][4];
+ const bool use_render_params = (eval_ctx->mode == DAG_EVAL_RENDER);
- DEG_evaluation_context_init(&eval_ctx, use_render_params ? DAG_EVAL_RENDER
- : DAG_EVAL_VIEWPORT);
-
- eval_ctx.view_layer = view_layer;
+ Depsgraph *depsgraph = eval_ctx->depsgraph;
+ Scene *scene = DEG_get_evaluated_scene(depsgraph);
/* Same matricies/resolution as dupli_render_particle_set(). */
unit_m4(mat);
BLI_mutex_lock(&sample_mutex);
- cache_pointdensity_ex(&eval_ctx, scene, pd, mat, mat, 1, 1, use_render_params);
+ cache_pointdensity_ex(eval_ctx, scene, pd, mat, mat, 1, 1, use_render_params);
BLI_mutex_unlock(&sample_mutex);
}
void RE_point_density_minmax(
- struct Scene *scene,
- ViewLayer *view_layer,
+ const struct EvaluationContext *eval_ctx,
struct PointDensity *pd,
- const bool use_render_params,
float r_min[3], float r_max[3])
{
+ const bool use_render_params = (eval_ctx->mode == DAG_EVAL_RENDER);
+ Depsgraph *depsgraph = eval_ctx->depsgraph;
+ Scene *scene = DEG_get_evaluated_scene(depsgraph);
Object *object = pd->object;
if (object == NULL) {
zero_v3(r_min);
@@ -980,7 +978,6 @@ void RE_point_density_minmax(
}
if (pd->source == TEX_PD_PSYS) {
ParticleSystem *psys;
- EvaluationContext eval_ctx = {0};
if (pd->psys == 0) {
zero_v3(r_min);
@@ -994,13 +991,7 @@ void RE_point_density_minmax(
return;
}
- DEG_evaluation_context_init(&eval_ctx, use_render_params ? DAG_EVAL_RENDER :
- DAG_EVAL_VIEWPORT);
-
- eval_ctx.ctime = (float)scene->r.cfra + scene->r.subframe;
- eval_ctx.view_layer = view_layer;
-
- particle_system_minmax(&eval_ctx,
+ particle_system_minmax(eval_ctx,
scene,
object,
psys,
@@ -1073,11 +1064,9 @@ static void point_density_sample_func(
* NOTE 2: Frees point density structure after sampling.
*/
void RE_point_density_sample(
- Scene *scene,
- ViewLayer *view_layer,
+ const EvaluationContext *eval_ctx,
PointDensity *pd,
const int resolution,
- const bool use_render_params,
float *values)
{
Object *object = pd->object;
@@ -1093,10 +1082,8 @@ void RE_point_density_sample(
}
BLI_mutex_lock(&sample_mutex);
- RE_point_density_minmax(scene,
- view_layer,
+ RE_point_density_minmax(eval_ctx,
pd,
- use_render_params,
min,
max);
BLI_mutex_unlock(&sample_mutex);