diff --git a/Doxyfile b/Doxyfile
index 538c742ca..bbf610f7c 100644
--- a/Doxyfile
+++ b/Doxyfile
@@ -262,6 +262,7 @@ ALIASES = \
"extension{2}=\1_\2" \
"extension2{2}=\1_\2" \
"requires_gles30=@xrefitem requires-gles30 \"Requires OpenGL ES 3.0\" \"Functionality requiring OpenGL ES 3.0\"" \
+ "requires_gles31=@xrefitem requires-gles31 \"Requires OpenGL ES 3.1\" \"Functionality requiring OpenGL ES 3.1\"" \
"requires_gl=@xrefitem requires-gl \"Requires desktop OpenGL\" \"Functionality requiring desktop OpenGL (not available in OpenGL ES)\"" \
"requires_gles20=@xrefitem requires-gles20 \"Requires OpenGL ES 2.0\" \"Functionality requiring OpenGL ES 2.0 (not available in ES 3.0 and desktop OpenGL)\"" \
"requires_es_extension=@xrefitem requires-es-extension \"Requires OpenGL ES extension\" \"Functionality requiring specific OpenGL ES extension\"" \
diff --git a/README.md b/README.md
index c8ab38890..e561f3a32 100644
--- a/README.md
+++ b/README.md
@@ -43,7 +43,8 @@ Graphics APIs:
* **OpenGL** 2.1 through 4.4, core profile functionality and modern
extensions
-* **OpenGL ES** 2.0, 3.0 and extensions to match desktop OpenGL functionality
+* **OpenGL ES** 2.0, 3.0, 3.1 and extensions to match desktop OpenGL
+ functionality
* **WebGL** 1.0 and extensions to match desktop OpenGL functionality
Platforms:
diff --git a/doc/mainpage.dox b/doc/mainpage.dox
index 64774d72e..41f8e69f8 100644
--- a/doc/mainpage.dox
+++ b/doc/mainpage.dox
@@ -69,7 +69,8 @@ Graphics APIs:
- **OpenGL** 2.1 through 4.4, core profile functionality and modern
extensions
-- **OpenGL ES** 2.0, 3.0 and extensions to match desktop OpenGL functionality
+- **OpenGL ES** 2.0, 3.0, 3.1 and extensions to match desktop OpenGL
+ functionality
- **WebGL** 1.0 and extensions to match desktop OpenGL functionality
Platforms:
diff --git a/doc/opengl-support.dox b/doc/opengl-support.dox
index 48ce39b86..c1984a2d0 100644
--- a/doc/opengl-support.dox
+++ b/doc/opengl-support.dox
@@ -238,6 +238,11 @@ supported.
Features that have their equivalents implemented in desktop version are
supported.
+@subsection opengl-support-es31 OpenGL ES 3.1
+
+Features that have their equivalents implemented in desktop version are
+supported.
+
@subsection opengl-support-es30-extensions OpenGL ES 2.0 extensions to match ES 3.0 functionality
%Extension | Status
diff --git a/doc/opengl.dox b/doc/opengl.dox
index 3b4713e71..582ad9213 100644
--- a/doc/opengl.dox
+++ b/doc/opengl.dox
@@ -59,6 +59,7 @@ is supported on older Intel GPUs even if they are capable of OpenGL 2.1 only).
- @subpage requires-gl
- @subpage requires-gles20
- @subpage requires-gles30
+- @subpage requires-gles31
- @subpage requires-es-extension
@see @ref building, @ref cmake, @ref MAGNUM_TARGET_GLES,
@@ -82,9 +83,14 @@ is supported on older Intel GPUs even if they are capable of OpenGL 2.1 only).
@page requires-gles20 Functionality requiring OpenGL ES 2.0 (not available on desktop or ES 3.0)
@see @ref MAGNUM_TARGET_GLES2
-@page requires-gles30 Functionality requiring OpenGL ES 3.0
+@page requires-gles30 Functionality requiring at least OpenGL ES 3.0
+
+The following symbols are not defined at all when targeting OpenGL ES 2.0.
+
@see @ref MAGNUM_TARGET_GLES3
+@page requires-gles31 Functionality requiring OpenGL ES 3.1
+
@page requires-es-extension Functionality requiring specific OpenGL ES extension
@see @ref MAGNUM_TARGET_GLES2
diff --git a/src/Magnum/Context.cpp b/src/Magnum/Context.cpp
index 5f4c25dc2..23c9e5dab 100644
--- a/src/Magnum/Context.cpp
+++ b/src/Magnum/Context.cpp
@@ -281,6 +281,7 @@ const std::vector& Extension::extensions(Version version) {
#else
case Version::GLES200: return empty;
case Version::GLES300:
+ case Version::GLES310:
#ifdef MAGNUM_TARGET_GLES2
return extensionsES300;
#else
@@ -396,6 +397,7 @@ Context::Context(void functionLoader()) {
#else
Version::GLES200,
Version::GLES300,
+ Version::GLES310,
#endif
Version::None
};
diff --git a/src/Magnum/Shader.cpp b/src/Magnum/Shader.cpp
index f426fb88a..164661c74 100644
--- a/src/Magnum/Shader.cpp
+++ b/src/Magnum/Shader.cpp
@@ -554,6 +554,7 @@ Shader::Shader(const Version version, const Type type): _type(type), _id(0) {
#else
case Version::GLES200: _sources.push_back("#version 100\n"); return;
case Version::GLES300: _sources.push_back("#version 300 es\n"); return;
+ case Version::GLES310: _sources.push_back("#version 310 es\n"); return;
#endif
/* The user is responsible for (not) adding #version directive */
diff --git a/src/Magnum/Version.cpp b/src/Magnum/Version.cpp
index 81984df06..2ba4c3535 100644
--- a/src/Magnum/Version.cpp
+++ b/src/Magnum/Version.cpp
@@ -48,6 +48,7 @@ Debug operator<<(Debug debug, Version value) {
#else
_c(GLES200, "OpenGL ES 2.0")
_c(GLES300, "OpenGL ES 3.0")
+ _c(GLES310, "OpenGL ES 3.1")
#endif
#undef _c
}
diff --git a/src/Magnum/Version.h b/src/Magnum/Version.h
index c30246af0..24a5efc01 100644
--- a/src/Magnum/Version.h
+++ b/src/Magnum/Version.h
@@ -77,9 +77,13 @@ enum class Version: Int {
* equivalent to @ref Version::GL430.
*/
#ifndef MAGNUM_TARGET_GLES
- GLES300 = 430
+ GLES300 = 430,
#else
- GLES300 = 300
+ GLES300 = 300,
+ #endif
+
+ #ifdef MAGNUM_TARGET_GLES
+ GLES310 = 310 /**< @brief OpenGL ES 3.1, GLSL ES 3.10 */
#endif
};