#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 {
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>
{
public:
+ Loader(RenderPass &);
Loader(RenderPass &, Collection &);
private:
+ 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();
~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;