[Bf-blender-cvs] [bc1b7a7af19] soc-2019-npr: LANPR: Chain connection is now working properly
Yiming Wu
noreply at git.blender.org
Wed Jun 12 15:06:03 CEST 2019
Commit: bc1b7a7af19e229812ff56e0825b56b977fbed43
Author: Yiming Wu
Date: Wed Jun 12 21:05:53 2019 +0800
Branches: soc-2019-npr
https://developer.blender.org/rBbc1b7a7af19e229812ff56e0825b56b977fbed43
LANPR: Chain connection is now working properly
===================================================================
M source/blender/draw/engines/lanpr/lanpr_chain.c
M source/blender/draw/engines/lanpr/lanpr_data_types.h
===================================================================
diff --git a/source/blender/draw/engines/lanpr/lanpr_chain.c b/source/blender/draw/engines/lanpr/lanpr_chain.c
index dc2986e4eb9..5df0b79fbc4 100644
--- a/source/blender/draw/engines/lanpr/lanpr_chain.c
+++ b/source/blender/draw/engines/lanpr/lanpr_chain.c
@@ -456,6 +456,7 @@ void lanpr_link_point_with_bounding_area_recursive(
if (!root->child) {
LANPR_ChainRegisterEntry* cre = list_append_pointer_static_sized(&root->linked_chains, &rb->render_data_pool, rlc, sizeof(LANPR_ChainRegisterEntry));
cre->rlci = rlci;
+ if(rlci==rlc->chain.first) cre->is_left = 1;
}
else {
LANPR_BoundingArea* ch = root->child;
@@ -568,9 +569,12 @@ void lanpr_connect_chains_image_space(LANPR_RenderBuffer *rb)
rb->chains.last = rb->chains.first = NULL;
while (rlc = BLI_pophead(&swap)) {
+ rlc->item.next=rlc->item.prev=NULL;
BLI_addtail(&rb->chains, rlc);
if(rlc->picked) continue;
+ rlc->picked = 1;
+
occlusion = ((LANPR_RenderLineChainItem*)rlc->chain.first)->occlusion;
rlci = rlc->chain.last;
@@ -591,17 +595,16 @@ void lanpr_connect_chains_image_space(LANPR_RenderBuffer *rb)
dist = new_len;
}
}
- if(dist<0.05f && closest_cre){
+ if(dist<0.01f && closest_cre){
closest_cre->picked = 1;
closest_cre->rlc->picked = 1;
BLI_remlink(&ba->linked_chains,cre);
- if(closest_cre->rlci == closest_cre->rlc->chain.first){
+ if(closest_cre->is_left){
lanpr_connect_two_chains(rb,rlc,closest_cre->rlc,0,0);
- BLI_remlink(&swap,closest_cre->rlc);
}else{
lanpr_connect_two_chains(rb,rlc,closest_cre->rlc,0,1);
- BLI_remlink(&swap,closest_cre->rlc);
}
+ BLI_remlink(&swap,closest_cre->rlc);
}else{
break;
}
@@ -627,17 +630,16 @@ void lanpr_connect_chains_image_space(LANPR_RenderBuffer *rb)
dist = new_len;
}
}
- if(dist<0.05f && closest_cre){
+ if(dist<0.01f && closest_cre){
closest_cre->picked = 1;
closest_cre->rlc->picked = 1;
BLI_remlink(&ba->linked_chains,cre);
- if(closest_cre->rlci == closest_cre->rlc->chain.first){
- BLI_remlink(&swap,closest_cre->rlc);
+ if(closest_cre->is_left){
lanpr_connect_two_chains(rb,rlc,closest_cre->rlc,1,0);
}else{
lanpr_connect_two_chains(rb,rlc,closest_cre->rlc,1,1);
- BLI_remlink(&swap,closest_cre->rlc);
}
+ BLI_remlink(&swap,closest_cre->rlc);
}else{
break;
}
diff --git a/source/blender/draw/engines/lanpr/lanpr_data_types.h b/source/blender/draw/engines/lanpr/lanpr_data_types.h
index d7a32899d40..1b248ce167f 100644
--- a/source/blender/draw/engines/lanpr/lanpr_data_types.h
+++ b/source/blender/draw/engines/lanpr/lanpr_data_types.h
@@ -139,6 +139,7 @@ typedef struct LANPR_ChainRegisterEntry{
LANPR_RenderLineChain* rlc;
LANPR_RenderLineChainItem* rlci;
char picked;
+ char is_left; // left/right mark. Because we revert list in chaining and we need the flag.
} LANPR_ChainRegisterEntry;
#endif
\ No newline at end of file
More information about the Bf-blender-cvs
mailing list