Browse Source

Don't expose unneeded ES2 extensions under ES3.

They provide the same or slightly different functionality as is present
in ES3 itself, causing confusion. Fortunately this change required only
one modification in Context test and nowhere else.
pull/51/head
Vladimír Vondruš 13 years ago
parent
commit
18682203ef
  1. 9
      src/Context.cpp
  2. 28
      src/Extensions.h
  3. 11
      src/Test/ContextGLTest.cpp

9
src/Context.cpp

@ -213,6 +213,7 @@ const std::vector<Extension>& Extension::extensions(Version version) {
_extension(GL,OES,stencil1), _extension(GL,OES,stencil1),
_extension(GL,OES,stencil4), _extension(GL,OES,stencil4),
_extension(GL,OES,texture_3D)}; _extension(GL,OES,texture_3D)};
#ifdef MAGNUM_TARGET_GLES2
static const std::vector<Extension> extensionsES300{ static const std::vector<Extension> extensionsES300{
_extension(GL,ANGLE,framebuffer_blit), _extension(GL,ANGLE,framebuffer_blit),
_extension(GL,ANGLE,framebuffer_multisample), _extension(GL,ANGLE,framebuffer_multisample),
@ -246,6 +247,7 @@ const std::vector<Extension>& Extension::extensions(Version version) {
_extension(GL,OES,required_internalformat), _extension(GL,OES,required_internalformat),
_extension(GL,OES,surfaceless_context)}; // done _extension(GL,OES,surfaceless_context)}; // done
#endif #endif
#endif
switch(version) { switch(version) {
case Version::None: return extensions; case Version::None: return extensions;
@ -264,7 +266,12 @@ const std::vector<Extension>& Extension::extensions(Version version) {
case Version::GL440: return extensions440; case Version::GL440: return extensions440;
#else #else
case Version::GLES200: return empty; case Version::GLES200: return empty;
case Version::GLES300: return extensionsES300; case Version::GLES300:
#ifdef MAGNUM_TARGET_GLES2
return extensionsES300;
#else
return empty;
#endif
#endif #endif
} }

28
src/Extensions.h

@ -200,56 +200,83 @@ namespace GL {
#else #else
#line 1 #line 1
namespace ANGLE { namespace ANGLE {
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,ANGLE,framebuffer_blit, GLES200, GLES300) // #83 _extension(GL,ANGLE,framebuffer_blit, GLES200, GLES300) // #83
_extension(GL,ANGLE,framebuffer_multisample, GLES200, GLES300) // #84 _extension(GL,ANGLE,framebuffer_multisample, GLES200, GLES300) // #84
_extension(GL,ANGLE,depth_texture, GLES200, GLES300) // #138 _extension(GL,ANGLE,depth_texture, GLES200, GLES300) // #138
#endif
} namespace APPLE { } namespace APPLE {
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,APPLE,framebuffer_multisample, GLES200, GLES300) // #78 _extension(GL,APPLE,framebuffer_multisample, GLES200, GLES300) // #78
#endif
_extension(GL,APPLE,texture_format_BGRA8888, GLES200, None) // #79 _extension(GL,APPLE,texture_format_BGRA8888, GLES200, None) // #79
} namespace ARM { } namespace ARM {
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,ARM,rgba8, GLES200, GLES300) // #82 _extension(GL,ARM,rgba8, GLES200, GLES300) // #82
#endif
} namespace CHROMIUM { } namespace CHROMIUM {
_extension(GL,CHROMIUM,map_sub, GLES200, None) _extension(GL,CHROMIUM,map_sub, GLES200, None)
} namespace EXT { } namespace EXT {
_extension(GL,EXT,texture_filter_anisotropic, GLES200, None) // #41 _extension(GL,EXT,texture_filter_anisotropic, GLES200, None) // #41
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,EXT,texture_type_2_10_10_10_REV, GLES200, GLES300) // #42 _extension(GL,EXT,texture_type_2_10_10_10_REV, GLES200, GLES300) // #42
#endif
_extension(GL,EXT,texture_format_BGRA8888, GLES200, None) // #51 _extension(GL,EXT,texture_format_BGRA8888, GLES200, None) // #51
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,EXT,discard_framebuffer, GLES200, GLES300) // #64 _extension(GL,EXT,discard_framebuffer, GLES200, GLES300) // #64
_extension(GL,EXT,blend_minmax, GLES200, GLES300) // #65 _extension(GL,EXT,blend_minmax, GLES200, GLES300) // #65
#endif
_extension(GL,EXT,read_format_bgra, GLES200, None) // #66 _extension(GL,EXT,read_format_bgra, GLES200, None) // #66
_extension(GL,EXT,debug_label, GLES200, None) // #98 _extension(GL,EXT,debug_label, GLES200, None) // #98
_extension(GL,EXT,debug_marker, GLES200, None) // #99 _extension(GL,EXT,debug_marker, GLES200, None) // #99
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,EXT,occlusion_query_boolean, GLES200, GLES300) // #100 _extension(GL,EXT,occlusion_query_boolean, GLES200, GLES300) // #100
#endif
_extension(GL,EXT,separate_shader_objects, GLES200, None) // #101 _extension(GL,EXT,separate_shader_objects, GLES200, None) // #101
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,EXT,texture_rg, GLES200, GLES300) // #103 _extension(GL,EXT,texture_rg, GLES200, GLES300) // #103
#endif
_extension(GL,EXT,sRGB, GLES200, None) // #105 _extension(GL,EXT,sRGB, GLES200, None) // #105
_extension(GL,EXT,multisampled_render_to_texture, GLES200, None) // #106 _extension(GL,EXT,multisampled_render_to_texture, GLES200, None) // #106
_extension(GL,EXT,robustness, GLES200, None) // #107 _extension(GL,EXT,robustness, GLES200, None) // #107
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,EXT,texture_storage, GLES200, GLES300) // #108 _extension(GL,EXT,texture_storage, GLES200, GLES300) // #108
_extension(GL,EXT,map_buffer_range, GLES200, GLES300) // #121 _extension(GL,EXT,map_buffer_range, GLES200, GLES300) // #121
#endif
_extension(GL,EXT,disjoint_timer_query, GLES200, None) // #150 _extension(GL,EXT,disjoint_timer_query, GLES200, None) // #150
} namespace KHR { } namespace KHR {
_extension(GL,KHR,debug, GLES200, None) // #118 _extension(GL,KHR,debug, GLES200, None) // #118
} namespace NV { } namespace NV {
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,NV,draw_buffers, GLES200, GLES300) // #91 _extension(GL,NV,draw_buffers, GLES200, GLES300) // #91
_extension(GL,NV,fbo_color_attachments, GLES200, GLES300) // #92 _extension(GL,NV,fbo_color_attachments, GLES200, GLES300) // #92
_extension(GL,NV,read_buffer, GLES200, GLES300) // #93 _extension(GL,NV,read_buffer, GLES200, GLES300) // #93
#endif
_extension(GL,NV,read_buffer_front, GLES200, None) // #93 _extension(GL,NV,read_buffer_front, GLES200, None) // #93
_extension(GL,NV,read_depth, GLES200, None) // #94 _extension(GL,NV,read_depth, GLES200, None) // #94
_extension(GL,NV,read_stencil, GLES200, None) // #94 _extension(GL,NV,read_stencil, GLES200, None) // #94
_extension(GL,NV,read_depth_stencil, GLES200, None) // #94 _extension(GL,NV,read_depth_stencil, GLES200, None) // #94
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,NV,framebuffer_blit, GLES200, GLES300) // #142 _extension(GL,NV,framebuffer_blit, GLES200, GLES300) // #142
_extension(GL,NV,framebuffer_multisample, GLES200, GLES300) // #143 _extension(GL,NV,framebuffer_multisample, GLES200, GLES300) // #143
#endif
_extension(GL,NV,texture_border_clamp, GLES200, None) // #149 _extension(GL,NV,texture_border_clamp, GLES200, None) // #149
} namespace OES { } namespace OES {
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,OES,depth24, GLES200, GLES300) // #24 _extension(GL,OES,depth24, GLES200, GLES300) // #24
#endif
_extension(GL,OES,depth32, GLES200, None) // #25 _extension(GL,OES,depth32, GLES200, None) // #25
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,OES,element_index_uint, GLES200, GLES300) // #26 _extension(GL,OES,element_index_uint, GLES200, GLES300) // #26
#endif
_extension(GL,OES,mapbuffer, GLES200, None) // #29 _extension(GL,OES,mapbuffer, GLES200, None) // #29
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,OES,rgb8_rgba8, GLES200, GLES300) // #30 _extension(GL,OES,rgb8_rgba8, GLES200, GLES300) // #30
#endif
_extension(GL,OES,stencil1, GLES200, None) // #31 _extension(GL,OES,stencil1, GLES200, None) // #31
_extension(GL,OES,stencil4, GLES200, None) // #32 _extension(GL,OES,stencil4, GLES200, None) // #32
_extension(GL,OES,texture_3D, GLES200, None) // #34 _extension(GL,OES,texture_3D, GLES200, None) // #34
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,OES,texture_half_float_linear, GLES200, GLES300) // #35 _extension(GL,OES,texture_half_float_linear, GLES200, GLES300) // #35
_extension(GL,OES,texture_float_linear, GLES200, GLES300) // #35 _extension(GL,OES,texture_float_linear, GLES200, GLES300) // #35
_extension(GL,OES,texture_half_float, GLES200, GLES300) // #36 _extension(GL,OES,texture_half_float, GLES200, GLES300) // #36
@ -261,6 +288,7 @@ namespace GL {
_extension(GL,OES,vertex_array_object, GLES200, GLES300) // #71 _extension(GL,OES,vertex_array_object, GLES200, GLES300) // #71
_extension(GL,OES,required_internalformat, GLES200, GLES300) // #115 _extension(GL,OES,required_internalformat, GLES200, GLES300) // #115
_extension(GL,OES,surfaceless_context, GLES200, GLES300) // #116 _extension(GL,OES,surfaceless_context, GLES200, GLES300) // #116
#endif
} }
#endif #endif
} }

