#include "bindable.h"
#include "gl.h"
#include "programbuilder.h"
+#include "vertexformat.h"
namespace Msp {
namespace GL {
class Shader;
+/**
+A complete shader program. Programs can be assembled of individual Shaders or
+generated with a set of standard features.
+*/
class Program: public Bindable<Program>
{
public:
UniformBlockMap uniform_blocks;
UniformMap uniforms;
unsigned uniform_layout_hash;
+ bool legacy_vars;
public:
+ /// Constructs an empty Program with no Shaders attached.
Program();
+
+ /// Constructs a Program with standard features.
Program(const ProgramBuilder::StandardFeatures &);
+
+ /// Constructs a Program from vertex and fragment shader source code.
Program(const std::string &, const std::string &);
+
private:
void init();
public:
const ShaderList &get_shaders() const { return shaders; }
void bind_attribute(unsigned, const std::string &);
+ void bind_attribute(VertexComponent, const std::string &);
+ void bind_fragment_data(unsigned, const std::string &);
void link();
private:
const UniformInfo &get_uniform_info(const std::string &) const;
int get_uniform_location(const std::string &) const;
+ bool uses_legacy_variables() const { return legacy_vars; }
+
void bind() const;
static void unbind();
};