[Bf-blender-cvs] [cb47cc14cda] temp-lanpr-review: LANPR: Removed camera references in RenderBuffer. Safe for thread ops.
YimingWu
noreply at git.blender.org
Thu Nov 28 06:28:00 CET 2019
Commit: cb47cc14cda8c36a275432c4ecdf8d872baa2ffe
Author: YimingWu
Date: Thu Nov 28 13:27:13 2019 +0800
Branches: temp-lanpr-review
https://developer.blender.org/rBcb47cc14cda8c36a275432c4ecdf8d872baa2ffe
LANPR: Removed camera references in RenderBuffer. Safe for thread ops.
===================================================================
M source/blender/draw/engines/lanpr/lanpr_all.h
M source/blender/draw/engines/lanpr/lanpr_cpu.c
M source/blender/draw/engines/lanpr/lanpr_dpix.c
M source/blender/draw/engines/lanpr/lanpr_engine.c
M source/blender/editors/include/ED_lanpr.h
M source/blender/editors/lanpr/lanpr_chain.c
M source/blender/editors/lanpr/lanpr_cpu.c
===================================================================
diff --git a/source/blender/draw/engines/lanpr/lanpr_all.h b/source/blender/draw/engines/lanpr/lanpr_all.h
index 1c70c02335e..dee6b1853dc 100644
--- a/source/blender/draw/engines/lanpr/lanpr_all.h
+++ b/source/blender/draw/engines/lanpr/lanpr_all.h
@@ -227,7 +227,7 @@ int lanpr_feed_atlas_data_intersection_cache(void *vedata,
float *AtlasEdgeMask,
const int begin_index);
-int lanpr_feed_atlas_trigger_preview_obj(void *vedata, const Object *ob, const int begin_index);
+int lanpr_feed_atlas_trigger_preview_obj(void *vedata, Object *ob, const int begin_index);
void lanpr_create_atlas_intersection_preview(void *vedata, const int begin_index);
void lanpr_dpix_draw_scene(LANPR_TextureList *txl,
diff --git a/source/blender/draw/engines/lanpr/lanpr_cpu.c b/source/blender/draw/engines/lanpr/lanpr_cpu.c
index 6436cc2fcb3..a084e1f1351 100644
--- a/source/blender/draw/engines/lanpr/lanpr_cpu.c
+++ b/source/blender/draw/engines/lanpr/lanpr_cpu.c
@@ -151,8 +151,9 @@ static void lanpr_rebuild_render_draw_command(LANPR_RenderBuffer *rb, LANPR_Line
ll->batch = GPU_batch_create_ex(GPU_PRIM_LINES, vbo, 0, GPU_USAGE_DYNAMIC | GPU_BATCH_OWNS_VBO);
}
-void ED_lanpr_rebuild_all_command(SceneLANPR *lanpr)
+void ED_lanpr_rebuild_all_command(Scene *s)
{
+ SceneLANPR *lanpr = &s->lanpr;
LANPR_LineLayer *ll;
if (!lanpr || !lanpr_share.render_buffer_shared) {
return;
@@ -170,7 +171,7 @@ void ED_lanpr_rebuild_all_command(SceneLANPR *lanpr)
}
}
- DEG_id_tag_update(&lanpr_share.render_buffer_shared->scene->id, ID_RECALC_COPY_ON_WRITE);
+ DEG_id_tag_update(&s->id, ID_RECALC_COPY_ON_WRITE);
}
void ED_lanpr_calculate_normal_object_vector(LANPR_LineLayer *ll, float *normal_object_direction)
@@ -227,7 +228,7 @@ void lanpr_software_draw_scene(void *vedata, GPUFrameBuffer *dfb, const int is_r
static float camdx, camdy, camzoom;
if (is_render) {
- ED_lanpr_rebuild_all_command(lanpr);
+ ED_lanpr_rebuild_all_command(scene);
}
float clear_depth = 1.0f;
diff --git a/source/blender/draw/engines/lanpr/lanpr_dpix.c b/source/blender/draw/engines/lanpr/lanpr_dpix.c
index 3f6f36263af..e3a0c800a6c 100644
--- a/source/blender/draw/engines/lanpr/lanpr_dpix.c
+++ b/source/blender/draw/engines/lanpr/lanpr_dpix.c
@@ -360,9 +360,7 @@ static void lanpr_dpix_index_to_coord_absolute(int index, float *x, float *y)
(*y) = (float)(index / texture_size) + 0.5;
}
-int lanpr_feed_atlas_trigger_preview_obj(void *UNUSED(vedata),
- const Object *ob,
- const int begin_index)
+int lanpr_feed_atlas_trigger_preview_obj(void *UNUSED(vedata), Object *ob, const int begin_index)
{
Mesh *me = ob->data;
if (ob->type != OB_MESH) {
diff --git a/source/blender/draw/engines/lanpr/lanpr_engine.c b/source/blender/draw/engines/lanpr/lanpr_engine.c
index 261c63250ce..3d3f0b28290 100644
--- a/source/blender/draw/engines/lanpr/lanpr_engine.c
+++ b/source/blender/draw/engines/lanpr/lanpr_engine.c
@@ -144,9 +144,6 @@ void DRW_scene_lanpr_freecache(Scene *sce)
ll->batch = NULL;
}
}
- if (lanpr_share.render_buffer_shared && lanpr_share.render_buffer_shared->scene == sce) {
- ED_lanpr_destroy_render_data(lanpr_share.render_buffer_shared);
- }
}
static void lanpr_dpix_batch_free(void)
@@ -479,7 +476,7 @@ static void lanpr_cache_init(void *vedata)
if (ED_lanpr_calculation_flag_check(LANPR_RENDER_FINISHED) ||
ED_lanpr_calculation_flag_check(LANPR_RENDER_IDLE)) {
- ED_lanpr_rebuild_all_command(&draw_ctx->scene->lanpr);
+ ED_lanpr_rebuild_all_command(draw_ctx->scene);
ED_lanpr_calculation_set_flag(LANPR_RENDER_IDLE);
}
else if (!is_render) {
diff --git a/source/blender/editors/include/ED_lanpr.h b/source/blender/editors/include/ED_lanpr.h
index 0611d208abc..b891dc5ddde 100644
--- a/source/blender/editors/include/ED_lanpr.h
+++ b/source/blender/editors/include/ED_lanpr.h
@@ -256,16 +256,17 @@ typedef struct LANPR_RenderBuffer {
int show_material;
int override_display;
- struct Scene *scene;
- struct Object *camera;
-
int use_intersections;
int _pad;
- int viewport_override;
- char viewport_is_persp;
+ /** Keep an copy of these data so the scene can be freed when lanpr is runnning. */
+ char cam_is_persp;
+ float cam_obmat[4][4];
double camera_pos[3];
double near_clip, far_clip;
+ double shift_x, shift_y;
+ double chaining_image_threshold;
+ double chaining_geometry_threshold;
} LANPR_RenderBuffer;
typedef enum LANPR_RenderStatus {
@@ -569,7 +570,9 @@ int ED_lanpr_compute_feature_lines_internal(struct Depsgraph *depsgraph,
void ED_lanpr_compute_feature_lines_background(struct Depsgraph *dg, const int intersection_only);
-LANPR_RenderBuffer *ED_lanpr_create_render_buffer(void);
+struct Scene;
+
+LANPR_RenderBuffer *ED_lanpr_create_render_buffer(struct Scene *s);
void ED_lanpr_destroy_render_data(struct LANPR_RenderBuffer *rb);
bool ED_lanpr_dpix_shader_error(void);
@@ -588,7 +591,7 @@ void ED_lanpr_post_frame_update_external(struct Scene *s, struct Depsgraph *dg);
struct SceneLANPR;
-void ED_lanpr_rebuild_all_command(struct SceneLANPR *lanpr);
+void ED_lanpr_rebuild_all_command(struct Scene *s);
void ED_lanpr_update_render_progress(const char *text);
diff --git a/source/blender/editors/lanpr/lanpr_chain.c b/source/blender/editors/lanpr/lanpr_chain.c
index 16e2743922a..91e957fd354 100644
--- a/source/blender/editors/lanpr/lanpr_chain.c
+++ b/source/blender/editors/lanpr/lanpr_chain.c
@@ -593,8 +593,8 @@ void ED_lanpr_connect_chains(LANPR_RenderBuffer *rb, const int do_geometry_space
int occlusion;
ListBase swap = {0};
- if ((!do_geometry_space && rb->scene->lanpr.chaining_image_threshold < 0.0001) ||
- (do_geometry_space && rb->scene->lanpr.chaining_geometry_threshold < 0.0001)) {
+ if ((!do_geometry_space && rb->chaining_image_threshold < 0.0001) ||
+ (do_geometry_space && rb->chaining_geometry_threshold < 0.0001)) {
return;
}
@@ -616,8 +616,7 @@ void ED_lanpr_connect_chains(LANPR_RenderBuffer *rb, const int do_geometry_space
rlci = rlc->chain.last;
while ((ba = lanpr_get_end_point_bounding_area(rb, rlci)) != NULL) {
- dist = do_geometry_space ? rb->scene->lanpr.chaining_geometry_threshold :
- rb->scene->lanpr.chaining_image_threshold;
+ dist = do_geometry_space ? rb->chaining_geometry_threshold : rb->chaining_image_threshold;
closest_cre = NULL;
if (ba->linked_chains.first == NULL) {
break;
@@ -663,8 +662,7 @@ void ED_lanpr_connect_chains(LANPR_RenderBuffer *rb, const int do_geometry_space
rlci = rlc->chain.first;
while ((ba = lanpr_get_end_point_bounding_area(rb, rlci)) != NULL) {
- dist = do_geometry_space ? rb->scene->lanpr.chaining_geometry_threshold :
- rb->scene->lanpr.chaining_image_threshold;
+ dist = do_geometry_space ? rb->chaining_geometry_threshold : rb->chaining_image_threshold;
closest_cre = NULL;
if (ba->linked_chains.first == NULL) {
break;
diff --git a/source/blender/editors/lanpr/lanpr_cpu.c b/source/blender/editors/lanpr/lanpr_cpu.c
index 5d263381db2..602e8ba6eef 100644
--- a/source/blender/editors/lanpr/lanpr_cpu.c
+++ b/source/blender/editors/lanpr/lanpr_cpu.c
@@ -92,11 +92,12 @@ static LANPR_BoundingArea *lanpr_get_next_bounding_area(LANPR_BoundingArea *This
static int lanpr_triangle_line_imagespace_intersection_v2(SpinLock *spl,
const LANPR_RenderTriangle *rt,
const LANPR_RenderLine *rl,
- const Object *cam,
const double *override_camera_loc,
const char override_cam_is_persp,
const double vp[4][4],
const double *camera_dir,
+ const double cam_shift_x,
+ const double cam_shift_y,
double *from,
double *to);
static int lanpr_get_line_bounding_areas(LANPR_RenderBuffer *rb,
@@ -235,9 +236,8 @@ static int lanpr_move_line_layer_exec(bContext *C, wmOperator *op)
static int ED_lanpr_rebuild_all_commands_exec(bContext *C, wmOperator *UNUSED(op))
{
Scene *scene = CTX_data_scene(C);
- SceneLANPR *lanpr = &scene->lanpr;
- ED_lanpr_rebuild_all_command(lanpr);
+ ED_lanpr_rebuild_all_command(scene);
DEG_id_tag_update(&scene->id, ID_RECALC_COPY_ON_WRITE);
@@ -299,7 +299,7 @@ static int lanpr_auto_create_line_layer_exec(bContext *C, wmOperator *op)
lanpr_enable_all_line_types_exec(C, op);
- ED_lanpr_rebuild_all_command(lanpr);
+ ED_lanpr_rebuild_all_command(scene);
return OPERATOR_FINISHED;
}
@@ -592,7 +592,6 @@ static void lanpr_calculate_single_line_occlusion(LANPR_RenderBuffer *rb,
LANPR_BoundingArea *nba = ba;
LANPR_RenderTriangleThread *rt;
LinkData *lip;
- Object *c = rb->scene->camera;
double l, r;
double k = (rl->r->fbcoord[1] - rl->l->fbcoord[1]) /
(rl->r->fbcoord[0] - rl->l->fbcoord[0] + 1e-30);
@@ -615,12 +614,12 @@ static void lanpr_calculate_single_line_occlusion(LANPR_RenderBuffer *rb,
if (lanpr_triangle_line_imagespace_intersection_v2(&rb->lock_task,
(void *)rt,
rl,
- c,
- rb->viewport_override ? rb->camera_pos :
- NULL,
- rb->viewport_i
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list