diff --git a/libs_required/ACG/Scenegraph/TextNode.cc b/libs_required/ACG/Scenegraph/TextNode.cc index dabbaf88b5c742253b4f5e48248a6c163902cb15..2403d02a448e9a00584207ac35761967934deff6 100644 --- a/libs_required/ACG/Scenegraph/TextNode.cc +++ b/libs_required/ACG/Scenegraph/TextNode.cc @@ -246,31 +246,29 @@ createMap() { void TextNode:: -enter(GLState& _state, const DrawModes::DrawMode& /*_drawmode*/) { +enter(GLState& _state, const DrawModes::DrawMode& _drawmode) { + if(_state.compatibilityProfile()) + enterCompat(_state,_drawmode); + else + { if (text_.empty()) return; // store current gl state cullFaceEnabled_ = glIsEnabled(GL_CULL_FACE); - texture2dEnabled_ = glIsEnabled(GL_TEXTURE_2D); blendEnabled_ = glIsEnabled(GL_BLEND); depthEnabled_ = glIsEnabled(GL_DEPTH_TEST); - alphaTest_ = glIsEnabled(GL_ALPHA_TEST); - if (alphaTest_) - ACG::GLState::getAlphaFunc(&alphaTestFunc_, &alphaTestValue_); glGetIntegerv(GL_BLEND_SRC, &blendSrc_); glGetIntegerv(GL_BLEND_DST, &blendDest_); // set texture and drawing states ACG::GLState::disable(GL_CULL_FACE); - ACG::GLState::enable(GL_TEXTURE_2D); ACG::GLState::enable(GL_BLEND); - ACG::GLState::enable(GL_ALPHA_TEST); - ACG::GLState::alphaFunc(GL_GREATER, 0.2f); ACG::GLState::blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); if (alwaysOnTop_) ACG::GLState::disable(GL_DEPTH_TEST); + } } @@ -280,27 +278,26 @@ enter(GLState& _state, const DrawModes::DrawMode& /*_drawmode*/) { void TextNode:: -leave(GLState& /*_state*/, const DrawModes::DrawMode& /*_drawmode*/) { +leave(GLState& _state, const DrawModes::DrawMode& _drawmode) { + if(_state.compatibilityProfile()) + leaveCompat(_state, _drawmode); + else + { if (text_.empty()) return; // restore the GLState as it was when entering TextNode if (cullFaceEnabled_) - ACG::GLState::enable(GL_CULL_FACE); - if (!texture2dEnabled_) - ACG::GLState::disable(GL_TEXTURE_2D); + ACG::GLState::enable(GL_CULL_FACE); if (!blendEnabled_) ACG::GLState::disable(GL_BLEND); if (depthEnabled_) ACG::GLState::enable(GL_DEPTH_TEST); else - ACG::GLState::disable(GL_DEPTH_TEST); - if (!alphaTest_) - ACG::GLState::disable(GL_ALPHA_TEST); - else - ACG::GLState::alphaFunc(alphaTestFunc_, alphaTestValue_); + ACG::GLState::disable(GL_DEPTH_TEST); ACG::GLState::blendFunc(blendSrc_, blendDest_); + } } diff --git a/libs_required/ACG/Scenegraph/TextNode.hh b/libs_required/ACG/Scenegraph/TextNode.hh index 35a9b689d0554315356240c92a3509c7edc8beeb..46743092c8f0cc4b2a8c025ebc6d0f72413cb732 100644 --- a/libs_required/ACG/Scenegraph/TextNode.hh +++ b/libs_required/ACG/Scenegraph/TextNode.hh @@ -131,9 +131,11 @@ public: /// set texture and drawing states void enter(GLState& _state, const DrawModes::DrawMode& _drawmode); + void enterCompat(GLState& _state, const DrawModes::DrawMode& _drawmode); /// restore texture and drawing states void leave(GLState& _state, const DrawModes::DrawMode& _drawmode); + void leaveCompat(GLState& _state, const DrawModes::DrawMode& _drawmode); /// set RenderObject for Shader pipeline renderer void getRenderObjects(ACG::IRenderer* _renderer, ACG::GLState& _state , const ACG::SceneGraph::DrawModes::DrawMode& _drawMode , const ACG::SceneGraph::Material* _mat); diff --git a/libs_required/ACG/Scenegraph/TextNodeGLCompat.cc b/libs_required/ACG/Scenegraph/TextNodeGLCompat.cc new file mode 100644 index 0000000000000000000000000000000000000000..d3d4f610680c0358f0cae0107ab43faa8d861c29 --- /dev/null +++ b/libs_required/ACG/Scenegraph/TextNodeGLCompat.cc @@ -0,0 +1,139 @@ +/*===========================================================================*\ + * * + * OpenFlipper * + * Copyright (c) 2001-2015, RWTH-Aachen University * + * Department of Computer Graphics and Multimedia * + * All rights reserved. * + * www.openflipper.org * + * * + *---------------------------------------------------------------------------* + * This file is part of OpenFlipper. * + *---------------------------------------------------------------------------* + * * + * Redistribution and use in source and binary forms, with or without * + * modification, are permitted provided that the following conditions * + * are met: * + * * + * 1. Redistributions of source code must retain the above copyright notice, * + * this list of conditions and the following disclaimer. * + * * + * 2. Redistributions in binary form must reproduce the above copyright * + * notice, this list of conditions and the following disclaimer in the * + * documentation and/or other materials provided with the distribution. * + * * + * 3. Neither the name of the copyright holder nor the names of its * + * contributors may be used to endorse or promote products derived from * + * this software without specific prior written permission. * + * * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER * + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * + * * +\*===========================================================================*/ + +/*===========================================================================*\ + * * + * $Revision$ * + * $Author$ * + * $Date$ * + * * +\*===========================================================================*/ + + + + +//============================================================================= +// +// CLASS TextNode - IMPLEMENTATION +// +//============================================================================= + + + +//== INCLUDES ================================================================= + +#include + +#include "TextNode.hh" +#include "../Utils/ImageConversion.hh" + + +//== NAMESPACES =============================================================== + +namespace ACG { +namespace SceneGraph { + + +//== IMPLEMENTATION ========================================================== + +void +TextNode:: +enterCompat(GLState& _state, const DrawModes::DrawMode& /*_drawmode*/) { + if (text_.empty()) + return; + + // store current gl state + cullFaceEnabled_ = glIsEnabled(GL_CULL_FACE); + texture2dEnabled_ = glIsEnabled(GL_TEXTURE_2D); + blendEnabled_ = glIsEnabled(GL_BLEND); + depthEnabled_ = glIsEnabled(GL_DEPTH_TEST); + //alphaTest_ = glIsEnabled(GL_ALPHA_TEST); + if (alphaTest_) + ACG::GLState::getAlphaFunc(&alphaTestFunc_, &alphaTestValue_); + + glGetIntegerv(GL_BLEND_SRC, &blendSrc_); + glGetIntegerv(GL_BLEND_DST, &blendDest_); + + // set texture and drawing states + ACG::GLState::disable(GL_CULL_FACE); + ACG::GLState::enable(GL_TEXTURE_2D); + ACG::GLState::enable(GL_BLEND); + ACG::GLState::enable(GL_ALPHA_TEST); + ACG::GLState::alphaFunc(GL_GREATER, 0.2f); + ACG::GLState::blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + if (alwaysOnTop_) + ACG::GLState::disable(GL_DEPTH_TEST); +} + + + +//---------------------------------------------------------------------------- + + +void +TextNode:: +leaveCompat(GLState& /*_state*/, const DrawModes::DrawMode& /*_drawmode*/) { + if (text_.empty()) + return; + + // restore the GLState as it was when entering TextNode + if (cullFaceEnabled_) + ACG::GLState::enable(GL_CULL_FACE); + if (!texture2dEnabled_) + ACG::GLState::disable(GL_TEXTURE_2D); + if (!blendEnabled_) + ACG::GLState::disable(GL_BLEND); + if (depthEnabled_) + ACG::GLState::enable(GL_DEPTH_TEST); + else + ACG::GLState::disable(GL_DEPTH_TEST); + if (!alphaTest_) + ACG::GLState::disable(GL_ALPHA_TEST); + else + ACG::GLState::alphaFunc(alphaTestFunc_, alphaTestValue_); + + ACG::GLState::blendFunc(blendSrc_, blendDest_); +} + +//============================================================================= +} // namespace SceneGraph +} // namespace ACG +//=============================================================================