From 8e79d1877ea11418de900a7f533ed2d4751fe05a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sat, 2 Aug 2014 23:09:12 +0200 Subject: [PATCH] Initial support for OpenGL ES 3.1. --- Doxyfile | 1 + README.md | 3 ++- doc/mainpage.dox | 3 ++- doc/opengl-support.dox | 5 +++++ doc/opengl.dox | 8 +++++++- src/Magnum/Context.cpp | 2 ++ src/Magnum/Shader.cpp | 1 + src/Magnum/Version.cpp | 1 + src/Magnum/Version.h | 8 ++++++-- 9 files changed, 27 insertions(+), 5 deletions(-) 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 };