class Program;
class ProgramData;
class Renderer;
+class Sampler;
class Texture;
class Texturing;
/**
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
{
{
private:
unsigned index;
- RefPtr<Texture> tex;
+ const Texture *tex;
+ const Sampler *samp;
public:
TextureLoader(Texturing &, unsigned, Collection *);
private:
virtual void finish();
+ void sampler(const std::string &);
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();
+ 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 *);