X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fmaterials%2Frenderpass.h;h=94cc2ed928b328f0f6dc0d16690b058cf75f0a27;hb=fe9836f2d8d7abb0480582c544611a5b248310cc;hp=e01b872daf56c2a0af7ec8a1e2d8bcfae7d017d4;hpb=dccad64b2ec82249d850b9745614042171499972;p=libs%2Fgl.git diff --git a/source/materials/renderpass.h b/source/materials/renderpass.h index e01b872d..94cc2ed9 100644 --- a/source/materials/renderpass.h +++ b/source/materials/renderpass.h @@ -3,17 +3,17 @@ #include #include +#include "cullface.h" +#include "material.h" namespace Msp { namespace GL { -class Material; class Program; class ProgramData; class Renderer; class Sampler; class Texture; -class Texturing; /** Encapsulates the data that determines the appearance of a rendered surface. @@ -24,20 +24,30 @@ class RenderPass public: class Loader: public DataFile::CollectionObjectLoader { + private: + std::string inline_base_name; + + static ActionMap shared_actions; + public: Loader(RenderPass &); Loader(RenderPass &, Collection &); + private: + virtual void init_actions(); + + public: + void set_inline_base_name(const std::string &); private: - void init(); + virtual void finish(); static std::string get_shader_name(const std::string &); void material_inline(); void material(const std::string &); void shader(const std::string &); + void texture(const std::string &); void texunit(unsigned); - void texunit_auto(const std::string &); void texunit_named(unsigned, const std::string &); void uniforms(); void uniform_slot(const std::string &); @@ -45,58 +55,68 @@ public: }; private: - struct TextureLoader: public DataFile::CollectionObjectLoader + struct TextureSlot { - private: - unsigned index; - const Texture *tex; - const Sampler *samp; + class Loader: public DataFile::CollectionObjectLoader + { + private: + std::string auto_slot_name; - public: - TextureLoader(Texturing &, unsigned, Collection *); - private: - virtual void finish(); + public: + Loader(TextureSlot &, const std::string &, Collection *); - void sampler(const std::string &); - void texture(const std::string &); + private: + void slot_auto(); + }; + + Tag tag; + std::string slot_name; + const Texture *texture; + const Sampler *sampler; + + TextureSlot(Tag t): tag(t), texture(0), sampler(0) { } }; - RefPtr shprog; + const Program *shprog; bool shprog_from_material; RefPtr shdata; - std::map uniform_slots; - RefPtr material; + std::map uniform_slots; + const Material *material; std::string material_slot; - Texturing *texturing; - std::map tex_names; - bool back_faces; + std::vector textures; + CullMode face_cull; + bool receive_shadows; + bool image_based_lighting; public: RenderPass(); - RenderPass(const RenderPass &); - RenderPass &operator=(const RenderPass &); - ~RenderPass(); private: - void finalize_material(DataFile::Collection *); - void maybe_create_material_shader(DataFile::Collection *); - void ensure_private_shader_data(); + void maybe_create_material_shader(); + void set_material_textures(); public: void set_shader_program(const Program *, const ProgramData *); - const Program *get_shader_program() const { return shprog.get(); } + const Program *get_shader_program() const { return shprog; } const ProgramData *get_shader_data() const { return shdata.get(); } - const std::string &get_slotted_uniform_name(const std::string &) const; + Tag get_slotted_uniform_tag(Tag) const; void set_material(const Material *); - const Material *get_material() const { return material.get(); } + const Material *get_material() const { return material; } const std::string &get_material_slot_name() const { return material_slot; } - void set_texture(unsigned, const Texture *); - const Texturing *get_texturing() const { return texturing; } - int get_texture_index(const std::string &) const; - void set_back_faces(bool); - bool get_back_faces() const { return back_faces; } + void set_texture(Tag, const Texture *, const Sampler * = 0); + Tag get_texture_tag(const std::string &) const; + DEPRECATED void set_texture(unsigned, const Texture *, const Sampler * = 0); + DEPRECATED int get_texture_index(const std::string &) const; + void set_face_cull(CullMode); + CullMode get_face_cull() const { return face_cull; } + void set_receive_shadows(bool); + bool get_receive_shadows() const { return receive_shadows; } + void set_image_based_lighting(bool); + bool get_image_based_lighting() const { return image_based_lighting; } void apply(Renderer &) const; + + void set_debug_name(const std::string &); }; } // namespace GL