[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