|
|
|
|
/*
|
|
|
|
|
This file is part of Magnum.
|
|
|
|
|
|
|
|
|
|
Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
|
|
|
|
|
2020, 2021, 2022, 2023 Vladimír Vondruš <mosra@centrum.cz>
|
|
|
|
|
|
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a
|
|
|
|
|
copy of this software and associated documentation files (the "Software"),
|
|
|
|
|
to deal in the Software without restriction, including without limitation
|
|
|
|
|
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
|
|
|
and/or sell copies of the Software, and to permit persons to whom the
|
|
|
|
|
Software is furnished to do so, subject to the following conditions:
|
|
|
|
|
|
|
|
|
|
The above copyright notice and this permission notice shall be included
|
|
|
|
|
in all copies or substantial portions of the Software.
|
|
|
|
|
|
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
|
|
|
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
|
|
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
|
|
|
DEALINGS IN THE SOFTWARE.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
namespace Magnum {
|
|
|
|
|
|
|
|
|
|
/** @page opengl-support Support state
|
|
|
|
|
@brief List of (un)supported OpenGL features and extensions.
|
|
|
|
|
|
|
|
|
|
@tableofcontents
|
|
|
|
|
@m_footernavigation
|
|
|
|
|
|
|
|
|
|
@section opengl-support-state OpenGL implementation state
|
|
|
|
|
|
|
|
|
|
The extension implementation is considered complete if all its defined types,
|
|
|
|
|
functions and enum values are exposed through the API, except for features
|
|
|
|
|
listed below in @ref opengl-unsupported-features.
|
|
|
|
|
|
|
|
|
|
All extensions from the below lists are available in the @ref GL::Extensions
|
|
|
|
|
namespace and it's possible to check for their availability using
|
|
|
|
|
@ref GL::Context::isExtensionSupported(). See its documentation for more
|
|
|
|
|
information.
|
|
|
|
|
|
|
|
|
|
@subsection opengl-support-21 OpenGL 2.1
|
|
|
|
|
|
|
|
|
|
The core subset of OpenGL 2.1 should be fully implemented, except for the
|
|
|
|
|
following:
|
|
|
|
|
|
|
|
|
|
- Proxy textures
|
|
|
|
|
- Some forgotten limit queries
|
|
|
|
|
|
|
|
|
|
@subsection opengl-support-30 OpenGL 3.0
|
|
|
|
|
|
|
|
|
|
@m_class{m-fullwidth}
|
|
|
|
|
|
|
|
|
|
Extension | Status
|
|
|
|
|
------------------------------------------- | ------
|
|
|
|
|
GLSL 1.30 | done
|
|
|
|
|
@fn_gl{ClearBuffer} functions | done
|
|
|
|
|
@gl_extension{ARB,map_buffer_range} | done
|
|
|
|
|
@gl_extension{ARB,color_buffer_float} | |
|
|
|
|
|
@gl_extension{ARB,half_float_pixel} | done
|
|
|
|
|
@gl_extension{ARB,texture_float} | done
|
|
|
|
|
@gl_extension{ARB,depth_buffer_float} | done
|
|
|
|
|
@gl_extension{ARB,texture_rg} | done
|
|
|
|
|
@gl_extension{ARB,vertex_array_object} | done
|
|
|
|
|
@gl_extension{ARB,framebuffer_object} | done
|
|
|
|
|
@gl_extension{ARB,framebuffer_sRGB} | done
|
|
|
|
|
@gl_extension{ARB,half_float_vertex} | done
|
|
|
|
|
@gl_extension{EXT,gpu_shader4} | done
|
|
|
|
|
@gl_extension{EXT,packed_float} | done
|
|
|
|
|
@gl_extension{EXT,texture_array} | done
|
|
|
|
|
@gl_extension{EXT,texture_compression_rgtc} | done
|
|
|
|
|
@gl_extension{EXT,texture_shared_exponent} | done
|
|
|
|
|
@gl_extension{EXT,draw_buffers2} | done (GL 3.0 subset)
|
|
|
|
|
@gl_extension{EXT,texture_integer} | done (GL 3.0 subset)
|
|
|
|
|
@gl_extension{EXT,transform_feedback} | done
|
|
|
|
|
`MAGNUM_shader_vertex_id` \n @m_span{m-text m-dim} Pseudo-extension denoting support for the @glsl gl_VertexID @ce GLSL builtin. @m_endspan | done
|
|
|
|
|
@gl_extension{NV,depth_buffer_float} | done
|
|
|
|
|
@gl_extension{NV,conditional_render} | done
|
|
|
|
|
|
|
|
|
|
@subsection opengl-support-31 OpenGL 3.1
|
|
|
|
|
|
|
|
|
|
@m_class{m-fullwidth}
|
|
|
|
|
|
|
|
|
|
Extension | Status
|
|
|
|
|
------------------------------------------- | ------
|
|
|
|
|
GLSL 1.40 | done
|
|
|
|
|
@gl_extension{ARB,texture_rectangle} | done
|
|
|
|
|
@gl_extension{ARB,draw_instanced} | done
|
|
|
|
|
@gl_extension{ARB,texture_buffer_object} | done
|
|
|
|
|
@gl_extension{ARB,uniform_buffer_object} | done except for data layout queries
|
|
|
|
|
@gl_extension{ARB,copy_buffer} | done
|
|
|
|
|
@gl_extension{EXT,texture_snorm} | done
|
|
|
|
|
@gl_extension{NV,primitive_restart} | |
|
|
|
|
|
|
|
|
|
|
@subsection opengl-support-32 OpenGL 3.2
|
|
|
|
|
|
|
|
|
|
@m_class{m-fullwidth}
|
|
|
|
|
|
|
|
|
|
Extension | Status
|
|
|
|
|
------------------------------------------- | ------
|
|
|
|
|
GLSL 1.50 | done
|
|
|
|
|
@gl_extension{ARB,geometry_shader4} | missing some limit queries
|
|
|
|
|
@gl_extension{ARB,depth_clamp} | done
|
|
|
|
|
@gl_extension{ARB,draw_elements_base_vertex} | done
|
|
|
|
|
@gl_extension{ARB,fragment_coord_conventions} | done (shading language only)
|
|
|
|
|
@gl_extension{ARB,provoking_vertex} | done
|
|
|
|
|
@gl_extension{ARB,seamless_cube_map} | done
|
|
|
|
|
@gl_extension{ARB,sync} | |
|
|
|
|
|
@gl_extension{ARB,texture_multisample} | missing sample location queries and sample mask
|
|
|
|
|
@gl_extension{ARB,vertex_array_bgra} | done
|
|
|
|
|
|
|
|
|
|
@subsection opengl-support-33 OpenGL 3.3
|
|
|
|
|
|
|
|
|
|
@m_class{m-fullwidth}
|
|
|
|
|
|
|
|
|
|
Extension | Status
|
|
|
|
|
------------------------------------------- | ------
|
|
|
|
|
GLSL 3.30 | done
|
|
|
|
|
@gl_extension{ARB,instanced_arrays} | done
|
|
|
|
|
@gl_extension{ARB,blend_func_extended} | done
|
|
|
|
|
@gl_extension{ARB,explicit_attrib_location} | done (shading language only)
|
|
|
|
|
@gl_extension{ARB,occlusion_query2} | done
|
|
|
|
|
@gl_extension{ARB,sampler_objects} | |
|
|
|
|
|
@gl_extension{ARB,shader_bit_encoding} | done (shading language only)
|
|
|
|
|
@gl_extension{ARB,texture_rgb10_a2ui} | done
|
|
|
|
|
@gl_extension{ARB,texture_swizzle} | done
|
|
|
|
|
@gl_extension{ARB,timer_query} | missing direct query
|
|
|
|
|
@gl_extension{ARB,vertex_type_2_10_10_10_rev} | done
|
|
|
|
|
|
|
|
|
|
@subsection opengl-support-40 OpenGL 4.0
|
|
|
|
|
|
|
|
|
|
@m_class{m-fullwidth}
|
|
|
|
|
|
|
|
|
|
Extension | Status
|
|
|
|
|
------------------------------------------- | ------
|
|
|
|
|
GLSL 4.00 | done
|
|
|
|
|
@gl_extension{ARB,draw_buffers_blend} | done
|
|
|
|
|
@gl_extension{ARB,sample_shading} | done
|
|
|
|
|
@gl_extension{ARB,texture_cube_map_array} | done
|
|
|
|
|
@gl_extension{ARB,texture_gather} | missing limit queries
|
|
|
|
|
@gl_extension{ARB,texture_query_lod} | done (shading language only)
|
|
|
|
|
@gl_extension{ARB,draw_indirect} | |
|
|
|
|
|
@gl_extension{ARB,gpu_shader5} | missing limit queries
|
|
|
|
|
@gl_extension{ARB,gpu_shader_fp64} | done
|
|
|
|
|
@gl_extension{ARB,shader_subroutine} | |
|
|
|
|
|
@gl_extension{ARB,tessellation_shader} | done except for `MAX_TESS_GEN_LEVEL` and `MAX_TESS_PATCH_COMPONENTS` queries
|
|
|
|
|
@gl_extension{ARB,texture_buffer_object_rgb32} | done
|
|
|
|
|
@gl_extension{ARB,transform_feedback2} | done
|
|
|
|
|
@gl_extension{ARB,transform_feedback3} | missing indexed properties query
|
|
|
|
|
|
|
|
|
|
@subsection opengl-support-41 OpenGL 4.1
|
|
|
|
|
|
|
|
|
|
@m_class{m-fullwidth}
|
|
|
|
|
|
|
|
|
|
Extension | Status
|
|
|
|
|
------------------------------------------- | ------
|
|
|
|
|
GLSL 4.10 | done
|
|
|
|
|
@gl_extension{ARB,ES2_compatibility} | only float depth clear
|
|
|
|
|
@gl_extension{ARB,get_program_binary} | |
|
|
|
|
|
@gl_extension{ARB,separate_shader_objects} | only direct uniform binding
|
|
|
|
|
@gl_extension{ARB,shader_precision} | done (shading language only)
|
|
|
|
|
@gl_extension{ARB,vertex_attrib_64bit} | done
|
|
|
|
|
@gl_extension{ARB,viewport_array} | |
|
|
|
|
|
|
|
|
|
|
@subsection opengl-support-42 OpenGL 4.2
|
|
|
|
|
|
|
|
|
|
@m_class{m-fullwidth}
|
|
|
|
|
|
|
|
|
|
Extension | Status
|
|
|
|
|
------------------------------------------- | ------
|
|
|
|
|
GLSL 4.20 | done
|
|
|
|
|
@gl_extension{ARB,texture_compression_bptc} | done
|
|
|
|
|
@gl_extension{ARB,base_instance} | done
|
|
|
|
|
@gl_extension{ARB,shading_language_420pack} | done (shading language only)
|
|
|
|
|
@gl_extension{ARB,transform_feedback_instanced} | done
|
|
|
|
|
@gl_extension{ARB,compressed_texture_pixel_storage} | done
|
|
|
|
|
@gl_extension{ARB,conservative_depth} | done (shading language only)
|
|
|
|
|
@gl_extension{ARB,internalformat_query} | |
|
|
|
|
|
@gl_extension{ARB,map_buffer_alignment} | done
|
|
|
|
|
@gl_extension{ARB,shader_atomic_counters} | done
|
|
|
|
|
@gl_extension{ARB,shader_image_load_store} | done
|
|
|
|
|
@gl_extension{ARB,shading_language_packing} | done (shading language only)
|
|
|
|
|
@gl_extension{ARB,texture_storage} | done
|
|
|
|
|
|
|
|
|
|
@subsection opengl-support-43 OpenGL 4.3
|
|
|
|
|
|
|
|
|
|
@m_class{m-fullwidth}
|
|
|
|
|
|
|
|
|
|
Extension | Status
|
|
|
|
|
------------------------------------------- | ------
|
|
|
|
|
GLSL 4.30 | done
|
|
|
|
|
@gl_extension{ARB,arrays_of_arrays} | done (shading language only)
|
|
|
|
|
@gl_extension{ARB,ES3_compatibility} | only conservative sample query and compression formats
|
|
|
|
|
@gl_extension{ARB,clear_buffer_object} | |
|
|
|
|
|
@gl_extension{ARB,compute_shader} | done except for indirect dispatch
|
|
|
|
|
@gl_extension{ARB,copy_image} | |
|
|
|
|
|
@gl_extension{KHR,debug} | missing log retrieval, sync, pipeline and sampler label
|
|
|
|
|
@gl_extension{ARB,explicit_uniform_location} | done
|
|
|
|
|
@gl_extension{ARB,fragment_layer_viewport} | done (shading language only)
|
|
|
|
|
@gl_extension{ARB,framebuffer_no_attachments} | done
|
|
|
|
|
@gl_extension{ARB,internalformat_query2} | only compressed texture block queries
|
|
|
|
|
@gl_extension{ARB,invalidate_subdata} | done
|
|
|
|
|
@gl_extension{ARB,multi_draw_indirect} | |
|
|
|
|
|
@gl_extension{ARB,program_interface_query} | |
|
|
|
|
|
@gl_extension{ARB,robust_buffer_access_behavior} | done (nothing to do)
|
|
|
|
|
@gl_extension{ARB,shader_image_size} | done (shading language only)
|
|
|
|
|
@gl_extension{ARB,shader_storage_buffer_object} | missing (unneeded) block binding
|
|
|
|
|
@gl_extension{ARB,stencil_texturing} | done
|
|
|
|
|
@gl_extension{ARB,texture_buffer_range} | done
|
|
|
|
|
@gl_extension{ARB,texture_query_levels} | done (shading language only)
|
|
|
|
|
@gl_extension{ARB,texture_storage_multisample} | done
|
|
|
|
|
@gl_extension{ARB,texture_view} | done
|
|
|
|
|
@gl_extension{ARB,vertex_attrib_binding} | |
|
|
|
|
|
|
|
|
|
|
@subsection opengl-support-44 OpenGL 4.4
|
|
|
|
|
|
|
|
|
|
@todo Also fallback to @gl_extension{AMD,query_buffer_object}
|
|
|
|
|
@todo @gl_extension{AMD,pinned_memory} "fallback" for @gl_extension{ARB,buffer_storage}
|
|
|
|
|
|
|
|
|
|
@m_class{m-fullwidth}
|
|
|
|
|
|
|
|
|
|
Extension | Status
|
|
|
|
|
------------------------------------------- | ------
|
|
|
|
|
GLSL 4.40 | done
|
|
|
|
|
@def_gl{MAX_VERTEX_ATTRIB_STRIDE} | |
|
|
|
|
|
@gl_extension{ARB,buffer_storage} | done
|
|
|
|
|
@gl_extension{ARB,clear_texture} | |
|
|
|
|
|
@gl_extension{ARB,enhanced_layouts} | done (shading language only)
|
|
|
|
|
@gl_extension{ARB,multi_bind} | missing sampler and vertex buffer binding
|
|
|
|
|
@gl_extension{ARB,query_buffer_object} | |
|
|
|
|
|
@gl_extension{ARB,texture_mirror_clamp_to_edge} | done
|
|
|
|
|
@gl_extension{ARB,texture_stencil8} | done
|
|
|
|
|
@gl_extension{ARB,vertex_type_10f_11f_11f_rev} | done
|
|
|
|
|
|
|
|
|
|
@subsection opengl-support-45 OpenGL 4.5
|
|
|
|
|
|
|
|
|
|
@m_class{m-fullwidth}
|
|
|
|
|
|
|
|
|
|
Extension | Status
|
|
|
|
|
------------------------------------------- | ------
|
|
|
|
|
GLSL 4.50 | done
|
|
|
|
|
@gl_extension{ARB,ES3_1_compatibility} | done
|
|
|
|
|
@gl_extension{ARB,clip_control} | done
|
|
|
|
|
@gl_extension{ARB,conditional_render_inverted} | done
|
|
|
|
|
@gl_extension{ARB,cull_distance} | done
|
|
|
|
|
@gl_extension{ARB,derivative_control} | done (shading language only)
|
|
|
|
|
@gl_extension{ARB,direct_state_access} | done for implemented functionality
|
|
|
|
|
@gl_extension{ARB,get_texture_sub_image} | done
|
|
|
|
|
@gl_extension{ARB,shader_texture_image_samples} | done (shading language only)
|
|
|
|
|
@gl_extension{ARB,texture_barrier} | done
|
|
|
|
|
@gl_extension{KHR,context_flush_control} | |
|
|
|
|
|
@gl_extension{KHR,robustness} | |
|
|
|
|
|
|
|
|
|
|
@subsection opengl-support-46 OpenGL 4.6
|
|
|
|
|
|
|
|
|
|
@m_class{m-fullwidth}
|
|
|
|
|
|
|
|
|
|
Extension | Status
|
|
|
|
|
------------------------------------------- | ------
|
|
|
|
|
GLSL 4.60 | done
|
|
|
|
|
@gl_extension{ARB,indirect_parameters} | |
|
|
|
|
|
@gl_extension{ARB,shader_draw_parameters} | done (shading language only)
|
|
|
|
|
@gl_extension{ARB,shader_group_vote} | done (shading language only)
|
|
|
|
|
@gl_extension{ARB,pipeline_statistics_query} | done
|
|
|
|
|
@gl_extension{ARB,transform_feedback_overflow_query} | done
|
|
|
|
|
@gl_extension{ARB,shader_atomic_counter_ops} | done (shading language only)
|
|
|
|
|
@gl_extension{ARB,gl_spirv} | |
|
|
|
|
|
@gl_extension{ARB,polygon_offset_clamp} | |
|
|
|
|
|
@gl_extension{ARB,spirv_extensions} | |
|
|
|
|
|
@gl_extension{ARB,texture_filter_anisotropic} | done
|
|
|
|
|
@gl_extension{KHR,no_error} | done
|
|
|
|
|
|
|
|
|
|
@subsection opengl-support-extensions ARB / Khronos OpenGL extensions
|
|
|
|
|
|
|
|
|
|
@m_class{m-fullwidth}
|
|
|
|
|
|
|
|
|
|
Extension | Status
|
|
|
|
|
------------------------------------------- | ------
|
|
|
|
|
@gl_extension{ARB,robustness} | done
|
|
|
|
|
@gl_extension{KHR,texture_compression_astc_hdr} | done
|
|
|
|
|
@gl_extension{ARB,robustness_isolation} | done
|
|
|
|
|
@gl_extension{ARB,bindless_texture} | |
|
|
|
|
|
@gl_extension{ARB,compute_variable_group_size} | |
|
|
|
|
|
@gl_extension{ARB,seamless_cubemap_per_texture} | |
|
|
|
|
|
@gl_extension{ARB,sparse_texture} | |
|
|
|
|
|
@gl_extension{ARB,sparse_buffer} | |
|
|
|
|
|
@gl_extension{ARB,ES3_2_compatibility} | |
|
|
|
|
|
@gl_extension{ARB,sample_locations} | |
|
|
|
|
|
@gl_extension2{KHR,texture_compression_astc_ldr,KHR_texture_compression_astc_hdr} | done
|
|
|
|
|
@gl_extension{KHR,robust_buffer_access_behavior} | done (nothing to do)
|
|
|
|
|
@gl_extension{KHR,blend_equation_advanced} | done
|
|
|
|
|
@gl_extension2{KHR,blend_equation_advanced_coherent,KHR_blend_equation_advanced} | done
|
|
|
|
|
@gl_extension{KHR,texture_compression_astc_sliced_3d} | done (nothing to do)
|
|
|
|
|
@gl_extension{KHR,parallel_shader_compile} | missing thread count setting
|
|
|
|
|
|
|
|
|
|
@subsection opengl-support-extensions-vendor Vendor OpenGL extensions
|
|
|
|
|
|
|
|
|
|
@todo @gl_extension{ARB,sparse_texture}, @gl_extension{ARB,bindless_texture} + their vendor equivalents
|
|
|
|
|
@todo @gl_extension{ATI,meminfo}, @gl_extension{NVX,gpu_memory_info}, GPU temperature
|
|
|
|
|
@todo @gl_extension{AMD,performance_monitor}, @gl_extension{INTEL,performance_query}
|
|
|
|
|
|
|
|
|
|
@m_class{m-fullwidth}
|
|
|
|
|
|
|
|
|
|
Extension | Status
|
|
|
|
|
------------------------------------------- | ------
|
|
|
|
|
@gl_extension{AMD,transform_feedback3_lines_triangles} | done (nothing to do)
|
|
|
|
|
@gl_extension{AMD,sample_positions} | |
|
|
|
|
|
@gl_extension{AMD,vertex_shader_layer} | done (shading language only)
|
|
|
|
|
@gl_extension{AMD,shader_trinary_minmax} | done (shading language only)
|
|
|
|
|
@gl_extension{AMD,shader_explicit_vertex_parameter} | done (shading language only)
|
|
|
|
|
@gl_extension{ATI,texture_mirror_once} | done (GL 4.4 subset)
|
|
|
|
|
@gl_extension{EXT,texture_filter_anisotropic} | done
|
|
|
|
|
@gl_extension{EXT,texture_compression_s3tc} | done
|
|
|
|
|
@gl_extension{EXT,texture_mirror_clamp} | only GL 4.4 subset
|
|
|
|
|
@gl_extension{EXT,texture_compression_dxt1} | done
|
|
|
|
|
@gl_extension{EXT,texture_sRGB_decode} | done
|
|
|
|
|
@gl_extension{EXT,shader_integer_mix} | done (shading language only)
|
|
|
|
|
@gl_extension{EXT,debug_label} | missing pipeline and sampler label
|
|
|
|
|
@gl_extension{EXT,debug_marker} | done
|
|
|
|
|
@gl_extension{EXT,texture_sRGB_R8} | done
|
|
|
|
|
@gl_extension{EXT,texture_sRGB_RG8} | done
|
|
|
|
|
@gl_extension{GREMEDY,string_marker} | done
|
|
|
|
|
@gl_extension{NV,geometry_shader_passthrough} | done (shading language only)
|
|
|
|
|
@gl_extension{NV,sample_locations} | |
|
|
|
|
|
@gl_extension{NV,fragment_shader_barycentric} | done (shading language only)
|
|
|
|
|
@gl_extension{OVR,multiview} | |
|
|
|
|
|
@gl_extension{OVR,multiview2} | |
|
|
|
|
|
|
|
|
|
|
@subsection opengl-support-es20 OpenGL ES 2.0
|
|
|
|
|
|
|
|
|
|
Features that have their equivalents implemented in desktop version are
|
|
|
|
|
supported. ESSL 1.00 is supported.
|
|
|
|
|
|
|
|
|
|
@subsection opengl-support-es30 OpenGL ES 3.0
|
|
|
|
|
|
|
|
|
|
Features that have their equivalents implemented in desktop version are
|
|
|
|
|
supported. ESSL 3.00 is supported.
|
|
|
|
|
|
|
|
|
|
@subsection opengl-support-es31 OpenGL ES 3.1
|
|
|
|
|
|
|
|
|
|
Features that have their equivalents implemented in desktop version are
|
|
|
|
|
supported. ESSL 3.10 is supported.
|
|
|
|
|
|
|
|
|
|
@subsection opengl-support-es32 OpenGL ES 3.2
|
|
|
|
|
|
|
|
|
|
Features that have their equivalents implemented in desktop version are
|
|
|
|
|
supported. ESSL 3.20 is supported.
|
|
|
|
|
|
|
|
|
|
@m_class{m-fullwidth}
|
|
|
|
|
|
|
|
|
|
Extension | Status
|
|
|
|
|
------------------------------------------- | ------
|
|
|
|
|
@gl_extension{EXT,color_buffer_half_float} | |
|
|
|
|
|
@gl_extension{EXT,color_buffer_float} | |
|
|
|
|
|
@gl_extension{EXT,copy_image} | |
|
|
|
|
|
@gl_extension{EXT,draw_buffers_indexed} | done
|
|
|
|
|
@gl_extension{EXT,geometry_shader} | missing some ES-specific limit queries
|
|
|
|
|
@gl_extension{EXT,gpu_shader5} | done (shading language only)
|
|
|
|
|
@gl_extension{EXT,shader_io_blocks} | done (shading language only)
|
|
|
|
|
@gl_extension{EXT,tessellation_shader} | done except for `MAX_TESS_GEN_LEVEL` and `MAX_TESS_PATCH_COMPONENTS` queries
|
|
|
|
|
@gl_extension{EXT,texture_border_clamp} | done
|
|
|
|
|
@gl_extension{EXT,texture_buffer} | done
|
|
|
|
|
@gl_extension{EXT,texture_cube_map_array} | done
|
|
|
|
|
@gl_extension{EXT,primitive_bounding_box} | |
|
|
|
|
|
@gl_extension2{KHR,texture_compression_astc_ldr,KHR_texture_compression_astc_hdr} | done
|
|
|
|
|
@gl_extension{KHR,debug} | see above
|
|
|
|
|
@gl_extension{KHR,blend_equation_advanced} | done
|
|
|
|
|
@gl_extension{KHR,robustness} | |
|
|
|
|
|
@gl_extension{KHR,robust_buffer_access_behavior} | done (nothing to do)
|
|
|
|
|
@gl_extension{OES,sample_shading} | done
|
|
|
|
|
@gl_extension{OES,sample_variables} | done (shading language only)
|
|
|
|
|
@gl_extension{OES,shader_image_atomic} | done (shading language only)
|
|
|
|
|
@gl_extension{OES,shader_multisample_interpolation} | |
|
|
|
|
|
@gl_extension{OES,texture_stencil8} | done
|
|
|
|
|
@gl_extension{OES,texture_storage_multisample_2d_array} | done
|
|
|
|
|
|
|
|
|
|
@subsection opengl-support-es30-extensions OpenGL ES 2.0 extensions to match ES 3.0 functionality
|
|
|
|
|
|
|
|
|
|
Unless said otherwise, these are not exposed in the @ref GL::Extensions
|
|
|
|
|
namespace on @ref MAGNUM_TARGET_GLES2 "OpenGL ES 3.0 builds".
|
|
|
|
|
|
|
|
|
|
@m_class{m-fullwidth}
|
|
|
|
|
|
|
|
|
|
Extension | Status
|
|
|
|
|
------------------------------------------- | ------
|
|
|
|
|
@gl_extension{ANGLE,framebuffer_blit} | done
|
|
|
|
|
@gl_extension{ANGLE,framebuffer_multisample} | done
|
|
|
|
|
@gl_extension{ANGLE,instanced_arrays} | done
|
|
|
|
|
@gl_extension{ANGLE,depth_texture} | done
|
|
|
|
|
@m_class{m-doc-external} [ANGLE_compressed_texture_etc](https://chromium.googlesource.com/angle/angle/+/master/extensions/ANGLE_compressed_texture_etc.txt) (unlisted) | done
|
|
|
|
|
@gl_extension{APPLE,framebuffer_multisample} | done (ES 3.0 subset)
|
|
|
|
|
@gl_extension{APPLE,texture_max_level} | done
|
|
|
|
|
@gl_extension{ARM,rgba8} | done
|
|
|
|
|
@gl_extension{EXT,texture_type_2_10_10_10_REV} | done
|
|
|
|
|
@gl_extension{EXT,discard_framebuffer} | done
|
|
|
|
|
@gl_extension{EXT,blend_minmax} | done
|
|
|
|
|
@gl_extension{EXT,shader_texture_lod} | done (shading language only)
|
|
|
|
|
@gl_extension{EXT,unpack_subimage} | done
|
|
|
|
|
@gl_extension{EXT,occlusion_query_boolean} | done
|
|
|
|
|
@gl_extension{EXT,shadow_samplers} | done
|
|
|
|
|
@gl_extension{EXT,texture_rg} | done
|
|
|
|
|
@gl_extension{EXT,sRGB} | done
|
|
|
|
|
@gl_extension{EXT,texture_storage} | done
|
|
|
|
|
@gl_extension{EXT,map_buffer_range} | done
|
|
|
|
|
@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 only. @m_endspan | done
|
|
|
|
|
@gl_extension{NV,draw_buffers} | done
|
|
|
|
|
@gl_extension{NV,fbo_color_attachments} | done
|
|
|
|
|
@gl_extension{NV,read_buffer} | done
|
|
|
|
|
@gl_extension{NV,pack_subimage} | done
|
|
|
|
|
@gl_extension{NV,draw_instanced} | done
|
|
|
|
|
@gl_extension{NV,framebuffer_blit} | done
|
|
|
|
|
@gl_extension{NV,framebuffer_multisample} | done
|
|
|
|
|
@gl_extension{NV,instanced_arrays} | done
|
|
|
|
|
@gl_extension{NV,shadow_samplers_array} | done (shading language only)
|
|
|
|
|
@gl_extension{NV,shadow_samplers_cube} | done (shading language only)
|
|
|
|
|
@gl_extension{OES,depth24} | done
|
|
|
|
|
@gl_extension{OES,element_index_uint} | done
|
|
|
|
|
@gl_extension{OES,fbo_render_mipmap} | done
|
|
|
|
|
@gl_extension{OES,rgb8_rgba8} | done (desktop-compatible subset)
|
|
|
|
|
@gl_extension{OES,texture_3D} | done
|
|
|
|
|
@gl_extension2{OES,texture_half_float_linear,OES_texture_float_linear} | done
|
|
|
|
|
@gl_extension2{OES,texture_half_float,OES_texture_float} | done
|
|
|
|
|
@gl_extension{OES,texture_float} | done
|
|
|
|
|
@gl_extension{OES,texture_npot} | done (nothing to do)
|
|
|
|
|
@gl_extension{OES,vertex_half_float} | done
|
|
|
|
|
@gl_extension{OES,packed_depth_stencil} | done
|
|
|
|
|
@gl_extension{OES,depth_texture} | done
|
|
|
|
|
@gl_extension{OES,standard_derivatives} | done
|
|
|
|
|
@gl_extension{OES,vertex_array_object} | done
|
|
|
|
|
@gl_extension{OES,required_internalformat} | done (desktop-compatible subset)
|
|
|
|
|
@gl_extension{OES,surfaceless_context} | done
|
|
|
|
|
|
|
|
|
|
@subsection opengl-support-es-extensions OpenGL ES extensions
|
|
|
|
|
|
|
|
|
|
@todo @gl_extension{NV,non_square_matrices}
|
|
|
|
|
@todo Support also IMG_multisampled_render_to_texture? It has different enum
|
|
|
|
|
values (!)
|
|
|
|
|
|
|
|
|
|
@m_class{m-fullwidth}
|
|
|
|
|
|
|
|
|
|
Extension | Status
|
|
|
|
|
------------------------------------------- | ------
|
|
|
|
|
@gl_extension{ANDROID,extension_pack_es31a} | done (nothing to do)
|
|
|
|
|
@gl_extension2{ANGLE,texture_compression_dxt1,ANGLE_texture_compression_dxt} | done
|
|
|
|
|
@gl_extension2{ANGLE,texture_compression_dxt3,ANGLE_texture_compression_dxt} | done
|
|
|
|
|
@gl_extension2{ANGLE,texture_compression_dxt5,ANGLE_texture_compression_dxt} | done
|
|
|
|
|
@m_class{m-doc-external} [ANGLE_multi_draw](https://chromium.googlesource.com/angle/angle/+/master/extensions/ANGLE_multi_draw.txt) (unlisted) | done
|
|
|
|
|
@m_class{m-doc-external} [ANGLE_base_vertex_base_instance](https://chromium.googlesource.com/angle/angle/+/master/extensions/ANGLE_base_vertex_base_instance.txt) (unlisted) | done
|
|
|
|
|
@m_class{m-doc-external} [ANGLE_provoking_vertex](https://chromium.googlesource.com/angle/angle/+/main/extensions/ANGLE_provoking_vertex.txt) (unlisted) | done
|
|
|
|
|
@m_class{m-doc-external} [ANGLE_polygon_mode](https://chromium.googlesource.com/angle/angle/+/HEAD/extensions/ANGLE_polygon_mode.txt) (unlisted) | done
|
|
|
|
|
@m_class{m-doc-external} [ANGLE_stencil_texturing](https://chromium.googlesource.com/angle/angle/+/HEAD/extensions/ANGLE_stencil_texturing.txt) (unlisted) | done
|
|
|
|
|
@gl_extension{APPLE,texture_format_BGRA8888} | done
|
|
|
|
|
@gl_extension{APPLE,clip_distance} | done
|
|
|
|
|
@gl_extension{ARM,shader_framebuffer_fetch} | missing renderer setup and limit query
|
|
|
|
|
@gl_extension{ARM,shader_framebuffer_fetch_depth_stencil} | done (shading language only)
|
|
|
|
|
@gl_extension{EXT,texture_filter_anisotropic} | done
|
|
|
|
|
@gl_extension{EXT,texture_compression_dxt1} | done
|
|
|
|
|
@gl_extension{EXT,texture_format_BGRA8888} | done
|
|
|
|
|
@gl_extension{EXT,read_format_bgra} | done
|
|
|
|
|
@gl_extension{EXT,multi_draw_arrays} | done
|
|
|
|
|
@gl_extension{EXT,debug_label} | see above
|
|
|
|
|
@gl_extension{EXT,debug_marker} | done
|
|
|
|
|
@gl_extension2{EXT,separate_shader_objects,EXT_separate_shader_objects.gles} | only direct uniform binding
|
|
|
|
|
@gl_extension{EXT,multisampled_render_to_texture} | only renderbuffer storage
|
|
|
|
|
@gl_extension{EXT,robustness} | done
|
|
|
|
|
@gl_extension{EXT,shader_framebuffer_fetch} | missing limit query
|
|
|
|
|
@gl_extension{EXT,disjoint_timer_query} | only time elapsed query
|
|
|
|
|
@gl_extension{EXT,texture_sRGB_decode} | done
|
|
|
|
|
@gl_extension{EXT,sRGB_write_control} | done
|
|
|
|
|
@gl_extension{EXT,texture_compression_s3tc} | done
|
|
|
|
|
@gl_extension{EXT,pvrtc_sRGB} | done
|
|
|
|
|
@gl_extension{EXT,shader_integer_mix} | done (shading language only)
|
|
|
|
|
@gl_extension{EXT,texture_view} | done
|
|
|
|
|
@gl_extension{EXT,draw_elements_base_vertex} | done
|
|
|
|
|
@gl_extension{EXT,texture_norm16} | done
|
|
|
|
|
@gl_extension{EXT,texture_sRGB_R8} | done
|
|
|
|
|
@gl_extension{EXT,texture_sRGB_RG8} | done
|
|
|
|
|
@gl_extension{EXT,blend_func_extended} | done
|
|
|
|
|
@gl_extension{EXT,polygon_offset_clamp} | |
|
|
|
|
|
@gl_extension{EXT,clip_cull_distance} | done
|
|
|
|
|
@gl_extension{EXT,texture_compression_rgtc} | done
|
|
|
|
|
@gl_extension{EXT,texture_compression_bptc} | done
|
|
|
|
|
@gl_extension{EXT,texture_compression_s3tc_srgb} | done
|
|
|
|
|
@gl_extension{EXT,clip_control} | done
|
|
|
|
|
@gl_extension{EXT,texture_mirror_clamp_to_edge} | done
|
|
|
|
|
@gl_extension{EXT,depth_clamp} | done
|
|
|
|
|
@gl_extension{IMG,texture_compression_pvrtc} | done
|
|
|
|
|
@gl_extension2{KHR,texture_compression_astc_hdr,KHR_texture_compression_astc_hdr} | done
|
|
|
|
|
@gl_extension2{KHR,blend_equation_advanced_coherent,KHR_blend_equation_advanced} | done
|
|
|
|
|
@gl_extension{KHR,context_flush_control} | |
|
|
|
|
|
@gl_extension{KHR,no_error} | done
|
|
|
|
|
@gl_extension{KHR,texture_compression_astc_sliced_3d} | done (nothing to do)
|
|
|
|
|
@gl_extension{KHR,parallel_shader_compile} | missing thread count setting
|
|
|
|
|
@gl_extension2{NV,read_buffer_front,NV_read_buffer} | done
|
|
|
|
|
@gl_extension2{NV,read_depth,NV_read_depth_stencil} | done
|
|
|
|
|
@gl_extension2{NV,read_stencil,NV_read_depth_stencil} | done
|
|
|
|
|
@gl_extension{NV,read_depth_stencil} | done
|
|
|
|
|
@gl_extension{NV,texture_border_clamp} | done
|
|
|
|
|
@gl_extension{NV,shader_noperspective_interpolation} | done (shading language only)
|
|
|
|
|
@gl_extension{NV,geometry_shader_passthrough} | done (shading language only)
|
|
|
|
|
@gl_extension{NV,sample_locations} | |
|
|
|
|
|
@gl_extension{NV,polygon_mode} | done
|
|
|
|
|
@gl_extension{OES,depth32} | done
|
|
|
|
|
@gl_extension{OES,mapbuffer} | done
|
|
|
|
|
@gl_extension{OES,stencil1} | done
|
|
|
|
|
@gl_extension{OES,stencil4} | done
|
|
|
|
|
@gl_extension{OES,texture_float_linear} | done
|
|
|
|
|
@gl_extension{OES,texture_view} | done
|
|
|
|
|
@gl_extension{OES,draw_elements_base_vertex} | done
|
|
|
|
|
@gl_extension{OVR,multiview} | |
|
|
|
|
|
@gl_extension{OVR,multiview2} | |
|
|
|
|
|
|
|
|
|
|
@subsection opengl-support-webgl10 WebGL 1.0
|
|
|
|
|
|
|
|
|
|
Features that have their equivalents implemented in OpenGL ES 2.0 are
|
|
|
|
|
supported.
|
|
|
|
|
|
|
|
|
|
@subsection opengl-support-webgl20 WebGL 2.0
|
|
|
|
|
|
|
|
|
|
Features that have their equivalents implemented in OpenGL ES 3.0 are
|
|
|
|
|
supported.
|
|
|
|
|
|
|
|
|
|
@subsection opengl-support-webgl20-extensions WebGL 1.0 extensions to match WebGL 2.0 functionality
|
|
|
|
|
|
|
|
|
|
Unless said otherwise, these are not available in the @ref GL::Extensions
|
|
|
|
|
namespace on @ref MAGNUM_TARGET_GLES2 "WebGL 2.0 builds".
|
|
|
|
|
|
|
|
|
|
@m_class{m-fullwidth}
|
|
|
|
|
|
|
|
|
|
Extension | Status
|
|
|
|
|
------------------------------------------- | ------
|
|
|
|
|
@webgl_extension{ANGLE,instanced_arrays} | done
|
|
|
|
|
@webgl_extension{EXT,frag_depth} | done (shading language only)
|
|
|
|
|
@webgl_extension{EXT,sRGB} | done
|
|
|
|
|
@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 only. @m_endspan | done
|
|
|
|
|
@webgl_extension{OES,texture_float} | done
|
|
|
|
|
@webgl_extension{OES,texture_half_float} | done
|
|
|
|
|
@webgl_extension{OES,standard_derivatives} | done
|
|
|
|
|
@webgl_extension{OES,vertex_array_object} | done
|
|
|
|
|
@webgl_extension{OES,element_index_uint} | done
|
|
|
|
|
@webgl_extension{OES,texture_half_float_linear} | done
|
|
|
|
|
@webgl_extension{OES,fbo_render_mipmap} | done
|
|
|
|
|
@webgl_extension{WEBGL,depth_texture} | done
|
|
|
|
|
@webgl_extension{WEBGL,color_buffer_float} | |
|
|
|
|
|
@webgl_extension{WEBGL,draw_buffers} | done
|
|
|
|
|
|
|
|
|
|
@attention @webgl_extension{EXT,color_buffer_half_float} and
|
|
|
|
|
@webgl_extension{WEBGL,color_buffer_float} are not part of WebGL 2.0, but
|
|
|
|
|
are included in this table because they are subsumed by
|
|
|
|
|
@webgl_extension{EXT,color_buffer_float} in WebGL 2.0.
|
|
|
|
|
|
|
|
|
|
@subsection opengl-support-webgl-extensions WebGL extensions
|
|
|
|
|
|
|
|
|
|
@m_class{m-fullwidth}
|
|
|
|
|
|
|
|
|
|
Extension | Status
|
|
|
|
|
------------------------------------------- | ------
|
|
|
|
|
@webgl_extension{EXT,texture_filter_anisotropic} | done
|
|
|
|
|
@webgl_extension{EXT,color_buffer_half_float} | |
|
|
|
|
|
@webgl_extension{EXT,disjoint_timer_query} | only time elapsed query
|
|
|
|
|
@webgl_extension{EXT,disjoint_timer_query_webgl2} | done
|
|
|
|
|
@webgl_extension{EXT,color_buffer_float} | |
|
|
|
|
|
@webgl_extension{EXT,float_blend} | |
|
|
|
|
|
@webgl_extension{EXT,texture_compression_rgtc} | done
|
|
|
|
|
@webgl_extension{EXT,texture_compression_bptc} | done
|
|
|
|
|
@webgl_extension{EXT,texture_norm16} | done
|
|
|
|
|
@webgl_extension{EXT,polygon_offset_clamp} | missing support in Emscripten
|
|
|
|
|
@webgl_extension{EXT,clip_control} | missing support in Emscripten
|
|
|
|
|
@webgl_extension{EXT,depth_clamp} | done
|
|
|
|
|
@webgl_extension{EXT,texture_mirror_clamp_to_edge} | done
|
|
|
|
|
@webgl_extension{KHR,parallel_shader_compile} | done
|
|
|
|
|
@webgl_extension{NV,shader_noperspective_interpolation} | done (shading language only)
|
|
|
|
|
@webgl_extension{OES,texture_float_linear} | done
|
GL: hey, let's rename WebGL extensions, why not!
The web isn't broken enough yet, apparently. Support for both of those
extensions was added in early 2020 (and I think I remember even seeing
them listed as supported in some browsers), one of them was renamed
mere two months later, one in January 2023.
And I discovered just by accident, the browsers *of course* don't even
bother advertising both to have some transition period. Or maybe that
transition period happened, for 3 weeks in January, and if some
developer didn't notice in that time, "it's their fault". Or maybe it's
my fault, for attempting to use an extension that was stuck in a "draft
status" for four years. THE WHOLE WEB IS EITHER IN A "DRAFT STATUS" OR
"DEPRECATED", THERE'S NOTHING IN BETWEEN, FFS!
Constant needless churn, UGH.
3 years ago
|
|
|
@webgl_extension{OES,draw_buffers_indexed} \n (originally named `EXT_draw_buffers_indexed`) | done
|
|
|
|
|
@webgl_extension{OVR,multiview2} | |
|
|
|
|
|
@webgl_extension{WEBGL,lose_context} | |
|
|
|
|
|
@webgl_extension{WEBGL,debug_renderer_info} | done
|
|
|
|
|
@webgl_extension{WEBGL,debug_shaders} | |
|
|
|
|
|
@webgl_extension{WEBGL,compressed_texture_s3tc} | done
|
|
|
|
|
@webgl_extension{WEBGL,compressed_texture_pvrtc} | done
|
|
|
|
|
@webgl_extension{WEBGL,compressed_texture_etc} | done
|
|
|
|
|
@webgl_extension{WEBGL,compressed_texture_astc} | done
|
|
|
|
|
@webgl_extension{WEBGL,compressed_texture_s3tc_srgb} | done
|
|
|
|
|
@webgl_extension{WEBGL,multi_draw} | done
|
|
|
|
|
@webgl_extension{WEBGL,blend_equation_advanced_coherent} | done
|
GL: hey, let's rename WebGL extensions, why not!
The web isn't broken enough yet, apparently. Support for both of those
extensions was added in early 2020 (and I think I remember even seeing
them listed as supported in some browsers), one of them was renamed
mere two months later, one in January 2023.
And I discovered just by accident, the browsers *of course* don't even
bother advertising both to have some transition period. Or maybe that
transition period happened, for 3 weeks in January, and if some
developer didn't notice in that time, "it's their fault". Or maybe it's
my fault, for attempting to use an extension that was stuck in a "draft
status" for four years. THE WHOLE WEB IS EITHER IN A "DRAFT STATUS" OR
"DEPRECATED", THERE'S NOTHING IN BETWEEN, FFS!
Constant needless churn, UGH.
3 years ago
|
|
|
@webgl_extension{WEBGL,clip_cull_distance} \n (originally named `EXT_clip_cull_distance`) | done
|
|
|
|
|
@webgl_extension{WEBGL,draw_instanced_base_vertex_base_instance} | done
|
|
|
|
|
@webgl_extension{WEBGL,multi_draw_instanced_base_vertex_base_instance} | done
|
|
|
|
|
@webgl_extension{WEBGL,provoking_vertex} | missing support in Emscripten
|
|
|
|
|
@webgl_extension{WEBGL,polygon_mode} | missing support in Emscripten
|
|
|
|
|
@webgl_extension{WEBGL,blend_func_extended} | done
|
|
|
|
|
@webgl_extension{WEBGL,stencil_texturing} | done
|
|
|
|
|
|
|
|
|
|
@section opengl-unsupported Unsupported OpenGL features
|
|
|
|
|
|
|
|
|
|
Some functionality, which is either soon-to-be deprecated or isn't proven to
|
|
|
|
|
add any performance gains, is not supported in Magnum. See also
|
|
|
|
|
@ref opengl-deprecated.
|
|
|
|
|
|
|
|
|
|
@subsection opengl-unsupported-features Unsupported features
|
|
|
|
|
|
|
|
|
|
- API that is not part of core profile or is marked as deprecated (but still
|
|
|
|
|
supported in core profile) in the latest version of OpenGL specification is
|
|
|
|
|
not supported. The only exception are features that are needed for some
|
|
|
|
|
OpenGL ES 2.0 implementations (such as luminance texture formats).
|
|
|
|
|
- State queries (various `glIs*()`, `glGet*()` functions) are not supported.
|
|
|
|
|
Magnum API is designed to prevent the need for majority of them, many of
|
|
|
|
|
them are tracked internally to avoid redundant state changes and in many
|
|
|
|
|
cases it is easier to set the state to some value rather than query it and
|
|
|
|
|
then decide on the result. For detailed state introspection please use
|
|
|
|
|
external debugger (such as ApiTrace), which is more convenient to use than
|
|
|
|
|
manual queries. Queries of implementation-defined values (various limits
|
|
|
|
|
etc.) and queries of generated values (buffer data, texture data) are
|
|
|
|
|
supported.
|
|
|
|
|
- Line and polygon smoothing (`GL_LINE_SMOOTH`, `GL_POLYGON_SMOOTH`) and
|
|
|
|
|
related functions are not supported, as the driver might do it in software
|
|
|
|
|
with serious performance drops. Multisampling is far superior solution.
|
|
|
|
|
- Fixed precision data types (`GL_FIXED` in OpenGL ES) are not supported, as
|
|
|
|
|
they occupy the same memory as floats and they aren't faster than floats on
|
|
|
|
|
current hardware anymore. They are also not available in WebGL or desktop
|
|
|
|
|
GL.
|
|
|
|
|
- Shader compiler is assumed to be present (`GL_SHADER_COMPILER` returning
|
|
|
|
|
true), as all desktop GL implementations and also ES3 are required to
|
|
|
|
|
support it.
|
|
|
|
|
- Querying shader attribute locations using @fn_gl_keyword{GetAttribLocation}
|
|
|
|
|
and other resources using @fn_gl_keyword{GetProgramResource},
|
|
|
|
|
@fn_gl_keyword{GetProgramResourceIndex},
|
|
|
|
|
@fn_gl_keyword{GetProgramResourceLocation},
|
|
|
|
|
@fn_gl_keyword{GetProgramResourceLocationIndex}
|
|
|
|
|
or @fn_gl_keyword{GetProgramResourceName} (as opposed to setting them) is
|
|
|
|
|
not supported, as newer GL versions encourage setting them explicitly in
|
|
|
|
|
shader code.
|
|
|
|
|
- Direct vertex data specification (as opposed to using buffers) is not
|
|
|
|
|
supported, as it encourages bad practices.
|
|
|
|
|
- @fn_gl{PixelStore} with @def_gl{PACK_SWAP_BYTES} / @def_gl{UNPACK_SWAP_BYTES}.
|
|
|
|
|
Too much burden imposed on every API that deals with pixel storage. Use
|
|
|
|
|
@ref Corrade::Utility::Endianness instead. Note that this state is also not
|
|
|
|
|
tracked, so it won't get reset in case a 3rd party code enables it.
|
|
|
|
|
|
|
|
|
|
@subsection opengl-unsupported-extensions Unsupported ARB / Khronos extensions
|
|
|
|
|
|
|
|
|
|
- @gl_extension{ARB,shading_language_include} is overly complicated and
|
|
|
|
|
supported exclusively by NVidia. However, see the
|
|
|
|
|
@ref ShaderTools::GlslangConverter "GlslangShaderConverter" plugin for
|
|
|
|
|
shader preprocessing/compilation that *does* support @cpp #include @ce
|
|
|
|
|
directives.
|
|
|
|
|
- @gl_extension{ARB,cl_event} seems to be not supported anywhere
|
|
|
|
|
- @gl_extension{ARB,shader_stencil_export} is supported exclusively by AMD
|
|
|
|
|
- @gl_extension{EXT,texture_compression_latc} is superseded by
|
|
|
|
|
@gl_extension{EXT,texture_compression_rgtc}, available in OpenGL 3.0.
|
|
|
|
|
|
|
|
|
|
@subsection opengl-unsupported-extensions-vendor Unsupported vendor extensions
|
|
|
|
|
|
|
|
|
|
- @gl_extension{INTEL,map_texture} negatively affects texture access
|
|
|
|
|
performance. Combination of buffer mapping and pixel buffers might be of
|
|
|
|
|
the same or better performance, without affecting texture access speed.
|
|
|
|
|
- @gl_extension{NV,draw_texture} can be done with framebuffer blitting and
|
|
|
|
|
doesn't make any full-screen postprocessing easier, as shaders are
|
|
|
|
|
excluded.
|
|
|
|
|
- @gl_extension{IMG,texture_compression_pvrtc2} OpenGL ES extension is not
|
|
|
|
|
supported as there is no equivalent in WebGL nor Metal and
|
|
|
|
|
[all hardware having support for it suppors other formats as well](https://forums.developer.apple.com/thread/38454).
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/** @page opengl-deprecated Deprecated OpenGL API list
|
|
|
|
|
|
|
|
|
|
@m_footernavigation
|
|
|
|
|
|
|
|
|
|
See also @ref opengl-unsupported and @ref deprecated.
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/** @page deprecated Deprecated list
|
|
|
|
|
|
|
|
|
|
See also @ref opengl-deprecated.
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
}
|