X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcore%2Fprogram.h;h=f318c60639012ea66f9da3c43139003cae519202;hb=ea7832c7c1ffab00cc1168bc8c41375fdd0eae86;hp=e86ee0595f0ed307047681f74be256fbf06b3d70;hpb=dccad64b2ec82249d850b9745614042171499972;p=libs%2Fgl.git diff --git a/source/core/program.h b/source/core/program.h index e86ee059..f318c606 100644 --- a/source/core/program.h +++ b/source/core/program.h @@ -36,6 +36,25 @@ public: void vertex_shader(const std::string &); }; +private: + class SpecializationLoader: public DataFile::Loader + { + private: + std::map &spec_values; + + static ActionMap shared_actions; + + public: + SpecializationLoader(std::map &); + + private: + virtual void init_actions(); + + void specialize_bool(const std::string &, bool); + void specialize_int(const std::string &, int); + }; + +public: typedef unsigned LayoutHash; struct UniformBlockInfo; @@ -82,21 +101,24 @@ private: AttributeMap attributes; public: - /// Constructs an empty Program with no Shaders attached. + /// Constructs an empty Program with no shader stages attached. Program(); /// Constructs a Program from unified source code using ProgramCompiler. - Program(const std::string &); + DEPRECATED Program(const std::string &); /// Constructs a Program from vertex and fragment shader source code. DEPRECATED Program(const std::string &, const std::string &); + /// Constructs a Program from a Module, with specialization constants. + Program(const Module &, const std::map & = std::map()); + private: void init(); public: virtual ~Program(); - void add_stages(const Module &); + void add_stages(const Module &, const std::map & = std::map()); DEPRECATED void attach_shader(Shader &shader); DEPRECATED void attach_shader_owned(Shader *shader); @@ -104,7 +126,7 @@ public: DEPRECATED const std::vector &get_attached_shaders() const; DEPRECATED void bind_attribute(unsigned, const std::string &); - DEPRECATED void bind_attribute(VertexComponent, const std::string &); + DEPRECATED void bind_attribute(VertexAttribute, const std::string &); DEPRECATED void bind_fragment_data(unsigned, const std::string &); void link();