paysages3d/src/render/opengl/OpenGLSharedState.h
Michaël Lemaire 4a710c0977 Merge branch 'master' into vegetation
Conflicts:
	src/interface/commandline/tests.cpp
	src/render/opengl/OpenGLPart.h
	src/render/opengl/OpenGLRenderer.cpp
	src/render/opengl/OpenGLRenderer.h
	src/render/opengl/OpenGLShaderProgram.h
	src/render/opengl/OpenGLSharedState.h
	src/render/software/SoftwareCanvasRenderer.h
2015-12-13 17:16:26 +01:00

81 lines
2.2 KiB
C++

#ifndef OPENGLSHAREDSTATE_H
#define OPENGLSHAREDSTATE_H
#include "opengl_global.h"
#include <map>
#include "OpenGLVariable.h"
class QImage;
namespace paysages {
namespace opengl {
/**
* OpenGL variables that can be shared between shaders.
*/
class OPENGLSHARED_EXPORT OpenGLSharedState {
public:
OpenGLSharedState();
~OpenGLSharedState();
/**
* Apply the stored variables to the bound program.
*/
void apply(OpenGLShaderProgram *program, int &texture_unit);
/**
* Release any allocated resource in the opengl context.
*
* Must be called in the opengl rendering thread, and before the destructor is called.
*/
void destroy(OpenGLFunctions *functions);
/**
* Get or create a variable in the state.
*/
OpenGLVariable *get(const string &name);
// Shortcuts
inline void setInt(const string &name, int value) {
get(name)->set(value);
}
inline void set(const string &name, float value) {
get(name)->set(value);
}
inline void set(const string &name, const Texture2D *texture, bool repeat = false, bool color = true) {
get(name)->set(texture, repeat, color);
}
inline void set(const string &name, const QImage &texture, bool repeat = false, bool color = true) {
get(name)->set(texture, repeat, color);
}
inline void set(const string &name, const Texture3D *texture, bool repeat = false, bool color = true) {
get(name)->set(texture, repeat, color);
}
inline void set(const string &name, const Texture4D *texture, bool repeat = false, bool color = true) {
get(name)->set(texture, repeat, color);
}
inline void set(const string &name, const Vector3 &vector) {
get(name)->set(vector);
}
inline void set(const string &name, const QVector3D &vector) {
get(name)->set(vector);
}
inline void set(const string &name, const Matrix4 &matrix) {
get(name)->set(matrix);
}
inline void set(const string &name, const QMatrix4x4 &matrix) {
get(name)->set(matrix);
}
inline void set(const string &name, const Color &color) {
get(name)->set(color);
}
private:
map<string, OpenGLVariable *> variables;
};
}
}
#endif // OPENGLSHAREDSTATE_H