Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorYimingWu <xp8110@outlook.com>2019-09-04 06:04:59 +0300
committerYimingWu <xp8110@outlook.com>2019-09-04 06:04:59 +0300
commit628fe8b635dcdccca296d0e782da362b63738731 (patch)
treefc2cfa11b9dd602df4fa8bc82dacfab78832cc63 /source
parent72c0abbd28965400e81e3deb3d270b9ee3913174 (diff)
LANPR: Use flags for struct LANPR_LineLayer.
Diffstat (limited to 'source')
-rw-r--r--source/blender/draw/engines/lanpr/lanpr_cpu.c176
-rw-r--r--source/blender/editors/lanpr/lanpr_cpu.c8
-rw-r--r--source/blender/makesdna/DNA_lanpr_types.h17
m---------source/tools0
4 files changed, 99 insertions, 102 deletions
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