diff options
Diffstat (limited to 'source/blender/gpu/intern')
-rw-r--r-- | source/blender/gpu/intern/gpu_state.cc | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/source/blender/gpu/intern/gpu_state.cc b/source/blender/gpu/intern/gpu_state.cc index 485aa3b852e..d2aa0816a3f 100644 --- a/source/blender/gpu/intern/gpu_state.cc +++ b/source/blender/gpu/intern/gpu_state.cc @@ -35,8 +35,17 @@ #include "gpu_state_private.hh" +/* TODO remove */ +#include "gl_state.hh" + using namespace blender::gpu; +// /* This should replace GPU_blend, GPU_blend_set_func and GPU_blend_set_func_separate. */ +// void GPU_blend_set(eGPUBlend blend) +// { +// GLStateStack::set_blend(blend); +// } + static GLenum gpu_get_gl_blendfunction(eGPUBlendFunction blend) { switch (blend) { @@ -59,16 +68,30 @@ static GLenum gpu_get_gl_blendfunction(eGPUBlendFunction blend) void GPU_blend(bool enable) { if (enable) { - glEnable(GL_BLEND); + GLStateStack::set_blend(GPU_BLEND_ALPHA); } else { - glDisable(GL_BLEND); + GLStateStack::set_blend(GPU_BLEND_NONE); } } void GPU_blend_set_func(eGPUBlendFunction sfactor, eGPUBlendFunction dfactor) { - glBlendFunc(gpu_get_gl_blendfunction(sfactor), gpu_get_gl_blendfunction(dfactor)); + if (sfactor == GPU_ONE && dfactor == GPU_ONE) { + GLStateStack::set_blend(GPU_BLEND_ADDITIVE); + } + else if (sfactor == GPU_ONE && dfactor == GPU_ONE_MINUS_SRC_ALPHA) { + GLStateStack::set_blend(GPU_BLEND_ALPHA_PREMULT); + } + else if (sfactor == GPU_SRC_ALPHA && dfactor == GPU_ONE_MINUS_SRC_ALPHA) { + GLStateStack::set_blend(GPU_BLEND_ALPHA); + } + else if (sfactor == GPU_DST_COLOR && dfactor == GPU_ZERO) { + GLStateStack::set_blend(GPU_BLEND_MULTIPLY); + } + else { + BLI_assert(0); + } } void GPU_blend_set_func_separate(eGPUBlendFunction src_rgb, |