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;
 }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to