#ifndef OPENGLSHAREDSTATE_H #define OPENGLSHAREDSTATE_H #include "opengl_global.h" #include #include "OpenGLVariable.h" namespace paysages { namespace opengl { /*! * \brief OpenGL variables that can be shared between shaders. */ class OPENGLSHARED_EXPORT OpenGLSharedState { public: OpenGLSharedState(); ~OpenGLSharedState(); /*! * \brief Apply the stored variables to the bound program. */ void apply(OpenGLShaderProgram *program, int &texture_unit); /*! * \brief Get or create a variable in the state. */ OpenGLVariable *get(const std::string &name); // Shortcuts inline void set(const std::string &name, const Texture2D *texture, bool repeat = false, bool color = true) { get(name)->set(texture, repeat, color); } inline void set(const std::string &name, const Texture3D *texture, bool repeat = false, bool color = true) { get(name)->set(texture, repeat, color); } inline void set(const std::string &name, const Texture4D *texture, bool repeat = false, bool color = true) { get(name)->set(texture, repeat, color); } inline void set(const std::string &name, float value) { get(name)->set(value); } inline void set(const std::string &name, const Vector3 &vector) { get(name)->set(vector); } inline void set(const std::string &name, const QVector3D &vector) { get(name)->set(vector); } inline void set(const std::string &name, const Matrix4 &matrix) { get(name)->set(matrix); } inline void set(const std::string &name, const QMatrix4x4 &matrix) { get(name)->set(matrix); } inline void set(const std::string &name, const Color &color) { get(name)->set(color); } private: std::map variables; }; } } #endif // OPENGLSHAREDSTATE_H