From 81a3e2384192ad165cc1f5ea0fe999a010f8798e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Sun, 16 Mar 2014 17:43:51 -0700 Subject: [PATCH] Adding webgl extensions. --- src/renderer_gl.cpp | 238 +++++++++++++++++++++++++------------------- 1 file changed, 136 insertions(+), 102 deletions(-) diff --git a/src/renderer_gl.cpp b/src/renderer_gl.cpp index 958d8792..838d0221 100644 --- a/src/renderer_gl.cpp +++ b/src/renderer_gl.cpp @@ -288,6 +288,9 @@ namespace bgfx KHR_debug, + MOZ_WEBGL_compressed_texture_s3tc, + MOZ_WEBGL_depth_texture, + NVX_gpu_memory_info, OES_compressed_ETC1_RGB8_texture, @@ -311,6 +314,13 @@ namespace bgfx OES_vertex_half_float, OES_vertex_type_10_10_10_2, + WEBGL_compressed_texture_s3tc, + WEBGL_depth_texture, + + WEBKIT_EXT_texture_filter_anisotropic, + WEBKIT_WEBGL_compressed_texture_s3tc, + WEBKIT_WEBGL_depth_texture, + Count }; @@ -321,115 +331,125 @@ namespace bgfx static Extension s_extension[Extension::Count] = { - { "GL_ANGLE_depth_texture", false, true }, - { "GL_ANGLE_framebuffer_blit", false, true }, - { "GL_ANGLE_framebuffer_multisample", false, false }, - { "GL_ANGLE_instanced_arrays", false, true }, - { "GL_ANGLE_texture_compression_dxt1", false, true }, - { "GL_ANGLE_texture_compression_dxt3", false, true }, - { "GL_ANGLE_texture_compression_dxt5", false, true }, - { "GL_ANGLE_translated_shader_source", false, true }, + { "ANGLE_depth_texture", false, true }, + { "ANGLE_framebuffer_blit", false, true }, + { "ANGLE_framebuffer_multisample", false, false }, + { "ANGLE_instanced_arrays", false, true }, + { "ANGLE_texture_compression_dxt1", false, true }, + { "ANGLE_texture_compression_dxt3", false, true }, + { "ANGLE_texture_compression_dxt5", false, true }, + { "ANGLE_translated_shader_source", false, true }, - { "GL_APPLE_texture_format_BGRA8888", false, true }, - { "GL_APPLE_texture_max_level", false, true }, - - { "GL_ARB_debug_label", false, true }, - { "GL_ARB_debug_output", BGFX_CONFIG_RENDERER_OPENGL >= 43, true }, - { "GL_ARB_depth_clamp", BGFX_CONFIG_RENDERER_OPENGL >= 32, true }, - { "GL_ARB_draw_buffers_blend", BGFX_CONFIG_RENDERER_OPENGL >= 40, true }, - { "GL_ARB_ES3_compatibility", BGFX_CONFIG_RENDERER_OPENGL >= 43, true }, - { "GL_ARB_framebuffer_object", BGFX_CONFIG_RENDERER_OPENGL >= 30, true }, - { "GL_ARB_framebuffer_sRGB", BGFX_CONFIG_RENDERER_OPENGL >= 30, true }, - { "GL_ARB_get_program_binary", BGFX_CONFIG_RENDERER_OPENGL >= 41, true }, - { "GL_ARB_half_float_pixel", BGFX_CONFIG_RENDERER_OPENGL >= 30, true }, - { "GL_ARB_half_float_vertex", BGFX_CONFIG_RENDERER_OPENGL >= 30, true }, - { "GL_ARB_instanced_arrays", BGFX_CONFIG_RENDERER_OPENGL >= 33, true }, - { "GL_ARB_map_buffer_range", BGFX_CONFIG_RENDERER_OPENGL >= 30, true }, - { "GL_ARB_multisample", false, true }, - { "GL_ARB_sampler_objects", BGFX_CONFIG_RENDERER_OPENGL >= 33, true }, - { "GL_ARB_seamless_cube_map", BGFX_CONFIG_RENDERER_OPENGL >= 32, true }, - { "GL_ARB_shader_texture_lod", BGFX_CONFIG_RENDERER_OPENGL >= 30, true }, - { "GL_ARB_texture_compression_rgtc", BGFX_CONFIG_RENDERER_OPENGL >= 30, true }, - { "GL_ARB_texture_float", BGFX_CONFIG_RENDERER_OPENGL >= 30, true }, - { "GL_ARB_texture_multisample", BGFX_CONFIG_RENDERER_OPENGL >= 32, true }, - { "GL_ARB_texture_storage", BGFX_CONFIG_RENDERER_OPENGL >= 42, true }, - { "GL_ARB_texture_swizzle", BGFX_CONFIG_RENDERER_OPENGL >= 33, true }, - { "GL_ARB_timer_query", BGFX_CONFIG_RENDERER_OPENGL >= 33, true }, - { "GL_ARB_uniform_buffer_object", BGFX_CONFIG_RENDERER_OPENGL >= 31, true }, - { "GL_ARB_vertex_array_object", BGFX_CONFIG_RENDERER_OPENGL >= 30, true }, - { "GL_ARB_vertex_type_2_10_10_10_rev", false, true }, + { "APPLE_texture_format_BGRA8888", false, true }, + { "APPLE_texture_max_level", false, true }, - { "GL_ATI_meminfo", false, true }, + { "ARB_debug_label", false, true }, + { "ARB_debug_output", BGFX_CONFIG_RENDERER_OPENGL >= 43, true }, + { "ARB_depth_clamp", BGFX_CONFIG_RENDERER_OPENGL >= 32, true }, + { "ARB_draw_buffers_blend", BGFX_CONFIG_RENDERER_OPENGL >= 40, true }, + { "ARB_ES3_compatibility", BGFX_CONFIG_RENDERER_OPENGL >= 43, true }, + { "ARB_framebuffer_object", BGFX_CONFIG_RENDERER_OPENGL >= 30, true }, + { "ARB_framebuffer_sRGB", BGFX_CONFIG_RENDERER_OPENGL >= 30, true }, + { "ARB_get_program_binary", BGFX_CONFIG_RENDERER_OPENGL >= 41, true }, + { "ARB_half_float_pixel", BGFX_CONFIG_RENDERER_OPENGL >= 30, true }, + { "ARB_half_float_vertex", BGFX_CONFIG_RENDERER_OPENGL >= 30, true }, + { "ARB_instanced_arrays", BGFX_CONFIG_RENDERER_OPENGL >= 33, true }, + { "ARB_map_buffer_range", BGFX_CONFIG_RENDERER_OPENGL >= 30, true }, + { "ARB_multisample", false, true }, + { "ARB_sampler_objects", BGFX_CONFIG_RENDERER_OPENGL >= 33, true }, + { "ARB_seamless_cube_map", BGFX_CONFIG_RENDERER_OPENGL >= 32, true }, + { "ARB_shader_texture_lod", BGFX_CONFIG_RENDERER_OPENGL >= 30, true }, + { "ARB_texture_compression_rgtc", BGFX_CONFIG_RENDERER_OPENGL >= 30, true }, + { "ARB_texture_float", BGFX_CONFIG_RENDERER_OPENGL >= 30, true }, + { "ARB_texture_multisample", BGFX_CONFIG_RENDERER_OPENGL >= 32, true }, + { "ARB_texture_storage", BGFX_CONFIG_RENDERER_OPENGL >= 42, true }, + { "ARB_texture_swizzle", BGFX_CONFIG_RENDERER_OPENGL >= 33, true }, + { "ARB_timer_query", BGFX_CONFIG_RENDERER_OPENGL >= 33, true }, + { "ARB_uniform_buffer_object", BGFX_CONFIG_RENDERER_OPENGL >= 31, true }, + { "ARB_vertex_array_object", BGFX_CONFIG_RENDERER_OPENGL >= 30, true }, + { "ARB_vertex_type_2_10_10_10_rev", false, true }, - { "GL_CHROMIUM_depth_texture", false, true }, - { "GL_CHROMIUM_framebuffer_multisample", false, true }, - { "GL_CHROMIUM_texture_compression_dxt3", false, true }, - { "GL_CHROMIUM_texture_compression_dxt5", false, true }, + { "ATI_meminfo", false, true }, - { "GL_EXT_bgra", false, true }, - { "GL_EXT_blend_color", BGFX_CONFIG_RENDERER_OPENGL >= 31, true }, - { "GL_EXT_blend_minmax", BGFX_CONFIG_RENDERER_OPENGL >= 14, true }, - { "GL_EXT_blend_subtract", BGFX_CONFIG_RENDERER_OPENGL >= 14, true }, - { "GL_EXT_debug_label", false, true }, - { "GL_EXT_debug_marker", false, true }, - { "GL_EXT_frag_depth", false, true }, // GLES2 extension. - { "GL_EXT_framebuffer_blit", BGFX_CONFIG_RENDERER_OPENGL >= 30, true }, - { "GL_EXT_framebuffer_object", BGFX_CONFIG_RENDERER_OPENGL >= 30, true }, - { "GL_EXT_framebuffer_sRGB", BGFX_CONFIG_RENDERER_OPENGL >= 30, true }, - { "GL_EXT_occlusion_query_boolean", false, true }, - { "GL_EXT_read_format_bgra", false, true }, - { "GL_EXT_shader_texture_lod", false, true }, // GLES2 extension. - { "GL_EXT_shadow_samplers", false, true }, - { "GL_EXT_texture_array", BGFX_CONFIG_RENDERER_OPENGL >= 30, true }, - { "GL_EXT_texture_compression_dxt1", false, true }, - { "GL_EXT_texture_compression_latc", false, true }, - { "GL_EXT_texture_compression_rgtc", BGFX_CONFIG_RENDERER_OPENGL >= 30, true }, - { "GL_EXT_texture_compression_s3tc", false, true }, - { "GL_EXT_texture_filter_anisotropic", false, true }, - { "GL_EXT_texture_format_BGRA8888", false, true }, - { "GL_EXT_texture_sRGB", false, true }, - { "GL_EXT_texture_storage", false, true }, - { "GL_EXT_texture_swizzle", false, true }, - { "GL_EXT_texture_type_2_10_10_10_REV", false, true }, - { "GL_EXT_timer_query", false, true }, - { "GL_EXT_unpack_subimage", false, true }, + { "CHROMIUM_depth_texture", false, true }, + { "CHROMIUM_framebuffer_multisample", false, true }, + { "CHROMIUM_texture_compression_dxt3", false, true }, + { "CHROMIUM_texture_compression_dxt5", false, true }, - { "GL_GOOGLE_depth_texture", false, true }, + { "EXT_bgra", false, true }, + { "EXT_blend_color", BGFX_CONFIG_RENDERER_OPENGL >= 31, true }, + { "EXT_blend_minmax", BGFX_CONFIG_RENDERER_OPENGL >= 14, true }, + { "EXT_blend_subtract", BGFX_CONFIG_RENDERER_OPENGL >= 14, true }, + { "EXT_debug_label", false, true }, + { "EXT_debug_marker", false, true }, + { "EXT_frag_depth", false, true }, // GLES2 extension. + { "EXT_framebuffer_blit", BGFX_CONFIG_RENDERER_OPENGL >= 30, true }, + { "EXT_framebuffer_object", BGFX_CONFIG_RENDERER_OPENGL >= 30, true }, + { "EXT_framebuffer_sRGB", BGFX_CONFIG_RENDERER_OPENGL >= 30, true }, + { "EXT_occlusion_query_boolean", false, true }, + { "EXT_read_format_bgra", false, true }, + { "EXT_shader_texture_lod", false, true }, // GLES2 extension. + { "EXT_shadow_samplers", false, true }, + { "EXT_texture_array", BGFX_CONFIG_RENDERER_OPENGL >= 30, true }, + { "EXT_texture_compression_dxt1", false, true }, + { "EXT_texture_compression_latc", false, true }, + { "EXT_texture_compression_rgtc", BGFX_CONFIG_RENDERER_OPENGL >= 30, true }, + { "EXT_texture_compression_s3tc", false, true }, + { "EXT_texture_filter_anisotropic", false, true }, + { "EXT_texture_format_BGRA8888", false, true }, + { "EXT_texture_sRGB", false, true }, + { "EXT_texture_storage", false, true }, + { "EXT_texture_swizzle", false, true }, + { "EXT_texture_type_2_10_10_10_REV", false, true }, + { "EXT_timer_query", false, true }, + { "EXT_unpack_subimage", false, true }, - { "GL_GREMEDY_string_marker", false, true }, - { "GL_GREMEDY_frame_terminator", false, true }, + { "GOOGLE_depth_texture", false, true }, - { "GL_IMG_multisampled_render_to_texture", false, true }, - { "GL_IMG_read_format", false, true }, - { "GL_IMG_shader_binary", false, true }, - { "GL_IMG_texture_compression_pvrtc", false, true }, - { "GL_IMG_texture_compression_pvrtc2", false, true }, - { "GL_IMG_texture_format_BGRA8888", false, true }, + { "GREMEDY_string_marker", false, true }, + { "GREMEDY_frame_terminator", false, true }, - { "GL_KHR_debug", BGFX_CONFIG_RENDERER_OPENGL >= 43, true }, + { "IMG_multisampled_render_to_texture", false, true }, + { "IMG_read_format", false, true }, + { "IMG_shader_binary", false, true }, + { "IMG_texture_compression_pvrtc", false, true }, + { "IMG_texture_compression_pvrtc2", false, true }, + { "IMG_texture_format_BGRA8888", false, true }, - { "GL_NVX_gpu_memory_info", false, true }, + { "KHR_debug", BGFX_CONFIG_RENDERER_OPENGL >= 43, true }, - { "GL_OES_compressed_ETC1_RGB8_texture", false, true }, - { "GL_OES_depth24", false, true }, - { "GL_OES_depth32", false, true }, - { "GL_OES_depth_texture", false, true }, - { "GL_OES_fragment_precision_high", false, true }, - { "GL_OES_get_program_binary", false, true }, - { "GL_OES_required_internalformat", false, true }, - { "GL_OES_packed_depth_stencil", false, true }, - { "GL_OES_read_format", false, true }, - { "GL_OES_rgb8_rgba8", false, true }, - { "GL_OES_standard_derivatives", false, true }, - { "GL_OES_texture_3D", false, true }, - { "GL_OES_texture_float", false, true }, - { "GL_OES_texture_float_linear", false, true }, - { "GL_OES_texture_npot", false, true }, - { "GL_OES_texture_half_float", false, true }, - { "GL_OES_texture_half_float_linear", false, true }, - { "GL_OES_vertex_array_object", false, !BX_PLATFORM_IOS }, - { "GL_OES_vertex_half_float", false, true }, - { "GL_OES_vertex_type_10_10_10_2", false, true }, + { "MOZ_WEBGL_compressed_texture_s3tc", false, true }, + { "MOZ_WEBGL_depth_texture", false, true }, + + { "NVX_gpu_memory_info", false, true }, + + { "OES_compressed_ETC1_RGB8_texture", false, true }, + { "OES_depth24", false, true }, + { "OES_depth32", false, true }, + { "OES_depth_texture", false, true }, + { "OES_fragment_precision_high", false, true }, + { "OES_get_program_binary", false, true }, + { "OES_required_internalformat", false, true }, + { "OES_packed_depth_stencil", false, true }, + { "OES_read_format", false, true }, + { "OES_rgb8_rgba8", false, true }, + { "OES_standard_derivatives", false, true }, + { "OES_texture_3D", false, true }, + { "OES_texture_float", false, true }, + { "OES_texture_float_linear", false, true }, + { "OES_texture_npot", false, true }, + { "OES_texture_half_float", false, true }, + { "OES_texture_half_float_linear", false, true }, + { "OES_vertex_array_object", false, !BX_PLATFORM_IOS }, + { "OES_vertex_half_float", false, true }, + { "OES_vertex_type_10_10_10_2", false, true }, + + { "WEBGL_compressed_texture_s3tc", false, true }, + { "WEBGL_depth_texture", false, true }, + + { "WEBKIT_EXT_texture_filter_anisotropic", false, true }, + { "WEBKIT_WEBGL_compressed_texture_s3tc", false, true }, + { "WEBKIT_WEBGL_depth_texture", false, true }, }; static const char* s_ARB_shader_texture_lod[] = @@ -1049,9 +1069,15 @@ namespace bgfx { Extension& extension = s_extension[ii]; if (!extension.m_supported - && extension.m_initialize) + && extension.m_initialize) { - if (0 == strcmp(name, extension.m_name) ) + const char* ext = name; + if (0 == strncmp(ext, "GL_", 3) ) // skip GL_ + { + ext += 3; + } + + if (0 == strcmp(ext, extension.m_name) ) { extension.m_supported = true; supported = true; @@ -1078,7 +1104,12 @@ namespace bgfx } } - bool bc123Supported = s_extension[Extension::EXT_texture_compression_s3tc].m_supported; + bool bc123Supported = 0 + || s_extension[Extension::EXT_texture_compression_s3tc].m_supported + || s_extension[Extension::MOZ_WEBGL_compressed_texture_s3tc].m_supported + || s_extension[Extension::WEBGL_compressed_texture_s3tc].m_supported + || s_extension[Extension::WEBKIT_WEBGL_compressed_texture_s3tc].m_supported + ; s_textureFormat[TextureFormat::BC1].m_supported |= bc123Supported || s_extension[Extension::ANGLE_texture_compression_dxt1].m_supported || s_extension[Extension::EXT_texture_compression_dxt1].m_supported @@ -1231,6 +1262,9 @@ namespace bgfx || s_extension[Extension::CHROMIUM_depth_texture].m_supported || s_extension[Extension::GOOGLE_depth_texture].m_supported || s_extension[Extension::OES_depth_texture].m_supported + || s_extension[Extension::MOZ_WEBGL_depth_texture].m_supported + || s_extension[Extension::WEBGL_depth_texture].m_supported + || s_extension[Extension::WEBKIT_WEBGL_depth_texture].m_supported ; g_caps.supported |= m_depthTextureSupport