summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorBruno de Oliveira Abinader <bruno@mapbox.com>2016-06-01 15:28:59 +0300
committerBruno de Oliveira Abinader <bruno@mapbox.com>2016-06-01 15:28:59 +0300
commit31753583da2553584596a9c1abdff8af4a551426 (patch)
tree63ef8aa29be713e60ad14ccee3e82a78bf6f4530 /test
parent1b0683b94c070d14bc9f2cf357e551cdbbf3043a (diff)
downloadqtlocation-mapboxgl-31753583da2553584596a9c1abdff8af4a551426.tar.gz
[test] Added GL objects tests
Diffstat (limited to 'test')
-rw-r--r--test/gl/object.cpp120
-rw-r--r--test/test.gypi2
2 files changed, 122 insertions, 0 deletions
diff --git a/test/gl/object.cpp b/test/gl/object.cpp
new file mode 100644
index 0000000000..c804040950
--- /dev/null
+++ b/test/gl/object.cpp
@@ -0,0 +1,120 @@
+#include <mbgl/test/util.hpp>
+
+#include <mbgl/platform/default/headless_display.hpp>
+#include <mbgl/platform/default/headless_view.hpp>
+
+#include <mbgl/gl/gl_helper.hpp>
+#include <mbgl/gl/gl_config.hpp>
+#include <mbgl/gl/object_store.hpp>
+
+#include <memory>
+
+namespace {
+
+static bool getFlag = false;
+static bool setFlag = false;
+
+}; // namespace
+
+struct MockGLObject {
+ using Type = bool;
+ static const Type Default = false;
+ static Type Get() { getFlag = true; return true; }
+ static void Set(const Type&) { setFlag = true; }
+};
+
+TEST(GLObject, Preserve) {
+ getFlag = false;
+ setFlag = false;
+
+ auto object = std::make_unique<mbgl::gl::Preserve<MockGLObject>>();
+ EXPECT_TRUE(getFlag);
+ EXPECT_FALSE(setFlag);
+
+ getFlag = false;
+ object.reset();
+ EXPECT_FALSE(getFlag);
+ EXPECT_TRUE(setFlag);
+}
+
+TEST(GLObject, Value) {
+ setFlag = false;
+
+ auto object = std::make_unique<mbgl::gl::Value<MockGLObject>>();
+ EXPECT_EQ(object->getCurrent(), false);
+ EXPECT_FALSE(object->getDirty());
+ EXPECT_FALSE(setFlag);
+
+ object->setDirty();
+ EXPECT_TRUE(object->getDirty());
+
+ *object = false;
+ EXPECT_EQ(object->getCurrent(), false);
+ EXPECT_FALSE(object->getDirty());
+ EXPECT_TRUE(setFlag);
+
+ setFlag = false;
+ *object = true;
+ EXPECT_EQ(object->getCurrent(), true);
+ EXPECT_FALSE(object->getDirty());
+ EXPECT_TRUE(setFlag);
+
+ object->reset();
+ EXPECT_EQ(object->getCurrent(), false);
+ EXPECT_TRUE(object->getDirty());
+ EXPECT_TRUE(setFlag);
+}
+
+TEST(GLObject, Store) {
+ mbgl::HeadlessView view(std::make_shared<mbgl::HeadlessDisplay>(), 1);
+ view.activate();
+
+ mbgl::gl::ObjectStore store;
+ EXPECT_TRUE(store.empty());
+
+ mbgl::gl::UniqueProgram program = store.createProgram();
+ EXPECT_TRUE(program.get() != 0);
+ program.reset();
+ EXPECT_FALSE(store.empty());
+ store.performCleanup();
+ EXPECT_TRUE(store.empty());
+
+ mbgl::gl::UniqueShader shader = store.createShader(GL_VERTEX_SHADER);
+ EXPECT_TRUE(shader.get() != 0);
+ shader.reset();
+ EXPECT_FALSE(store.empty());
+ store.performCleanup();
+ EXPECT_TRUE(store.empty());
+
+ mbgl::gl::UniqueBuffer buffer = store.createBuffer();
+ EXPECT_TRUE(buffer.get() != 0);
+ buffer.reset();
+ EXPECT_FALSE(store.empty());
+ store.performCleanup();
+ EXPECT_TRUE(store.empty());
+
+ mbgl::gl::UniqueTexture texture = store.createTexture();
+ EXPECT_TRUE(texture.get() != 0);
+ texture.reset();
+ EXPECT_FALSE(store.empty());
+ store.performCleanup();
+ EXPECT_TRUE(store.empty());
+
+ mbgl::gl::UniqueVAO vao = store.createVAO();
+ EXPECT_TRUE(vao.get() != 0);
+ vao.reset();
+ EXPECT_FALSE(store.empty());
+ store.performCleanup();
+ EXPECT_TRUE(store.empty());
+
+ mbgl::gl::UniqueTexturePool texturePool = store.createTexturePool();
+ for (auto& id : texturePool.get()) {
+ EXPECT_TRUE(id != 0);
+ }
+ texturePool.reset();
+ EXPECT_FALSE(store.empty());
+ store.performCleanup();
+ EXPECT_TRUE(store.empty());
+
+ view.deactivate();
+}
diff --git a/test/test.gypi b/test/test.gypi
index 03052ab1c4..f9a25e4e86 100644
--- a/test/test.gypi
+++ b/test/test.gypi
@@ -48,6 +48,8 @@
'geometry/binpack.cpp',
+ 'gl/object.cpp',
+
'map/map.cpp',
'map/transform.cpp',