[Bf-blender-cvs] [dd9579ccd43] soc-2019-npr: LANPR: Added error message for failed DPIX shaders.
YimingWu
noreply at git.blender.org
Fri Jun 28 08:05:44 CEST 2019
Commit: dd9579ccd437876f226f334c00c75d244f25d5f5
Author: YimingWu
Date: Fri Jun 28 14:05:11 2019 +0800
Branches: soc-2019-npr
https://developer.blender.org/rBdd9579ccd437876f226f334c00c75d244f25d5f5
LANPR: Added error message for failed DPIX shaders.
===================================================================
M release/scripts/startup/bl_ui/properties_render.py
M source/blender/draw/engines/lanpr/lanpr_access.c
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/makesrna/intern/rna_scene.c
===================================================================
diff --git a/release/scripts/startup/bl_ui/properties_render.py b/release/scripts/startup/bl_ui/properties_render.py
index 5449d266b37..79d610759ad 100644
--- a/release/scripts/startup/bl_ui/properties_render.py
+++ b/release/scripts/startup/bl_ui/properties_render.py
@@ -731,6 +731,10 @@ class RENDER_PT_lanpr(RenderButtonsPanel, Panel):
layout.prop(lanpr, "master_mode", expand=True)
+ if mode == "DPIX" and lanpr.shader_error:
+ layout.label(text="DPIX transfor shader compile error!")
+ return;
+
if scene.render.engine!='BLENDER_LANPR':
layout.label(text='Only Software mode result is used to generate GP stroke.')
diff --git a/source/blender/draw/engines/lanpr/lanpr_access.c b/source/blender/draw/engines/lanpr/lanpr_access.c
index 3d3af4352e0..9d0e0a94f35 100644
--- a/source/blender/draw/engines/lanpr/lanpr_access.c
+++ b/source/blender/draw/engines/lanpr/lanpr_access.c
@@ -133,6 +133,11 @@ void lanpr_update_data_for_external(Depsgraph *depsgraph)
}
}
+bool lanpr_dpix_shader_error()
+{
+ return lanpr_share.dpix_shader_error;
+}
+
void lanpr_copy_data(Scene *from, Scene *to)
{
SceneLANPR *lanpr = &from->lanpr;
diff --git a/source/blender/draw/engines/lanpr/lanpr_all.h b/source/blender/draw/engines/lanpr/lanpr_all.h
index e04ef61c93c..96c8e39bc93 100644
--- a/source/blender/draw/engines/lanpr/lanpr_all.h
+++ b/source/blender/draw/engines/lanpr/lanpr_all.h
@@ -93,6 +93,7 @@ typedef struct LANPR_SharedResource {
/* DPIX */
GPUShader *dpix_transform_shader;
GPUShader *dpix_preview_shader;
+ int dpix_shader_error;
/* Software */
GPUShader *software_shader;
diff --git a/source/blender/draw/engines/lanpr/lanpr_dpix.c b/source/blender/draw/engines/lanpr/lanpr_dpix.c
index 27b2f4ef504..bda66b799fe 100644
--- a/source/blender/draw/engines/lanpr/lanpr_dpix.c
+++ b/source/blender/draw/engines/lanpr/lanpr_dpix.c
@@ -89,6 +89,10 @@ void lanpr_init_atlas_inputs(void *ved)
NULL,
datatoc_lanpr_dpix_project_clip_frag_glsl,
NULL);
+ if (!lanpr_share.dpix_transform_shader) {
+ lanpr_share.dpix_shader_error = 1;
+ printf("LANPR: DPIX transform shader compile error.");
+ }
}
if (!lanpr_share.dpix_preview_shader) {
lanpr_share.dpix_preview_shader = DRW_shader_create(
@@ -96,6 +100,10 @@ void lanpr_init_atlas_inputs(void *ved)
datatoc_lanpr_dpix_preview_geom_glsl,
datatoc_lanpr_dpix_preview_frag_glsl,
NULL);
+ if (!lanpr_share.dpix_transform_shader) {
+ lanpr_share.dpix_shader_error = 1;
+ printf("LANPR: DPIX transform shader compile error.");
+ }
}
}
void lanpr_destroy_atlas(void *ved)
diff --git a/source/blender/draw/engines/lanpr/lanpr_engine.c b/source/blender/draw/engines/lanpr/lanpr_engine.c
index 51f1adf894b..780c271a7be 100644
--- a/source/blender/draw/engines/lanpr/lanpr_engine.c
+++ b/source/blender/draw/engines/lanpr/lanpr_engine.c
@@ -256,7 +256,8 @@ static void lanpr_cache_init(void *vedata)
DRW_shgroup_uniform_int(stl->g_data->edge_thinning_shgrp, "stage", &stl->g_data->stage, 1);
DRW_shgroup_call(stl->g_data->edge_thinning_shgrp, quad, NULL);
}
- else if (lanpr->master_mode == LANPR_MASTER_MODE_DPIX && lanpr->active_layer) {
+ else if (lanpr->master_mode == LANPR_MASTER_MODE_DPIX && lanpr->active_layer &&
+ !lanpr_share.dpix_shader_error) {
LANPR_LineLayer *ll = lanpr->line_layers.first;
psl->dpix_transform_pass = DRW_pass_create("DPIX Transform Stage", DRW_STATE_WRITE_COLOR);
stl->g_data->dpix_transform_shgrp = DRW_shgroup_create(lanpr_share.dpix_transform_shader,
@@ -438,7 +439,8 @@ static void lanpr_cache_populate(void *vedata, Object *ob)
DRW_shgroup_call_no_cull(stl->g_data->multipass_shgrp, geom, ob);
}
- if (lanpr->master_mode == LANPR_MASTER_MODE_DPIX && lanpr->active_layer) {
+ if (lanpr->master_mode == LANPR_MASTER_MODE_DPIX && lanpr->active_layer &&
+ !lanpr_share.dpix_shader_error) {
int idx = pd->begin_index;
if (lanpr->reloaded) {
pd->begin_index = lanpr_feed_atlas_data_obj(vedata,
@@ -465,7 +467,8 @@ static void lanpr_cache_finish(void *vedata)
float mat[4][4];
unit_m4(mat);
- if (lanpr->master_mode == LANPR_MASTER_MODE_DPIX && lanpr->active_layer) {
+ if (lanpr->master_mode == LANPR_MASTER_MODE_DPIX && lanpr->active_layer &&
+ !lanpr_share.dpix_shader_error) {
if (lanpr->reloaded) {
if (lanpr_share.render_buffer_shared) {
lanpr_feed_atlas_data_intersection_cache(vedata,
@@ -558,7 +561,7 @@ static void lanpr_draw_scene_exec(void *vedata, GPUFrameBuffer *dfb, int is_rend
SceneLANPR *lanpr = &scene->lanpr;
View3D *v3d = draw_ctx->v3d;
- if (lanpr->master_mode == LANPR_MASTER_MODE_DPIX) {
+ if (lanpr->master_mode == LANPR_MASTER_MODE_DPIX && !lanpr_share.dpix_shader_error) {
DRW_draw_pass(psl->color_pass);
lanpr_dpix_draw_scene(txl, fbl, psl, stl->g_data, lanpr, dfb, is_render);
}
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index 6c382c62e65..87cb6c13dd2 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -2483,6 +2483,13 @@ void rna_lanpr_active_line_layer_set(PointerRNA *ptr, PointerRNA value)
lanpr->active_layer = value.data;
}
+extern bool lanpr_dpix_shader_error();
+
+static bool rna_lanpr_shader_error_get(PointerRNA *ptr)
+{
+ return lanpr_dpix_shader_error();
+}
+
#else
/* Grease Pencil Interpolation tool settings */
@@ -7362,6 +7369,12 @@ static void rna_def_scene_lanpr(BlenderRNA *brna)
"Enable Chain Connection",
"Connect short chains in the image space into one longer chain");
+ prop = RNA_def_property(srna, "shader_error", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_default(prop, 0);
+ RNA_def_property_boolean_funcs(prop, "rna_lanpr_shader_error_get", "");
+ RNA_def_property_ui_text(
+ prop, "DPIX Shader Error", "Can't compile DPIX transform shader on your GPU.");
+
prop = RNA_def_property(srna, "chaining_geometry_threshold", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_default(prop, 0.1f);
RNA_def_property_ui_text(prop,
More information about the Bf-blender-cvs
mailing list