Commit: 2076721e71a8efb8efff52b04646a91c345c45ea
Author: Nick Wu
Date:   Wed Jun 13 17:27:17 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rB2076721e71a8efb8efff52b04646a91c345c45ea

Seam and Material lines can be ena/disabled in  dpix. Also added UI.

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

M       release/scripts/startup/bl_ui/properties_scene.py
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
M       source/blender/makesdna/DNA_scene_types.h
M       source/blender/makesrna/intern/rna_scene.c

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

diff --git a/release/scripts/startup/bl_ui/properties_scene.py 
b/release/scripts/startup/bl_ui/properties_scene.py
index a623cf3fc42..bd12e26b4c9 100644
--- a/release/scripts/startup/bl_ui/properties_scene.py
+++ b/release/scripts/startup/bl_ui/properties_scene.py
@@ -502,13 +502,27 @@ class SCENE_PT_lanpr(SceneButtonsPanel, PropertyPanel, 
Panel):
 
             layout.label(text="Effect Settings:")
             layout.prop(lanpr, "line_thickness")
-            split = layout.split()
-            col = split.column()
-            col.prop(lanpr, "depth_width_influence")
-            col.prop(lanpr, "depth_alpha_influence")
-            col = split.column()
-            col.prop(lanpr, "depth_width_curve")
-            col.prop(lanpr, "depth_alpha_curve")
+
+            if lanpr.line_thickness > 0.01:
+                col = layout.column()
+                col.label(text="Enable:")
+                row = col.row(align=True)
+                row.prop(lanpr, "enable_crease", text="Crease", toggle=True)
+                row.prop(lanpr, "enable_edge_mark", text="Mark", toggle=True)
+                row.prop(lanpr, "enable_material_seperate", text="Material", 
toggle=True)
+                row.prop(lanpr, "enable_intersection", text="Intersection", 
toggle=True)
+
+                layout.label(text="ONLY Crease and Material effective")
+
+                layout.prop(lanpr, "crease_threshold")
+
+                split = layout.split()
+                col = split.column()
+                col.prop(lanpr, "depth_width_influence")
+                col.prop(lanpr, "depth_alpha_influence")
+                col = split.column()
+                col.prop(lanpr, "depth_width_curve")
+                col.prop(lanpr, "depth_alpha_curve")
             
         else:
             layout.label(text="Snake:")
@@ -522,6 +536,14 @@ class SCENE_PT_lanpr(SceneButtonsPanel, PropertyPanel, 
Panel):
             layout.prop(lanpr, "normal_clamp")
             layout.prop(lanpr, "normal_strength")
 
+            col = layout.column()
+            col.label(text="Enable:")
+            row = col.row(align=True)
+            row.prop(lanpr, "enable_edge_mark", text="Mark", toggle=True)
+            row.prop(lanpr, "enable_material_seperate", text="Material", 
toggle=True)
+
+            layout.label(text="ONLY Crease and Material effective")
+
             if lanpr.enable_vector_trace == "ENABLED":
 
                 split = layout.split()
diff --git a/source/blender/draw/engines/lanpr/lanpr_all.h 
b/source/blender/draw/engines/lanpr/lanpr_all.h
index af0a744749d..379c6e193b8 100644
--- a/source/blender/draw/engines/lanpr/lanpr_all.h
+++ b/source/blender/draw/engines/lanpr/lanpr_all.h
@@ -107,6 +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_out_pl;
        struct GPUTexture *dpix_out_pr;
