csgfx/shadervarcontext.h Source File (Crystal Space 2.0 Public API Reference)

| ## Public API Reference

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

csgfx/shadervarcontext.h
Go to the documentation of this file.

    00001 /*
    00002     Copyright (C) 2003 by Jorrit Tyberghein
    00003               (C) 2003 by Frank Richter
    00004
    00005     This library is free software; you can redistribute it and/or
    00006     modify it under the terms of the GNU Library General Public
    00007     License as published by the Free Software Foundation; either
    00008     version 2 of the License, or (at your option) any later version.
    00009
    00010     This library is distributed in the hope that it will be useful,
    00011     but WITHOUT ANY WARRANTY; without even the implied warranty of
    00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    00013     Library General Public License for more details.
    00014
    00015     You should have received a copy of the GNU Library General Public
    00016     License along with this library; if not, write to the Free
    00017     Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    00018 */
    00019
    00020 #ifndef __CS_CSGFX_SHADERVARCONTEXT_H__
    00021 #define __CS_CSGFX_SHADERVARCONTEXT_H__
    00022
    00023 #include "csextern.h"
    00024
    00025 #include "csutil/scf_implementation.h"
    00026
    00027 #include "ivideo/shader/shader.h"
    00028 #include "shadervar.h"
    00029
    00034 namespace CS
    00035 {
    00036   namespace Graphics
    00037   {
    00043     class CS_CRYSTALSPACE_EXPORT ShaderVariableContextImpl :
    00044       public virtual iShaderVariableContext
    00045     {
    00046     protected:
    00047       csRefArray<csShaderVariable> variables;
    00048
    00049     public:
    00050       virtual ~ShaderVariableContextImpl();
    00051
    00052       const csRefArray<csShaderVariable>& GetShaderVariables () const
    00053       { return variables; }
    00054       virtual void AddVariable (csShaderVariable *variable);
    00055       virtual csShaderVariable* GetVariable (ShaderVarStringID name) const;
    00056       virtual void PushVariables (csShaderVariableStack& stacks) const;
    00057       virtual bool IsEmpty() const { return variables.GetSize () == 0; }
    00058       virtual void ReplaceVariable (csShaderVariable *variable);
    00059       virtual void Clear () { variables.Empty(); }
    00060       virtual bool RemoveVariable (csShaderVariable* variable);
    00061       virtual bool RemoveVariable (ShaderVarStringID name);
    00062     };
    00063
    00068     class OverlayShaderVariableContextImpl : public ShaderVariableContextImpl
    00069     {
    00070       csRef<iShaderVariableContext> parentSVC;
    00071     public:
    00072       OverlayShaderVariableContextImpl (iShaderVariableContext* parent = 0) :
    00073         parentSVC (parent) {}
    00074
    00075       iShaderVariableContext* GetParentContext() const { return parentSVC; }
    00076       void SetParentContext (iShaderVariableContext* parent)
    00077       { parentSVC = parent; }
    00078
    00079       void AddVariable (csShaderVariable *variable)
    00080       { ShaderVariableContextImpl::AddVariable (variable); }
    00081       csShaderVariable* GetVariable (ShaderVarStringID name) const
    00082       {
    00083         csShaderVariable* sv = ShaderVariableContextImpl::GetVariable (name);
    00084         if ((sv == 0) && (parentSVC.IsValid()))
    00085           sv = parentSVC->GetVariable (name);
    00086         return sv;
    00087       }
    00088       const csRefArray<csShaderVariable>& GetShaderVariables () const
    00089       {
    00090         // @@@ Will not return parent SVs
    00091         return ShaderVariableContextImpl::GetShaderVariables ();
    00092       }
    00093       void PushVariables (csShaderVariableStack& stacks) const
    00094       {
    00095         if (parentSVC.IsValid()) parentSVC->PushVariables (stacks);
    00096         ShaderVariableContextImpl::PushVariables (stacks);
    00097       }
    00098       bool IsEmpty () const
    00099       {
    00100         return ShaderVariableContextImpl::IsEmpty()
    00101           && (!parentSVC.IsValid() || parentSVC->IsEmpty());
    00102       }
    00103       void ReplaceVariable (csShaderVariable *variable)
    00104       { ShaderVariableContextImpl::ReplaceVariable (variable); }
    00105       void Clear () { ShaderVariableContextImpl::Clear(); }
    00106       bool RemoveVariable (csShaderVariable* variable)
    00107       {
    00108         // @@@ Also remove from parent?
    00109         return ShaderVariableContextImpl::RemoveVariable (variable);
    00110       }
    00111       bool RemoveVariable (ShaderVarStringID name)
    00112       {
    00113         // @@@ Also remove from parent?
    00114         return ShaderVariableContextImpl::RemoveVariable (name);
    00115       }
    00116     };
    00117   } // namespace Graphics
    00118
    00119   // Deprecated in 1.3
    00120   typedef CS_DEPRECATED_TYPE_MSG("Use Graphics::ShaderVariableContextImpl")
    00121     Graphics::ShaderVariableContextImpl ShaderVariableContextImpl;
    00122 }
    00123
    00127 class CS_CRYSTALSPACE_EXPORT csShaderVariableContext :
    00128   public scfImplementation1<csShaderVariableContext,
    00129                              scfFakeInterface<iShaderVariableContext> >,
    00130   public CS::Graphics::ShaderVariableContextImpl
    00131 {
    00132 public:
    00133   CS_LEAKGUARD_DECLARE (csShaderVariableContext);
    00134
    00135   csShaderVariableContext ();
    00136   csShaderVariableContext (const csShaderVariableContext& other);
    00137   virtual ~csShaderVariableContext ();
    00138 };
    00139
    00140 #endif // __CS_CSGFX_SHADERVARCONTEXT_H__