Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2017-03-03 15:51:59 +0300
committerClément Foucault <foucault.clem@gmail.com>2017-03-03 15:51:59 +0300
commit0c5b197447dec23033bfab3b84fb9dadf4ffd8e1 (patch)
treea1dd4da4235e63202b7cd4c672ae6c7e2ce1e59a /source
parent2a82162618f7b8325a59fe42336b2a5f215e7080 (diff)
Edit Mesh overlay: remove one extra buffer.
Diffstat (limited to 'source')
-rw-r--r--source/blender/draw/modes/edit_mesh_mode.c15
-rw-r--r--source/blender/draw/modes/shaders/edit_overlay_mix_frag.glsl26
2 files changed, 6 insertions, 35 deletions
diff --git a/source/blender/draw/modes/edit_mesh_mode.c b/source/blender/draw/modes/edit_mesh_mode.c
index c9a998df9a2..691c967f282 100644
--- a/source/blender/draw/modes/edit_mesh_mode.c
+++ b/source/blender/draw/modes/edit_mesh_mode.c
@@ -49,14 +49,12 @@ typedef struct EDIT_MESH_PassList {
/* keep it under MAX_BUFFERS */
typedef struct EDIT_MESH_FramebufferList {
struct GPUFrameBuffer *occlude_wire_fb;
- struct GPUFrameBuffer *occlude_face_fb;
} EDIT_MESH_FramebufferList;
/* keep it under MAX_TEXTURES */
typedef struct EDIT_MESH_TextureList {
struct GPUTexture *occlude_wire_depth_tx;
struct GPUTexture *occlude_wire_color_tx;
- struct GPUTexture *occlude_face_color_tx;
} EDIT_MESH_TextureList;
static DRWShadingGroup *depth_shgrp_hidden_wire;
@@ -110,11 +108,6 @@ void EDIT_MESH_init(void)
(int)viewport_size[0], (int)viewport_size[1],
tex, 2);
- DRWFboTexture tex2 = {&txl->occlude_face_color_tx, DRW_BUF_RGBA_8};
- DRW_framebuffer_init(&fbl->occlude_face_fb,
- (int)viewport_size[0], (int)viewport_size[1],
- &tex2, 1);
-
if (!overlay_tri_sh) {
overlay_tri_sh = DRW_shader_create(datatoc_edit_overlay_vert_glsl,
datatoc_edit_overlay_geom_tri_glsl,
@@ -244,7 +237,7 @@ void EDIT_MESH_cache_init(void)
/* however we loose the front faces value (because we need the depth of occluded wires and
* faces are alpha blended ) so we recover them in a new pass. */
- psl->facefill_occlude_pass = DRW_pass_create("Front Face Color", DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_LESS);
+ psl->facefill_occlude_pass = DRW_pass_create("Front Face Color", DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_LESS | DRW_STATE_BLEND);
facefill_occluded_shgrp = DRW_shgroup_create(overlay_facefill_sh, psl->facefill_occlude_pass);
DRW_shgroup_uniform_block(facefill_occluded_shgrp, "globalsBlock", globals_ubo, 0);
@@ -260,7 +253,6 @@ void EDIT_MESH_cache_init(void)
DRW_shgroup_call_add(mix_shgrp, quad, mat);
DRW_shgroup_uniform_float(mix_shgrp, "alpha", &backwire_opacity, 1);
DRW_shgroup_uniform_buffer(mix_shgrp, "wireColor", &txl->occlude_wire_color_tx, 0);
- DRW_shgroup_uniform_buffer(mix_shgrp, "faceColor", &txl->occlude_face_color_tx, 1);
DRW_shgroup_uniform_buffer(mix_shgrp, "wireDepth", &txl->occlude_wire_depth_tx, 2);
DRW_shgroup_uniform_buffer(mix_shgrp, "sceneDepth", &dtxl->depth, 3);
}
@@ -366,12 +358,7 @@ void EDIT_MESH_draw(void)
if (psl->edit_face_occluded_pass) {
float clearcol[4] = {0.0f, 0.0f, 0.0f, 0.0f};
/* render facefill */
- DRW_framebuffer_texture_detach(dtxl->depth);
- DRW_framebuffer_texture_attach(fbl->occlude_face_fb, dtxl->depth, 0);
- DRW_framebuffer_bind(fbl->occlude_face_fb);
- DRW_framebuffer_clear(true, false, clearcol);
DRW_draw_pass(psl->facefill_occlude_pass);
- DRW_framebuffer_texture_detach(dtxl->depth);
/* Render wires on a separate framebuffer */
DRW_framebuffer_bind(fbl->occlude_wire_fb);
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 67687c7fc2f..c63579ebc3f 100644
--- a/source/blender/draw/modes/shaders/edit_overlay_mix_frag.glsl
+++ b/source/blender/draw/modes/shaders/edit_overlay_mix_frag.glsl
@@ -3,38 +3,22 @@ out vec4 FragColor;
uniform sampler2D wireColor;
uniform sampler2D wireDepth;
-uniform sampler2D faceColor;
uniform sampler2D sceneDepth;
uniform float alpha;
-vec4 linear(vec4 col)
-{
- const float fac = 0.45454545;
- return vec4(pow(col.r,fac), pow(col.g,fac), pow(col.b,fac), col.a);
-}
-
-vec4 srgb(vec4 col)
-{
- const float fac = 2.2;
- return vec4(pow(col.r,fac), pow(col.g,fac), pow(col.b,fac), col.a);
-}
-
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;
- vec4 face_color = texelFetch(faceColor, co, 0).rgba;
+
+ FragColor = wire_color;
/* this works because not rendered depth is 1.0 and the
* following test is always true even when no wires */
- if (wire_depth > scene_depth) {
- wire_color.a *= alpha;
- FragColor.rgb = mix(face_color.rgb, wire_color.rgb, wire_color.a);
- FragColor.a = face_color.a + wire_color.a;
- }
- else {
- FragColor = wire_color;
+ if ((wire_depth > scene_depth) && (wire_color.a > 0)) {
+ /* Note : Using wire_color.a * alpha produce unwanted result */
+ FragColor.a = alpha;
}
}