@@ -154,7 +155,8 @@ typedef struct LANPR_PrivateData {
        void*         atlas_pl;
        void*         atlas_pr;
        void*         atlas_nl;
-       void*         atlas_nr; 
+       void*         atlas_nr;
+       void*         atlas_edge_mask;
 
        int           begin_index;
 
@@ -301,6 +303,7 @@ void lanpr_destroy_atlas(void *ved);
 int lanpr_feed_atlas_data_obj(void* vedata,
        float* AtlasPointsL, float* AtlasPointsR,
        float* AtlasFaceNormalL, float* AtlasFaceNormalR,
+       float* AtlasEdgeMask,
        Object* ob, int BeginIndex);
 int lanpr_feed_atlas_trigger_preview_obj(void* vedata, Object* ob, int 
BeginIndex);
 
diff --git a/source/blender/draw/engines/lanpr/lanpr_dpix.c 
b/source/blender/draw/engines/lanpr/lanpr_dpix.c
index 3f06f7a08dd..76121402ac9 100644
--- a/source/blender/draw/engines/lanpr/lanpr_dpix.c
+++ b/source/blender/draw/engines/lanpr/lanpr_dpix.c
@@ -50,6 +50,7 @@ void lanpr_init_atlas_inputs(void *ved){
                DRW_texture_ensure_2D(&txl->dpix_in_pr, TNS_DPIX_TEXTURE_SIZE, 
TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
                DRW_texture_ensure_2D(&txl->dpix_in_nl, TNS_DPIX_TEXTURE_SIZE, 
TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
                DRW_texture_ensure_2D(&txl->dpix_in_nr, TNS_DPIX_TEXTURE_SIZE, 
TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
+               DRW_texture_ensure_2D(&txl->dpix_in_edge_mask, 
TNS_DPIX_TEXTURE_SIZE, TNS_DPIX_TEXTURE_SIZE, GPU_RGBA8, 0);
                DRW_texture_ensure_2D(&txl->dpix_out_pl, TNS_DPIX_TEXTURE_SIZE, 
TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
                DRW_texture_ensure_2D(&txl->dpix_out_pr, TNS_DPIX_TEXTURE_SIZE, 
TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
                DRW_texture_ensure_2D(&txl->dpix_out_length, 
TNS_DPIX_TEXTURE_SIZE, TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
@@ -113,6 +114,7 @@ void lanpr_destroy_atlas(void *ved){
        DRW_texture_free(txl->dpix_in_pr);
        DRW_texture_free(txl->dpix_in_nl);
        DRW_texture_free(txl->dpix_in_nr);
+       DRW_texture_free(txl->dpix_in_edge_mask);
        DRW_texture_free(txl->dpix_out_pl);
        DRW_texture_free(txl->dpix_out_pr);
 }
@@ -120,6 +122,7 @@ void lanpr_destroy_atlas(void *ved){
 int lanpr_feed_atlas_data_obj(void* vedata,
        float* AtlasPointsL, float* AtlasPointsR,
        float* AtlasFaceNormalL, float* AtlasFaceNormalR,
+       float* AtlasEdgeMask,
        Object* ob, int BeginIndex) {
        LANPR_StorageList *stl = ((LANPR_Data *)vedata)->stl;
 
@@ -183,6 +186,9 @@ int lanpr_feed_atlas_data_obj(void* vedata,
                        AtlasFaceNormalR[idx + 1] = f2->no[1];
                        AtlasFaceNormalR[idx + 2] = f2->no[2];
                        AtlasFaceNormalR[idx + 3] = 1;
+
+                       if(f2->mat_nr!=f1->mat_nr) AtlasEdgeMask[idx] = 1; // 
channel R
+
                }else{
                        AtlasFaceNormalR[idx + 0] = 0;
                        AtlasFaceNormalR[idx + 1] = 0;
@@ -282,20 +288,12 @@ void lanpr_dpix_draw_scene(LANPR_TextureList* txl, 
LANPR_FramebufferList * fbl,
                GPU_framebuffer_bind(fbl->dpix_transform);
                DRW_draw_pass(psl->dpix_transform_pass);
 
-               //GPU_framebuffer_bind(fbl->edge_intermediate);
-               //DRW_draw_pass(psl->color_pass);// use depth
-
-        glEnable(GL_MULTISAMPLE);
-
                GPU_framebuffer_bind(fbl->dpix_preview);
                GPUFrameBufferBits clear_bits = GPU_COLOR_BIT;
                GPU_framebuffer_clear(fbl->dpix_preview, clear_bits, 
lanpr->background_color, clear_depth, clear_stencil);
                DRW_draw_pass(psl->dpix_preview_pass);
 
-               glDisable(GL_MULTISAMPLE);
-
                GPU_framebuffer_bind(dfbl->default_fb);
                GPU_framebuffer_clear(dfbl->default_fb, clear_bits, 
lanpr->background_color, clear_depth, clear_stencil);
                DRW_multisamples_resolve(txl->depth,txl->color);  
-               //DRW_transform_to_display(txl->color);
 }
diff --git a/source/blender/draw/engines/lanpr/lanpr_engine.c 
b/source/blender/draw/engines/lanpr/lanpr_engine.c
index 9f6f9f32931..bfb1a49259c 100644
--- a/source/blender/draw/engines/lanpr/lanpr_engine.c
+++ b/source/blender/draw/engines/lanpr/lanpr_engine.c
@@ -249,11 +249,15 @@ static void lanpr_cache_init(void *vedata){
                
DRW_shgroup_uniform_texture_ref(stl->g_data->dpix_transform_shgrp, "vert1_tex", 
&txl->dpix_in_pr);
                
DRW_shgroup_uniform_texture_ref(stl->g_data->dpix_transform_shgrp, 
"face_normal0_tex", &txl->dpix_in_nl);
                
DRW_shgroup_uniform_texture_ref(stl->g_data->dpix_transform_shgrp, 
"face_normal1_tex", &txl->dpix_in_nr);
+               
DRW_shgroup_uniform_texture_ref(stl->g_data->dpix_transform_shgrp, 
"edge_mask_tex", &txl->dpix_in_edge_mask);
                DRW_shgroup_uniform_int(stl->g_data->dpix_transform_shgrp, 
"sample_step", &stl->g_data->dpix_sample_step, 1);
                DRW_shgroup_uniform_int(stl->g_data->dpix_transform_shgrp, 
"is_perspective", &stl->g_data->dpix_is_perspective, 1);
                DRW_shgroup_uniform_vec4(stl->g_data->dpix_transform_shgrp, 
"viewport", stl->g_data->dpix_viewport, 1);
                DRW_shgroup_uniform_int(stl->g_data->dpix_transform_shgrp, 
"buffer_width", &stl->g_data->dpix_buffer_width, 1);
-
+               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);
+               
                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);
@@ -272,13 +276,14 @@ static void lanpr_cache_init(void *vedata){
                DRW_shgroup_uniform_float(stl->g_data->dpix_preview_shgrp, 
"zFar", &stl->g_data->dpix_zfar, 1);
 
                pd->begin_index = 0;
-               int tsize = sizeof(float) * 4 * 
TNS_DPIX_TEXTURE_SIZE*TNS_DPIX_TEXTURE_SIZE;
+               int fsize = sizeof(float) * 4 * 
TNS_DPIX_TEXTURE_SIZE*TNS_DPIX_TEXTURE_SIZE;
 
                if (lanpr->reloaded) {
-                       pd->atlas_pl = MEM_callocN(tsize, "atlas_point_l");
-                       pd->atlas_pr = MEM_callocN(tsize, "atlas_point_r");
-                       pd->atlas_nl = MEM_callocN(tsize, "atlas_normal_l");
-                       pd->atlas_nr = MEM_callocN(tsize, "atlas_normal_l");
+                       pd->atlas_pl = MEM_callocN(fsize, "atlas_point_l");
+                       pd->atlas_pr = MEM_callocN(fsize, "atlas_point_r");
+                       pd->atlas_nl = MEM_callocN(fsize, "atlas_normal_l");
+                       pd->atlas_nr = MEM_callocN(fsize, "atlas_normal_l");
+                       pd->atlas_edge_mask = MEM_callocN(fsize, 
"atlas_edge_mask"); // should always be float
 
                        pd->dpix_batch_list.first = pd->dpix_batch_list.last = 
0;
                        BLI_mempool_clear(pd->mp_batch_list);
@@ -309,7 +314,7 @@ static void lanpr_cache_populate(void *vedata, Object *ob){
        if(lanpr->master_mode == LANPR_MASTER_MODE_DPIX){
                int idx = pd->begin_index;
                if(lanpr->reloaded){
-                       pd->begin_index = 
lanpr_feed_atlas_data_obj(vedata,pd->atlas_pl,pd->atlas_pr,pd->atlas_nl,pd->atlas_nr,ob,idx);
+                       pd->begin_index = 
lanpr_feed_atlas_data_obj(vedata,pd->atlas_pl,pd->atlas_pr,pd->atlas_nl,pd->atlas_nr,pd->atlas_edge_mask,ob,idx);
                        lanpr_feed_atlas_trigger_preview_obj(vedata, ob, idx);
                }
 
@@ -335,11 +340,13 @@ static void lanpr_cache_finish(void *vedata){
                GPU_texture_update(txl->dpix_in_pr,pd->atlas_pr);
                GPU_texture_update(txl->dpix_in_nl,pd->atlas_nl);
                GPU_texture_update(txl->dpix_in_nr,pd->atlas_nr);
+               GPU_texture_update(txl->dpix_in_edge_mask,pd->a

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to