]> git.tdb.fi Git - libs/gl.git/blobdiff - source/renderpass.cpp
Style update: add spaces around assignment operators
[libs/gl.git] / source / renderpass.cpp
index d2fe668839816688fbab3d60414d2d092d15a7a8..4aa41dba2d0136a1f164a843003fcd31f8a62463 100644 (file)
@@ -19,7 +19,7 @@ using namespace std;
 namespace Msp {
 namespace GL {
 
-const RenderPass *RenderPass::current=0;
+const RenderPass *RenderPass::current = 0;
 
 RenderPass::RenderPass():
        shprog(0),
@@ -36,19 +36,6 @@ RenderPass::RenderPass(const RenderPass &other):
        textures(other.textures)
 { }
 
-/*RenderPass &RenderPass::operator=(const RenderPass &other)
-{
-       shprog=other.shprog;
-       delete shdata;
-       shdata=(other.shdata ? new ProgramData(*other.shdata) : 0);
-       material=other.material;
-       use_material=other.use_material;
-       textures=other.textures;
-       use_textures=other.use_textures;
-
-       return *this;
-}*/
-
 RenderPass::~RenderPass()
 {
        delete shdata;
@@ -58,7 +45,7 @@ RenderPass::~RenderPass()
 
 void RenderPass::set_material(const Material *mat)
 {
-       material=mat;
+       material = mat;
 }
 
 unsigned RenderPass::get_texture_index(const string &slot) const
@@ -72,7 +59,7 @@ unsigned RenderPass::get_texture_index(const string &slot) const
 
 void RenderPass::set_texture(const string &slot, const Texture *tex)
 {
-       textures[get_texture_index(slot)]=tex;
+       textures[get_texture_index(slot)] = tex;
 }
 
 void RenderPass::bind() const
@@ -80,8 +67,8 @@ void RenderPass::bind() const
        if(this==current)
                return;
 
-       const RenderPass *old=current;
-       current=this;
+       const RenderPass *old = current;
+       current = this;
 
        if(shprog)
        {
@@ -119,14 +106,27 @@ void RenderPass::unbind()
                for(unsigned i=current->textures.size(); i--; )
                        GL::Texture::unbind_from(i);
 
-               current=0;
+               current = 0;
        }
 }
 
 
+RenderPass::Loader::Loader(RenderPass &p):
+       DataFile::CollectionObjectLoader<RenderPass>(p, 0)
+{
+       init();
+}
+
 RenderPass::Loader::Loader(RenderPass &p, Collection &c):
        DataFile::CollectionObjectLoader<RenderPass>(p, &c)
 {
+       init();
+}
+
+void RenderPass::Loader::init()
+{
+       allow_pointer_reload = false;
+
        add("shader",   &RenderPass::shprog);
        add("material", &Loader::material);
        add("material", &RenderPass::material);
@@ -139,11 +139,11 @@ void RenderPass::Loader::finish()
        if(obj.shprog)
        {
                if(!obj.shdata)
-                       obj.shdata=new ProgramData;
+                       obj.shdata = new ProgramData;
 
                for(unsigned i=0; i<obj.textures.size(); ++i)
                {
-                       unsigned loc=obj.shprog->get_uniform_location(obj.textures[i].name);
+                       unsigned loc = obj.shprog->get_uniform_location(obj.textures[i].name);
                        obj.shdata->uniform(loc, static_cast<int>(i));
                }
        }
@@ -151,18 +151,20 @@ void RenderPass::Loader::finish()
 
 void RenderPass::Loader::material()
 {
-       // XXX Potential memory management trouble with multiple material statements
-       RefPtr<Material> mat=new Material;
+       if(obj.material)
+               throw InvalidState("A material is already loaded");
+
+       RefPtr<Material> mat = new Material;
        load_sub(*mat);
-       obj.material=mat.release();
-       obj.own_material=true;
+       obj.material = mat.release();
+       obj.own_material = true;
 }
 
 void RenderPass::Loader::texture(const string &n)
 {
-       const Texture *tex=(n.empty() ? 0 : get_collection().get<Texture>(n));
+       const Texture *tex = (n.empty() ? 0 : get_collection().get<Texture>(n));
        TextureSlot slot(tex);
-       slot.name=(obj.textures.empty() ? "texture" : format("texture%d", obj.textures.size()));
+       slot.name = (obj.textures.empty() ? "texture" : format("texture%d", obj.textures.size()));
        load_sub(slot);
        obj.textures.push_back(slot);
 }
@@ -172,7 +174,7 @@ void RenderPass::Loader::uniforms()
        if(!obj.shprog)
                throw InvalidState("Can't load uniforms without a shader program");
        if(!obj.shdata)
-               obj.shdata=new ProgramData;
+               obj.shdata = new ProgramData;
        load_sub(*obj.shdata, *obj.shprog);
 }