X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcore%2Fprogram.h;h=052236270d4b54b3d0ca2b29ebecc908f8f82ea5;hb=0912a8d73043961ab7a4d66cd2fbb13187483ffd;hp=e86ee0595f0ed307047681f74be256fbf06b3d70;hpb=6288c42adde9ee7d39a47de51fa2856cf965dccc;p=libs%2Fgl.git diff --git a/source/core/program.h b/source/core/program.h index e86ee059..05223627 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);