[Bf-blender-cvs] [68b920d6a17] blender2.8-workbench: Workbench: Shadow primitives

Jeroen Bakker noreply at git.blender.org
Thu Apr 26 17:19:00 CEST 2018


Commit: 68b920d6a17ab5dc221e43b7bd3a9ca54d486004
Author: Jeroen Bakker
Date:   Thu Apr 26 17:18:03 2018 +0200
Branches: blender2.8-workbench
https://developer.blender.org/rB68b920d6a17ab5dc221e43b7bd3a9ca54d486004

Workbench: Shadow primitives

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

M	source/blender/draw/engines/workbench/shaders/workbench_shadow_geom.glsl
M	source/blender/draw/engines/workbench/workbench_materials.c

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

diff --git a/source/blender/draw/engines/workbench/shaders/workbench_shadow_geom.glsl b/source/blender/draw/engines/workbench/shaders/workbench_shadow_geom.glsl
index ac207aed4a3..a3bab32af67 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_shadow_geom.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_shadow_geom.glsl
@@ -1,16 +1,37 @@
 layout(triangles) in;
-layout(triangle_strip, max_vertices=3) out;
+layout(triangle_strip, max_vertices=12) out;
 
-uniform vec4 direction = vec4(0.57, 0.57, 0.0, 0.0);
+uniform vec4 lightDirection = vec4(-4.0, -25.0, 0.0, 0.0);
 
 void main()
 {
-	for(int i = 0; i < gl_in.length(); i++)
-	{
-		vec4 new_pos = gl_in[i].gl_Position;
+	gl_Position = gl_in[0].gl_Position;
+	EmitVertex();
+	gl_Position = gl_in[1].gl_Position;
+	EmitVertex();
+	gl_Position = gl_in[0].gl_Position + lightDirection;
+	EmitVertex();
+	gl_Position = gl_in[1].gl_Position + lightDirection;
+	EmitVertex();
+	EndPrimitive();
 
-		new_pos += direction;
-		gl_Position = new_pos;
-		EmitVertex();
-	}
+	gl_Position = gl_in[1].gl_Position;
+	EmitVertex();
+	gl_Position = gl_in[2].gl_Position;
+	EmitVertex();
+	gl_Position = gl_in[1].gl_Position + lightDirection;
+	EmitVertex();
+	gl_Position = gl_in[2].gl_Position + lightDirection;
+	EmitVertex();
+	EndPrimitive();
+
+	gl_Position = gl_in[2].gl_Position;
+	EmitVertex();
+	gl_Position = gl_in[0].gl_Position;
+	EmitVertex();
+	gl_Position = gl_in[2].gl_Position + lightDirection;
+	EmitVertex();
+	gl_Position = gl_in[0].gl_Position + lightDirection;
+	EmitVertex();
+	EndPrimitive();
 }
\ No newline at end of file
diff --git a/source/blender/draw/engines/workbench/workbench_materials.c b/source/blender/draw/engines/workbench/workbench_materials.c
index dd44c393da3..a2c74e20b1c 100644
--- a/source/blender/draw/engines/workbench/workbench_materials.c
+++ b/source/blender/draw/engines/workbench/workbench_materials.c
@@ -303,7 +303,6 @@ void workbench_materials_cache_init(WORKBENCH_Data *vedata)
 		wpd->world_ubo = DRW_uniformbuffer_create(sizeof(WORKBENCH_UBO_World), NULL);
 		DRW_uniformbuffer_update(wpd->world_ubo, &wpd->world_data);
 
-		/* TODO: get from viewlayer collection engine */
 		psl->composite_pass = DRW_pass_create("Composite", DRW_STATE_WRITE_COLOR | DRW_STATE_STENCIL_EQUAL);
 		grp = DRW_shgroup_create(wpd->composite_sh, psl->composite_pass);
 		workbench_composite_uniforms(wpd, grp);
@@ -312,7 +311,7 @@ void workbench_materials_cache_init(WORKBENCH_Data *vedata)
 		DRW_shgroup_call_add(grp, DRW_cache_fullscreen_quad_get(), NULL);
 
 		if (SHADOW_ENABLED(wpd)) {
-			psl->shadow_pass = DRW_pass_create("Shadow", DRW_STATE_WRITE_STENCIL);
+			psl->shadow_pass = DRW_pass_create("Shadow", DRW_STATE_DEPTH_LESS | DRW_STATE_WRITE_STENCIL);
 			grp = DRW_shgroup_create(e_data.shadow_sh, psl->shadow_pass);
 			DRW_shgroup_stencil_mask(grp, 0x01);
 			wpd->shadow_shgrp = grp;



More information about the Bf-blender-cvs mailing list