From 6e97039b8d8b830a960086245be28afdfb33f597 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Mon, 26 Aug 2019 22:59:05 +0200 Subject: [PATCH] GL: don't include MAGNUM_shader_vertex_id on ES2 builds. It makes one think such feature *could* be supported there, while it couldn't. --- doc/opengl-support.dox | 4 ++-- src/Magnum/GL/Context.cpp | 4 ++++ src/Magnum/GL/Extensions.h | 4 ++++ src/Magnum/GL/Test/ContextTest.cpp | 3 ++- src/Magnum/MeshTools/FullScreenTriangle.cpp | 9 ++++++++- src/Magnum/TextureTools/DistanceField.cpp | 7 ++++++- 6 files changed, 26 insertions(+), 5 deletions(-) diff --git a/doc/opengl-support.dox b/doc/opengl-support.dox index 802e924e3..766be739a 100644 --- a/doc/opengl-support.dox +++ b/doc/opengl-support.dox @@ -397,7 +397,7 @@ Extension | Status @gl_extension{EXT,draw_buffers} | done @gl_extension{EXT,instanced_arrays} | done @gl_extension{EXT,draw_instanced} | done -`MAGNUM_shader_vertex_id` \n @m_span{m-text m-dim} Pseudo-extension denoting support for the @glsl gl_VertexID @ce \n GLSL builtin. Exposed on ES3 builds as well. @m_endspan | done +`MAGNUM_shader_vertex_id` \n @m_span{m-text m-dim} Pseudo-extension denoting support for the @glsl gl_VertexID @ce \n GLSL builtin. Exposed on ES3 builds only. @m_endspan | done @gl_extension{NV,draw_buffers} | done @gl_extension{NV,fbo_color_attachments} | done @gl_extension{NV,read_buffer} | done @@ -500,7 +500,7 @@ Extension | Status @webgl_extension{EXT,color_buffer_half_float} | | @webgl_extension{EXT,blend_minmax} | done @webgl_extension{EXT,shader_texture_lod} | done (shading language only) -`MAGNUM_shader_vertex_id` \n @m_span{m-text m-dim} Pseudo-extension denoting support for the @glsl gl_VertexID @ce \n GLSL builtin. Exposed on WebGL 2 builds as well. @m_endspan | done +`MAGNUM_shader_vertex_id` \n @m_span{m-text m-dim} Pseudo-extension denoting support for the @glsl gl_VertexID @ce \n GLSL builtin. Exposed on WebGL 2 builds only. @m_endspan | done @webgl_extension{OES,texture_float} | done @webgl_extension{OES,texture_half_float} | done @webgl_extension{OES,standard_derivatives} | done diff --git a/src/Magnum/GL/Context.cpp b/src/Magnum/GL/Context.cpp index 6db3cdbb3..d0e7536a0 100644 --- a/src/Magnum/GL/Context.cpp +++ b/src/Magnum/GL/Context.cpp @@ -263,7 +263,9 @@ constexpr Extension ExtensionListES300[]{ _extension(EXT,blend_minmax), _extension(EXT,shader_texture_lod), #endif + #ifndef MAGNUM_TARGET_GLES2 _extension(MAGNUM,shader_vertex_id), + #endif #ifdef MAGNUM_TARGET_GLES2 _extension(OES,texture_float), _extension(OES,texture_half_float), @@ -348,7 +350,9 @@ constexpr Extension ExtensionListES300[]{ _extension(EXT,instanced_arrays), _extension(EXT,draw_instanced), #endif + #ifndef MAGNUM_TARGET_GLES2 _extension(MAGNUM,shader_vertex_id), + #endif #ifdef MAGNUM_TARGET_GLES2 _extension(NV,draw_buffers), _extension(NV,fbo_color_attachments), diff --git a/src/Magnum/GL/Extensions.h b/src/Magnum/GL/Extensions.h index a10d7c26e..18da38ac6 100644 --- a/src/Magnum/GL/Extensions.h +++ b/src/Magnum/GL/Extensions.h @@ -309,7 +309,9 @@ namespace ANGLE { _extension(30,WEBGL,compressed_texture_astc, GLES200, None) // #30 _extension(31,WEBGL,compressed_texture_s3tc_srgb, GLES200, None) // #32 } namespace MAGNUM { + #ifndef MAGNUM_TARGET_GLES2 _extension(40,MAGNUM,shader_vertex_id, GLES300, GLES300) + #endif } #else namespace ANDROID { @@ -489,7 +491,9 @@ namespace ANDROID { _extension(126,OES,texture_storage_multisample_2d_array, GLES310, GLES320) // #174 #endif } namespace MAGNUM { + #ifndef MAGNUM_TARGET_GLES2 _extension(130,MAGNUM,shader_vertex_id, GLES300, GLES300) + #endif } #endif #undef _extension diff --git a/src/Magnum/GL/Test/ContextTest.cpp b/src/Magnum/GL/Test/ContextTest.cpp index a8ae02d0c..235f5c74d 100644 --- a/src/Magnum/GL/Test/ContextTest.cpp +++ b/src/Magnum/GL/Test/ContextTest.cpp @@ -29,6 +29,7 @@ #include #include "Magnum/GL/Context.h" +#include "Magnum/GL/Extensions.h" #include "Magnum/GL/Version.h" namespace Magnum { namespace GL { namespace Test { namespace { @@ -166,7 +167,7 @@ void ContextTest::extensions() { #endif #if defined(MAGNUM_TARGET_GLES) && !defined(MAGNUM_TARGET_GLES2) - if(e.coreVersion() == Version::GLES300) { + if(e.coreVersion() == Version::GLES300 && e.index() != Extensions::MAGNUM::shader_vertex_id::Index) { Error{} << "Extension" << e.string() << "has core version" << e.coreVersion() << "on a GLES3 build -- it shouldn't be present at all"; CORRADE_VERIFY(false); } diff --git a/src/Magnum/MeshTools/FullScreenTriangle.cpp b/src/Magnum/MeshTools/FullScreenTriangle.cpp index 7402fd67d..359861ba0 100644 --- a/src/Magnum/MeshTools/FullScreenTriangle.cpp +++ b/src/Magnum/MeshTools/FullScreenTriangle.cpp @@ -40,7 +40,10 @@ GL::Mesh fullScreenTriangle(const GL::Version version) { mesh.setPrimitive(GL::MeshPrimitive::Triangles) .setCount(3); - if(!GL::Context::current().isExtensionSupported(version)) { + #ifndef MAGNUM_TARGET_GLES2 + if(!GL::Context::current().isExtensionSupported(version)) + #endif + { constexpr Vector2 triangle[]{ {-1.0f, 1.0f}, {-1.0f, -3.0f}, @@ -51,6 +54,10 @@ GL::Mesh fullScreenTriangle(const GL::Version version) { mesh.addVertexBuffer(std::move(buffer), 0, GL::Attribute<0, Vector2>{}); } + #ifdef MAGNUM_TARGET_GLES2 + static_cast(version); + #endif + return mesh; } diff --git a/src/Magnum/TextureTools/DistanceField.cpp b/src/Magnum/TextureTools/DistanceField.cpp index 201b6c186..432a88184 100644 --- a/src/Magnum/TextureTools/DistanceField.cpp +++ b/src/Magnum/TextureTools/DistanceField.cpp @@ -106,7 +106,10 @@ DistanceFieldShader::DistanceFieldShader(const UnsignedInt radius) { attachShaders({vert, frag}); - if(!GL::Context::current().isExtensionSupported()) { + #ifndef MAGNUM_TARGET_GLES2 + if(!GL::Context::current().isExtensionSupported()) + #endif + { bindAttributeLocation(Position::Location, "position"); } @@ -154,7 +157,9 @@ DistanceField::DistanceField(const UnsignedInt radius): _state{new State{radius} _state->mesh.setPrimitive(GL::MeshPrimitive::Triangles) .setCount(3); + #ifndef MAGNUM_TARGET_GLES2 if(!GL::Context::current().isExtensionSupported()) + #endif { constexpr Vector2 triangle[] = { Vector2(-1.0, 1.0),