[Bf-blender-cvs] [9f8fbefc154] soc-2018-npr: Added DPIX/Snake switch function. SceneLANPR out of sync with RNA, wierd
Nick Wu
noreply at git.blender.org
Tue Jun 5 07:08:42 CEST 2018
Commit: 9f8fbefc1548061fe275591768488aab13a0f590
Author: Nick Wu
Date: Tue Jun 5 11:36:22 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rB9f8fbefc1548061fe275591768488aab13a0f590
Added DPIX/Snake switch function. SceneLANPR out of sync with RNA, wierd
===================================================================
M release/scripts/startup/bl_ui/properties_scene.py
M source/blender/draw/engines/lanpr/NUL_TNS.h
M source/blender/draw/engines/lanpr/NUL_TNS_EdgeRendering.c
M source/blender/draw/engines/lanpr/shaders/lanpr_atlas_preview.fragment
M source/blender/draw/engines/lanpr/shaders/lanpr_atlas_preview.geometry
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 07b1b82fd44..de618a4a024 100644
--- a/release/scripts/startup/bl_ui/properties_scene.py
+++ b/release/scripts/startup/bl_ui/properties_scene.py
@@ -490,8 +490,11 @@ class SCENE_PT_lanpr(SceneButtonsPanel, PropertyPanel, Panel):
scene = context.scene
lanpr = scene.lanpr
+ layout.prop(lanpr, "master_mode")
+
if lanpr.master_mode == "DPIX":
layout.label(text="DPIX:")
+ layout.prop(lanpr, "reloaded")
split = layout.split()
col = split.column()
col.prop(lanpr, "background_color")
diff --git a/source/blender/draw/engines/lanpr/NUL_TNS.h b/source/blender/draw/engines/lanpr/NUL_TNS.h
index 7d76bb4045e..f5d6ba9b5eb 100644
--- a/source/blender/draw/engines/lanpr/NUL_TNS.h
+++ b/source/blender/draw/engines/lanpr/NUL_TNS.h
@@ -133,6 +133,7 @@ typedef struct LANPR_PrivateData {
int dpix_is_perspective;
float dpix_viewport[4];
int dpix_buffer_width;
+ float dpix_depth_offset;
// drawing
diff --git a/source/blender/draw/engines/lanpr/NUL_TNS_EdgeRendering.c b/source/blender/draw/engines/lanpr/NUL_TNS_EdgeRendering.c
index 5da835be26a..957b6165b18 100644
--- a/source/blender/draw/engines/lanpr/NUL_TNS_EdgeRendering.c
+++ b/source/blender/draw/engines/lanpr/NUL_TNS_EdgeRendering.c
@@ -83,17 +83,21 @@ void lanpr_init_atlas_inputs(void *ved){
View3D *v3d = draw_ctx->v3d;
RegionView3D *rv3d = draw_ctx->rv3d;
Object *camera = (rv3d->persp == RV3D_CAMOB) ? v3d->camera : NULL;
+ SceneLANPR* lanpr=&draw_ctx->scene->lanpr;
+ if(lanpr->reloaded){
+ DRW_texture_ensure_2D(&txl->dpix_in_pl, TNS_DPIX_TEXTURE_SIZE, TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
+ 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_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);
+ }
- /* Main Buffer */
- DRW_texture_ensure_2D(&txl->dpix_in_pl, TNS_DPIX_TEXTURE_SIZE, TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
- 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_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);
+ /* Main Buffer */
GPU_framebuffer_ensure_config(&fbl->dpix_transform, {
GPU_ATTACHMENT_LEAVE,
@@ -160,10 +164,10 @@ int lanpr_feed_atlas_data_obj(void* vedata,
Object* ob, int BeginIndex) {
LANPR_StorageList *stl = ((LANPR_Data *)vedata)->stl;
- if (!DRW_object_is_renderable(ob)) return;
+ if (!DRW_object_is_renderable(ob)) return BeginIndex;
const DRWContextState *draw_ctx = DRW_context_state_get();
- if (ob == draw_ctx->object_edit) return;
- if(ob->type != OB_MESH) return;
+ if (ob == draw_ctx->object_edit) return BeginIndex;
+ if(ob->type != OB_MESH) return BeginIndex;
Mesh* me = ob->data;
BMesh* bm;
@@ -268,12 +272,12 @@ int lanpr_feed_atlas_data_obj(void* vedata,
}
void lanpr_dpix_index_to_coord(int index, float* x,float* y){
- (*x) = tnsLinearItp(-1,1,(float)(index % TNS_DPIX_TEXTURE_SIZE)/(float)TNS_DPIX_TEXTURE_SIZE);
- (*y) = tnsLinearItp(-1,1,(float)(index / TNS_DPIX_TEXTURE_SIZE)/(float)TNS_DPIX_TEXTURE_SIZE);
+ (*x) = tnsLinearItp(-1,1,(float)(index % TNS_DPIX_TEXTURE_SIZE+0.5)/(float)TNS_DPIX_TEXTURE_SIZE);
+ (*y) = tnsLinearItp(-1,1,(float)(index / TNS_DPIX_TEXTURE_SIZE+0.5)/(float)TNS_DPIX_TEXTURE_SIZE);
}
void lanpr_dpix_index_to_coord_absolute(int index, float* x,float* y){
- (*x) = (float)(index % TNS_DPIX_TEXTURE_SIZE);
- (*y) = (float)(index / TNS_DPIX_TEXTURE_SIZE);
+ (*x) = (float)(index % TNS_DPIX_TEXTURE_SIZE)+0.5;
+ (*y) = (float)(index / TNS_DPIX_TEXTURE_SIZE)+0.5;
}
void lanpr_feed_atlas_trigger_preview_obj(void* vedata, Object* ob, int BeginIndex) {
@@ -281,7 +285,7 @@ void lanpr_feed_atlas_trigger_preview_obj(void* vedata, Object* ob, int BeginInd
LANPR_PrivateData* pd = stl->g_data;
Mesh* me = ob->data;
if (ob->type != OB_MESH) return;
- int vert_count = me->totedge;
+ int edge_count = me->totedge;
int i;
float co[2];
@@ -299,10 +303,10 @@ void lanpr_feed_atlas_trigger_preview_obj(void* vedata, Object* ob, int BeginInd
Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
Gwn_VertBuf *vbo2 = GWN_vertbuf_create_with_format(&format2);
- GWN_vertbuf_data_alloc(vbo, vert_count);
- GWN_vertbuf_data_alloc(vbo2, vert_count);
+ GWN_vertbuf_data_alloc(vbo, edge_count);
+ GWN_vertbuf_data_alloc(vbo2, edge_count);
- for(i=0;i<vert_count;i++){
+ for(i=0;i<edge_count;i++){
lanpr_dpix_index_to_coord(i+BeginIndex,&co[0],&co[1]);
GWN_vertbuf_attr_set(vbo, attr_id.pos, i, co);
lanpr_dpix_index_to_coord_absolute(i+BeginIndex,&co[0],&co[1]);
@@ -529,6 +533,33 @@ static void lanpr_engine_init(void *ved){
View3D *v3d = draw_ctx->v3d;
RegionView3D *rv3d = draw_ctx->rv3d;
Object *camera = (rv3d->persp == RV3D_CAMOB) ? v3d->camera : NULL;
+ SceneLANPR* lanpr = &draw_ctx->scene->lanpr;
+
+ if (!lanpr->InitComplete) {
+ lanpr->depth_clamp = 0.01;
+ lanpr->depth_strength = 800;
+ lanpr->normal_clamp = 2;
+ lanpr->normal_strength = 10;
+ lanpr->line_thickness = 2;
+ lanpr->taper_left_distance = 20;
+ lanpr->taper_left_strength = 0.9;
+ lanpr->taper_right_distance = 20;
+ lanpr->taper_right_strength = 0.9;
+
+ lanpr->line_color[0] = 0.22;
+ lanpr->line_color[1] = 0.29;
+ lanpr->line_color[2] = 0.53;
+ lanpr->line_color[3] = 1;
+
+ lanpr->background_color[0] = 0.59;
+ lanpr->background_color[1] = 0.90;
+ lanpr->background_color[2] = 0.51;
+ lanpr->background_color[3] = 1;
+
+ lanpr->reloaded = 1;
+
+ lanpr->InitComplete=1;
+ }
/* Main Buffer */
@@ -697,13 +728,14 @@ static void lanpr_cache_init(void *vedata){
View3D *v3d = draw_ctx->v3d;
SceneLANPR *lanpr = &draw_ctx->scene->lanpr;
- psl->dpix_preview_pass = DRW_pass_create("DPIX Preview", DRW_STATE_WRITE_COLOR);
+ 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);
DRW_shgroup_uniform_texture_ref(stl->g_data->dpix_preview_shgrp, "vert1_tex", &txl->dpix_out_pr);
DRW_shgroup_uniform_vec4(stl->g_data->dpix_preview_shgrp, "viewport", stl->g_data->dpix_viewport, 4);
- DRW_shgroup_uniform_vec4(stl->g_data->dpix_preview_shgrp, "color", &lanpr->line_color, 4);
-
+ DRW_shgroup_uniform_vec4(stl->g_data->dpix_preview_shgrp, "color", lanpr->line_color, 4);
+ DRW_shgroup_uniform_float(stl->g_data->dpix_preview_shgrp, "depth_offset", &stl->g_data->dpix_depth_offset, 1);
+
pd->begin_index = 0;
int tsize = sizeof(float) * 4 * TNS_DPIX_TEXTURE_SIZE*TNS_DPIX_TEXTURE_SIZE;
if (!pd->atlas_pl) {
@@ -712,22 +744,26 @@ static void lanpr_cache_init(void *vedata){
pd->atlas_nl = MEM_callocN(tsize, "atlas_normal_l");
pd->atlas_nr = MEM_callocN(tsize, "atlas_normal_l");
}
- memset(pd->atlas_pl, 0, tsize);
- memset(pd->atlas_pr, 0, tsize);
- memset(pd->atlas_nl, 0, tsize);
- memset(pd->atlas_nr, 0, tsize);
+ if(lanpr->reloaded){
+ memset(pd->atlas_pl, 0, tsize);
+ memset(pd->atlas_pr, 0, tsize);
+ memset(pd->atlas_nl, 0, tsize);
+ memset(pd->atlas_nr, 0, tsize);
+ }
}
static void lanpr_cache_populate(void *vedata, Object *ob){
LANPR_StorageList *stl = ((LANPR_Data *)vedata)->stl;
LANPR_PrivateData* pd = stl->g_data;
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ View3D *v3d = draw_ctx->v3d;
+ SceneLANPR *lanpr = &draw_ctx->scene->lanpr;
if (!DRW_object_is_renderable(ob)) {
return;
}
- const DRWContextState *draw_ctx = DRW_context_state_get();
if (ob == draw_ctx->object_edit) {
return;
}
@@ -737,28 +773,34 @@ static void lanpr_cache_populate(void *vedata, Object *ob){
DRW_shgroup_call_object_add(stl->g_data->multipass_shgrp, geom, ob);
}
- int idx = pd->begin_index;
-
- pd->begin_index = lanpr_feed_atlas_data_obj(vedata,pd->atlas_pl,pd->atlas_pr,pd->atlas_nl,pd->atlas_nr,ob,idx);
-
- lanpr_feed_atlas_trigger_preview_obj(vedata,ob,idx);
+ if(lanpr->reloaded){
+ int idx = pd->begin_index;
+ pd->begin_index = lanpr_feed_atlas_data_obj(vedata,pd->atlas_pl,pd->atlas_pr,pd->atlas_nl,pd->atlas_nr,ob,idx);
+ lanpr_feed_atlas_trigger_preview_obj(vedata,ob,idx);
+ }
}
static void lanpr_cache_finish(void *vedata){
LANPR_StorageList *stl = ((LANPR_Data *)vedata)->stl;
LANPR_PrivateData* pd = stl->g_data;
LANPR_TextureList *txl = ((LANPR_Data *)vedata)->txl;
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ View3D *v3d = draw_ctx->v3d;
+ SceneLANPR *lanpr = &draw_ctx->scene->lanpr;
- GPU_texture_update(txl->dpix_in_pl,pd->atlas_pl);
- 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);
-
- MEM_freeN(pd->atlas_pl);
- MEM_freeN(pd->atlas_pr);
- MEM_freeN(pd->atlas_nl);
- MEM_freeN(pd->atlas_nr);
- pd->atlas_pl = 0;
+ if(lanpr->reloaded){
+ GPU_texture_update(txl->dpix_in_pl,pd->atlas_pl);
+ GPU_texture_update(txl->d
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list