[Bf-blender-cvs] [dfa4a80e9ad] temp-lineart-contained: LineArt: Remove `lineart_share`
YimingWu
noreply at git.blender.org
Thu Nov 12 10:28:41 CET 2020
Commit: dfa4a80e9adc62a55426c65f67e66df0ec57720f
Author: YimingWu
Date: Thu Nov 12 17:28:28 2020 +0800
Branches: temp-lineart-contained
https://developer.blender.org/rBdfa4a80e9adc62a55426c65f67e66df0ec57720f
LineArt: Remove `lineart_share`
===================================================================
M source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c
M source/blender/gpencil_modifiers/intern/lineart/ED_lineart.h
M source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
M source/blender/gpencil_modifiers/intern/lineart/lineart_ops.c
M source/blender/makesdna/DNA_gpencil_modifier_types.h
===================================================================
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c b/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c
index 4e5d8f2f72c..bd08e7407b1 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c
@@ -67,8 +67,6 @@
#include "WM_api.h"
#include "WM_types.h"
-LineartSharedResource lineart_share;
-
static void initData(GpencilModifierData *md)
{
LineartGpencilModifierData *lmd = (LineartGpencilModifierData *)md;
@@ -98,6 +96,7 @@ static void generate_strokes_actual(
}
ED_lineart_gpencil_generate_with_type(
+ lmd->render_buffer,
depsgraph,
ob,
gpl,
@@ -142,8 +141,6 @@ static void generateStrokes(GpencilModifierData *md, Depsgraph *depsgraph, Objec
LineartGpencilModifierData *lmd = (LineartGpencilModifierData *)md;
bGPdata *gpd = ob->data;
- Scene *s = DEG_get_evaluated_scene(depsgraph);
-
/* Guard early, don't trigger calculation when no gpencil frame is present. Probably should
* disable in the isModifierDisabled() function but we need addtional arg for depsgraph and
* gpd. */
@@ -158,18 +155,16 @@ static void generateStrokes(GpencilModifierData *md, Depsgraph *depsgraph, Objec
return;
}
- bool is_render = (DEG_get_mode(depsgraph) == DAG_EVAL_RENDER);
-
/* Check all parameters required are filled. */
if (isModifierDisabled(md)) {
return;
}
- ED_lineart_compute_feature_lines_internal(depsgraph, lmd, 1);
+ ED_lineart_compute_feature_lines_internal(depsgraph, lmd);
generate_strokes_actual(md, depsgraph, ob, gpl, gpf);
- ED_lineart_destroy_render_data();
+ ED_lineart_destroy_render_data(lmd);
WM_main_add_notifier(NA_EDITED | NC_GPENCIL, NULL);
}
@@ -182,7 +177,6 @@ static void bakeModifier(Main *UNUSED(bmain),
bGPdata *gpd = ob->data;
LineartGpencilModifierData *lmd = (LineartGpencilModifierData *)md;
- Scene *scene = DEG_get_evaluated_scene(depsgraph);
bGPDlayer *gpl = BKE_gpencil_layer_get_by_name(gpd, lmd->target_layer, 1);
if (gpl == NULL) {
@@ -193,11 +187,11 @@ static void bakeModifier(Main *UNUSED(bmain),
return;
}
- ED_lineart_compute_feature_lines_internal(depsgraph, lmd, 1);
+ ED_lineart_compute_feature_lines_internal(depsgraph, lmd);
generate_strokes_actual(md, depsgraph, ob, gpl, gpf);
- ED_lineart_destroy_render_data();
+ ED_lineart_destroy_render_data(lmd);
}
static bool isDisabled(GpencilModifierData *md, int UNUSED(userRenderParams))
@@ -244,10 +238,9 @@ static void foreachIDLink(GpencilModifierData *md, Object *ob, IDWalkFunc walk,
walk(userData, ob, (ID **)&lmd->source_object, IDWALK_CB_NOP);
}
-static void panel_draw(const bContext *C, Panel *panel)
+static void panel_draw(const bContext *UNUSED(C), Panel *panel)
{
uiLayout *layout = panel->layout;
- Scene *scene = CTX_data_scene(C);
PointerRNA ob_ptr;
PointerRNA *ptr = gpencil_modifier_panel_get_property_pointers(panel, &ob_ptr);
diff --git a/source/blender/gpencil_modifiers/intern/lineart/ED_lineart.h b/source/blender/gpencil_modifiers/intern/lineart/ED_lineart.h
index 3c16c827e06..be5e712c964 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/ED_lineart.h
+++ b/source/blender/gpencil_modifiers/intern/lineart/ED_lineart.h
@@ -202,8 +202,7 @@ typedef struct LineartChainRegisterEntry {
typedef struct LineartRenderBuffer {
struct LineartRenderBuffer *prev, *next;
- /** For render. */
- int is_copied;
+ int thread_count;
int w, h;
int tile_size_w, tile_size_h;
@@ -273,7 +272,6 @@ typedef struct LineartRenderBuffer {
int max_occlusion_level;
double crease_angle;
double crease_cos;
- int thread_count;
int draw_material_preview;
double material_transparency;
@@ -288,7 +286,7 @@ typedef struct LineartRenderBuffer {
bool allow_boundaries;
bool remove_doubles;
- /** Keep an copy of these data so the scene can be freed when lineart is runnning. */
+ /** Keep an copy of these data so when line art is running it's self-contained. */
bool cam_is_persp;
float cam_obmat[4][4];
double camera_pos[3];
@@ -298,6 +296,9 @@ typedef struct LineartRenderBuffer {
float chaining_image_threshold;
float chaining_geometry_threshold;
float angle_splitting_threshold;
+
+ /** For showing the progress with mouse cursor and stuff. */
+ wmWindow *main_window;
} LineartRenderBuffer;
typedef enum eLineartRenderStatus {
@@ -321,65 +322,6 @@ typedef enum eLineartModifierSyncStatus {
LRT_SYNC_CLEARING = 4,
} eLineartModifierSyncStatus;
-typedef struct LineartSharedResource {
-
- /* We only allocate once for all */
- LineartRenderBuffer *render_buffer_shared;
-
- /* Don't put this in render buffer as the checker function doesn't have rb pointer, this design
- * is for performance. */
- char allow_overlapping_edges;
-
- /* cache */
- struct BLI_mempool *mp_sample;
- struct BLI_mempool *mp_line_strip;
- struct BLI_mempool *mp_line_strip_point;
- struct BLI_mempool *mp_batch_list;
-
- struct TaskPool *background_render_task;
- struct TaskPool *pending_render_task;
-
- eLineartInitStatus init_complete;
-
- /** To bypass or cancel rendering.
- * This status flag should be kept in lineart_share not render_buffer,
- * because render_buffer will get re-initialized every frame.
- */
- SpinLock lock_render_status;
- eLineartRenderStatus flag_render_status;
- eLineartModifierSyncStatus flag_sync_staus;
- /** count of pending modifiers that is waiting for the data. */
- int customers;
-
- int thread_count;
-
- /** To determine whether all threads are completely canceled. Each thread add 1 into this value
- * before return, until it reaches thread count. Not needed for the implementation at the moment
- * as occlusion thread is work-and-wait, preserved for future usages. */
- int canceled_thread_accumulator;
-
- /** Geometry loading is done in the worker thread,
- * Lock the render thread until loading is done, so that
- * we can avoid depsgrapgh deleting the scene before
- * LRT finishes loading. Also keep this in lineart_share.
- */
- SpinLock lock_loader;
-
- /** When drawing in the viewport, use the following values. */
- /** Set to override to -1 before creating lineart render buffer to use scene camera. */
- int viewport_camera_override;
- char camera_is_persp;
- float camera_pos[3];
- float near_clip, far_clip;
- float viewinv[4][4];
- float persp[4][4];
- float viewquat[4];
-
- /* Use these to set cursor and progress. */
- wmWindowManager *wm;
- wmWindow *main_window;
-} LineartSharedResource;
-
#define DBL_TRIANGLE_LIM 1e-8
#define DBL_EDGE_LIM 1e-9
@@ -400,6 +342,8 @@ typedef enum eLineartTriangleFlags {
#define LRT_THREAD_LINE_COUNT 1000
typedef struct LineartRenderTaskInfo {
+ struct LineartRenderBuffer *rb;
+
int thread_id;
LineartRenderLine *contour;
@@ -590,8 +534,7 @@ struct LineartGpencilModifierData;
void ED_lineart_init_locks(void);
struct LineartRenderBuffer *ED_lineart_create_render_buffer(
struct Scene *s, struct LineartGpencilModifierData *lmd);
-void ED_lineart_destroy_render_data(void);
-void ED_lineart_destroy_render_data_external(void);
+void ED_lineart_destroy_render_data(struct LineartGpencilModifierData *lmd);
int ED_lineart_object_collection_usage_check(struct Collection *c, struct Object *o);
@@ -604,9 +547,6 @@ void ED_lineart_chain_split_angle(LineartRenderBuffer *rb, float angle_threshold
int ED_lineart_chain_count(const LineartRenderLineChain *rlc);
void ED_lineart_chain_clear_picked_flag(struct LineartRenderBuffer *rb);
-void ED_lineart_calculation_flag_set(eLineartRenderStatus flag);
-bool ED_lineart_calculation_flag_check(eLineartRenderStatus flag);
-
void ED_lineart_modifier_sync_flag_set(eLineartModifierSyncStatus flag, bool is_from_modifier);
bool ED_lineart_modifier_sync_flag_check(eLineartModifierSyncStatus flag);
void ED_lineart_modifier_sync_add_customer(void);
@@ -614,11 +554,7 @@ void ED_lineart_modifier_sync_remove_customer(void);
bool ED_lineart_modifier_sync_still_has_customer(void);
int ED_lineart_compute_feature_lines_internal(struct Depsgraph *depsgraph,
- struct LineartGpencilModifierData *lmd,
- const int show_frame_progress);
-
-void ED_lineart_compute_feature_lines_background(struct Depsgraph *dg,
- const int show_frame_progress);
+ struct LineartGpencilModifierData *lmd);
struct Scene;
@@ -634,7 +570,8 @@ struct bGPDlayer;
struct bGPDframe;
struct GpencilModifierData;
-void ED_lineart_gpencil_generate(struct Depsgraph *depsgraph,
+void ED_lineart_gpencil_generate(LineartRenderBuffer *rb,
+ struct Depsgraph *depsgraph,
Object *gpencil_object,
float (*gp_obmat_inverse)[4],
struct bGPDlayer *UNUSED(gpl),
@@ -654,7 +591,8 @@ void ED_lineart_gpencil_generate(struct Depsgraph *depsgraph,
const char *vgname,
int modifier_flags);
-void ED_lineart_gpencil_generate_with_type(struct Depsgraph *depsgraph,
+void ED_lineart_gpencil_generate_with_type(LineartRenderBuffer *rb,
+ struct Depsgraph *depsgraph,
struct Object *ob,
struct bGPDlayer *gpl,
struct bGPDframe *gpf,
@@ -680,8 +618,6 @@ void ED_lineart_post_frame_update_external(struct bContext *C,
struct Depsgraph *dg,
bool from_modifier);
-void ED_lineart_update_render_progress(int nr, const char *info);
-
float ED_lineart_chain_compute_length(LineartRenderLineChain *rlc);
struct wmOperatorType;
diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
i
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list