diff --git a/drape/glconstants.cpp b/drape/glconstants.cpp index 09556f4f84..e1d55b97ef 100644 --- a/drape/glconstants.cpp +++ b/drape/glconstants.cpp @@ -1,6 +1,30 @@ #include "glconstants.hpp" #include "glIncludes.hpp" +#if !defined(GL_RGBA8_OES) + #define GL_RGBA8_OES 0x8058 +#endif + +#if !defined(GL_RGBA4_OES) + #define GL_RGBA4_OES 0x8056 +#endif + +#if !defined(GL_ALPHA8_OES) + #define GL_ALPHA8_OES 0x803C +#endif + +#if !defined(GL_LUMINANCE8_OES) + #define GL_LUMINANCE8_OES 0x8040 +#endif + +#if !defined(GL_LUMINANCE8_ALPHA8_OES) + #define GL_LUMINANCE8_ALPHA8_OES 0x8045 +#endif + +#if !defined(GL_LUMINANCE8_ALPHA4_OES) + #define GL_LUMINANCE8_ALPHA4_OES 0x8043 +#endif + namespace GLConst { const glConst GLArrayBuffer = GL_ARRAY_BUFFER; @@ -14,9 +38,41 @@ namespace GLConst const glConst GLFragmentShader = GL_FRAGMENT_SHADER; const glConst GLCurrentProgram = GL_CURRENT_PROGRAM; + const glConst GLRGBA = GL_RGBA; + const glConst GLRGB = GL_RGB; + const glConst GLAlpha = GL_ALPHA; + const glConst GLLuminance = GL_LUMINANCE; + const glConst GLAlphaLuminance = GL_LUMINANCE_ALPHA; + + const glConst GLRGBA8 = GL_RGBA8_OES; + const glConst GLRGBA4 = GL_RGBA4_OES; + const glConst GLAlpha8 = GL_ALPHA8_OES; + const glConst GLLuminance8 = GL_LUMINANCE8_OES; + const glConst GLAlphaLuminance8 = GL_LUMINANCE8_ALPHA8_OES; + const glConst GLAlphaLuminance4 = GL_LUMINANCE8_ALPHA4_OES; + const glConst GL8BitOnChannel = GL_UNSIGNED_BYTE; const glConst GL4BitOnChannel = GL_UNSIGNED_SHORT_4_4_4_4; + const glConst GLTexture2D = GL_TEXTURE_2D; + + const glConst GLTexture0 = GL_TEXTURE0; + const glConst GLTexture1 = GL_TEXTURE1; + const glConst GLTexture2 = GL_TEXTURE2; + const glConst GLTexture3 = GL_TEXTURE3; + + const glConst GLMinFilter = GL_TEXTURE_MIN_FILTER; + const glConst GLMagFilter = GL_TEXTURE_MAG_FILTER; + const glConst GLWrapS = GL_TEXTURE_WRAP_S; + const glConst GLWrapT = GL_TEXTURE_WRAP_T; + + const glConst GLRepeate = GL_REPEAT; + const glConst GLMirroredRepeate = GL_MIRRORED_REPEAT; + const glConst GLClampToEdge = GL_CLAMP_TO_EDGE; + + const glConst GLLinear = GL_LINEAR; + const glConst GLNearest = GL_NEAREST; + const glConst GLByteType = GL_BYTE; const glConst GLUnsignedByteType = GL_UNSIGNED_BYTE; const glConst GLShortType = GL_SHORT; diff --git a/drape/glconstants.hpp b/drape/glconstants.hpp index 032b690a6d..b924d66cee 100644 --- a/drape/glconstants.hpp +++ b/drape/glconstants.hpp @@ -20,10 +20,49 @@ namespace GLConst extern const glConst GLFragmentShader; extern const glConst GLCurrentProgram; + /// Texture layouts + extern const glConst GLRGBA; + extern const glConst GLRGB; + extern const glConst GLAlpha; + extern const glConst GLLuminance; + extern const glConst GLAlphaLuminance; + + /// Texture layout size + extern const glConst GLRGBA8; + extern const glConst GLRGBA4; + extern const glConst GLAlpha8; + extern const glConst GLLuminance8; + extern const glConst GLAlphaLuminance8; + extern const glConst GLAlphaLuminance4; + /// Pixel type for texture upload extern const glConst GL8BitOnChannel; extern const glConst GL4BitOnChannel; + /// Texture targets + extern const glConst GLTexture2D; + + /// Texture uniform blocks + extern const glConst GLTexture0; + extern const glConst GLTexture1; + extern const glConst GLTexture2; + extern const glConst GLTexture3; + + /// Texture param names + extern const glConst GLMinFilter; + extern const glConst GLMagFilter; + extern const glConst GLWrapS; + extern const glConst GLWrapT; + + /// Texture Wrap Modes + extern const glConst GLRepeate; + extern const glConst GLMirroredRepeate; + extern const glConst GLClampToEdge; + + /// Texture Filter Modes + extern const glConst GLLinear; + extern const glConst GLNearest; + /// OpenGL types extern const glConst GLByteType; extern const glConst GLUnsignedByteType; diff --git a/drape/glextensions_list.cpp b/drape/glextensions_list.cpp index 6197fb6ce8..334e6a7ff4 100644 --- a/drape/glextensions_list.cpp +++ b/drape/glextensions_list.cpp @@ -59,8 +59,12 @@ GLExtensionsList::GLExtensionsList() { #if defined(OMIM_OS_MOBILE) m_impl->CheckExtension(VertexArrayObject, "GL_OES_vertex_array_object"); + m_impl->CheckExtension(TextureNPOT, "GL_OES_texture_npot"); + m_impl->CheckExtension(RequiredInternalFormat, "GL_OES_required_internalformat"); #else m_impl->CheckExtension(VertexArrayObject, "GL_APPLE_vertex_array_object"); + m_impl->CheckExtension(TextureNPOT, "GL_ARB_texture_non_power_of_two"); + m_impl->CheckExtension(RequiredInternalFormat, "GL_OES_required_internalformat"); #endif } diff --git a/drape/glextensions_list.hpp b/drape/glextensions_list.hpp index 78159d2349..8afa725aab 100644 --- a/drape/glextensions_list.hpp +++ b/drape/glextensions_list.hpp @@ -7,7 +7,9 @@ class GLExtensionsList : private noncopyable public: enum ExtensionName { - VertexArrayObject + VertexArrayObject, + TextureNPOT, + RequiredInternalFormat }; static GLExtensionsList & Instance(); diff --git a/drape/glfunctions.cpp b/drape/glfunctions.cpp index 00d5a275f3..0d164600d6 100644 --- a/drape/glfunctions.cpp +++ b/drape/glfunctions.cpp @@ -505,9 +505,9 @@ int32_t GLFunctions::glGetProgramiv(uint32_t program, glConst paramName) return paramValue; } -void GLFunctions::glActiveTexture(uint32_t samplerBlock) +void GLFunctions::glActiveTexture(glConst texBlock) { - GLCHECK(::glActiveTexture(GL_TEXTURE0 + samplerBlock)); + GLCHECK(::glActiveTexture(texBlock)); } uint32_t GLFunctions::glGenTexture() @@ -522,21 +522,19 @@ void GLFunctions::glBindTexture(uint32_t textureID) GLCHECK(::glBindTexture(GL_TEXTURE_2D, textureID)); } -void GLFunctions::glTexImage2D(int width, int height, glConst pixelType, const void * data) +void GLFunctions::glTexImage2D(int width, int height, glConst layout, glConst pixelType, const void * data) { - GLCHECK(::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, pixelType, data)); + GLCHECK(::glTexImage2D(GL_TEXTURE_2D, 0, layout, width, height, 0, layout, pixelType, data)); } -void GLFunctions::glTexSubImage2D(int x, int y, int width, int height, glConst pixelType, const void * data) +void GLFunctions::glTexSubImage2D(int x, int y, int width, int height, glConst layout, glConst pixelType, const void * data) { - GLCHECK(::glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, width, height, GL_RGBA, pixelType, data)); + GLCHECK(::glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, width, height, layout, pixelType, data)); } -uint32_t GLFunctions::glGetBindedTexture() +void GLFunctions::glTexParameter(glConst target, glConst param, glConst value) { - int id = 0; - GLCHECK(::glGetIntegerv(GL_TEXTURE_BINDING_2D, &id)); - return id; + GLCHECK(::glTexParameteri(target, param, value)); } void GLFunctions::glDrawElements(uint16_t indexCount) diff --git a/drape/glfunctions.hpp b/drape/glfunctions.hpp index c001c27848..6ade886592 100644 --- a/drape/glfunctions.hpp +++ b/drape/glfunctions.hpp @@ -90,12 +90,12 @@ public: static int32_t glGetProgramiv(uint32_t program, glConst paramName); // Textures support - static void glActiveTexture(uint32_t samplerBlock); + static void glActiveTexture(glConst texBlock); static uint32_t glGenTexture(); static void glBindTexture(uint32_t textureID); - static void glTexImage2D(int width, int height, glConst pixelType, const void * data); - static void glTexSubImage2D(int x, int y, int width, int height, glConst pixelType, const void * data); - static uint32_t glGetBindedTexture(); + static void glTexImage2D(int width, int height, glConst layout, glConst pixelType, const void * data); + static void glTexSubImage2D(int x, int y, int width, int height, glConst layout, glConst pixelType, const void * data); + static void glTexParameter(glConst target, glConst param, glConst value); // Draw support static void glDrawElements(uint16_t indexCount);