/**
Encapsulates the data that determines the appearance of a rendered surface.
This includes shader and data for it, material and texturing.
-
-XXX Does not delete inline texture from datafiles properly
*/
class RenderPass
{
void material_inline();
void material(const std::string &);
+ void shader(const std::string &);
void texunit(unsigned);
void texunit_auto(const std::string &);
void texunit_named(unsigned, const std::string &);
{
private:
unsigned index;
- RefPtr<Texture> tex;
public:
TextureLoader(Texturing &, unsigned, Collection *);
private:
- virtual void finish();
-
void texture(const std::string &);
- void texture2d();
};
- const Program *shprog;
+ RefPtr<const Program> shprog;
+ bool shprog_from_material;
RefPtr<ProgramData> shdata;
std::map<std::string, std::string> uniform_slots;
RefPtr<const Material> material;
~RenderPass();
private:
+ void finalize_material(DataFile::Collection *);
+ void maybe_create_material_shader(DataFile::Collection *);
void ensure_private_shader_data();
public:
void set_shader_program(const Program *, const ProgramData *);
- const Program *get_shader_program() const { return shprog; }
+ const Program *get_shader_program() const { return shprog.get(); }
const ProgramData *get_shader_data() const { return shdata.get(); }
const std::string &get_slotted_uniform_name(const std::string &) const;
void set_material(const Material *);