From 99c72ed99b54be2911107aee183606f390122eaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Tue, 23 Jul 2013 01:04:06 +0200 Subject: [PATCH] Initial support for OpenGL 4.4. --- Doxyfile | 1 + doc/required-extensions.dox | 2 ++ src/Buffer.h | 2 +- src/Context.cpp | 12 ++++++++++++ src/Context.h | 1 + src/Extensions.h | 10 +++++++++- src/Platform/magnum-info.cpp | 1 + src/Shader.cpp | 1 + 8 files changed, 28 insertions(+), 2 deletions(-) diff --git a/Doxyfile b/Doxyfile index 257379fc2..ec9dbea6a 100644 --- a/Doxyfile +++ b/Doxyfile @@ -216,6 +216,7 @@ ALIASES = \ "requires_gl41=@xrefitem requires-gl41 \"Requires OpenGL 4.1\" \"Functionality requiring OpenGL 4.1\"" \ "requires_gl42=@xrefitem requires-gl42 \"Requires OpenGL 4.2\" \"Functionality requiring OpenGL 4.2\"" \ "requires_gl43=@xrefitem requires-gl43 \"Requires OpenGL 4.3\" \"Functionality requiring OpenGL 4.3\"" \ + "requires_gl44=@xrefitem requires-gl44 \"Requires OpenGL 4.4\" \"Functionality requiring OpenGL 4.4\"" \ "requires_extension=@xrefitem requires-extension \"Requires OpenGL extension\" \"Functionality requiring specific OpenGL extension\"" \ "extension{2}=\1_\2" \ "requires_gles30=@xrefitem requires-gles30 \"Requires OpenGL ES 3.0\" \"Functionality requiring OpenGL ES 3.0\"" \ diff --git a/doc/required-extensions.dox b/doc/required-extensions.dox index 2d56cfa65..e2c4d8b14 100644 --- a/doc/required-extensions.dox +++ b/doc/required-extensions.dox @@ -46,6 +46,7 @@ supported on Intel GPUs even if they are capable of OpenGL 2.1 only). - @subpage requires-gl41 - @subpage requires-gl42 - @subpage requires-gl43 +- @subpage requires-gl44 - @subpage requires-extension - @subpage requires-gl - @subpage requires-gles20 @@ -61,6 +62,7 @@ supported on Intel GPUs even if they are capable of OpenGL 2.1 only). @page requires-gl41 Functionality requiring OpenGL 4.1 @page requires-gl42 Functionality requiring OpenGL 4.2 @page requires-gl43 Functionality requiring OpenGL 4.3 +@page requires-gl44 Functionality requiring OpenGL 4.4 @page requires-extension Functionality requiring specific OpenGL extension diff --git a/src/Buffer.h b/src/Buffer.h index 7cbc99ae2..0fe35faaa 100644 --- a/src/Buffer.h +++ b/src/Buffer.h @@ -119,7 +119,7 @@ OpenGL in order to preserve the data. If running on OpenGL ES or extension @extension{ARB,invalidate_subdata} is not available, these functions do nothing. -@todo Support for AMD's query buffer (@extension{AMD,query_buffer_object}) +@todo Support for AMD/ARB's query buffer (@extension{AMD,query_buffer_object}, @extension{ARB,query_buffer_object}) @todo BindBufferRange/BindBufferOffset/BindBufferBase for transform feedback (3.0, @extension{EXT,transform_feedback}) */ class MAGNUM_EXPORT Buffer { diff --git a/src/Context.cpp b/src/Context.cpp index a2d290dee..1b7f9d72e 100644 --- a/src/Context.cpp +++ b/src/Context.cpp @@ -61,6 +61,7 @@ Debug operator<<(Debug debug, Version value) { _c(GL410, "OpenGL 4.1") _c(GL420, "OpenGL 4.2") _c(GL430, "OpenGL 4.3") + _c(GL440, "OpenGL 4.4") #else _c(GLES200, "OpenGL ES 2.0") _c(GLES300, "OpenGL ES 3.0") @@ -195,6 +196,15 @@ const std::vector& Extension::extensions(Version version) { _extension(GL,ARB,texture_storage_multisample), _extension(GL,ARB,texture_view), _extension(GL,ARB,vertex_attrib_binding)}; + static const std::vector extensions440{ + _extension(GL,ARB,buffer_storage), + _extension(GL,ARB,clear_texture), + _extension(GL,ARB,enhanced_layouts), + _extension(GL,ARB,multi_bind), + _extension(GL,ARB,query_buffer_object), + _extension(GL,ARB,texture_mirror_clamp_to_edge), + _extension(GL,ARB,texture_stencil8), + _extension(GL,ARB,vertex_type_10f_11f_11f_rev)}; #undef _extension #else static const std::vector extensions{ @@ -271,6 +281,7 @@ const std::vector& Extension::extensions(Version version) { case Version::GL420: return extensions420; /* case Version::GLES300: */ case Version::GL430: return extensions430; + case Version::GL440: return extensions440; #else case Version::GLES200: return empty; case Version::GLES300: return extensionsES300; @@ -322,6 +333,7 @@ Context::Context() { Version::GL410, Version::GL420, Version::GL430, + Version::GL440, #else Version::GLES200, Version::GLES300, diff --git a/src/Context.h b/src/Context.h index d768897fc..3bdd1c6f0 100644 --- a/src/Context.h +++ b/src/Context.h @@ -59,6 +59,7 @@ enum class Version: Int { GL410 = 410, /**< @brief OpenGL 4.1, GLSL 4.10 */ GL420 = 420, /**< @brief OpenGL 4.2, GLSL 4.20 */ GL430 = 430, /**< @brief OpenGL 4.3, GLSL 4.30 */ + GL440 = 440, /**< @brief OpenGL 4.4, GLSL 4.40 */ #endif /** diff --git a/src/Extensions.h b/src/Extensions.h index 249dad0db..80595b3a2 100644 --- a/src/Extensions.h +++ b/src/Extensions.h @@ -153,6 +153,14 @@ namespace GL { _extension(GL,ARB,texture_buffer_range, GL210, GL430) // #139 _extension(GL,ARB,texture_query_levels, GL300, GL430) // #140 _extension(GL,ARB,texture_storage_multisample, GL210, GL430) // #141 + _extension(GL,ARB,buffer_storage, /*?*/ GL430, GL440) // #144 + _extension(GL,ARB,clear_texture, GL210, GL440) // #145 + _extension(GL,ARB,enhanced_layouts, GL310, GL440) // #146 + _extension(GL,ARB,multi_bind, GL300, GL440) // #147 + _extension(GL,ARB,query_buffer_object, GL210, GL440) // #148 + _extension(GL,ARB,texture_mirror_clamp_to_edge, GL210, GL440) // #149 + _extension(GL,ARB,texture_stencil8, GL210, GL440) // #150 + _extension(GL,ARB,vertex_type_10f_11f_11f_rev, GL300, GL440) // #151 } namespace EXT { _extension(GL,EXT,texture_filter_anisotropic, GL210, None) // #187 /* EXT_framebuffer_object, EXT_packed_depth_stencil, EXT_framebuffer_blit, @@ -181,7 +189,7 @@ namespace GL { _extension(GL,NV,conditional_render, GL210, GL300) // #346 /* NV_draw_texture not supported */ // #430 } - /* IMPORTANT: if this line is > 188 (57 + size), don't forget to update array size in Context.h */ + /* IMPORTANT: if this line is > 194 (67 + size), don't forget to update array size in Context.h */ #else #line 1 namespace ANGLE { diff --git a/src/Platform/magnum-info.cpp b/src/Platform/magnum-info.cpp index 74129639a..8def78d74 100644 --- a/src/Platform/magnum-info.cpp +++ b/src/Platform/magnum-info.cpp @@ -119,6 +119,7 @@ MagnumInfo::MagnumInfo(const Arguments& arguments): Platform::WindowlessApplicat Version::GL410, Version::GL420, Version::GL430, + Version::GL440, #else Version::GLES200, Version::GLES300, diff --git a/src/Shader.cpp b/src/Shader.cpp index d71cea9bd..5b12c8b03 100644 --- a/src/Shader.cpp +++ b/src/Shader.cpp @@ -71,6 +71,7 @@ Shader::Shader(const Version version, const Type type): _type(type), _id(0) { case Version::GL410: sources.push_back("#version 410\n"); return; case Version::GL420: sources.push_back("#version 420\n"); return; case Version::GL430: sources.push_back("#version 430\n"); return; + case Version::GL440: sources.push_back("#version 440\n"); return; #else case Version::GLES200: sources.push_back("#version 100\n"); return; case Version::GLES300: sources.push_back("#version 300\n"); return;