]> git.mxchange.org Git - simgear.git/blobdiff - simgear/scene/material/Technique.hxx
Add bool and int uniform types for shaders, and vertex-program-two-sided
[simgear.git] / simgear / scene / material / Technique.hxx
index 455ee35d5acb6a0096955ba32791dc332ae3ac28..b2ce020f07166d26f0d536fbff6c6f66c352f2f4 100644 (file)
@@ -20,6 +20,7 @@
 #include "EffectGeode.hxx"
 
 #include <simgear/structure/SGAtomic.hxx>
+#include <simgear/structure/SGExpression.hxx>
 
 #include <map>
 #include <vector>
@@ -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<std::string> 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<std::string>& 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<Status> valid;
     };
@@ -113,7 +115,20 @@ protected:
     mutable ContextMap _contextMap;
     bool _alwaysValid;
     osg::ref_ptr<osg::StateSet> _shadowingStateSet;
-    float _glVersion;
+    SGSharedPtr<SGExpressionb> _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<Technique> _tniq;
+    // osg::ref_ptr<Effect> _effect;
 };
 }
 #endif