void attribute(unsigned, const std::string &);
void fragment_shader(const std::string &);
void attribute(unsigned, const std::string &);
void fragment_shader(const std::string &);
- struct StandardFeatures
- {
- class Loader: public DataFile::ObjectLoader<StandardFeatures>
- {
- public:
- Loader(StandardFeatures &);
- };
-
- bool texture;
- bool material;
- bool lighting;
- bool specular;
- bool normalmap;
- bool shadow;
- bool reflection;
- bool transform;
-
- StandardFeatures();
-
- std::string create_flags() const;
- };
+ typedef unsigned LayoutHash;
+ struct UniformBlockInfo;
typedef std::map<std::string, UniformInfo> UniformMap;
typedef std::map<std::string, UniformBlockInfo> UniformBlockMap;
typedef std::map<std::string, UniformInfo> UniformMap;
typedef std::map<std::string, UniformBlockInfo> UniformBlockMap;
- Program(const StandardFeatures &);
+
+ /// Constructs a Program with standard features.
+ Program(const ProgramBuilder::StandardFeatures &);
+
+ /// Constructs a Program from unified source code using ProgramCompiler.
+ Program(const std::string &);
+
+ /// Constructs a Program from vertex and fragment shader source code.
void attach_shader(Shader &shader);
void attach_shader_owned(Shader *shader);
void detach_shader(Shader &shader);
void attach_shader(Shader &shader);
void attach_shader_owned(Shader *shader);
void detach_shader(Shader &shader);
- void add_standard_shaders(const StandardFeatures &);
-private:
- static std::string process_standard_source(const char **, const std::string &);
-public:
- const ShaderList &get_shaders() const { return shaders; }
+ const ShaderList &get_attached_shaders() const { return shaders; }
- static unsigned compute_layout_hash(const std::vector<const UniformInfo *> &);
+ void query_uniforms();
+ void query_uniform_blocks(const std::vector<UniformInfo *> &);
+ void query_attributes();
+ static LayoutHash compute_layout_hash(const std::vector<const UniformInfo *> &);
+ static bool uniform_location_compare(const UniformInfo *, const UniformInfo *);
const UniformBlockMap &get_uniform_blocks() const { return uniform_blocks; }
const UniformBlockInfo &get_uniform_block_info(const std::string &) const;
const UniformMap &get_uniforms() const { return uniforms; }
const UniformInfo &get_uniform_info(const std::string &) const;
int get_uniform_location(const std::string &) const;
const UniformBlockMap &get_uniform_blocks() const { return uniform_blocks; }
const UniformBlockInfo &get_uniform_block_info(const std::string &) const;
const UniformMap &get_uniforms() const { return uniforms; }
const UniformInfo &get_uniform_info(const std::string &) const;
int get_uniform_location(const std::string &) const;
+ const AttributeMap &get_attributes() const { return attributes; }
+ const AttributeInfo &get_attribute_info(const std::string &) const;
+ int get_attribute_location(const std::string &) const;
+
+ bool uses_legacy_variables() const { return legacy_vars; }