[Bf-blender-cvs] [8cad48df28] blender2.8: Draw Manager: Created a general fullscreen shader.

Clément Foucault noreply at git.blender.org
Sat Mar 18 02:07:38 CET 2017


Commit: 8cad48df2801ff7e1321e477e39df8eff2f13d39
Author: Clément Foucault
Date:   Thu Mar 16 23:58:30 2017 +0100
Branches: blender2.8
https://developer.blender.org/rB8cad48df2801ff7e1321e477e39df8eff2f13d39

Draw Manager: Created a general fullscreen shader.

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

M	source/blender/draw/intern/DRW_render.h
M	source/blender/draw/intern/draw_cache.c
M	source/blender/draw/intern/draw_manager.c
M	source/blender/draw/modes/edit_mesh_mode.c
M	source/blender/draw/modes/shaders/edit_overlay_mix_frag.glsl
D	source/blender/draw/modes/shaders/edit_overlay_mix_vert.glsl
M	source/blender/gpu/CMakeLists.txt
M	source/blender/gpu/intern/gpu_shader.c
R100	source/blender/gpu/shaders/gpu_shader_fx_vert.glsl	source/blender/gpu/shaders/gpu_shader_fullscreen_vert.glsl

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

diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index 27515686fd..470f061ebe 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -169,6 +169,7 @@ void DRW_framebuffer_blit(struct GPUFrameBuffer *fb_read, struct GPUFrameBuffer
 struct GPUShader *DRW_shader_create(const char *vert, const char *geom, const char *frag, const char *defines);
 struct GPUShader *DRW_shader_create_2D(const char *frag, const char *defines);
 struct GPUShader *DRW_shader_create_3D(const char *frag, const char *defines);
+struct GPUShader *DRW_shader_create_fullscreen(const char *frag, const char *defines);
 struct GPUShader *DRW_shader_create_3D_depth_only(void);
 void DRW_shader_free(struct GPUShader *shader);
 
diff --git a/source/blender/draw/intern/draw_cache.c b/source/blender/draw/intern/draw_cache.c
index 2b5f2d2ab2..0d79011d26 100644
--- a/source/blender/draw/intern/draw_cache.c
+++ b/source/blender/draw/intern/draw_cache.c
@@ -251,30 +251,26 @@ static VertexBuffer *sphere_wire_vbo(const float rad)
 Batch *DRW_cache_fullscreen_quad_get(void)
 {
 	if (!SHC.drw_fullscreen_quad) {
-		float v1[2] = {-1.0f, -1.0f};
-		float v2[2] = { 1.0f, -1.0f};
-		float v3[2] = {-1.0f,  1.0f};
-		float v4[2] = { 1.0f,  1.0f};
+		float pos[4][2] = {{-1.0f, -1.0f}, { 1.0f, -1.0f}, {-1.0f,  1.0f}, { 1.0f,  1.0f}};
+		float uvs[4][2] = {{ 0.0f,  0.0f}, { 1.0f,  0.0f}, { 0.0f,  1.0f}, { 1.0f,  1.0f}};
 
 		/* Position Only 2D format */
 		static VertexFormat format = { 0 };
-		static unsigned pos_id;
+		static unsigned pos_id, uvs_id;
 		if (format.attrib_ct == 0) {
 			pos_id = add_attrib(&format, "pos", GL_FLOAT, 2, KEEP_FLOAT);
+			uvs_id = add_attrib(&format, "uvs", GL_FLOAT, 2, KEEP_FLOAT);
 		}
 
 		VertexBuffer *vbo = VertexBuffer_create_with_format(&format);
-		VertexBuffer_allocate_data(vbo, 6);
+		VertexBuffer_allocate_data(vbo, 4);
 
-		setAttrib(vbo, pos_id, 0, v1);
-		setAttrib(vbo, pos_id, 1, v2);
-		setAttrib(vbo, pos_id, 2, v3);
-
-		setAttrib(vbo, pos_id, 3, v2);
-		setAttrib(vbo, pos_id, 4, v3);
-		setAttrib(vbo, pos_id, 5, v4);
+		for (int i = 0; i < 4; ++i)	{
+			setAttrib(vbo, pos_id, i, pos[i]);
+			setAttrib(vbo, uvs_id, i, uvs[i]);
+		}
 
-		SHC.drw_fullscreen_quad = Batch_create(GL_TRIANGLES, vbo, NULL);
+		SHC.drw_fullscreen_quad = Batch_create(GL_TRIANGLE_STRIP, vbo, NULL);
 	}
 	return SHC.drw_fullscreen_quad;
 }
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index a085816872..0256f2759d 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -63,6 +63,7 @@
 
 extern char datatoc_gpu_shader_2D_vert_glsl[];
 extern char datatoc_gpu_shader_3D_vert_glsl[];
+extern char datatoc_gpu_shader_fullscreen_vert_glsl[];
 
 /* Structures */
 typedef enum {
@@ -315,6 +316,11 @@ GPUShader *DRW_shader_create_3D(const char *frag, const char *defines)
 	return GPU_shader_create(datatoc_gpu_shader_3D_vert_glsl, frag, NULL, NULL, defines, 0, 0, 0);
 }
 
+GPUShader *DRW_shader_create_fullscreen(const char *frag, const char *defines)
+{
+	return GPU_shader_create(datatoc_gpu_shader_fullscreen_vert_glsl, frag, NULL, NULL, defines, 0, 0, 0);
+}
+
 GPUShader *DRW_shader_create_3D_depth_only(void)
 {
 	return GPU_shader_get_builtin_shader(GPU_SHADER_3D_DEPTH_ONLY);
diff --git a/source/blender/draw/modes/edit_mesh_mode.c b/source/blender/draw/modes/edit_mesh_mode.c
index 1d5b064ebb..40404b2daf 100644
--- a/source/blender/draw/modes/edit_mesh_mode.c
+++ b/source/blender/draw/modes/edit_mesh_mode.c
@@ -166,8 +166,7 @@ static void EDIT_MESH_engine_init(void)
 		                                       datatoc_edit_overlay_facedot_frag_glsl, NULL);
 	}
 	if (!overlay_mix_sh) {
-		overlay_mix_sh = DRW_shader_create(datatoc_edit_overlay_mix_vert_glsl, NULL,
-		                                   datatoc_edit_overlay_mix_frag_glsl, NULL);
+		overlay_mix_sh = DRW_shader_create_fullscreen(datatoc_edit_overlay_mix_frag_glsl, NULL);
 	}
 	if (!overlay_facefill_sh) {
 		overlay_facefill_sh = DRW_shader_create(datatoc_edit_overlay_facefill_vert_glsl, NULL,
diff --git a/source/blender/draw/modes/shaders/edit_overlay_mix_frag.glsl b/source/blender/draw/modes/shaders/edit_overlay_mix_frag.glsl
index c63579ebc3..02943f2403 100644
--- a/source/blender/draw/modes/shaders/edit_overlay_mix_frag.glsl
+++ b/source/blender/draw/modes/shaders/edit_overlay_mix_frag.glsl
@@ -1,4 +1,6 @@
 
+in vec4 uvcoordsvar;
+
 out vec4 FragColor;
 
 uniform sampler2D wireColor;
@@ -8,10 +10,9 @@ uniform float alpha;
 
 void main()
 {
-	ivec2 co = ivec2(gl_FragCoord.xy);
-	float wire_depth = texelFetch(wireDepth, co, 0).r;
-	float scene_depth = texelFetch(sceneDepth, co, 0).r;
-	vec4 wire_color = texelFetch(wireColor, co, 0).rgba;
+	float wire_depth = texelFetch(wireDepth, uvcoordsvar, 0).r;
+	float scene_depth = texelFetch(sceneDepth, uvcoordsvar, 0).r;
+	vec4 wire_color = texelFetch(wireColor, uvcoordsvar, 0).rgba;
 
 	FragColor = wire_color;
 
diff --git a/source/blender/draw/modes/shaders/edit_overlay_mix_vert.glsl b/source/blender/draw/modes/shaders/edit_overlay_mix_vert.glsl
deleted file mode 100644
index ef3d5d717b..0000000000
--- a/source/blender/draw/modes/shaders/edit_overlay_mix_vert.glsl
+++ /dev/null
@@ -1,7 +0,0 @@
-
-in vec2 pos;
-
-void main()
-{
-	gl_Position = vec4(pos, 0.0, 1.0);
-}
diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt
index 1791b34d4c..42eb9cdcd3 100644
--- a/source/blender/gpu/CMakeLists.txt
+++ b/source/blender/gpu/CMakeLists.txt
@@ -78,7 +78,7 @@ set(SRC
 	shaders/gpu_shader_fx_dof_hq_frag.glsl
 	shaders/gpu_shader_fx_dof_hq_vert.glsl
 	shaders/gpu_shader_fx_dof_hq_geo.glsl
-	shaders/gpu_shader_fx_vert.glsl
+	shaders/gpu_shader_fullscreen_vert.glsl
 	shaders/gpu_shader_material.glsl
 	shaders/gpu_shader_sep_gaussian_blur_frag.glsl
 	shaders/gpu_shader_sep_gaussian_blur_vert.glsl
@@ -202,7 +202,7 @@ data_to_c_simple(shaders/gpu_shader_vertex.glsl SRC)
 data_to_c_simple(shaders/gpu_shader_vertex_world.glsl SRC)
 data_to_c_simple(shaders/gpu_shader_vsm_store_frag.glsl SRC)
 data_to_c_simple(shaders/gpu_shader_vsm_store_vert.glsl SRC)
-data_to_c_simple(shaders/gpu_shader_fx_vert.glsl SRC)
+data_to_c_simple(shaders/gpu_shader_fullscreen_vert.glsl SRC)
 data_to_c_simple(shaders/gpu_shader_fx_ssao_frag.glsl SRC)
 data_to_c_simple(shaders/gpu_shader_fx_dof_frag.glsl SRC)
 data_to_c_simple(shaders/gpu_shader_fx_dof_vert.glsl SRC)
diff --git a/source/blender/gpu/intern/gpu_shader.c b/source/blender/gpu/intern/gpu_shader.c
index dd3917eaaa..d2d8011829 100644
--- a/source/blender/gpu/intern/gpu_shader.c
+++ b/source/blender/gpu/intern/gpu_shader.c
@@ -126,7 +126,7 @@ extern char datatoc_gpu_shader_vsm_store_vert_glsl[];
 extern char datatoc_gpu_shader_vsm_store_frag_glsl[];
 extern char datatoc_gpu_shader_sep_gaussian_blur_vert_glsl[];
 extern char datatoc_gpu_shader_sep_gaussian_blur_frag_glsl[];
-extern char datatoc_gpu_shader_fx_vert_glsl[];
+extern char datatoc_gpu_shader_fullscreen_vert_glsl[];
 extern char datatoc_gpu_shader_fx_ssao_frag_glsl[];
 extern char datatoc_gpu_shader_fx_dof_frag_glsl[];
 extern char datatoc_gpu_shader_fx_dof_vert_glsl[];
@@ -827,7 +827,7 @@ GPUShader *GPU_shader_get_builtin_fx_shader(int effect, bool persp)
 
 		switch (effect) {
 			case GPU_SHADER_FX_SSAO:
-				shader = GPU_shader_create(datatoc_gpu_shader_fx_vert_glsl, datatoc_gpu_shader_fx_ssao_frag_glsl, NULL, datatoc_gpu_shader_fx_lib_glsl, defines, 0, 0, 0);
+				shader = GPU_shader_create(datatoc_gpu_shader_fullscreen_vert_glsl, datatoc_gpu_shader_fx_ssao_frag_glsl, NULL, datatoc_gpu_shader_fx_lib_glsl, defines, 0, 0, 0);
 				break;
 
 			case GPU_SHADER_FX_DEPTH_OF_FIELD_PASS_ONE:
@@ -872,7 +872,7 @@ GPUShader *GPU_shader_get_builtin_fx_shader(int effect, bool persp)
 				break;
 
 			case GPU_SHADER_FX_DEPTH_RESOLVE:
-				shader = GPU_shader_create(datatoc_gpu_shader_fx_vert_glsl, datatoc_gpu_shader_fx_depth_resolve_glsl, NULL, NULL, defines, 0, 0, 0);
+				shader = GPU_shader_create(datatoc_gpu_shader_fullscreen_vert_glsl, datatoc_gpu_shader_fx_depth_resolve_glsl, NULL, NULL, defines, 0, 0, 0);
 				break;
 		}
 
diff --git a/source/blender/gpu/shaders/gpu_shader_fx_vert.glsl b/source/blender/gpu/shaders/gpu_shader_fullscreen_vert.glsl
similarity index 100%
rename from source/blender/gpu/shaders/gpu_shader_fx_vert.glsl
rename to source/blender/gpu/shaders/gpu_shader_fullscreen_vert.glsl




More information about the Bf-blender-cvs mailing list