]> git.tdb.fi Git - libs/gl.git/blobdiff - source/renderpass.h
Change Scene into an abstract base class and add a few subclasses
[libs/gl.git] / source / renderpass.h
index 94c6bc02b085885a4e7dea3bdad21447b33922f7..10960b3f37cb1b082d0cf26d20404514297982b8 100644 (file)
@@ -8,7 +8,9 @@ Distributed under the LGPL
 #ifndef MSP_GL_RENDERPASS_H_
 #define MSP_GL_RENDERPASS_H_
 
+#include <msp/core/refptr.h>
 #include <msp/datafile/objectloader.h>
+#include "bindable.h"
 
 namespace Msp {
 namespace GL {
@@ -22,7 +24,7 @@ class Texture;
 Encapsulates the data that determines the appearance of a rendered surface.
 This includes shader and data for it, material and textures.
 */
-class RenderPass
+class RenderPass: public Bindable<RenderPass>
 {
 public:
        class Loader: public DataFile::CollectionObjectLoader<RenderPass>
@@ -35,34 +37,37 @@ public:
                void init();
                virtual void finish();
                void material();
-               void shader(const std::string &);
-               void texture(const std::string &);
+               void material(const std::string &);
+               void texunit(unsigned);
                void uniforms();
        };
 
 private:
        struct TextureSlot
        {
-               class Loader: public DataFile::ObjectLoader<TextureSlot>
+               class Loader: public DataFile::CollectionObjectLoader<TextureSlot>
                {
                public:
                        Loader(TextureSlot &);
+                       Loader(TextureSlot &, Collection &);
+
+               private:
+                       void init();
+                       void texture(const std::string &);
+                       void texture2d();
                };
 
-               const Texture *texture;
-               std::string name;
+               unsigned index;
+               RefPtr<const Texture> texture;
 
-               TextureSlot(const Texture *);
+               TextureSlot(unsigned);
        };
 
        Program *shprog;
        ProgramData *shdata;
-       bool own_material;
-       const Material *material;
+       RefPtr<const Material> material;
        std::vector<TextureSlot> textures;
 
-       static const RenderPass *current;
-
        RenderPass &operator=(const RenderPass &);
 public:
        RenderPass();
@@ -70,8 +75,7 @@ public:
        ~RenderPass();
 
        void set_material(const Material *);
-       unsigned get_texture_index(const std::string &) const;
-       void set_texture(const std::string &, const Texture *);
+       void set_texture(unsigned, const Texture *);
 
        void bind() const;