#include "removedalphafunc.hpp" #include #include namespace Shader { std::array, GL_ALWAYS - GL_NEVER> RemovedAlphaFunc::sInstances{ nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }; osg::ref_ptr RemovedAlphaFunc::getInstance(GLenum func) { assert(func >= GL_NEVER && func <= GL_ALWAYS); if (!sInstances[func - GL_NEVER]) sInstances[func - GL_NEVER] = new RemovedAlphaFunc(static_cast(func), 1.0); return sInstances[func - GL_NEVER]; } void RemovedAlphaFunc::apply(osg::State & state) const { // Hopefully, anything genuinely requiring the default alpha func of GL_ALWAYS explicitly sets it if (!state.getGlobalDefaultAttribute(ALPHAFUNC)->getType() != getType()) state.setGlobalDefaultAttribute(static_cast(cloneType())); } }