diff options
author | YimingWu <xp8110@outlook.com> | 2019-09-04 06:04:59 +0300 |
---|---|---|
committer | YimingWu <xp8110@outlook.com> | 2019-09-04 06:04:59 +0300 |
commit | 628fe8b635dcdccca296d0e782da362b63738731 (patch) | |
tree | fc2cfa11b9dd602df4fa8bc82dacfab78832cc63 | |
parent | 72c0abbd28965400e81e3deb3d270b9ee3913174 (diff) |
LANPR: Use flags for struct LANPR_LineLayer.
m--------- | release/datafiles/locale | 0 | ||||
m--------- | release/scripts/addons | 0 | ||||
m--------- | release/scripts/addons_contrib | 0 | ||||
-rw-r--r-- | source/blender/draw/engines/lanpr/lanpr_cpu.c | 176 | ||||
-rw-r--r-- | source/blender/editors/lanpr/lanpr_cpu.c | 8 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_lanpr_types.h | 17 | ||||
m--------- | source/tools | 0 |
7 files changed, 99 insertions, 102 deletions
diff --git a/release/datafiles/locale b/release/datafiles/locale -Subproject 6a6b84fd50538a65276c729b5d396be615bc79f +Subproject ad82c4ce43ef2801ef51e75af1f9702992478b0 diff --git a/release/scripts/addons b/release/scripts/addons -Subproject 8d11c9e82893e231b2abc093d815deb79866e03 +Subproject 8e6f485cf5b160c425d7da7c743879b20f3d6a9 diff --git a/release/scripts/addons_contrib b/release/scripts/addons_contrib -Subproject 2769f4b5f5f4769cf9115fa7cdd1287540a795b +Subproject 7077ff07384491d1f7630484995557f1c7302da diff --git a/source/blender/draw/engines/lanpr/lanpr_cpu.c b/source/blender/draw/engines/lanpr/lanpr_cpu.c index 1088b082d90..26bf418f584 100644 --- a/source/blender/draw/engines/lanpr/lanpr_cpu.c +++ b/source/blender/draw/engines/lanpr/lanpr_cpu.c @@ -57,80 +57,72 @@ static void lanpr_rebuild_render_draw_command(LANPR_RenderBuffer *rb, LANPR_Line int i; int vertCount; - if (ll->type == TNS_COMMAND_LINE) { - static GPUVertFormat format = {0}; - static struct { - uint pos, normal; - } attr_id; - if (format.attr_len == 0) { - attr_id.pos = GPU_vertformat_attr_add(&format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT); - attr_id.normal = GPU_vertformat_attr_add( - &format, "normal", GPU_COMP_F32, 3, GPU_FETCH_FLOAT); - } - - GPUVertBuf *vbo = GPU_vertbuf_create_with_format(&format); - - if (ll->contour.enabled) { - Count += lanpr_count_leveled_edge_segment_count(&rb->contours, ll); - } - if (ll->crease.enabled) { - Count += lanpr_count_leveled_edge_segment_count(&rb->crease_lines, ll); - } - if (ll->intersection.enabled) { - Count += lanpr_count_leveled_edge_segment_count(&rb->intersection_lines, ll); - } - if (ll->edge_mark.enabled) { - Count += lanpr_count_leveled_edge_segment_count(&rb->edge_marks, ll); - } - if (ll->material_separate.enabled) { - Count += lanpr_count_leveled_edge_segment_count(&rb->material_lines, ll); - } - - vertCount = Count * 2; + static GPUVertFormat format = {0}; + static struct { + uint pos, normal; + } attr_id; + if (format.attr_len == 0) { + attr_id.pos = GPU_vertformat_attr_add(&format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT); + attr_id.normal = GPU_vertformat_attr_add( + &format, "normal", GPU_COMP_F32, 3, GPU_FETCH_FLOAT); + } - if (!vertCount) { - return; - } + GPUVertBuf *vbo = GPU_vertbuf_create_with_format(&format); - GPU_vertbuf_data_alloc(vbo, vertCount); + if (ll->contour.enabled) { + Count += lanpr_count_leveled_edge_segment_count(&rb->contours, ll); + } + if (ll->crease.enabled) { + Count += lanpr_count_leveled_edge_segment_count(&rb->crease_lines, ll); + } + if (ll->intersection.enabled) { + Count += lanpr_count_leveled_edge_segment_count(&rb->intersection_lines, ll); + } + if (ll->edge_mark.enabled) { + Count += lanpr_count_leveled_edge_segment_count(&rb->edge_marks, ll); + } + if (ll->material_separate.enabled) { + Count += lanpr_count_leveled_edge_segment_count(&rb->material_lines, ll); + } - tv = v = MEM_callocN(sizeof(float) * 6 * Count, "temp v data"); - tn = N = MEM_callocN(sizeof(float) * 6 * Count, "temp n data"); + vertCount = Count * 2; - if (ll->contour.enabled) { - tv = lanpr_make_leveled_edge_vertex_array(rb, &rb->contours, tv, tn, &tn, ll, 1.0f); - } - if (ll->crease.enabled) { - tv = lanpr_make_leveled_edge_vertex_array(rb, &rb->crease_lines, tv, tn, &tn, ll, 2.0f); - } - if (ll->material_separate.enabled) { - tv = lanpr_make_leveled_edge_vertex_array(rb, &rb->material_lines, tv, tn, &tn, ll, 3.0f); - } - if (ll->edge_mark.enabled) { - tv = lanpr_make_leveled_edge_vertex_array(rb, &rb->edge_marks, tv, tn, &tn, ll, 4.0f); - } - if (ll->intersection.enabled) { - tv = lanpr_make_leveled_edge_vertex_array( - rb, &rb->intersection_lines, tv, tn, &tn, ll, 5.0f); - } + if (!vertCount) { + return; + } - for (i = 0; i < vertCount; i++) { - GPU_vertbuf_attr_set(vbo, attr_id.pos, i, &v[i * 3]); - GPU_vertbuf_attr_set(vbo, attr_id.normal, i, &N[i * 3]); - } + GPU_vertbuf_data_alloc(vbo, vertCount); - MEM_freeN(v); - MEM_freeN(N); + tv = v = MEM_callocN(sizeof(float) * 6 * Count, "temp v data"); + tn = N = MEM_callocN(sizeof(float) * 6 * Count, "temp n data"); - ll->batch = GPU_batch_create_ex( - GPU_PRIM_LINES, vbo, 0, GPU_USAGE_DYNAMIC | GPU_BATCH_OWNS_VBO); + if (ll->contour.enabled) { + tv = lanpr_make_leveled_edge_vertex_array(rb, &rb->contours, tv, tn, &tn, ll, 1.0f); + } + if (ll->crease.enabled) { + tv = lanpr_make_leveled_edge_vertex_array(rb, &rb->crease_lines, tv, tn, &tn, ll, 2.0f); + } + if (ll->material_separate.enabled) { + tv = lanpr_make_leveled_edge_vertex_array(rb, &rb->material_lines, tv, tn, &tn, ll, 3.0f); + } + if (ll->edge_mark.enabled) { + tv = lanpr_make_leveled_edge_vertex_array(rb, &rb->edge_marks, tv, tn, &tn, ll, 4.0f); + } + if (ll->intersection.enabled) { + tv = lanpr_make_leveled_edge_vertex_array( + rb, &rb->intersection_lines, tv, tn, &tn, ll, 5.0f); + } - return; + for (i = 0; i < vertCount; i++) { + GPU_vertbuf_attr_set(vbo, attr_id.pos, i, &v[i * 3]); + GPU_vertbuf_attr_set(vbo, attr_id.normal, i, &N[i * 3]); } - /* if (ll->type == TNS_COMMAND_MATERIAL || ll->type == TNS_COMMAND_EDGE) { */ - /* later implement .... */ - /* } */ + MEM_freeN(v); + MEM_freeN(N); + + 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) { @@ -157,7 +149,7 @@ void ED_lanpr_rebuild_all_command(SceneLANPR *lanpr) void ED_lanpr_calculate_normal_object_vector(LANPR_LineLayer *ll, float *normal_object_direction) { Object *ob; - if (!ll->normal_enabled) { + if (!(ll->flags & LANPR_LINE_LAYER_NORMAL_ENABLED)) { return; } switch (ll->normal_mode) { @@ -272,44 +264,44 @@ void lanpr_software_draw_scene(void *vedata, GPUFrameBuffer *dfb, int is_render) DRW_shgroup_uniform_vec4(rb->ChainShgrp, "contour_color", - ll->use_same_style ? ll->color : ll->contour.color, + (ll->flags & LANPR_LINE_LAYER_USE_SAME_STYLE) ? ll->color : ll->contour.color, 1); DRW_shgroup_uniform_vec4( - rb->ChainShgrp, "crease_color", ll->use_same_style ? ll->color : ll->crease.color, 1); + rb->ChainShgrp, "crease_color", (ll->flags & LANPR_LINE_LAYER_USE_SAME_STYLE) ? ll->color : ll->crease.color, 1); DRW_shgroup_uniform_vec4(rb->ChainShgrp, "material_color", - ll->use_same_style ? ll->color : ll->material_separate.color, + (ll->flags & LANPR_LINE_LAYER_USE_SAME_STYLE) ? ll->color : ll->material_separate.color, 1); DRW_shgroup_uniform_vec4(rb->ChainShgrp, "edge_mark_color", - ll->use_same_style ? ll->color : ll->edge_mark.color, + (ll->flags & LANPR_LINE_LAYER_USE_SAME_STYLE) ? ll->color : ll->edge_mark.color, 1); DRW_shgroup_uniform_vec4(rb->ChainShgrp, "intersection_color", - ll->use_same_style ? ll->color : ll->intersection.color, + (ll->flags & LANPR_LINE_LAYER_USE_SAME_STYLE) ? ll->color : ll->intersection.color, 1); static float unit_thickness = 1.0f; DRW_shgroup_uniform_float(rb->ChainShgrp, "thickness", &ll->thickness, 1); DRW_shgroup_uniform_float(rb->ChainShgrp, "thickness_contour", - ll->use_same_style ? &unit_thickness : &ll->contour.thickness, + (ll->flags & LANPR_LINE_LAYER_USE_SAME_STYLE) ? &unit_thickness : &ll->contour.thickness, 1); DRW_shgroup_uniform_float(rb->ChainShgrp, "thickness_crease", - ll->use_same_style ? &unit_thickness : &ll->crease.thickness, + (ll->flags & LANPR_LINE_LAYER_USE_SAME_STYLE) ? &unit_thickness : &ll->crease.thickness, 1); DRW_shgroup_uniform_float(rb->ChainShgrp, "thickness_material", - ll->use_same_style ? &unit_thickness : + (ll->flags & LANPR_LINE_LAYER_USE_SAME_STYLE) ? &unit_thickness : &ll->material_separate.thickness, 1); DRW_shgroup_uniform_float(rb->ChainShgrp, "thickness_edge_mark", - ll->use_same_style ? &unit_thickness : &ll->edge_mark.thickness, + (ll->flags & LANPR_LINE_LAYER_USE_SAME_STYLE) ? &unit_thickness : &ll->edge_mark.thickness, 1); DRW_shgroup_uniform_float(rb->ChainShgrp, "thickness_intersection", - ll->use_same_style ? &unit_thickness : + (ll->flags & LANPR_LINE_LAYER_USE_SAME_STYLE) ? &unit_thickness : &ll->intersection.thickness, 1); DRW_shgroup_uniform_int(rb->ChainShgrp, "enable_contour", &ll->contour.enabled, 1); @@ -320,10 +312,12 @@ void lanpr_software_draw_scene(void *vedata, GPUFrameBuffer *dfb, int is_render) DRW_shgroup_uniform_int( rb->ChainShgrp, "enable_intersection", &ll->intersection.enabled, 1); + static int normal_effect_inverse; + normal_effect_inverse = (ll->flags & LANPR_LINE_LAYER_NORMAL_INVERSE)?1:0; DRW_shgroup_uniform_int( - rb->ChainShgrp, "normal_mode", ll->normal_enabled ? &ll->normal_mode : &zero_value, 1); + rb->ChainShgrp, "normal_mode", (ll->flags & LANPR_LINE_LAYER_NORMAL_ENABLED) ? &ll->normal_mode : &zero_value, 1); DRW_shgroup_uniform_int( - rb->ChainShgrp, "normal_effect_inverse", &ll->normal_effect_inverse, 1); + rb->ChainShgrp, "normal_effect_inverse", &normal_effect_inverse, 1); DRW_shgroup_uniform_float(rb->ChainShgrp, "normal_ramp_begin", &ll->normal_ramp_begin, 1); DRW_shgroup_uniform_float(rb->ChainShgrp, "normal_ramp_end", &ll->normal_ramp_end, 1); DRW_shgroup_uniform_float( @@ -335,7 +329,7 @@ void lanpr_software_draw_scene(void *vedata, GPUFrameBuffer *dfb, int is_render) DRW_shgroup_uniform_int(rb->ChainShgrp, "occlusion_level_start", &ll->qi_begin, 1); DRW_shgroup_uniform_int(rb->ChainShgrp, "occlusion_level_end", - ll->use_multiple_levels ? &ll->qi_end : &ll->qi_begin, + (ll->flags & LANPR_LINE_LAYER_USE_MULTIPLE_LEVELS) ? &ll->qi_end : &ll->qi_begin, 1); DRW_shgroup_uniform_vec4( @@ -376,55 +370,57 @@ void lanpr_software_draw_scene(void *vedata, GPUFrameBuffer *dfb, int is_render) DRW_shgroup_uniform_float(ll->shgrp, "camzoom", &camzoom, 1); DRW_shgroup_uniform_vec4( - ll->shgrp, "contour_color", ll->use_same_style ? ll->color : ll->contour.color, 1); + ll->shgrp, "contour_color", (ll->flags & LANPR_LINE_LAYER_USE_SAME_STYLE) ? ll->color : ll->contour.color, 1); DRW_shgroup_uniform_vec4( - ll->shgrp, "crease_color", ll->use_same_style ? ll->color : ll->crease.color, 1); + ll->shgrp, "crease_color", (ll->flags & LANPR_LINE_LAYER_USE_SAME_STYLE) ? ll->color : ll->crease.color, 1); DRW_shgroup_uniform_vec4(ll->shgrp, "material_color", - ll->use_same_style ? ll->color : ll->material_separate.color, + (ll->flags & LANPR_LINE_LAYER_USE_SAME_STYLE) ? ll->color : ll->material_separate.color, 1); DRW_shgroup_uniform_vec4(ll->shgrp, "edge_mark_color", - ll->use_same_style ? ll->color : ll->edge_mark.color, + (ll->flags & LANPR_LINE_LAYER_USE_SAME_STYLE) ? ll->color : ll->edge_mark.color, 1); DRW_shgroup_uniform_vec4(ll->shgrp, "intersection_color", - ll->use_same_style ? ll->color : ll->intersection.color, + (ll->flags & LANPR_LINE_LAYER_USE_SAME_STYLE) ? ll->color : ll->intersection.color, 1); static float uniform_thickness = 1.0f; DRW_shgroup_uniform_float(ll->shgrp, "thickness", &ll->thickness, 1); DRW_shgroup_uniform_float(ll->shgrp, "thickness_contour", - ll->use_same_style ? &uniform_thickness : + (ll->flags & LANPR_LINE_LAYER_USE_SAME_STYLE) ? &uniform_thickness : &ll->contour.thickness, 1); DRW_shgroup_uniform_float(ll->shgrp, "thickness_crease", - ll->use_same_style ? &uniform_thickness : + (ll->flags & LANPR_LINE_LAYER_USE_SAME_STYLE) ? &uniform_thickness : &ll->crease.thickness, 1); DRW_shgroup_uniform_float(ll->shgrp, "thickness_material", - ll->use_same_style ? &uniform_thickness : + (ll->flags & LANPR_LINE_LAYER_USE_SAME_STYLE) ? &uniform_thickness : &ll->material_separate.thickness, 1); DRW_shgroup_uniform_float(ll->shgrp, "thickness_edge_mark", - ll->use_same_style ? &uniform_thickness : + (ll->flags & LANPR_LINE_LAYER_USE_SAME_STYLE) ? &uniform_thickness : &ll->edge_mark.thickness, 1); DRW_shgroup_uniform_float(ll->shgrp, "thickness_intersection", - ll->use_same_style ? &uniform_thickness : + (ll->flags & LANPR_LINE_LAYER_USE_SAME_STYLE) ? &uniform_thickness : &ll->intersection.thickness, 1); DRW_shgroup_uniform_vec4(ll->shgrp, "preview_viewport", stl->g_data->dpix_viewport, 1); DRW_shgroup_uniform_vec4(ll->shgrp, "output_viewport", stl->g_data->output_viewport, 1); + static int normal_effect_inverse; + normal_effect_inverse = (ll->flags & LANPR_LINE_LAYER_NORMAL_INVERSE)?1:0; DRW_shgroup_uniform_int( - ll->shgrp, "normal_mode", ll->normal_enabled ? &ll->normal_mode : &zero_value, 1); + ll->shgrp, "normal_mode", (ll->flags & LANPR_LINE_LAYER_NORMAL_ENABLED) ? &ll->normal_mode : &zero_value, 1); DRW_shgroup_uniform_int( - ll->shgrp, "normal_effect_inverse", &ll->normal_effect_inverse, 1); + ll->shgrp, "normal_effect_inverse", &normal_effect_inverse, 1); DRW_shgroup_uniform_float(ll->shgrp, "normal_ramp_begin", &ll->normal_ramp_begin, 1); DRW_shgroup_uniform_float(ll->shgrp, "normal_ramp_end", &ll->normal_ramp_end, 1); DRW_shgroup_uniform_float( diff --git a/source/blender/editors/lanpr/lanpr_cpu.c b/source/blender/editors/lanpr/lanpr_cpu.c index 07995ea6542..84860da0867 100644 --- a/source/blender/editors/lanpr/lanpr_cpu.c +++ b/source/blender/editors/lanpr/lanpr_cpu.c @@ -115,7 +115,7 @@ int ED_lanpr_max_occlusion_in_line_layers(SceneLANPR *lanpr) LANPR_LineLayer *lli; int max_occ = -1, max; for (lli = lanpr->line_layers.first; lli; lli = lli->next) { - if (lli->use_multiple_levels) { + if (lli->flags & LANPR_LINE_LAYER_USE_MULTIPLE_LEVELS) { max = MAX2(lli->qi_begin, lli->qi_end); } else { @@ -134,7 +134,7 @@ LANPR_LineLayer *ED_lanpr_new_line_layer(SceneLANPR *lanpr) int max_occ = ED_lanpr_max_occlusion_in_line_layers(lanpr); ll->qi_begin = ll->qi_end = max_occ + 1; - ll->use_same_style = 1; + ll->flags |= LANPR_LINE_LAYER_USE_SAME_STYLE; ll->thickness = 1.0f; copy_v3_fl(ll->color, 0.8); ll->color[3] = 1.0f; @@ -2799,7 +2799,7 @@ long lanpr_count_leveled_edge_segment_count(ListBase *LineList, LANPR_LineLayer for (rls = rl->segments.first; rls; rls = rls->next) { - if (!ll->use_multiple_levels) { + if (!(ll->flags & LANPR_LINE_LAYER_USE_MULTIPLE_LEVELS)) { if (rls->occlusion == ll->qi_begin) { Count++; } @@ -2843,7 +2843,7 @@ void *lanpr_make_leveled_edge_vertex_array(LANPR_RenderBuffer *UNUSED(rb), for (rls = rl->segments.first; rls; rls = rls->next) { int use = 0; - if (!ll->use_multiple_levels) { + if (!(ll->flags & LANPR_LINE_LAYER_USE_MULTIPLE_LEVELS)) { if (rls->occlusion == ll->qi_begin) { use = 1; } diff --git a/source/blender/makesdna/DNA_lanpr_types.h b/source/blender/makesdna/DNA_lanpr_types.h index 6b2196b5544..3155153795c 100644 --- a/source/blender/makesdna/DNA_lanpr_types.h +++ b/source/blender/makesdna/DNA_lanpr_types.h @@ -89,12 +89,18 @@ typedef struct LANPR_LineType { float color[4]; } LANPR_LineType; +typedef enum LANPR_LineLayerFlags { + LANPR_LINE_LAYER_USE_SAME_STYLE = (1<<0), + LANPR_LINE_LAYER_USE_MULTIPLE_LEVELS = (1<<1), + LANPR_LINE_LAYER_NORMAL_ENABLED = (1<<2), + LANPR_LINE_LAYER_NORMAL_INVERSE = (1<<3), +} LANPR_LineLayerFlags; + typedef struct LANPR_LineLayer { struct LANPR_LineLayer *next, *prev; - int type; - - int use_multiple_levels; + int flags; + int _pad1; int qi_begin; int qi_end; @@ -111,12 +117,7 @@ typedef struct LANPR_LineLayer { float color[4]; - int use_same_style; - - int _pad1; - int normal_enabled; int normal_mode; - int normal_effect_inverse; float normal_ramp_begin; float normal_ramp_end; float normal_thickness_start; diff --git a/source/tools b/source/tools -Subproject 8598818108ddaf35e30d2a2dbd408ad371e41eb +Subproject 2afbb8ec472cac5102eb239f57b006f8c938768 |