[Bf-blender-cvs] [4ef26d98d33] soc-2018-npr: Fixed intersection calculation memory leak, fixed snake UI error, added F12 supporting functions.
Nick Wu
noreply at git.blender.org
Fri Jul 27 09:59:33 CEST 2018
Commit: 4ef26d98d33d026f010da27d97dd0929023589ba
Author: Nick Wu
Date: Fri Jul 27 11:37:14 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rB4ef26d98d33d026f010da27d97dd0929023589ba
Fixed intersection calculation memory leak, fixed snake UI error, added F12 supporting functions.
===================================================================
M release/scripts/startup/bl_ui/properties_scene.py
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_ops.c
M source/blender/draw/engines/lanpr/lanpr_snake.c
===================================================================
diff --git a/release/scripts/startup/bl_ui/properties_scene.py b/release/scripts/startup/bl_ui/properties_scene.py
index 09216661665..b609e2322b6 100644
--- a/release/scripts/startup/bl_ui/properties_scene.py
+++ b/release/scripts/startup/bl_ui/properties_scene.py
@@ -818,7 +818,7 @@ class SCENE_PT_lanpr_snake_settings(SceneButtonsPanel, Panel):
def poll(cls, context):
scene = context.scene
lanpr = scene.lanpr
- return lanpr.master_mode == "SNAKE" and lanpr.enable_vector_trace == "ENABLE"
+ return lanpr.master_mode == "SNAKE" and lanpr.enable_vector_trace == "ENABLED"
def draw(self, context):
layout = self.layout
diff --git a/source/blender/draw/engines/lanpr/lanpr_all.h b/source/blender/draw/engines/lanpr/lanpr_all.h
index 330df6aa6de..faffecf4b9f 100644
--- a/source/blender/draw/engines/lanpr/lanpr_all.h
+++ b/source/blender/draw/engines/lanpr/lanpr_all.h
@@ -50,7 +50,7 @@
((L) * (1.0f - (T)) + (R)*(T))
-typedef struct LANPROneTimeInit {
+typedef struct LANPRSharedResource {
/* Snake */
GPUShader *multichannel_shader;
@@ -66,17 +66,17 @@ typedef struct LANPROneTimeInit {
GPUShader *software_shader;
GPUShader *software_chaining_shader;
- /* For Debug... */
- GPUShader *debug_shader;
+ void *ved_viewport;
+ void *ved_render;
- void *ved;
+ int init_complete;
- /* for default value assignment */
+ SpinLock render_flag_lock;
+ int during_render; // get/set using access funcion which uses render_flag_lock to lock.
+ // this prevents duplicate too much resource. (no render preview in viewport while rendering)
- int InitComplete;
-
-} LANPROneTimeInit;
+} LANPRSharedResource;
#define TNS_DPIX_TEXTURE_SIZE 2048
@@ -114,9 +114,6 @@ typedef struct LANPR_PassList {
/* SOFTWARE */
struct DRWPass *software_pass;
- /* DEBUG */
- struct DRWPass *debug_pass;
-
} LANPR_PassList;
typedef struct LANPR_FramebufferList {
@@ -327,6 +324,8 @@ typedef struct LANPR_RenderBuffer {
//render status
+ int cached_for_frame;
+
real ViewVector[3];
int TriangleSize;
@@ -802,9 +801,13 @@ int lanpr_feed_atlas_data_intersection_cache(void *vedata,
int lanpr_feed_atlas_trigger_preview_obj(void *vedata, Object *ob, int begin_index);
void lanpr_create_atlas_intersection_preview(void *vedata, int begin_index);
-void lanpr_dpix_draw_scene(LANPR_TextureList *txl, LANPR_FramebufferList *fbl, LANPR_PassList *psl, LANPR_PrivateData *pd, SceneLANPR *lanpr, GPUFrameBuffer *DefaultFB);
+void lanpr_dpix_draw_scene(LANPR_TextureList *txl, LANPR_FramebufferList *fbl, LANPR_PassList *psl, LANPR_PrivateData *pd, SceneLANPR *lanpr, GPUFrameBuffer *DefaultFB, int is_render);
-void lanpr_snake_draw_scene(LANPR_TextureList *txl, LANPR_FramebufferList *fbl, LANPR_PassList *psl, LANPR_PrivateData *pd, SceneLANPR *lanpr, GPUFrameBuffer *DefaultFB);
+void lanpr_snake_draw_scene(LANPR_TextureList *txl, LANPR_FramebufferList *fbl, LANPR_PassList *psl, LANPR_PrivateData *pd, SceneLANPR *lanpr, GPUFrameBuffer *DefaultFB, int is_render);
void lanpr_software_draw_scene(void *vedata, GPUFrameBuffer *dfb);
+void lanpr_set_render_flag();
+void lanpr_clear_render_flag();
+int lanpr_during_render();
+
diff --git a/source/blender/draw/engines/lanpr/lanpr_dpix.c b/source/blender/draw/engines/lanpr/lanpr_dpix.c
index db9210b3947..b400a3f9a89 100644
--- a/source/blender/draw/engines/lanpr/lanpr_dpix.c
+++ b/source/blender/draw/engines/lanpr/lanpr_dpix.c
@@ -25,14 +25,14 @@
#include <math.h>
-extern struct LANPROneTimeInit OneTime;
+extern LANPRSharedResource lanpr_share;
extern char datatoc_lanpr_dpix_project_passthrough_vert_glsl[];
extern char datatoc_lanpr_dpix_project_clip_frag_glsl[];
extern char datatoc_lanpr_dpix_preview_geom_glsl[];
extern char datatoc_lanpr_dpix_preview_frag_glsl[];
void lanpr_init_atlas_inputs(void *ved){
- OneTime.ved = ved;
+ lanpr_share.ved_viewport = ved;
LANPR_Data *vedata = (LANPR_Data *)ved;
LANPR_TextureList *txl = vedata->txl;
LANPR_FramebufferList *fbl = vedata->fbl;
@@ -76,15 +76,15 @@ void lanpr_init_atlas_inputs(void *ved){
GPU_ATTACHMENT_LEAVE
});
- if (!OneTime.dpix_transform_shader) {
- OneTime.dpix_transform_shader =
+ if (!lanpr_share.dpix_transform_shader) {
+ lanpr_share.dpix_transform_shader =
GPU_shader_create(
datatoc_lanpr_dpix_project_passthrough_vert_glsl,
datatoc_lanpr_dpix_project_clip_frag_glsl,
NULL, NULL, NULL);
}
- if (!OneTime.dpix_preview_shader) {
- OneTime.dpix_preview_shader =
+ if (!lanpr_share.dpix_preview_shader) {
+ lanpr_share.dpix_preview_shader =
GPU_shader_create(
datatoc_lanpr_dpix_project_passthrough_vert_glsl,
datatoc_lanpr_dpix_preview_frag_glsl,
@@ -93,7 +93,7 @@ void lanpr_init_atlas_inputs(void *ved){
}
}
void lanpr_destroy_atlas(void *ved){
- OneTime.ved = ved;
+ lanpr_share.ved_viewport = ved;
LANPR_Data *vedata = (LANPR_Data *)ved;
LANPR_TextureList *txl = vedata->txl;
LANPR_FramebufferList *fbl = vedata->fbl;
@@ -361,7 +361,7 @@ void lanpr_create_atlas_intersection_preview(void *vedata, int begin_index) {
}
-void lanpr_dpix_draw_scene(LANPR_TextureList *txl, LANPR_FramebufferList *fbl, LANPR_PassList *psl, LANPR_PrivateData *pd, SceneLANPR *lanpr, GPUFrameBuffer *DefaultFB) {
+void lanpr_dpix_draw_scene(LANPR_TextureList *txl, LANPR_FramebufferList *fbl, LANPR_PassList *psl, LANPR_PrivateData *pd, SceneLANPR *lanpr, GPUFrameBuffer *DefaultFB, int is_render) {
float clear_col[4] = {0.0f, 0.0f, 0.0f, 0.0f};
float clear_depth = 1.0f;
uint clear_stencil = 0xFF;
diff --git a/source/blender/draw/engines/lanpr/lanpr_engine.c b/source/blender/draw/engines/lanpr/lanpr_engine.c
index 11b7bbf0d0e..7d24e76348f 100644
--- a/source/blender/draw/engines/lanpr/lanpr_engine.c
+++ b/source/blender/draw/engines/lanpr/lanpr_engine.c
@@ -44,11 +44,11 @@ extern char datatoc_lanpr_software_passthrough_vert_glsl[];
extern char datatoc_gpu_shader_2D_smooth_color_vert_glsl[];
extern char datatoc_gpu_shader_2D_smooth_color_frag_glsl[];
-LANPROneTimeInit OneTime;
+LANPRSharedResource lanpr_share;
static void lanpr_engine_init(void *ved){
- OneTime.ved = ved;
+ lanpr_share.ved_viewport = ved;
LANPR_Data *vedata = (LANPR_Data *)ved;
LANPR_TextureList *txl = vedata->txl;
LANPR_FramebufferList *fbl = vedata->fbl;
@@ -60,31 +60,8 @@ static void lanpr_engine_init(void *ved){
SceneLANPR *lanpr = &scene->lanpr;
View3D *v3d = draw_ctx->v3d;
- if (!OneTime.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;
-
- OneTime.InitComplete = 1;
- }
+ if(!lanpr_share.init_complete)
+ BLI_spin_init(&lanpr_share.render_flag_lock);
/* SNAKE */
@@ -128,29 +105,29 @@ static void lanpr_engine_init(void *ved){
});
- if (!OneTime.multichannel_shader) {
- OneTime.multichannel_shader =
+ if (!lanpr_share.multichannel_shader) {
+ lanpr_share.multichannel_shader =
GPU_shader_create(
datatoc_gpu_shader_3D_normal_smooth_color_vert_glsl,
datatoc_lanpr_snake_multichannel_frag_glsl, NULL, NULL, NULL);
}
- if (!OneTime.edge_detect_shader) {
- OneTime.edge_detect_shader =
+ if (!lanpr_share.edge_detect_shader) {
+ lanpr_share.edge_detect_shader =
GPU_shader_create(
datatoc_common_fullscreen_vert_glsl,
datatoc_lanpr_snake_edge_frag_glsl, NULL, NULL, NULL);
}
- if (!OneTime.edge_thinning_shader) {
- OneTime.edge_thinning_shader =
+ if (!lanpr_share.edge_thinning_shader) {
+ lanpr_share.edge_thinning_shader =
GPU_shader_create(
datatoc_common_fullscreen_vert_glsl,
datatoc_lanpr_snake_image_peel_frag_glsl, NULL, NULL, NULL);
}
- if (!OneTime.snake_connection_shader) {
- OneTime.snake_connection_shader =
+ if (!lanpr_share.snake_connection_shader) {
+ lanpr_share.snake_connection_shader =
GPU_shader_create(
datatoc_lanpr_snake_line_connection_vert_glsl,
datatoc_lanpr_snake_line_connection_frag_glsl,
@@ -162,8 +139,8 @@ static void lanpr_engine_init(void *ved){
lanpr_init_atlas_inputs(ved);
/* SOFTWARE */
- if (!OneTime.software_shader) {
- OneTime.software_shader =
+ if (!lanpr_share.software_shader) {
+ lanpr_share.software_shader =
GPU_shader_create(
datatoc_lanpr_software_passthrough_vert_glsl,
datatoc_lanpr_dpix_preview_frag_glsl,
@@ -171,8 +148,8 @@ static void lanpr_engine_init(void *ved){
NULL, NULL);
}
- if (!OneTime.software_chaining_shader) {
- OneTime.software_chaining_shader =
+ if (!lanpr_share.software_chaining_shader) {
+ lanpr_share.software_chaining_shader =
GPU_shader_create(
datatoc_lanpr_software_passthrough_vert_glsl,
datatoc_lanpr_dpix_preview_frag_glsl,
@@ -190,19 +167,11 @@ static void lanpr_engine_init(void *ved){
GPU_ATTACHMENT_LEAVE
});
- /* Debug */
- if (!OneTime.debug_shader) {
- OneTime.debug_shader =
- GPU_shader_create(
- datatoc_gpu_shader_2D_smooth_color_vert_glsl,
- datatoc_gpu_shader_2D_smooth_color_frag_glsl,
- NULL,
- NULL, NULL);
- }
+ lanpr_share.init_complete = 1;
}
static void lanpr_engine_free(void){
- void *ved = OneTime.ved;
+ void *ved = lanpr_share.ved_viewport;
LANPR_Data *vedata = (LANPR_Data *)ved;
LANPR_TextureList *txl = vedata->txl;
LANPR_FramebufferList *fbl = vedata->fbl;
@@ -263,14 +232,14 @@ static void lanpr_cache_init(void *vedata){
View3D *v3d = draw_ctx->v3d;
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);
+ stl->g_data->multipass_shgrp = DRW_shgroup_create(lanpr_share.
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list