Commit: 788f35a4d5646d4cd3b419efd425822735c21a80
Author: Nick Wu
Date:   Fri May 25 14:33:03 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rB788f35a4d5646d4cd3b419efd425822735c21a80

Vector okay, CEASH EXPECTED!

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

M       release/scripts/startup/bl_ui/properties_scene.py
M       source/blender/draw/CMakeLists.txt
M       source/blender/draw/engines/lanpr/NUL_TNS.h
M       source/blender/draw/engines/lanpr/NUL_TNS_EdgeRendering.c
A       source/blender/draw/engines/lanpr/shaders/lanpr_line_connection.fragment
M       source/blender/draw/engines/lanpr/shaders/lanpr_line_connection.geometry
A       source/blender/draw/engines/lanpr/shaders/lanpr_line_connection.vertex
M       source/blender/makesdna/DNA_lanpr_types.h
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 34ed1486550..02b14dbfac1 100644
--- a/release/scripts/startup/bl_ui/properties_scene.py
+++ b/release/scripts/startup/bl_ui/properties_scene.py
@@ -454,11 +454,34 @@ class SCENE_PT_lanpr(SceneButtonsPanel, PropertyPanel, 
Panel):
     def draw(self, context):
         layout = self.layout
         scene = context.scene
-        layout.prop(scene.lanpr, "enable_post_processing")
-        layout.prop(scene.lanpr, "depth_clamp")
-        layout.prop(scene.lanpr, "depth_strength")
-        layout.prop(scene.lanpr, "normal_clamp")
-        layout.prop(scene.lanpr, "normal_strength")
+        lanpr = scene.lanpr
+        layout.label(text="Global:")
+        layout.prop(lanpr, "enable_post_processing")
+        layout.prop(lanpr, "depth_clamp")
+        layout.prop(lanpr, "depth_strength")
+        layout.prop(lanpr, "normal_clamp")
+        layout.prop(lanpr, "normal_strength")
+        
+        layout.label(text="Taper Settings:")
+        layout.prop(lanpr, "line_thickness")
+        layout.label(text="Taper Settings:")
+        layout.prop(lanpr, "use_same_taper")
+
+        if lanpr.use_same_taper == "DISABLED":
+            split = layout.split()
+            col = split.column()
+            col.label(text="Left:")
+            col.prop(lanpr,"taper_left_distance")
+            col.prop(lanpr,"taper_left_strength")
+            col = split.column()
+            col.label(text="Right:")
+            col.prop(lanpr,"taper_right_distance")
+            col.prop(lanpr,"taper_right_strength")
+        else:
+            layout.prop(lanpr,"taper_left_distance")
+            layout.prop(lanpr,"taper_left_strength")
+            
+
 
 
 class SCENE_PT_custom_props(SceneButtonsPanel, PropertyPanel, Panel):
diff --git a/source/blender/draw/CMakeLists.txt 
b/source/blender/draw/CMakeLists.txt
index a16d8a55670..cdf62149630 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -242,7 +242,9 @@ 
data_to_c_simple(engines/lanpr/shaders/lanpr_atlas_preview.geometry SRC)
 data_to_c_simple(engines/lanpr/shaders/lanpr_atlas_project_clip.fragment SRC)
 data_to_c_simple(engines/lanpr/shaders/lanpr_atlas_project_passthrough.vertex 
SRC)
 data_to_c_simple(engines/lanpr/shaders/lanpr_image_peel.fragment SRC)
+data_to_c_simple(engines/lanpr/shaders/lanpr_line_connection.vertex SRC)
 data_to_c_simple(engines/lanpr/shaders/lanpr_line_connection.geometry SRC)
+data_to_c_simple(engines/lanpr/shaders/lanpr_line_connection.fragment SRC)
 data_to_c_simple(engines/lanpr/shaders/lanpr_snake_edge.fragment SRC)
 data_to_c_simple(engines/lanpr/shaders/lanpr_snake_multichannel.fragment SRC)
 
diff --git a/source/blender/draw/engines/lanpr/NUL_TNS.h 
b/source/blender/draw/engines/lanpr/NUL_TNS.h
index cd1e28c388b..53b3f18f828 100644
--- a/source/blender/draw/engines/lanpr/NUL_TNS.h
+++ b/source/blender/draw/engines/lanpr/NUL_TNS.h
@@ -1,6 +1,15 @@
 #pragma once
 
 #include "NUL_Util.h"
+#include "BLI_mempool.h"
+#include "GPU_framebuffer.h"
+#include "GPU_batch.h"
+#include "GPU_framebuffer.h"
+#include "GPU_shader.h"
+#include "GPU_uniformbuffer.h"
+#include "GPU_viewport.h"
+
+
 
 #define LANPR_ENGINE "BLENDER_LANPR"
 
@@ -11,6 +20,24 @@
 
 
 
