Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'drape/glextensions_list.cpp')
-rw-r--r--drape/glextensions_list.cpp158
1 files changed, 62 insertions, 96 deletions
diff --git a/drape/glextensions_list.cpp b/drape/glextensions_list.cpp
index b9647ebefd..69647f4fa5 100644
--- a/drape/glextensions_list.cpp
+++ b/drape/glextensions_list.cpp
@@ -3,121 +3,87 @@
#include "base/assert.hpp"
-#include "std/string.hpp"
+#include "std/target_os.hpp"
namespace dp
{
-
-#ifdef DEBUG
- #include "std/map.hpp"
-
- class GLExtensionsList::Impl
+GLExtensionsList::GLExtensionsList(dp::ApiVersion apiVersion)
+{
+#if defined(OMIM_OS_MOBILE)
+ CheckExtension(TextureNPOT, "GL_OES_texture_npot");
+ if (apiVersion == dp::ApiVersion::OpenGLES2)
{
- public:
- void CheckExtension(GLExtensionsList::ExtensionName const & enumName, const string & extName)
- {
#ifdef OMIM_OS_ANDROID
- if (enumName == GLExtensionsList::VertexArrayObject)
- m_supportedMap[enumName] = false;
- else
-#endif
- m_supportedMap[enumName] = GLFunctions::glHasExtension(extName);
- }
-
- void SetExtension(GLExtensionsList::ExtensionName const & enumName, bool isSupported)
- {
- m_supportedMap[enumName] = isSupported;
- }
-
- bool IsSupported(GLExtensionsList::ExtensionName const & enumName) const
- {
- map<GLExtensionsList::ExtensionName, bool>::const_iterator it = m_supportedMap.find(enumName);
- if (it != m_supportedMap.end())
- return it->second;
-
- ASSERT(false, ("Not all used extensions is checked"));
- return false;
- }
-
- private:
- map<GLExtensionsList::ExtensionName, bool> m_supportedMap;
- };
+ SetExtension(VertexArrayObject, false);
#else
- #include "std/set.hpp"
-
- class GLExtensionsList::Impl
- {
- public:
- void CheckExtension(GLExtensionsList::ExtensionName const & enumName, const string & extName)
- {
-#ifdef OMIM_OS_ANDROID
- if (enumName == GLExtensionsList::VertexArrayObject)
- return;
-#endif
- if (GLFunctions::glHasExtension(extName))
- m_supported.insert(enumName);
- }
-
- void SetExtension(GLExtensionsList::ExtensionName const & enumName, bool isSupported)
- {
- if (isSupported)
- m_supported.insert(enumName);
- }
-
- bool IsSupported(GLExtensionsList::ExtensionName const & enumName) const
- {
- if (m_supported.find(enumName) != m_supported.end())
- return true;
-
- return false;
- }
-
- private:
- set<GLExtensionsList::ExtensionName> m_supported;
- };
+ CheckExtension(VertexArrayObject, "GL_OES_vertex_array_object");
#endif
-
-GLExtensionsList::GLExtensionsList()
- : m_impl(new Impl())
-{
-#if defined(OMIM_OS_MOBILE)
- m_impl->CheckExtension(VertexArrayObject, "GL_OES_vertex_array_object");
- m_impl->CheckExtension(RequiredInternalFormat, "GL_OES_required_internalformat");
- m_impl->CheckExtension(TextureNPOT, "GL_OES_texture_npot");
- m_impl->CheckExtension(MapBuffer, "GL_OES_mapbuffer");
- m_impl->CheckExtension(UintIndices, "GL_OES_element_index_uint");
- m_impl->CheckExtension(MapBufferRange, "GL_EXT_map_buffer_range");
+ CheckExtension(MapBuffer, "GL_OES_mapbuffer");
+ CheckExtension(UintIndices, "GL_OES_element_index_uint");
+ CheckExtension(MapBufferRange, "GL_EXT_map_buffer_range");
+ }
+ else
+ {
+ SetExtension(VertexArrayObject, true);
+ SetExtension(MapBuffer, true);
+ SetExtension(MapBufferRange, true);
+ SetExtension(UintIndices, true);
+ }
#elif defined(OMIM_OS_WINDOWS)
m_impl->CheckExtension(TextureNPOT, "GL_ARB_texture_non_power_of_two");
- m_impl->SetExtension(VertexArrayObject, false);
- m_impl->SetExtension(RequiredInternalFormat, false);
- m_impl->SetExtension(MapBuffer, true);
- m_impl->SetExtension(MapBufferRange, false);
- m_impl->SetExtension(UintIndices, true);
+ SetExtension(MapBuffer, true);
+ SetExtension(UintIndices, true);
+ if (apiVersion == dp::ApiVersion::OpenGLES2)
+ {
+ SetExtension(VertexArrayObject, false);
+ SetExtension(MapBufferRange, false);
+ }
+ else
+ {
+ SetExtension(VertexArrayObject, true);
+ SetExtension(MapBufferRange, true);
+ }
#else
- m_impl->CheckExtension(VertexArrayObject, "GL_APPLE_vertex_array_object");
- m_impl->CheckExtension(TextureNPOT, "GL_ARB_texture_non_power_of_two");
- m_impl->SetExtension(RequiredInternalFormat, false);
- m_impl->SetExtension(MapBuffer, true);
- m_impl->SetExtension(MapBufferRange, false);
- m_impl->SetExtension(UintIndices, true);
+ CheckExtension(TextureNPOT, "GL_ARB_texture_non_power_of_two");
+ SetExtension(MapBuffer, true);
+ SetExtension(UintIndices, true);
+ if (apiVersion == dp::ApiVersion::OpenGLES2)
+ {
+ CheckExtension(VertexArrayObject, "GL_APPLE_vertex_array_object");
+ SetExtension(MapBufferRange, false);
+ }
+ else
+ {
+ SetExtension(VertexArrayObject, true);
+ SetExtension(MapBufferRange, true);
+ }
#endif
}
-GLExtensionsList::~GLExtensionsList()
+// static
+GLExtensionsList & GLExtensionsList::Instance()
{
- delete m_impl;
+ static GLExtensionsList extList(GLFunctions::CurrentApiVersion);
+ return extList;
}
-GLExtensionsList & GLExtensionsList::Instance()
+bool GLExtensionsList::IsSupported(ExtensionName extName) const
{
- static GLExtensionsList extList;
- return extList;
+ auto const it = m_supportedMap.find(extName);
+ if (it != m_supportedMap.end())
+ return it->second;
+
+ ASSERT(false, ("Not all used extensions are checked"));
+ return false;
}
-bool GLExtensionsList::IsSupported(ExtensionName const & extName) const
+void GLExtensionsList::CheckExtension(ExtensionName enumName, std::string const & extName)
{
- return m_impl->IsSupported(extName);
+ m_supportedMap[enumName] = GLFunctions::glHasExtension(extName);
}
-} // namespace dp
+void GLExtensionsList::SetExtension(ExtensionName enumName, bool isSupported)
+{
+ m_supportedMap[enumName] = isSupported;
+}
+} // namespace dp