X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fscene%2Fmaterial%2FTechnique.hxx;h=b2ce020f07166d26f0d536fbff6c6f66c352f2f4;hb=0d419aba8a1ea9c67b1982f4d68fe1fe7bd79033;hp=455ee35d5acb6a0096955ba32791dc332ae3ac28;hpb=c6b2124129e908d95ccfdf9d11a51cd257e55e55;p=simgear.git diff --git a/simgear/scene/material/Technique.hxx b/simgear/scene/material/Technique.hxx index 455ee35d..b2ce020f 100644 --- a/simgear/scene/material/Technique.hxx +++ b/simgear/scene/material/Technique.hxx @@ -20,6 +20,7 @@ #include "EffectGeode.hxx" #include +#include #include #include @@ -90,13 +91,13 @@ public: void setShadowingStateSet(osg::StateSet* ss) { _shadowingStateSet = ss; } virtual void resizeGLObjectBuffers(unsigned int maxSize); virtual void releaseGLObjects(osg::State* state = 0) const; - // Initial validity testing. Either the minimum OpenGL version - // must be supported, or the list of extensions must be supported. - float getGLVersion() const { return _glVersion; } - void setGLVersion(float glVersion) { _glVersion = glVersion; } - std::vector glExtensions; bool getAlwaysValid() const { return _alwaysValid; } void setAlwaysValid(bool val) { _alwaysValid = val; } + void setValidExpression(SGExpressionb* exp, + const simgear::expression::BindingLayout&); + void setGLExtensionsPred(float glVersion, + const std::vector& extensions); + void refreshValidity(); protected: // Validity of technique in a graphics context. struct ContextInfo : public osg::Referenced @@ -105,7 +106,8 @@ protected: ContextInfo(const ContextInfo& rhs) : valid(rhs.valid()) {} ContextInfo& operator=(const ContextInfo& rhs) { - valid = rhs.valid(); + valid = rhs.valid; + return *this; } Swappable valid; }; @@ -113,7 +115,20 @@ protected: mutable ContextMap _contextMap; bool _alwaysValid; osg::ref_ptr _shadowingStateSet; - float _glVersion; + SGSharedPtr _validExpression; + int _contextIdLocation; +}; + +class TechniquePredParser : public expression::ExpressionParser +{ +public: + void setTechnique(Technique* tniq) { _tniq = tniq; } + Technique* getTechnique() { return _tniq.get(); } +// void setEffect(Effect* effect) { _effect = effect; } +// Effect* getEffect() { return _effect.get(); } +protected: + osg::ref_ptr _tniq; + // osg::ref_ptr _effect; }; } #endif