[Bf-blender-cvs] [ea979dc5790] temp-lanpr-cleanup2: LANPR: Fix render/viewport status sync error in CPU mode.
YimingWu
noreply at git.blender.org
Thu Nov 7 07:11:30 CET 2019
Commit: ea979dc57904fa0329ca709449206427f27ba962
Author: YimingWu
Date: Thu Nov 7 14:10:52 2019 +0800
Branches: temp-lanpr-cleanup2
https://developer.blender.org/rBea979dc57904fa0329ca709449206427f27ba962
LANPR: Fix render/viewport status sync error in CPU mode.
===================================================================
M source/blender/draw/engines/lanpr/lanpr_cpu.c
M source/blender/draw/engines/lanpr/lanpr_engine.c
M source/blender/editors/include/ED_lanpr.h
M source/blender/editors/lanpr/lanpr_cpu.c
M source/blender/python/intern/bpy_app_build_options.c
===================================================================
diff --git a/source/blender/draw/engines/lanpr/lanpr_cpu.c b/source/blender/draw/engines/lanpr/lanpr_cpu.c
index 5aa153c582d..551275fbdcf 100644
--- a/source/blender/draw/engines/lanpr/lanpr_cpu.c
+++ b/source/blender/draw/engines/lanpr/lanpr_cpu.c
@@ -246,13 +246,14 @@ void lanpr_software_draw_scene(void *vedata, GPUFrameBuffer *dfb, int is_render)
int texw = GPU_texture_width(txl->ms_resolve_color),
texh = GPU_texture_height(txl->ms_resolve_color);
-
+
pd->dpix_viewport[2] = texw;
pd->dpix_viewport[3] = texh;
- if(is_render){
+ if (is_render) {
pd->output_viewport[2] = scene->r.xsch;
pd->output_viewport[3] = scene->r.ysch;
- }else{
+ }
+ else {
pd->output_viewport[2] = texw;
pd->output_viewport[3] = texh;
}
diff --git a/source/blender/draw/engines/lanpr/lanpr_engine.c b/source/blender/draw/engines/lanpr/lanpr_engine.c
index 053010f0664..887b404e014 100644
--- a/source/blender/draw/engines/lanpr/lanpr_engine.c
+++ b/source/blender/draw/engines/lanpr/lanpr_engine.c
@@ -224,8 +224,10 @@ static void lanpr_cache_init(void *vedata)
View3D *v3d = draw_ctx->v3d;
RegionView3D *rv3d = v3d ? draw_ctx->rv3d : NULL;
+ bool is_render = (lanpr_share.viewport_camera_override < 0);
+
BLI_spin_lock(&lanpr_share.lock_render_status);
- if (rv3d) {
+ if (rv3d && lanpr_share.viewport_camera_override >= 0) {
copy_v3db_v3fl(lanpr_share.camera_pos, rv3d->viewinv[3]);
copy_m4d_m4(lanpr_share.viewinv, rv3d->viewinv);
copy_m4d_m4(lanpr_share.persp, rv3d->persmat);
@@ -429,15 +431,22 @@ static void lanpr_cache_init(void *vedata)
/* Intersection cache must be calculated before drawing. */
int updated = 0;
- if ((draw_ctx->scene->lanpr.flags & LANPR_AUTO_UPDATE) &&
- (!lanpr_share.render_buffer_shared ||
- lanpr_share.render_buffer_shared->cached_for_frame != draw_ctx->scene->r.cfra)) {
+ if (draw_ctx->scene->lanpr.flags & LANPR_AUTO_UPDATE) {
if (draw_ctx->scene->lanpr.master_mode == LANPR_MASTER_MODE_SOFTWARE) {
-
- ED_lanpr_compute_feature_lines_background(draw_ctx->depsgraph, 0);
+ if (is_render) {
+ ED_lanpr_compute_feature_lines_internal(draw_ctx->depsgraph, 0);
+ }
+ else {
+ ED_lanpr_compute_feature_lines_background(draw_ctx->depsgraph, 0);
+ }
}
else if (draw_ctx->scene->lanpr.master_mode == LANPR_MASTER_MODE_DPIX) {
- ED_lanpr_compute_feature_lines_background(draw_ctx->depsgraph, 1);
+ if (is_render) {
+ ED_lanpr_compute_feature_lines_internal(draw_ctx->depsgraph, 1);
+ }
+ else {
+ ED_lanpr_compute_feature_lines_background(draw_ctx->depsgraph, 1);
+ }
}
}
@@ -446,7 +455,7 @@ static void lanpr_cache_init(void *vedata)
ED_lanpr_rebuild_all_command(&draw_ctx->scene->lanpr);
ED_lanpr_calculation_set_flag(LANPR_RENDER_IDLE);
}
- else {
+ else if (!is_render) {
DRW_viewport_request_redraw();
}
}
@@ -584,7 +593,6 @@ static void lanpr_draw_scene_exec(void *vedata, GPUFrameBuffer *dfb, int is_rend
lanpr_dpix_draw_scene(txl, fbl, psl, stl->g_data, lanpr, dfb, is_render);
}
else if (lanpr->master_mode == LANPR_MASTER_MODE_SOFTWARE) {
- /* should isolate these into a seperate function. */
lanpr_software_draw_scene(vedata, dfb, is_render);
}
}
@@ -665,18 +673,6 @@ static void lanpr_render_to_image(void *vedata,
RE_engine_update_stats(engine, NULL, "LANPR: Initializing");
- if (lanpr->master_mode == LANPR_MASTER_MODE_SOFTWARE ||
- (lanpr->master_mode == LANPR_MASTER_MODE_DPIX && (lanpr->flags & LANPR_USE_INTERSECTIONS))) {
- if (!lanpr_share.render_buffer_shared) {
- ED_lanpr_create_render_buffer();
- }
- if (lanpr_share.render_buffer_shared->cached_for_frame != scene->r.cfra ||
- LANPR_GLOBAL_update_tag) {
- int intersections_only = (lanpr->master_mode != LANPR_MASTER_MODE_SOFTWARE);
- ED_lanpr_compute_feature_lines_internal(draw_ctx->depsgraph, intersections_only);
- }
- }
-
lanpr_render_matrices_init(engine, draw_ctx->depsgraph);
/* refered to eevee's code */
@@ -696,7 +692,13 @@ static void lanpr_render_to_image(void *vedata,
{GPU_ATTACHMENT_TEXTURE(dtxl->depth), GPU_ATTACHMENT_TEXTURE(dtxl->color)});
lanpr_engine_init(vedata);
- lanpr_share.dpix_reloaded_deg = 1; /* force dpix batch to re-create */
+
+ /* force dpix batch to re-create */
+ lanpr_share.dpix_reloaded_deg = 1;
+
+ /* force use actual camera instead of viewport camera. */
+ /* Do this before creating render buffer. */
+ lanpr_share.viewport_camera_override = -1;
lanpr_cache_init(vedata);
DRW_render_object_iter(vedata, engine, draw_ctx->depsgraph, lanpr_render_cache);
lanpr_cache_finish(vedata);
diff --git a/source/blender/editors/include/ED_lanpr.h b/source/blender/editors/include/ED_lanpr.h
index 3a5df33ef9f..b6163a91f89 100644
--- a/source/blender/editors/include/ED_lanpr.h
+++ b/source/blender/editors/include/ED_lanpr.h
@@ -236,9 +236,6 @@ typedef struct LANPR_RenderBuffer {
struct Material *material_pointers[2048];
/* Render status */
-
- int cached_for_frame;
-
real view_vector[3];
int triangle_size;
@@ -351,6 +348,7 @@ typedef struct LANPR_SharedResource {
struct RenderEngine *re_render;
/** When drawing in the viewport, use the following values. */
+ /** Set to override to -1 before creating lanpr render buffer to use scene camera. */
int viewport_camera_override;
double camera_pos[3];
double near_clip, far_clip;
diff --git a/source/blender/editors/lanpr/lanpr_cpu.c b/source/blender/editors/lanpr/lanpr_cpu.c
index 1134e0d3670..bd35f6ab1f9 100644
--- a/source/blender/editors/lanpr/lanpr_cpu.c
+++ b/source/blender/editors/lanpr/lanpr_cpu.c
@@ -2665,8 +2665,6 @@ LANPR_RenderBuffer *ED_lanpr_create_render_buffer(void)
rb->viewport_override = lanpr_share.viewport_camera_override;
copy_v3_v3_db(rb->camera_pos, lanpr_share.camera_pos);
- rb->cached_for_frame = -1;
-
BLI_spin_init(&rb->lock_task);
BLI_spin_init(&rb->render_data_pool.lock_mem);
@@ -3876,8 +3874,6 @@ int ED_lanpr_compute_feature_lines_internal(Depsgraph *depsgraph, int intersecto
ED_lanpr_discard_short_chains(rb, MIN3(t_image, t_geom, 0.01f) - FLT_EPSILON);
}
- rb->cached_for_frame = rb->scene->r.cfra;
-
ED_lanpr_calculation_set_flag(LANPR_RENDER_FINISHED);
return OPERATOR_FINISHED;
@@ -4385,8 +4381,7 @@ static void lanpr_update_gp_strokes_actual(Scene *scene, Depsgraph *dg)
{
int frame = scene->r.cfra;
- if (!lanpr_share.render_buffer_shared ||
- lanpr_share.render_buffer_shared->cached_for_frame != frame) {
+ if (scene->lanpr.flags & LANPR_AUTO_UPDATE) {
ED_lanpr_compute_feature_lines_internal(dg, 0);
}
@@ -4442,8 +4437,7 @@ static int lanpr_update_gp_target_exec(struct bContext *C, struct wmOperator *UN
int frame = scene->r.cfra;
- if (!lanpr_share.render_buffer_shared ||
- lanpr_share.render_buffer_shared->cached_for_frame != frame) {
+ if (scene->lanpr.flags & LANPR_AUTO_UPDATE) {
ED_lanpr_compute_feature_lines_internal(dg, 0);
}
@@ -4467,8 +4461,7 @@ static int lanpr_update_gp_source_exec(struct bContext *C, struct wmOperator *UN
int frame = scene->r.cfra;
- if (!lanpr_share.render_buffer_shared ||
- lanpr_share.render_buffer_shared->cached_for_frame != frame) {
+ if (scene->lanpr.flags & LANPR_AUTO_UPDATE) {
ED_lanpr_compute_feature_lines_internal(dg, 0);
}
@@ -4550,8 +4543,7 @@ void ED_lanpr_post_frame_update_external(Scene *s, Depsgraph *dg)
if (strcmp(s->r.engine, RE_engine_id_BLENDER_LANPR)) {
/* Not LANPR engine, do GPencil updates. */
/* LANPR engine will automatically update when drawing the viewport. */
- if (!lanpr_share.render_buffer_shared ||
- lanpr_share.render_buffer_shared->cached_for_frame != s->r.cfra) {
+ if (s->lanpr.flags & LANPR_AUTO_UPDATE) {
ED_lanpr_compute_feature_lines_internal(dg, 0);
lanpr_update_gp_strokes_actual(s, dg);
}
diff --git a/source/blender/python/intern/bpy_app_build_options.c b/source/blender/python/intern/bpy_app_build_options.c
index 8fcd0c1a3ee..1b184f5683d 100644
--- a/source/blender/python/intern/bpy_app_build_options.c
+++ b/source/blender/python/intern/bpy_app_build_options.c
@@ -28,40 +28,23 @@ static PyTypeObject BlenderAppBuildOptionsType;
static PyStructSequence_Field app_builtopts_info_fields[] = {
/* names mostly follow CMake options, lowercase, after WITH_ */
- {(char *)"bullet", NULL},
- {(char *)"codec_avi", NULL},
- {(char *)"codec_ffmpeg", NULL},
- {(char *)"codec_sndfile", NULL},
- {(char *)"compositor", NULL},
- {(char *)"cycles", NULL},
- {(char *)"cycles_osl", NULL},
- {(char *)"freestyle", NULL},
- {(char *)"lanpr", NULL},
- {(char *)"image_cineon", NULL},
- {(char *)"image_dds", NULL},
- {(char *)"image_hdr", NULL},
- {(char *)"image_openexr", NULL},
- {(char *)"image_openjpeg", NULL},
- {(char *)"image_tiff", NULL},
- {(char *)"input_ndof", NULL},
- {(char *)"audaspace", NULL},
- {(char *)"international", NULL},
- {(char *)"openal", NULL},
- {(char *)"opensubdiv", NULL},
- {(char *)"sdl", NULL},
- {(char *)"sdl_dynload", NULL},
- {(char *)"jack", NULL},
- {(char *)"libmv", NULL},
- {(char *)"mod_fluid", NULL},
- {(char *)"mod_oceansim", NULL},
- {(char *)"mod_remesh", NULL},
- {(char *)"mod_smoke", NULL},
- {(char *)"collada", NULL},
- {(char *)"opencolorio", NULL},
- {(char *)"openmp", NULL},
- {(char *)"openvdb", NULL},
- {(char *)"alembic", NULL},
- {NULL},
+ {(char *)"bullet", NULL}, {(char *)"codec_avi", NULL},
+ {(char *)"codec_ffmpeg", NULL}, {(char *)"codec_sndfile", NULL},
+ {(char *)"compositor", NULL}, {(char *)"cycles", NULL},
+ {(char *)"cycles_osl", NULL}, {(char *)"freestyle", NULL},
+ {(char *)"lanpr", NULL}, {(char *)"image_cineon", NULL},
+ {(char *)"image_dds", NULL}, {(char *)"image_hdr", NULL},
+ {(char *)"image_openexr", NULL}, {(char *)"image_openjpeg", NULL},
+ {(char *)"image_tiff", NULL}, {(char *)"input_ndof", NULL},
+ {(char *)"audaspace
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list