[Bf-blender-cvs] [788f35a4d56] soc-2018-npr: Vector okay, CEASH EXPECTED!

Nick Wu noreply at git.blender.org
Fri May 25 08:33:26 CEST 2018


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



More information about the Bf-blender-cvs mailing list