-/* $Id$
-
-This file is part of libmspgl
-Copyright © 2007-2008, 2010 Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
#ifndef MSP_GL_RENDERPASS_H_
#define MSP_GL_RENDERPASS_H_
class Material;
class Program;
class ProgramData;
+class TexEnv;
class Texture;
+class Texturing;
/**
Encapsulates the data that determines the appearance of a rendered surface.
-This includes shader and data for it, material and textures.
+This includes shader and data for it, material and texturing.
+
+XXX Does not delete inline texture from datafiles properly
*/
-class RenderPass: public Bindable<RenderPass>
+class RenderPass
{
public:
class Loader: public DataFile::CollectionObjectLoader<RenderPass>
private:
void init();
- virtual void finish();
- void material();
+ void material_inline();
void material(const std::string &);
void texunit(unsigned);
+ void texunit_named(unsigned, const std::string &);
void uniforms();
};
private:
- struct TextureSlot
+ struct TextureLoader: public DataFile::CollectionObjectLoader<Texturing>
{
- class Loader: public DataFile::CollectionObjectLoader<TextureSlot>
- {
- public:
- Loader(TextureSlot &);
- Loader(TextureSlot &, Collection &);
-
- private:
- void init();
- void texture(const std::string &);
- void texture2d();
- };
-
+ private:
unsigned index;
- RefPtr<const Texture> texture;
+ RefPtr<Texture> tex;
+ RefPtr<TexEnv> env;
- TextureSlot(unsigned);
+ public:
+ TextureLoader(Texturing &, unsigned, Collection *);
+ private:
+ virtual void finish();
+
+ void texenv();
+ void texture(const std::string &);
+ void texture2d();
};
Program *shprog;
ProgramData *shdata;
RefPtr<const Material> material;
- std::vector<TextureSlot> textures;
+ Texturing *texturing;
+ std::map<std::string, unsigned> tex_names;
RenderPass &operator=(const RenderPass &);
public:
RenderPass(const RenderPass &);
~RenderPass();
+ const Program *get_shader_program() const { return shprog; }
+ const ProgramData *get_shader_data() const { return shdata; }
void set_material(const Material *);
+ const Material *get_material() const { return material.get(); }
void set_texture(unsigned, const Texture *);
-
- void bind() const;
-
- static void unbind();
+ const Texturing *get_texturing() const { return texturing; }
+ int get_texture_index(const std::string &) const;
};
} // namespace GL