Kaynağa Gözat

Adding webgl extensions.

Branimir Karadžić 11 yıl önce
ebeveyn
işleme
81a3e23841
1 değiştirilmiş dosya ile 146 ekleme ve 112 silme
  1. 146 112
      src/renderer_gl.cpp

+ 146 - 112
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  },
-
-		{ "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  },
-
-		{ "GL_ATI_meminfo",                        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  },
-
-		{ "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  },
-
-		{ "GL_GOOGLE_depth_texture",               false,                             true  },
-
-		{ "GL_GREMEDY_string_marker",              false,                             true  },
-		{ "GL_GREMEDY_frame_terminator",           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  },
-
-		{ "GL_KHR_debug",                          BGFX_CONFIG_RENDERER_OPENGL >= 43, true  },
-
-		{ "GL_NVX_gpu_memory_info",                false,                             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  },
+		{ "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  },
+
+		{ "APPLE_texture_format_BGRA8888",         false,                             true  },
+		{ "APPLE_texture_max_level",               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  },
+
+		{ "ATI_meminfo",                           false,                             true  },
+
+		{ "CHROMIUM_depth_texture",                false,                             true  },
+		{ "CHROMIUM_framebuffer_multisample",      false,                             true  },
+		{ "CHROMIUM_texture_compression_dxt3",     false,                             true  },
+		{ "CHROMIUM_texture_compression_dxt5",     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  },
+
+		{ "GOOGLE_depth_texture",                  false,                             true  },
+
+		{ "GREMEDY_string_marker",                 false,                             true  },
+		{ "GREMEDY_frame_terminator",              false,                             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  },
+
+		{ "KHR_debug",                             BGFX_CONFIG_RENDERER_OPENGL >= 43, 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