[Bf-blender-cvs] [e406c678424] soc-2018-npr: Provide a switch to enable chaining or not.
Nick Wu
noreply at git.blender.org
Mon Jul 23 16:34:44 CEST 2018
Commit: e406c67842479a78b8904671a8e9729fc8a505c7
Author: Nick Wu
Date: Mon Jul 23 22:33:59 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rBe406c67842479a78b8904671a8e9729fc8a505c7
Provide a switch to enable chaining or not.
===================================================================
M release/scripts/startup/bl_ui/properties_scene.py
M source/blender/draw/CMakeLists.txt
M source/blender/draw/engines/lanpr/lanpr_all.h
M source/blender/draw/engines/lanpr/lanpr_engine.c
M source/blender/draw/engines/lanpr/lanpr_ops.c
A source/blender/draw/engines/lanpr/shaders/lanpr_software_chain.geometry
M source/blender/draw/engines/lanpr/shaders/lanpr_software_line_width.geometry
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 d8cc00d7afd..a95ed107725 100644
--- a/release/scripts/startup/bl_ui/properties_scene.py
+++ b/release/scripts/startup/bl_ui/properties_scene.py
@@ -618,10 +618,11 @@ class SCENE_PT_lanpr(SceneButtonsPanel, Panel):
if lanpr.master_mode == "DPIX":
layout.prop(lanpr, "reloaded")
- rows = 4
if lanpr.master_mode == "SOFTWARE":
layout.label(text="Enable On Demand:")
- layout.prop(lanpr,"calculate_intersections", toggle = True, text = "Enable Intersection Lines")
+ row = layout.row()
+ row.prop(lanpr,"calculate_intersections", text = "Intersection Lines")
+ row.prop(lanpr,"enable_chaining", text = "Chaining (SLOW!)")
layout.label(text="RUN:")
layout.operator("scene.lanpr_calculate", icon='RENDER_STILL')
layout.label(text="Layer Composition:")
diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index a8c099dcdae..1ed2b724f7a 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -252,6 +252,8 @@ data_to_c_simple(engines/lanpr/shaders/lanpr_snake_edge.fragment SRC)
data_to_c_simple(engines/lanpr/shaders/lanpr_snake_multichannel.fragment SRC)
data_to_c_simple(engines/lanpr/shaders/lanpr_software_line_width.geometry SRC)
data_to_c_simple(engines/lanpr/shaders/lanpr_software_scale_compensate.vertex SRC)
+data_to_c_simple(engines/lanpr/shaders/lanpr_software_chain.geometry SRC)
+
data_to_c_simple(modes/shaders/common_globals_lib.glsl SRC)
data_to_c_simple(modes/shaders/common_hair_lib.glsl SRC)
diff --git a/source/blender/draw/engines/lanpr/lanpr_all.h b/source/blender/draw/engines/lanpr/lanpr_all.h
index 1b070a54002..b9e5c9d3e30 100644
--- a/source/blender/draw/engines/lanpr/lanpr_all.h
+++ b/source/blender/draw/engines/lanpr/lanpr_all.h
@@ -64,6 +64,7 @@ typedef struct LANPROneTimeInit {
/* Software */
GPUShader *software_shader;
+ GPUShader *software_chaining_shader;
void *ved;
diff --git a/source/blender/draw/engines/lanpr/lanpr_engine.c b/source/blender/draw/engines/lanpr/lanpr_engine.c
index c7248182520..3c48ec0fae8 100644
--- a/source/blender/draw/engines/lanpr/lanpr_engine.c
+++ b/source/blender/draw/engines/lanpr/lanpr_engine.c
@@ -36,6 +36,7 @@ extern char datatoc_lanpr_line_connection_vertex[];
extern char datatoc_lanpr_line_connection_fragment[];
extern char datatoc_lanpr_line_connection_geometry[];
extern char datatoc_lanpr_software_line_width_geometry[];
+extern char datatoc_lanpr_software_chain_geometry[];
extern char datatoc_lanpr_atlas_project_passthrough_vertex[];
extern char datatoc_lanpr_atlas_preview_fragment[];
extern char datatoc_lanpr_software_scale_compensate_vertex[];
@@ -177,6 +178,15 @@ static void lanpr_engine_init(void *ved){
NULL, NULL);
}
+ if (!OneTime.software_chaining_shader) {
+ OneTime.software_chaining_shader =
+ GPU_shader_create(
+ datatoc_lanpr_software_scale_compensate_vertex,
+ datatoc_lanpr_atlas_preview_fragment,
+ datatoc_lanpr_software_chain_geometry,
+ NULL, NULL);
+ }
+
GPU_framebuffer_ensure_config(&fbl->software_ms, {
GPU_ATTACHMENT_TEXTURE(txl->ms_resolve_depth),
GPU_ATTACHMENT_TEXTURE(txl->ms_resolve_color),
@@ -349,23 +359,6 @@ static void lanpr_cache_init(void *vedata){
} elif(lanpr->master_mode == LANPR_MASTER_MODE_SOFTWARE)
{
;
- /*LANPR_LineLayer *ll;
- for (ll = lanpr->line_layers.first; ll; ll = ll->next) {
- ll->shgrp = DRW_shgroup_create(OneTime.software_shader, psl->software_pass);
- DRW_shgroup_uniform_vec4(ll->shgrp, "color", ll->color, 1);
- DRW_shgroup_uniform_vec4(ll->shgrp, "crease_color", ll->crease_color, 1);
- DRW_shgroup_uniform_vec4(ll->shgrp, "material_color", ll->material_color, 1);
- DRW_shgroup_uniform_vec4(ll->shgrp, "edge_mark_color", ll->edge_mark_color, 1);
- DRW_shgroup_uniform_vec4(ll->shgrp, "intersection_color", ll->intersection_color, 1);
- DRW_shgroup_uniform_float(ll->shgrp, "thickness", &ll->thickness, 1);
- DRW_shgroup_uniform_float(ll->shgrp, "thickness_crease", &ll->thickness_crease, 1);
- DRW_shgroup_uniform_float(ll->shgrp, "thickness_material", &ll->thickness_material, 1);
- DRW_shgroup_uniform_float(ll->shgrp, "thickness_edge_mark", &ll->thickness_edge_mark, 1);
- DRW_shgroup_uniform_float(ll->shgrp, "thickness_intersection", &ll->thickness_intersection, 1);
- DRW_shgroup_uniform_vec4(ll->shgrp, "preview_viewport", stl->g_data->dpix_viewport, 1);
- DRW_shgroup_uniform_vec4(ll->shgrp, "output_viewport", stl->g_data->output_viewport, 1);
- if (ll->batch) DRW_shgroup_call_add(ll->shgrp, ll->batch, NULL);
- }*/
}
@@ -482,51 +475,76 @@ static void lanpr_draw_scene_exec(void *vedata, GPUFrameBuffer *dfb) {
}
elif(lanpr->master_mode == LANPR_MASTER_MODE_SOFTWARE)
{
+ // should isolate these into a seperate function.
+ LANPR_LineLayer* ll;
+
GPU_framebuffer_bind(fbl->software_ms);
GPU_framebuffer_clear(fbl->software_ms, clear_bits, lanpr->background_color, clear_depth, clear_stencil);
- if (lanpr->render_buffer && lanpr->render_buffer->ChainDrawBatch) {
- LANPR_LineLayer* ll;
- for (ll = lanpr->line_layers.first; ll; ll = ll->next) {
- LANPR_RenderBuffer* rb;
- psl->software_pass = DRW_pass_create("Software Render Preview", DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS_EQUAL);
- rb = lanpr->render_buffer;
- rb->ChainShgrp = DRW_shgroup_create(OneTime.software_shader, psl->software_pass);
- DRW_shgroup_uniform_vec4(rb->ChainShgrp, "color", ll->color, 1);
- DRW_shgroup_uniform_vec4(rb->ChainShgrp, "crease_color", ll->crease_color, 1);
- DRW_shgroup_uniform_vec4(rb->ChainShgrp, "material_color", ll->material_color, 1);
- DRW_shgroup_uniform_vec4(rb->ChainShgrp, "edge_mark_color", ll->edge_mark_color, 1);
- DRW_shgroup_uniform_vec4(rb->ChainShgrp, "intersection_color", ll->intersection_color, 1);
- DRW_shgroup_uniform_float(rb->ChainShgrp, "thickness", &ll->thickness, 1);
- DRW_shgroup_uniform_float(rb->ChainShgrp, "thickness_crease", &ll->thickness_crease, 1);
- DRW_shgroup_uniform_float(rb->ChainShgrp, "thickness_material", &ll->thickness_material, 1);
- DRW_shgroup_uniform_float(rb->ChainShgrp, "thickness_edge_mark", &ll->thickness_edge_mark, 1);
- DRW_shgroup_uniform_float(rb->ChainShgrp, "thickness_intersection", &ll->thickness_intersection, 1);
-
- DRW_shgroup_uniform_int(rb->ChainShgrp, "occlusion_level_begin", &ll->qi_begin, 1);
- DRW_shgroup_uniform_int(rb->ChainShgrp, "occlusion_level_end", &ll->qi_end, 1);
-
- int texw = GPU_texture_width(txl->ms_resolve_color), texh = GPU_texture_height(txl->ms_resolve_color);;
- pd->output_viewport[2] = scene->r.xsch;
- pd->output_viewport[3] = scene->r.ysch;
- pd->dpix_viewport[2] = texw;
- pd->dpix_viewport[3] = texh;
- DRW_shgroup_uniform_vec4(rb->ChainShgrp, "preview_viewport", stl->g_data->dpix_viewport, 1);
- DRW_shgroup_uniform_vec4(rb->ChainShgrp, "output_viewport", stl->g_data->output_viewport, 1);
-
- float *tld = &lanpr->taper_left_distance, *tls = &lanpr->taper_left_strength,
- *trd = &lanpr->taper_right_distance, *trs = &lanpr->taper_right_strength;
-
- DRW_shgroup_uniform_float(rb->ChainShgrp, "TaperLDist", tld, 1);
- DRW_shgroup_uniform_float(rb->ChainShgrp, "TaperLStrength", tls, 1);
- DRW_shgroup_uniform_float(rb->ChainShgrp, "TaperRDist", lanpr->use_same_taper ? tld : trd, 1);
- DRW_shgroup_uniform_float(rb->ChainShgrp, "TaperRStrength", lanpr->use_same_taper ? tls : trs, 1);
-
- //need to add component enable/disable option.
- DRW_shgroup_call_add(rb->ChainShgrp, lanpr->render_buffer->ChainDrawBatch, NULL);
- // debug purpose
- //DRW_draw_pass(psl->color_pass);
- //DRW_draw_pass(psl->color_pass);
+ if (lanpr->render_buffer) {
+
+ int texw = GPU_texture_width(txl->ms_resolve_color), texh = GPU_texture_height(txl->ms_resolve_color);;
+ pd->output_viewport[2] = scene->r.xsch;
+ pd->output_viewport[3] = scene->r.ysch;
+ pd->dpix_viewport[2] = texw;
+ pd->dpix_viewport[3] = texh;
+
+ if (lanpr->enable_chaining && lanpr->render_buffer->ChainDrawBatch) {
+ for (ll = lanpr->line_layers.first; ll; ll = ll->next) {
+ LANPR_RenderBuffer* rb;
+ psl->software_pass = DRW_pass_create("Software Render Preview", DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS_EQUAL);
+ rb = lanpr->render_buffer;
+ rb->ChainShgrp = DRW_shgroup_create(OneTime.software_chaining_shader, psl->software_pass);
+ DRW_shgroup_uniform_vec4(rb->ChainShgrp, "color", ll->color, 1);
+ DRW_shgroup_uniform_vec4(rb->ChainShgrp, "crease_color", ll->crease_color, 1);
+ DRW_shgroup_uniform_vec4(rb->ChainShgrp, "material_color", ll->material_color, 1);
+ DRW_shgroup_uniform_vec4(rb->ChainShgrp, "edge_mark_color", ll->edge_mark_color, 1);
+ DRW_shgroup_uniform_vec4(rb->ChainShgrp, "intersection_color", ll->intersection_color, 1);
+ DRW_shgroup_uniform_float(rb->ChainShgrp, "thickness", &ll->thickness, 1);
+ DRW_shgroup_uniform_float(rb->ChainShgrp, "thickness_crease", &ll->thickness_crease, 1);
+ DRW_shgroup_uniform_float(rb->ChainShgrp, "thickness_material", &ll->thickness_material, 1);
+ DRW_shgroup_uniform_float(rb->ChainShgrp, "thickness_edge_mark", &ll->thickness_edge_mark, 1);
+ DRW_shgroup_uniform_float(rb->ChainShgrp, "thickness_intersection", &ll->thickness_intersection, 1);
+
+ DRW_shgroup_uniform_int(rb->ChainShgrp, "occlusion_level_begin", &ll->qi_begin, 1);
+ DRW_shgroup_uniform_int(rb->ChainShgrp, "occlusion_level_end", &ll->qi_end, 1);
+
+ DRW_shgroup_uniform_vec4(rb->ChainShgrp, "preview_viewport", stl->g_data->dpix_viewport, 1);
+ DRW_shgroup_uniform_vec4(rb->ChainShgrp, "output_viewport", stl->g_data->output_viewport, 1);
+
+ float *tld = &lanpr->taper_left_distance, *tls = &lanpr->taper_left_strength,
+ *trd = &lanpr->taper_right_distance, *trs = &lanpr->taper_right_strength;
+
+ DRW_shgroup_uniform_float(rb->Cha
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list