diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2018-03-25 04:34:06 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2018-03-25 21:06:12 +0300 |
commit | 37a7cd83440573233383166931db5a5216e77698 (patch) | |
tree | e027c79004bc61098f7a2c11647bb6c4c7b65b44 /source/blender/gpu/intern/gpu_viewport.c | |
parent | 6d6c292cf8b81c2579c1ac37f316b57579128d51 (diff) |
GPUViewport: Small simplifications + fixes.
- Use GPU_SHADER_2D_IMAGE_ALPHA.
- Add alpha uniform.
- bypass reseting the scissors and depth test because we used
another context for drawing.
Diffstat (limited to 'source/blender/gpu/intern/gpu_viewport.c')
-rw-r--r-- | source/blender/gpu/intern/gpu_viewport.c | 34 |
1 files changed, 9 insertions, 25 deletions
diff --git a/source/blender/gpu/intern/gpu_viewport.c b/source/blender/gpu/intern/gpu_viewport.c index 7518537fcdb..0f061f1c791 100644 --- a/source/blender/gpu/intern/gpu_viewport.c +++ b/source/blender/gpu/intern/gpu_viewport.c @@ -520,8 +520,13 @@ cleanup_multisample: GPU_framebuffer_slots_bind(dfbl->default_fb, 0); } -static void draw_ofs_to_screen(GPUViewport *viewport, const rcti *rect) +void GPU_viewport_draw_to_screen(GPUViewport *viewport, const rcti *rect) { + DefaultFramebufferList *dfbl = viewport->fbl; + + if (dfbl->default_fb == NULL) + return; + DefaultTextureList *dtxl = viewport->txl; GPUTexture *color = dtxl->color; @@ -536,10 +541,11 @@ static void draw_ofs_to_screen(GPUViewport *viewport, const rcti *rect) unsigned int texcoord = GWN_vertformat_attr_add(format, "texCoord", GWN_COMP_F32, 2, GWN_FETCH_FLOAT); unsigned int pos = GWN_vertformat_attr_add(format, "pos", GWN_COMP_F32, 2, GWN_FETCH_FLOAT); - immBindBuiltinProgram(GPU_SHADER_3D_IMAGE_MODULATE_ALPHA); + immBindBuiltinProgram(GPU_SHADER_2D_IMAGE_ALPHA); GPU_texture_bind(color, 0); immUniform1i("image", 0); /* default GL_TEXTURE0 unit */ + immUniform1f("alpha", 1.0f); immBegin(GWN_PRIM_TRI_STRIP, 4); @@ -562,31 +568,9 @@ static void draw_ofs_to_screen(GPUViewport *viewport, const rcti *rect) immUnbindProgram(); } -void GPU_viewport_unbind(GPUViewport *viewport) +void GPU_viewport_unbind(GPUViewport *UNUSED(viewport)) { - DefaultFramebufferList *dfbl = viewport->fbl; - - if (dfbl->default_fb) { - GPU_framebuffer_texture_unbind(NULL, NULL); - GPU_framebuffer_restore(); - } - DRW_opengl_context_disable(); - - if (dfbl->default_fb) { - glEnable(GL_SCISSOR_TEST); - glDisable(GL_DEPTH_TEST); - } -} - -void GPU_viewport_draw_to_screen(GPUViewport *viewport, const rcti *rect) -{ - DefaultFramebufferList *dfbl = viewport->fbl; - - if (dfbl->default_fb) { - /* This might be bandwidth limiting */ - draw_ofs_to_screen(viewport, rect); - } } static void gpu_viewport_buffers_free( |