[Bf-blender-cvs] [727104839d8] soc-2018-npr: Added support for Freestyle edge mark.

Nick Wu noreply at git.blender.org
Wed Jun 13 11:55:02 CEST 2018


Commit: 727104839d8bf0fe2a77dde30b7b0333e2e2ceb7
Author: Nick Wu
Date:   Wed Jun 13 17:54:04 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rB727104839d8bf0fe2a77dde30b7b0333e2e2ceb7

Added support for Freestyle edge mark.

===================================================================

M	source/blender/draw/engines/lanpr/lanpr_all.h
M	source/blender/draw/engines/lanpr/lanpr_dpix.c
M	source/blender/draw/engines/lanpr/lanpr_engine.c
M	source/blender/draw/engines/lanpr/shaders/lanpr_atlas_project_clip.fragment

===================================================================

diff --git a/source/blender/draw/engines/lanpr/lanpr_all.h b/source/blender/draw/engines/lanpr/lanpr_all.h
index 379c6e193b8..042abfa4008 100644
--- a/source/blender/draw/engines/lanpr/lanpr_all.h
+++ b/source/blender/draw/engines/lanpr/lanpr_all.h
@@ -107,7 +107,7 @@ typedef struct LANPR_TextureList {
 	struct GPUTexture *dpix_in_pr;/* point R */
 	struct GPUTexture *dpix_in_nl;/* normal L */
 	struct GPUTexture *dpix_in_nr;/* normal R */
-	struct GPUTexture *dpix_in_edge_mask;/* RGBA, R:Material, GBA:Reserved for future usage */
+	struct GPUTexture *dpix_in_edge_mask;/* RGBA, R:Material, G: Freestyle Edge Mark, BA:Reserved for future usage */
 	
 	struct GPUTexture *dpix_out_pl;
 	struct GPUTexture *dpix_out_pr;
diff --git a/source/blender/draw/engines/lanpr/lanpr_dpix.c b/source/blender/draw/engines/lanpr/lanpr_dpix.c
index 76121402ac9..8f8ddaa3434 100644
--- a/source/blender/draw/engines/lanpr/lanpr_dpix.c
+++ b/source/blender/draw/engines/lanpr/lanpr_dpix.c
@@ -11,6 +11,8 @@
 #include "GPU_immediate_util.h"
 #include "GPU_framebuffer.h"
 #include "DNA_lanpr_types.h"
+#include "DNA_meshdata_types.h"
+#include "BKE_customdata.h"
 #include "GPU_draw.h"
 
 #include "GPU_batch.h"
@@ -137,6 +139,9 @@ int lanpr_feed_atlas_data_obj(void* vedata,
 	struct BMVert *v1,*v2;
 	struct BMEdge *e;
 	struct BMLoop *l1,*l2;
+	//struct MEdge* ome;
+	FreestyleEdge *fe;
+	int CanFindFreestyle=0;
     int vert_count = me->totvert, edge_count = me->totedge, face_count = me->totface;
 	int i,idx;
 
@@ -145,6 +150,10 @@ int lanpr_feed_atlas_data_obj(void* vedata,
 			            &((struct BMeshCreateParams){.use_toolflags = true,}));
 	BM_mesh_bm_from_me(bm, me, &((struct BMeshFromMeshParams){.calc_face_normal = true,}));
 	BM_mesh_elem_table_ensure(bm,BM_VERT|BM_EDGE|BM_FACE);
+
+	if (CustomData_has_layer(&bm->edata, CD_FREESTYLE_EDGE)) {
+		CanFindFreestyle=1;
+	}
 	
 	for(i=0; i<edge_count; i++){
 		f1=0;
@@ -169,6 +178,11 @@ int lanpr_feed_atlas_data_obj(void* vedata,
 		AtlasPointsR[idx + 2] = v2->co[2];
 		AtlasPointsR[idx + 3] = 1;
 
+		if(CanFindFreestyle){
+			fe = CustomData_bmesh_get(&bm->edata, e->head.data, CD_FREESTYLE_EDGE);
+			if(fe->flag & FREESTYLE_EDGE_MARK) AtlasEdgeMask[idx + 1] = 1; // channel G
+		}
+
 		if(f1){
 			AtlasFaceNormalL[idx + 0] = f1->no[0];
 			AtlasFaceNormalL[idx + 1] = f1->no[1];
diff --git a/source/blender/draw/engines/lanpr/lanpr_engine.c b/source/blender/draw/engines/lanpr/lanpr_engine.c
index bfb1a49259c..66619067d9b 100644
--- a/source/blender/draw/engines/lanpr/lanpr_engine.c
+++ b/source/blender/draw/engines/lanpr/lanpr_engine.c
@@ -257,7 +257,8 @@ static void lanpr_cache_init(void *vedata){
 		DRW_shgroup_uniform_float(stl->g_data->dpix_transform_shgrp, "crease_threshold", &lanpr->crease_threshold, 1);
 		DRW_shgroup_uniform_int(stl->g_data->dpix_transform_shgrp, "enable_crease", &lanpr->enable_crease, 1);
         DRW_shgroup_uniform_int(stl->g_data->dpix_transform_shgrp, "enable_material", &lanpr->enable_material_seperate, 1);
-		
+		DRW_shgroup_uniform_int(stl->g_data->dpix_transform_shgrp, "enable_edge_mark", &lanpr->enable_edge_mark, 1);
+
 		psl->dpix_preview_pass = DRW_pass_create("DPIX Preview", DRW_STATE_WRITE_COLOR|DRW_STATE_WRITE_DEPTH|DRW_STATE_DEPTH_LESS_EQUAL);
 		stl->g_data->dpix_preview_shgrp = DRW_shgroup_create(OneTime.dpix_preview_shader, psl->dpix_preview_pass);
 		DRW_shgroup_uniform_texture_ref(stl->g_data->dpix_preview_shgrp, "vert0_tex", &txl->dpix_out_pl);
diff --git a/source/blender/draw/engines/lanpr/shaders/lanpr_atlas_project_clip.fragment b/source/blender/draw/engines/lanpr/shaders/lanpr_atlas_project_clip.fragment
index 31f92dfa6a4..314a3bda6b5 100644
--- a/source/blender/draw/engines/lanpr/shaders/lanpr_atlas_project_clip.fragment
+++ b/source/blender/draw/engines/lanpr/shaders/lanpr_atlas_project_clip.fragment
@@ -7,6 +7,7 @@ uniform mat4 ProjectionMatrixInverse;
 
 uniform int enable_crease;    // we have all edge mask data in textures, so this is just a switch.
 uniform int enable_material;  // so this prevents scene reload.
+uniform int enable_edge_mark;
 
 uniform float crease_threshold;
 
@@ -351,6 +352,7 @@ bool testProfileEdge( ivec2 texcoord, vec3 world_position )
            (dot0 <= 0.0 && dot1 >= 0.0) ||
            ((enable_crease>0) && (dot2<crease_threshold)) ||
            ((enable_material>0) && (edge_mask.r>0)) ||
+           ((enable_edge_mark>0) && (edge_mask.g>0)) ||
            false;
 }



More information about the Bf-blender-cvs mailing list