diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2017-03-17 01:58:30 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2017-03-18 03:56:34 +0300 |
commit | 8cad48df2801ff7e1321e477e39df8eff2f13d39 (patch) | |
tree | f2a1ef4dd160e1b3a4e84bf5a3f6658ff906e167 /source/blender | |
parent | cf62424e47c2b9f266128ad63a796b749d18f7e2 (diff) |
Draw Manager: Created a general fullscreen shader.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/draw/intern/DRW_render.h | 1 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_cache.c | 24 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_manager.c | 6 | ||||
-rw-r--r-- | source/blender/draw/modes/edit_mesh_mode.c | 3 | ||||
-rw-r--r-- | source/blender/draw/modes/shaders/edit_overlay_mix_frag.glsl | 9 | ||||
-rw-r--r-- | source/blender/draw/modes/shaders/edit_overlay_mix_vert.glsl | 7 | ||||
-rw-r--r-- | source/blender/gpu/CMakeLists.txt | 4 | ||||
-rw-r--r-- | source/blender/gpu/intern/gpu_shader.c | 6 | ||||
-rw-r--r-- | source/blender/gpu/shaders/gpu_shader_fullscreen_vert.glsl (renamed from source/blender/gpu/shaders/gpu_shader_fx_vert.glsl) | 0 |
9 files changed, 28 insertions, 32 deletions
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h index 27515686fd2..470f061ebef 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 2b5f2d2ab2b..0d79011d267 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 a0858168722..0256f2759d6 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 1d5b064ebbd..40404b2daff 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 c63579ebc3f..02943f24031 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 ef3d5d717bc..00000000000 --- 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 1791b34d4c8..42eb9cdcd32 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 dd3917eaaac..d2d8011829b 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 index cf2d28343cc..cf2d28343cc 100644 --- a/source/blender/gpu/shaders/gpu_shader_fx_vert.glsl +++ b/source/blender/gpu/shaders/gpu_shader_fullscreen_vert.glsl |