From 0f7cb43902b45787e491f89258d2a5e03d66768c Mon Sep 17 00:00:00 2001 From: LaurentGom Date: Sun, 12 Jul 2009 10:27:28 +0000 Subject: [PATCH] Got rid of glBlendFuncSeparate which caused problems on old hardware -- need to find a proper fix for incorrect alpha values when rendering to a RenderImage git-svn-id: https://sfml.svn.sourceforge.net/svnroot/sfml/branches/sfml2@1172 4e206d99-4929-0410-ac5d-dfc041789085 --- src/SFML/Graphics/Drawable.cpp | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/src/SFML/Graphics/Drawable.cpp b/src/SFML/Graphics/Drawable.cpp index 41c5206ee..ecf571829 100644 --- a/src/SFML/Graphics/Drawable.cpp +++ b/src/SFML/Graphics/Drawable.cpp @@ -46,8 +46,6 @@ myBlendMode (Blend::Alpha), myNeedUpdate (true), myInvNeedUpdate(true) { - // Make sure that GLEW is initialized (for glBlendFuncSeparate) - EnsureGlewInit(); } @@ -378,22 +376,14 @@ void Drawable::Draw(RenderTarget& target) const { GLCheck(glEnable(GL_BLEND)); - // We have to use glBlendFuncSeparate so that the resulting alpha is - // not alphaČ, which is incorrect and would cause problems when rendering - // alpha pixels to a RenderImage that would be in turn rendered to another render target + // @todo the resulting alpha may not be correct, which matters when target is a RenderImage. + // find a fix for this (glBlendFuncSeparate -- but not supported by every graphics card) switch (myBlendMode) { - case Blend::Alpha : - GLCheck(glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA)); - break; - case Blend::Add : - GLCheck(glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE, GL_ONE, GL_ONE_MINUS_SRC_ALPHA)); - break; - case Blend::Multiply : - GLCheck(glBlendFuncSeparate(GL_DST_COLOR, GL_ZERO, GL_ONE, GL_ONE_MINUS_SRC_ALPHA)); - break; - default : - break; + case Blend::Alpha : GLCheck(glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)); break; + case Blend::Add : GLCheck(glBlendFunc(GL_SRC_ALPHA, GL_ONE)); break; + case Blend::Multiply : GLCheck(glBlendFunc(GL_DST_COLOR, GL_ZERO)); break; + default : break; } }