summaryrefslogtreecommitdiff
path: root/include/mbgl/gl/gl_helper.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/mbgl/gl/gl_helper.hpp')
-rw-r--r--include/mbgl/gl/gl_helper.hpp85
1 files changed, 9 insertions, 76 deletions
diff --git a/include/mbgl/gl/gl_helper.hpp b/include/mbgl/gl/gl_helper.hpp
index e1fb8c27c5..4f3990a434 100644
--- a/include/mbgl/gl/gl_helper.hpp
+++ b/include/mbgl/gl/gl_helper.hpp
@@ -1,89 +1,22 @@
#ifndef MBGL_GL_GL_HELPER
#define MBGL_GL_GL_HELPER
-#include <mbgl/gl/gl.hpp>
-
-#include <array>
-
-namespace {
+namespace mbgl {
+namespace gl {
-template <typename T, T (*Create)(), void (*Destroy)(const T&)>
+template <typename T>
class Preserve {
public:
- Preserve() : data(Create()) {}
- ~Preserve() { Destroy(data); }
+ inline Preserve() : data(T::Get()) {
+ }
+ inline ~Preserve() {
+ T::Set(data);
+ }
private:
- const T data;
+ const typename T::Type data;
};
-inline bool getBlend() {
- return glIsEnabled(GL_BLEND);
-}
-
-inline void setBlend(const bool& enabled) {
- enabled ? MBGL_CHECK_ERROR(glEnable(GL_BLEND)) : MBGL_CHECK_ERROR(glDisable(GL_BLEND));
-}
-
-inline std::array<float, 4> getClearColor() {
- std::array<float, 4> color;
- MBGL_CHECK_ERROR(glGetFloatv(GL_COLOR_CLEAR_VALUE, color.data()));
- return color;
-}
-
-inline void setClearColor(const std::array<float, 4>& color) {
- MBGL_CHECK_ERROR(glClearColor(color[0], color[1], color[2], color[3]));
-}
-
-
-inline std::array<GLenum, 2> getBlendFunc() {
- GLint func[2];
- glGetIntegerv(GL_BLEND_SRC_ALPHA, &func[0]);
- glGetIntegerv(GL_BLEND_DST_ALPHA, &func[1]);
- return {{ static_cast<GLenum>(func[0]), static_cast<GLenum>(func[1]) }};
-}
-
-inline void setBlendFunc(const std::array<GLenum, 2>& func) {
- MBGL_CHECK_ERROR(glBlendFunc(func[0], func[1]));
-}
-
-#ifndef GL_ES_VERSION_2_0
-inline std::array<double, 2> getPixelZoom() {
- std::array<double, 2> zoom;
- glGetDoublev(GL_ZOOM_X, &zoom[0]);
- glGetDoublev(GL_ZOOM_Y, &zoom[1]);
- return zoom;
-}
-
-inline void setPixelZoom(const std::array<double, 2>& func) {
- MBGL_CHECK_ERROR(glPixelZoom(func[0], func[1]));
-}
-
-
-inline std::array<double, 4> getRasterPos() {
- std::array<double, 4> pos;
- MBGL_CHECK_ERROR(glGetDoublev(GL_CURRENT_RASTER_POSITION, pos.data()));
- return pos;
-}
-
-inline void setRasterPos(const std::array<double, 4>& pos) {
- MBGL_CHECK_ERROR(glRasterPos4d(pos[0], pos[1], pos[2], pos[3]));
-}
-#endif
-} // end anonymous namespace
-
-namespace mbgl {
-namespace gl {
-
-using PreserveBlend = Preserve<bool, getBlend, setBlend>;
-using PreserveClearColor = Preserve<std::array<float, 4>, getClearColor, setClearColor>;
-using PreserveBlendFunc = Preserve<std::array<GLenum, 2>, getBlendFunc, setBlendFunc>;
-
-#ifndef GL_ES_VERSION_2_0
-using PreservePixelZoom = Preserve<std::array<double, 2>, getPixelZoom, setPixelZoom>;
-using PreserveRasterPos = Preserve<std::array<double, 4>, getRasterPos, setRasterPos>;
-#endif
-
} // namespace gl
} // namespace mbgl