11
src/Test/ContextGLTest.cpp

@ -101,18 +101,15 @@ void ContextGLTest::unsupportedExtension() {
void ContextGLTest::pastExtension() { void ContextGLTest::pastExtension() {
#ifndef MAGNUM_TARGET_GLES #ifndef MAGNUM_TARGET_GLES
if(!Context::current()->isVersionSupported(Version::GL300)) if(!Context::current()->isVersionSupported(Version::GL300))
CORRADE_SKIP("No already supported extensions exist in OpenGL 2.1"); CORRADE_SKIP("No already supported extensions are listed for OpenGL 2.1");
CORRADE_VERIFY(Context::current()->isExtensionSupported<Extensions::GL::APPLE::vertex_array_object>()); CORRADE_VERIFY(Context::current()->isExtensionSupported<Extensions::GL::APPLE::vertex_array_object>());
/* No assertion should be fired */ /* No assertion should be fired */
MAGNUM_ASSERT_EXTENSION_SUPPORTED(Extensions::GL::APPLE::vertex_array_object); MAGNUM_ASSERT_EXTENSION_SUPPORTED(Extensions::GL::APPLE::vertex_array_object);
#elif defined(MAGNUM_TARGET_GLES2)
CORRADE_SKIP("No already supported extensions are listed for OpenGL ES 2.0");
#else #else
if(!Context::current()->isVersionSupported(Version::GLES300)) CORRADE_SKIP("No already supported extensions are listed for OpenGL ES 3.0");
CORRADE_SKIP("No already supported extensions exist in OpenGL ES 2.0");
CORRADE_VERIFY(Context::current()->isExtensionSupported<Extensions::GL::EXT::texture_rg>());
/* No assertion should be fired */
MAGNUM_ASSERT_EXTENSION_SUPPORTED(Extensions::GL::EXT::texture_rg);
#endif #endif
} }

Loading…
Cancel
Save