Commit: 30947f220847f1047bad9961ee70b11a96f31a14
Author: Nick Wu
Date:   Thu Jun 7 18:56:17 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rB30947f220847f1047bad9961ee70b11a96f31a14

Now use one-time scene loading. Line/Polygon smooth added.

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

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/lanpr_snake.c

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

diff --git a/source/blender/draw/engines/lanpr/lanpr_all.h 
b/source/blender/draw/engines/lanpr/lanpr_all.h
index 2a05dcfdac5..8e7acae20c6 100644
--- a/source/blender/draw/engines/lanpr/lanpr_all.h
+++ b/source/blender/draw/engines/lanpr/lanpr_all.h
@@ -145,6 +145,7 @@ typedef struct LANPR_PrivateData {
        BLI_mempool*  mp_sample;
        BLI_mempool*  mp_line_strip;
        BLI_mempool*  mp_line_strip_point;
+       BLI_mempool*  mp_batch_list;
        
        ListBase      pending_samples;
        ListBase      erased_samples;
@@ -174,12 +175,21 @@ typedef struct LANPR_PrivateData {
        Gwn_VertFormat   snake_gwn_format;
        Gwn_Batch*       snake_batch;
 
+       ListBase         dpix_batch_list;
+
 } LANPR_PrivateData;
 
 typedef struct LANPR_StorageList {
        LANPR_PrivateData *g_data;
 } LANPR_StorageList;
 
+typedef struct LANPR_BatchItem {
+       Link             Item;
+       Gwn_Batch*       dpix_transform_batch;
+       Gwn_Batch*       dpix_preview_batch;
+       Object*          ob;
+} LANPR_BatchItem;
+
 typedef struct LANPR_Data {
        void *engine_type;
        LANPR_FramebufferList *fbl;
@@ -291,7 +301,7 @@ int lanpr_feed_atlas_data_obj(void* vedata,
        float* AtlasPointsL, float* AtlasPointsR,
        float* AtlasFaceNormalL, float* AtlasFaceNormalR,
        Object* ob, int BeginIndex);
-void lanpr_feed_atlas_trigger_preview_obj(void* vedata, Object* ob, int 
BeginIndex);
+int lanpr_feed_atlas_trigger_preview_obj(void* vedata, Object* ob, int 
BeginIndex);
 
 void lanpr_dpix_draw_scene(LANPR_TextureList* txl, LANPR_FramebufferList * 
fbl, LANPR_PassList *psl, LANPR_PrivateData *pd, SceneLANPR *lanpr);
 
diff --git a/source/blender/draw/engines/lanpr/lanpr_dpix.c 
b/source/blender/draw/engines/lanpr/lanpr_dpix.c
index 6fabd972249..2eae86b3242 100644
--- a/source/blender/draw/engines/lanpr/lanpr_dpix.c
+++ b/source/blender/draw/engines/lanpr/lanpr_dpix.c
@@ -45,7 +45,7 @@ void lanpr_init_atlas_inputs(void *ved){
        Object *camera = (rv3d->persp == RV3D_CAMOB) ? v3d->camera : NULL;
        SceneLANPR* lanpr=&draw_ctx->scene->lanpr;
 
-       if(lanpr->reloaded){
+       if(lanpr->reloaded || !txl->dpix_in_pl){
                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);
@@ -192,6 +192,8 @@ int lanpr_feed_atlas_data_obj(void* vedata,
                }
 
        }
+
+       BM_mesh_free(bm);
        
        return BeginIndex + edge_count;
 }
@@ -205,11 +207,11 @@ void lanpr_dpix_index_to_coord_absolute(int index, float* 
x,float* y){
     (*y) = (float)(index / TNS_DPIX_TEXTURE_SIZE)+0.5;
 }
 
-void lanpr_feed_atlas_trigger_preview_obj(void* vedata, Object* ob, int 
BeginIndex) {
+int lanpr_feed_atlas_trigger_preview_obj(void* vedata, Object* ob, int 
BeginIndex) {
        LANPR_StorageList *stl = ((LANPR_Data *)vedata)->stl;
        LANPR_PrivateData* pd = stl->g_data;
        Mesh* me = ob->data;
-       if (ob->type != OB_MESH) return;
+       if (ob->type != OB_MESH) return BeginIndex;
        int edge_count = me->totedge;
        int i;
        float co[2];
@@ -238,10 +240,16 @@ void lanpr_feed_atlas_trigger_preview_obj(void* vedata, 
Object* ob, int BeginInd
                GWN_vertbuf_attr_set(vbo2, attr_id2.pos, i, co);
        }
        
-       Gwn_Batch* gb = GWN_batch_create_ex(GWN_PRIM_POINTS, vbo, 0, 
GWN_USAGE_STREAM);
-    Gwn_Batch* gb2 = GWN_batch_create_ex(GWN_PRIM_POINTS, vbo2, 0, 
GWN_USAGE_STREAM);
-    DRW_shgroup_call_add(pd->dpix_transform_shgrp,gb,ob->obmat);
-       DRW_shgroup_call_add(pd->dpix_preview_shgrp,gb2,0);
+       Gwn_Batch* gb = GWN_batch_create_ex(GWN_PRIM_POINTS, vbo, 0, 
GWN_USAGE_STATIC|GWN_BATCH_OWNS_VBO);
+    Gwn_Batch* gb2 = GWN_batch_create_ex(GWN_PRIM_POINTS, vbo2, 0, 
GWN_USAGE_STATIC|GWN_BATCH_OWNS_VBO);
+
+       LANPR_BatchItem *bi = BLI_mempool_alloc(pd->mp_batch_list);
+       BLI_addtail(&pd->dpix_batch_list,bi);
+       bi->dpix_transform_batch = gb;
+       bi->dpix_preview_batch = gb2;
+       bi->ob = ob;
+
+       return BeginIndex + edge_count;
 }
 
 
@@ -269,14 +277,22 @@ void lanpr_dpix_draw_scene(LANPR_TextureList* txl, 
LANPR_FramebufferList * fbl,
                //GPU_disable_program_point_size();
                DRW_draw_pass(psl->dpix_transform_pass);
 
-               GPU_framebuffer_bind(fbl->edge_intermediate);
-               DRW_draw_pass(psl->edge_intermediate);// use depth
+               //GPU_framebuffer_bind(fbl->edge_intermediate);
+               //DRW_draw_pass(psl->color_pass);// use depth
+
+               glEnable(GL_LINE_SMOOTH);
+        glHint(GL_LINE_SMOOTH, GL_NICEST);
+           glEnable(GL_BLEND);
+        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 
                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_LINE_SMOOTH);
+               glDisable(GL_BLEND);
+
                GPU_framebuffer_bind(dfbl->default_fb);
                //DRW_transform_to_display(txl->dpix_out_pl);
                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 7ef6276b230..5c5f934b7f6 100644
--- a/source/blender/draw/engines/lanpr/lanpr_engine.c
+++ b/source/blender/draw/engines/lanpr/lanpr_engine.c
@@ -54,7 +54,7 @@ static void lanpr_engine_init(void *ved){
        Object *camera = (rv3d->persp == RV3D_CAMOB) ? v3d->camera : NULL;
        SceneLANPR* lanpr = &draw_ctx->scene->lanpr;
 
-       lanpr->reloaded = 1;
+       //lanpr->reloaded = 1;
 
        if (!OneTime.InitComplete) {
                lanpr->depth_clamp = 0.01;
@@ -177,10 +177,14 @@ static void lanpr_engine_free(void){
        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);
+       BLI_mempool_destroy(stl->g_data->mp_batch_list);
 
        MEM_freeN(stl->g_data->line_result_8bit);
        MEM_freeN(stl->g_data->line_result);
        MEM_freeN(stl->g_data);
+
+       lanpr_destroy_atlas(vedata);
+
        stl->g_data=0;
 }
 
@@ -196,81 +200,84 @@ static void lanpr_cache_init(void *vedata){
                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);
+               stl->g_data->mp_batch_list = 
BLI_mempool_create(sizeof(LANPR_BatchItem), 0, 128, BLI_MEMPOOL_NOP);
        }
 
        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;
+
        psl->color_pass = DRW_pass_create("Color Pass", DRW_STATE_WRITE_COLOR | 
DRW_STATE_DEPTH_LESS_EQUAL | DRW_STATE_WRITE_DEPTH);
        stl->g_data->multipass_shgrp = 
DRW_shgroup_create(OneTime.multichannel_shader, psl->color_pass);
 
 
-       struct Gwn_Batch *quad = DRW_cache_fullscreen_quad_get();
-
-
-       psl->edge_intermediate = DRW_pass_create("Edge Detection", 
DRW_STATE_WRITE_COLOR);
-       stl->g_data->edge_detect_shgrp = 
DRW_shgroup_create(OneTime.edge_detect_shader, psl->edge_intermediate);
-       DRW_shgroup_uniform_texture_ref(stl->g_data->edge_detect_shgrp, 
"TexSample0", &txl->depth);
-       DRW_shgroup_uniform_texture_ref(stl->g_data->edge_detect_shgrp, 
"TexSample1", &txl->color);
-       DRW_shgroup_uniform_texture_ref(stl->g_data->edge_detect_shgrp, 
"TexSample2", &txl->normal);
+       if(lanpr->master_mode == LANPR_MASTER_MODE_SNAKE){
+               struct Gwn_Batch *quad = DRW_cache_fullscreen_quad_get();
 
-       DRW_shgroup_uniform_float(stl->g_data->edge_detect_shgrp, "zNear", 
&stl->g_data->znear, 1);
-    DRW_shgroup_uniform_float(stl->g_data->edge_detect_shgrp, "zfFar", 
&stl->g_data->zfar, 1);
+               psl->edge_intermediate = DRW_pass_create("Edge Detection", 
DRW_STATE_WRITE_COLOR);
+               stl->g_data->edge_detect_shgrp = 
DRW_shgroup_create(OneTime.edge_detect_shader, psl->edge_intermediate);
+               DRW_shgroup_uniform_texture_ref(stl->g_data->edge_detect_shgrp, 
"TexSample0", &txl->depth);
+               DRW_shgroup_uniform_texture_ref(stl->g_data->edge_detect_shgrp, 
"TexSample1", &txl->color);
+               DRW_shgroup_uniform_texture_ref(stl->g_data->edge_detect_shgrp, 
"TexSample2", &txl->normal);
 
-       DRW_shgroup_uniform_float(stl->g_data->edge_detect_shgrp, "uValue0", 
&stl->g_data->normal_clamp, 1);// normal clamp
-    DRW_shgroup_uniform_float(stl->g_data->edge_detect_shgrp, "uValue1", 
&stl->g_data->normal_strength, 1);// normal strength
-    DRW_shgroup_uniform_float(stl->g_data->edge_detect_shgrp, "uValue2", 
&stl->g_data->depth_clamp, 1);// depth clamp
-       DRW_shgroup_uniform_float(stl->g_data->edge_detect_shgrp, "uValue3", 
&stl->g_data->depth_strength, 1);// depth strength
-       DRW_shgroup_call_add(stl->g_data->edge_detect_shgrp, quad, NULL);
+               DRW_shgroup_uniform_float(stl->g_data->edge_detect_shgrp, 
"zNear", &stl->g_data->znear, 1);
+               DRW_shgroup_uniform_float(stl->g_data->edge_detect_shgrp, 
"zfFar", &stl->g_data->zfar, 1);
 
-       psl->edge_thinning = DRW_pass_create("Edge Thinning Stage 1", 
DRW_STATE_WRITE_COLOR);
-       stl->g_data->edge_thinning_shgrp = 
DRW_shgroup_create(OneTime.edge_thinning_shader, psl->edge_thinning);
-       DRW_shgroup_uniform_texture_ref(stl->g_data->edge_thinning_shgrp, 
"TexSample0", &txl->edge_intermediate);
-       DRW_shgroup_uniform_int(stl->g_data->edge_thinning_shgrp, "Stage", 
&stl->g_data->stage, 1);
-       DRW_shgroup_call_add(stl->g_data->edge_thinning_shgrp, quad, NULL);
+               DRW_shgroup_uniform_float(stl->g_data->edge_detect_shgrp, 
"uValue0", &stl->g_data->normal_clamp, 1);// normal clamp
+               DRW_shgroup_uniform_float(stl->g_data->edge_detect_shgrp, 
"uValue1", &stl->g_data->normal_strength, 1);// normal strength
+               DRW_shgroup_uniform_float(stl->g_data->edge_detect_shgrp, 
"uValue2", &stl->g_data->depth_clamp, 1);// depth clamp
+               DRW_shgroup_uniform_float(stl->g_data->edge_detect_shgrp, 
"uValue3", &stl->g_data->depth_strength, 1);// depth strength
+               DRW_shgroup_call_add(stl->g_data->edge_detect_shgrp, quad, 
NULL);
 
-       psl->edge_thinning_2 = DRW_pass_create("Edge Thinning Stage 2", 
DRW_STATE_WRITE_COLOR);
-       stl->g_data->edge_thinning_shgrp_2 = 
DRW_shgroup_create(OneTime.edge_thinning_shader, psl->edge_thinning_2);
-       DRW_shgroup_uniform_texture_ref(stl->g_data->edge_thinning_shgrp_2, 
"TexSample0", &txl->color);
-       

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