[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