summaryrefslogtreecommitdiff
path: root/include/mbgl/gl
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2016-02-04 16:30:09 +0100
committerKonstantin Käfer <mail@kkaefer.com>2016-02-08 12:50:00 +0100
commit5c3b01ffcfa6f10473d9eb54bd025a2276744a90 (patch)
tree8918983093de82b0602bb0b4c5fc4bc5f453f3c5 /include/mbgl/gl
parent2f06ca74e2a7b538a6ce09270c1e78987755adfb (diff)
downloadqtlocation-mapboxgl-5c3b01ffcfa6f10473d9eb54bd025a2276744a90.tar.gz
[core] move util/gl_helper.hpp to gl/gl_helper.hpp
Diffstat (limited to 'include/mbgl/gl')
-rw-r--r--include/mbgl/gl/gl_helper.hpp90
1 files changed, 90 insertions, 0 deletions
diff --git a/include/mbgl/gl/gl_helper.hpp b/include/mbgl/gl/gl_helper.hpp
new file mode 100644
index 0000000000..e1fb8c27c5
--- /dev/null
+++ b/include/mbgl/gl/gl_helper.hpp
@@ -0,0 +1,90 @@
+#ifndef MBGL_GL_GL_HELPER
+#define MBGL_GL_GL_HELPER
+
+#include <mbgl/gl/gl.hpp>
+
+#include <array>
+
+namespace {
+
+template <typename T, T (*Create)(), void (*Destroy)(const T&)>
+class Preserve {
+public:
+ Preserve() : data(Create()) {}
+ ~Preserve() { Destroy(data); }
+
+private:
+ const T 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
+
+#endif