+typedef struct LANPR_TextureSample {
+       Link      Item;
+       int       X,Y;
+       float     Z;// for future usage
+} LANPR_TextureSample;
+
+typedef struct LANPR_LineStripPoint {
+       Link     Item;
+       float P[3];
+} LANPR_LineStripPoint;
+
+typedef struct LANPR_LineStrip{
+       Link     Item;
+       ListBase points;
+       int      point_count;
+       float    total_length;
+}LANPR_LineStrip;
+
 typedef struct LANPR_PassList {
        struct DRWPass *depth_pass;
        struct DRWPass *color_pass;
@@ -18,6 +45,7 @@ typedef struct LANPR_PassList {
        struct DRWPass *edge_intermediate;
        struct DRWPass *edge_thinning;
        struct DRWPass *edge_thinning_2;
+       struct DRWPass *snake_pass;
 } LANPR_PassList;
 
 typedef struct LANPR_FramebufferList {
@@ -40,7 +68,8 @@ typedef struct LANPR_PrivateData {
        DRWShadingGroup *edge_detect_shgrp;
        DRWShadingGroup *edge_thinning_shgrp;
        DRWShadingGroup *edge_thinning_shgrp_2;
-
+    DRWShadingGroup *snake_shgrp;
+       
        float normal_clamp;
     float normal_strength;
     float depth_clamp;
@@ -51,6 +80,28 @@ typedef struct LANPR_PrivateData {
 
        int stage;//thinning
 
+       float         *line_result;
+       unsigned char *line_result_8bit;
+       int            width,height;// if not match recreate buffer.
+       void         **sample_table;
+
+       BLI_mempool*  mp_sample;
+       BLI_mempool*  mp_line_strip;
+       BLI_mempool*  mp_line_strip_point;
+       
+       ListBase      pending_samples;
+       ListBase      erased_samples;
+    ListBase      line_strips;
+
+       // drawing
+
+       unsigned        v_buf;
+       unsigned        i_buf;
+       unsigned        l_buf;
+    
+       Gwn_VertFormat   snake_gwn_format;
+       Gwn_Batch*       snake_batch;
+
 } LANPR_PrivateData;
 
 typedef struct LANPR_StorageList {
diff --git a/source/blender/draw/engines/lanpr/NUL_TNS_EdgeRendering.c 
b/source/blender/draw/engines/lanpr/NUL_TNS_EdgeRendering.c
index babeb9cc2ba..98c41e9b63a 100644
--- a/source/blender/draw/engines/lanpr/NUL_TNS_EdgeRendering.c
+++ b/source/blender/draw/engines/lanpr/NUL_TNS_EdgeRendering.c
@@ -1,12 +1,21 @@
 #include "DRW_engine.h"
 #include "DRW_render.h"
 #include "BLI_listbase.h"
+#include "BLI_linklist.h"
 #include "NUL_TNS.h"
 #include "DRW_render.h"
 #include "BKE_object.h"
 #include "DNA_camera_types.h"
 #include "GPU_immediate.h"
 #include "GPU_immediate_util.h"
+#include "GPU_framebuffer.h"
+
+#include "GPU_batch.h"
+#include "GPU_framebuffer.h"
+#include "GPU_shader.h"
+#include "GPU_uniformbuffer.h"
+#include "GPU_viewport.h"
+
 
 #include <math.h>
 
@@ -15,6 +24,9 @@ extern char 
datatoc_gpu_shader_3D_normal_smooth_color_vert_glsl[];
 extern char datatoc_lanpr_snake_multichannel_fragment[];
 extern char datatoc_lanpr_snake_edge_fragment[];
 extern char datatoc_lanpr_image_peel_fragment[];
+extern char datatoc_lanpr_line_connection_vertex[];
+extern char datatoc_lanpr_line_connection_fragment[];
+extern char datatoc_lanpr_line_connection_geometry[];
 
 //==============================================================[ ATLAS / DPIX 
]
 
@@ -30,6 +42,7 @@ typedef struct LANPROneTimeInit{
     GPUShader* multichannel_shader;
        GPUShader* edge_detect_shader;
        GPUShader* edge_thinning_shader;
+       GPUShader* snake_connection_shader;
        void* ved;
 } LANPROneTimeInit;
 
@@ -44,11 +57,14 @@ static void lanpr_engine_init(void *ved){
        //LANPR_ViewLayerData *sldata = EEVEE_view_layer_data_ensure();
        DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
 
+       //if(!stl->g_data) stl->g_data = MEM_callocN(sizeof(*stl->g_data), 
__func__);
+
        const DRWContextState *draw_ctx = DRW_context_state_get();
        View3D *v3d = draw_ctx->v3d;
        RegionView3D *rv3d = draw_ctx->rv3d;
        Object *camera = (rv3d->persp == RV3D_CAMOB) ? v3d->camera : NULL;
 
+
        /* Main Buffer */
        DRW_texture_ensure_fullscreen_2D(&txl->depth, GPU_DEPTH_COMPONENT32F, 
DRW_TEX_FILTER | DRW_TEX_MIPMAP);
        DRW_texture_ensure_fullscreen_2D(&txl->color, GPU_RGBA16F, 
DRW_TEX_FILTER | DRW_TEX_MIPMAP);
@@ -107,6 +123,14 @@ static void lanpr_engine_init(void *ved){
                        datatoc_lanpr_image_peel_fragment,NULL,NULL,NULL);
 
     }
+       if (!OneTime.snake_connection_shader) {
+       OneTime.snake_connection_shader = 
+               GPU_shader_create(
+                       datatoc_lanpr_line_connection_vertex,
+                       datatoc_lanpr_line_connection_fragment,
+                       datatoc_lanpr_line_connection_geometry,
+                       NULL,NULL);
+    }
 
 }
 static void lanpr_engine_free(void){
@@ -129,6 +153,14 @@ static void lanpr_engine_free(void){
        DRW_texture_free(txl->color);
        DRW_texture_free(txl->normal);
        DRW_texture_free(txl->edge_intermediate);
+
+       BLI_mempool_destroy(stl->g_data->mp_line_strip);
+       BLI_mempool_destroy(stl->g_data->mp_line_strip_point);
+       BLI_mempool_destroy(stl->g_data->mp_sample);
+
+       MEM_freeN(stl->g_data->line_result_8bit);
+       MEM_freeN(stl->g_data->line_result);
+       MEM_freeN(stl->g_data);
 }
 
 static void lanpr_cache_init(void *vedata){
@@ -140,7 +172,10 @@ static void lanpr_cache_init(void *vedata){
 
        if (!stl->g_data) {
                /* Alloc transient pointers */
-               stl->g_data = MEM_mallocN(sizeof(*stl->g_data), __func__);
+               stl->g_data = MEM_callocN(sizeof(*stl->g_data), __func__);
+               stl->g_data->mp_sample = 
BLI_mempool_create(sizeof(LANPR_TextureSample), 0, 512, BLI_MEMPOOL_NOP);
+               stl->g_data->mp_line_strip = 
BLI_mempool_create(sizeof(LANPR_LineStrip), 0, 512, BLI_MEMPOOL_NOP);
+               stl->g_data->mp_line_strip_point = 
BLI_mempool_create(sizeof(LANPR_LineStripPoint), 0, 1024, BLI_MEMPOOL_NOP);
        }
 
 
@@ -202,6 +237,260 @@ static void lanpr_cache_finish(void *vedata){
 
 }
 
+int _TNS_ColOffsets[] = { -1,0,1,1,1,0,-1,-1 };
+int _TNS_RowOffsets[] = { -1,-1,-1,0,1,1,1,0 };
+
+int _TNS_Deviates[8][8] = {
+       { 0,1,2,3,4,3,2,1 },
+       { 1,0,1,2,3,4,3,2 },
+       { 2,1,0,1,2,3,4,3 },
+       { 3,2,1,0,1,2,3,4 },
+       { 4,3,2,1,0,1,2,3 },
+       { 3,4,3,2,1,0,1,2 },
+       { 2,3,4,3,2,1,0,1 },
+       { 1,2,3,4,3,2,1,0 }
+};
+
+#define TNS_CLAMP_TEXTURE_W(t,Col)\
+       {if (Col >= t->width) Col = t->width - 1; if (Col < 0) Col = 0;}
+
+#define TNS_CLAMP_TEXTURE_H(t,Row)\
+       {if (Row >= t->height) Row = t->height - 1;if (Row < 0) Row = 0;}
+
+#define TNS_CLAMP_TEXTURE_CONTINUE(t,Col,Row)\
+       {if (Col >= t->width) continue; if (Col < 0) continue;\
+     if (Row >= t->height) continue; if (Row < 0)continue; }
+
+
+static LANPR_TextureSample* lanpr_any_uncovered_samples(LANPR_PrivateData* pd){
+       return BLI_pophead(&pd->pending_samples);
+}
+
+int lanpr_direction_deviate(int From, int To) {
+       return _TNS_Deviates[From - 1][To - 1];
+}
+
+int lanpr_detect_direction(LANPR_PrivateData* pd, int Col, int Row, int 
LastDirection) {
+       int Deviate[9] = {100};
+       int MinDeviate = 0;
+       int i;
+       LANPR_TextureSample* ts;
+
+       for (i = 0; i < 8; i++) {
+               TNS_CLAMP_TEXTURE_CONTINUE(pd, (_TNS_ColOffsets[i] + Col), 
(_TNS_RowOffsets[i] + Row));
+               if (ts = pd->sample_table[(_TNS_ColOffsets[i] + Col) + 
(_TNS_RowOffsets[i] + Row) * pd->width]) {
+                       if (!LastDirection) return i + 1;
+                       Deviate[i+1] = lanpr_direction_deviate(i, 
LastDirection);
+                       if (!MinDeviate || Deviate[MinDeviate] > Deviate[i + 
1]) MinDeviate = i +

@@ 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