[Bf-blender-cvs] [c80bb336d6b] greasepencil-object: Fix DOF render segment fault and use Eevee UI options

Antonio Vazquez noreply at git.blender.org
Thu Mar 29 17:58:27 CEST 2018


Commit: c80bb336d6bbab717c70f66047c93aaff3aaf138
Author: Antonio Vazquez
Date:   Thu Mar 29 16:56:47 2018 +0200
Branches: greasepencil-object
https://developer.blender.org/rBc80bb336d6bbab717c70f66047c93aaff3aaf138

Fix DOF render segment fault and use Eevee UI options

To activate the DOF for grease pencil, the Eevee option is used as main flag.

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

M	source/blender/draw/engines/gpencil/gpencil_depth_of_field.c
M	source/blender/draw/engines/gpencil/gpencil_engine.c

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

diff --git a/source/blender/draw/engines/gpencil/gpencil_depth_of_field.c b/source/blender/draw/engines/gpencil/gpencil_depth_of_field.c
index 478d03241a7..c45bd3c00f6 100644
--- a/source/blender/draw/engines/gpencil/gpencil_depth_of_field.c
+++ b/source/blender/draw/engines/gpencil/gpencil_depth_of_field.c
@@ -57,8 +57,11 @@ static void gpencil_create_shader_depth_of_field(GPENCIL_e_data *e_data)
 int GPENCIL_depth_of_field_init(DrawEngineType *draw_engine_gpencil_type, GPENCIL_e_data *e_data, GPENCIL_Data *vedata, Object *camera)
 {
 	GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl;
-	GPENCIL_FramebufferList *fbl = ((GPENCIL_Data *)vedata)->fbl;
+	if (stl->storage->enable_dof == false) {
+		return 0;
+	}
 
+	GPENCIL_FramebufferList *fbl = ((GPENCIL_Data *)vedata)->fbl;
 	const DRWContextState *draw_ctx = DRW_context_state_get();
 
 	Scene *scene = draw_ctx->scene;
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.c b/source/blender/draw/engines/gpencil/gpencil_engine.c
index 32e94eed055..1809b0e9e36 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.c
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.c
@@ -188,10 +188,21 @@ static void GPENCIL_engine_init(void *vedata)
 	if (!e_data.gpencil_blank_texture) {
 		e_data.gpencil_blank_texture = DRW_gpencil_create_blank_texture(16, 16);
 	}
+
 	/* init depth of field */ 
-	if (!DRW_state_is_image_render()) {
-		Object *camera = (rv3d->persp == RV3D_CAMOB) ? v3d->camera : NULL;
-		GPENCIL_depth_of_field_init(&draw_engine_gpencil_type, &e_data, vedata, camera);
+	ViewLayer *view_layer = draw_ctx->view_layer;
+	IDProperty *props = BKE_view_layer_engine_evaluated_get(view_layer, COLLECTION_MODE_NONE, RE_engine_id_BLENDER_EEVEE);
+	if ((DRW_state_is_opengl_render()) || (!DRW_state_is_image_render())) {
+		/* viewport and opengl render */
+		stl->storage->enable_dof = GP_IS_CAMERAVIEW && BKE_collection_engine_property_value_get_bool(props, "dof_enable");
+		if (stl->storage->enable_dof == true) {
+			Object *camera = (rv3d->persp == RV3D_CAMOB) ? v3d->camera : NULL;
+			GPENCIL_depth_of_field_init(&draw_engine_gpencil_type, &e_data, vedata, camera);
+		}
+	}
+	else {
+		/* render F12 */
+		stl->storage->enable_dof = BKE_collection_engine_property_value_get_bool(props, "dof_enable");
 	}
 }
 
@@ -466,8 +477,7 @@ static void GPENCIL_cache_init(void *vedata)
 			DRW_shgroup_uniform_int(paper_shgrp, "uselines", &stl->storage->uselines, 1);
 		}
 
-		/* depth of field (TODO: UI) */
-		stl->storage->enable_dof = GP_IS_CAMERAVIEW;
+		/* depth of field */
 		GPENCIL_depth_of_field_cache_init(&e_data, vedata);
 	}
 }
@@ -834,7 +844,7 @@ static void GPENCIL_draw_scene(void *vedata)
 				 * send always to tx_b because other textures can be in use. Remap input
 				 * textures too.
 				 */
-				if ((GP_IS_CAMERAVIEW) || (is_render)) {
+				if (stl->storage->enable_dof == true) {
 					GPENCIL_depth_of_field_draw(&e_data, vedata);
 
 					e_data.input_depth_tx = e_data.vfx_depth_tx_b;



More information about the Bf-blender-cvs mailing list