#pragma once #include #include namespace mbgl { namespace gl { // Mapping based on https://www.opengl.org/wiki/OpenGL_Type using ProgramID = uint32_t; using ShaderID = uint32_t; using BufferID = uint32_t; using TextureID = uint32_t; using VertexArrayID = uint32_t; using FramebufferID = uint32_t; using RenderbufferID = uint32_t; using AttributeLocation = int32_t; using UniformLocation = int32_t; using TextureUnit = uint8_t; enum class ShaderType : uint32_t { Vertex = 0x8B31, Fragment = 0x8B30 }; enum class DataType : uint32_t { Byte = 0x1400, UnsignedByte = 0x1401, Short = 0x1402, UnsignedShort = 0x1403, Integer = 0x1404, UnsignedInteger = 0x1405, Float = 0x1406 }; enum class RenderbufferType : uint32_t { RGBA = 0x8058, DepthStencil = 0x88F0, }; enum class TextureMipMap : bool { No = false, Yes = true }; enum class TextureFilter : bool { Nearest = false, Linear = true }; class TextureAnisotropic { public: using Type = float; static constexpr const Type Default = 1.0f; // Values below 1.0 are not allowed, so we treat all values below 1.0 as the // implementation-defined maximum. static constexpr const Type Max = 0.0f; TextureAnisotropic(float v) { operator=(v); } float operator*() const { return value; } bool operator==(const TextureAnisotropic& rhs) const { return value == rhs.value; } bool operator!=(const TextureAnisotropic& rhs) const { return value != rhs.value; } TextureAnisotropic& operator=(float v) { if (v < Default) { value = Max; } else { value = v; } return *this; } private: Type value = Default; }; enum class TextureWrap : bool { Clamp, Repeat }; enum class TextureFormat : uint32_t { RGBA = 0x1908, Alpha = 0x1906, #if not MBGL_USE_GLES2 Stencil = 0x1901, Depth = 0x1902, #endif // MBGL_USE_GLES2 }; enum class PrimitiveType { Points = 0x0000, Lines = 0x0001, LineLoop = 0x0002, LineStrip = 0x0003, Triangles = 0x0004, TriangleStrip = 0x0005, TriangleFan = 0x0006 }; #if not MBGL_USE_GLES2 struct PixelStorageType { int32_t alignment; }; constexpr bool operator!=(const PixelStorageType& a, const PixelStorageType& b) { return a.alignment != b.alignment; } #endif // MBGL_USE_GLES2 using BinaryProgramFormat = uint32_t; } // namespace gl } // namespace mbgl