soc-2008-mxcurioni: imposed the glBlendEquation test accross all platforms (providing greater robustness), introduced the FRS_glBlendEquation that uses glBlendEquation/glBlendEquationEXT based on the system's capabilities.

This commit is contained in:
Maxime Curioni 2008-09-28 18:18:30 +00:00
parent 26709ce90c
commit 5812c494a5
3 changed files with 17 additions and 34 deletions

@ -19,16 +19,7 @@
//
///////////////////////////////////////////////////////////////////////////////
#ifdef WIN32
# include <GL/glew.h>
# include <windows.h>
#endif
#ifdef __MACH__
# include <OpenGL/gl.h>
#else
# include <GL/gl.h>
#endif
#include "../rendering/GLBlendEquation.h"
#include "AppGLWidget.h"
#include "../image/Image.h"
@ -103,7 +94,7 @@ void AppCanvas::preDraw()
void AppCanvas::init()
{
#ifdef WIN32
static bool firsttime = true;
if (firsttime) {
@ -112,15 +103,18 @@ void AppCanvas::init()
{
cerr << "Error: problem occurred while initializing GLEW" << endl;
}
cout << "GLEW initialized" << endl;
cout << "GLEW initialized: ";
if(!glBlendEquation) {
if(glBlendEquation) {
cout << "using glBlendEquation" << endl;
} else if(glBlendEquationEXT) {
cout << "using glBlendEquationEXT" << endl;
} else {
_basic = true;
cout << "glBlendEquation unavailable on this hardware -> switching to strokes basic rendering mode" << endl;
cout << "glBlendEquation or glBlendEquationEXT unavailable on this hardware -> switching to strokes basic rendering mode" << endl;
}
firsttime=false;
}
#endif
_Renderer = new GLStrokeRenderer;
if(!StrokeRenderer::loadTextures())
@ -258,12 +252,12 @@ void AppCanvas::Render(const StrokeRenderer *iRenderer)
glDisable(GL_DEPTH_TEST);
glBlendEquation(GL_ADD);
FRS_glBlendEquation(GL_ADD);
glBlendFunc(GL_DST_COLOR, GL_ZERO);
glPushAttrib(GL_COLOR_BUFFER_BIT);
glBlendEquation(GL_FUNC_SUBTRACT);
FRS_glBlendEquation(GL_FUNC_SUBTRACT);
glBlendFunc(GL_ONE, GL_ONE);
glDisable(GL_TEXTURE_2D);
@ -280,7 +274,7 @@ void AppCanvas::Render(const StrokeRenderer *iRenderer)
glPopAttrib();
glDisable(GL_DEPTH_TEST);
glBlendEquation(GL_ADD);
FRS_glBlendEquation(GL_ADD);
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
glEnable(GL_TEXTURE_2D);
@ -288,7 +282,7 @@ void AppCanvas::Render(const StrokeRenderer *iRenderer)
Canvas::Render(iRenderer);
//
glPushAttrib(GL_COLOR_BUFFER_BIT);
glBlendEquation(GL_FUNC_SUBTRACT);
FRS_glBlendEquation(GL_FUNC_SUBTRACT);
glBlendFunc(GL_ONE, GL_ONE);
glDisable(GL_TEXTURE_2D);

@ -36,8 +36,6 @@ extern "C" {
#include "../system/StringUtils.h"
//#define glBlendEquation(x)
GLStrokeRenderer::GLStrokeRenderer()
:StrokeRenderer()
{
@ -95,16 +93,16 @@ void GLStrokeRenderer::RenderStrokeRep(StrokeRep *iStrokeRep) const
if(strokeType==Stroke::DRY_MEDIUM)
{
glBlendEquation(GL_MAX);
FRS_glBlendEquation(GL_MAX);
}
else if(strokeType==Stroke::OPAQUE_MEDIUM)
{
glBlendEquation(GL_ADD);
FRS_glBlendEquation(GL_ADD);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}
else
{
glBlendEquation(GL_ADD);
FRS_glBlendEquation(GL_ADD);
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
}
glEnable(GL_TEXTURE_2D);

@ -34,16 +34,7 @@
# include "../stroke/StrokeRenderer.h"
# include "../stroke/StrokeRep.h"
#ifdef WIN32
# include <GL/glew.h>
# include <windows.h>
#endif
#ifdef __MACH__
# include <OpenGL/gl.h>
#else
# include <GL/gl.h>
#endif
#include "GLBlendEquation.h"
/**********************************/
/* */