Bug 1388565 - Fix WEBGL_compressed_texture_s3tc_srgb driver requirements. - r=daoshengmu

MozReview-Commit-ID: 5k7m1ebzlCx
This commit is contained in:
Jeff Gilbert 2017-08-08 16:32:23 -07:00
Родитель 62b3bdf68b
Коммит cfccc12f18
6 изменённых файлов: 31 добавлений и 8 удалений

Просмотреть файл

@ -143,8 +143,7 @@ WebGLContext::IsExtensionSupported(WebGLExtensionID ext) const
case WebGLExtensionID::WEBGL_compressed_texture_s3tc:
return WebGLExtensionCompressedTextureS3TC::IsSupported(this);
case WebGLExtensionID::WEBGL_compressed_texture_s3tc_srgb:
return WebGLExtensionCompressedTextureS3TC::IsSupported(this) &&
gl->IsExtensionSupported(gl::GLContext::EXT_texture_sRGB);
return WebGLExtensionCompressedTextureS3TC_SRGB::IsSupported(this);
case WebGLExtensionID::WEBGL_debug_renderer_info:
return Preferences::GetBool("webgl.enable-debug-renderer-info", false);
case WebGLExtensionID::WEBGL_debug_shaders:

Просмотреть файл

@ -45,13 +45,13 @@ WebGLExtensionCompressedTextureS3TC::~WebGLExtensionCompressedTextureS3TC()
bool
WebGLExtensionCompressedTextureS3TC::IsSupported(const WebGLContext* webgl)
{
gl::GLContext* gl = webgl->GL();
if (gl->IsExtensionSupported(gl::GLContext::EXT_texture_compression_s3tc))
return true;
gl::GLContext* gl = webgl->GL();
if (gl->IsExtensionSupported(gl::GLContext::EXT_texture_compression_s3tc))
return true;
return gl->IsExtensionSupported(gl::GLContext::EXT_texture_compression_dxt1) &&
gl->IsExtensionSupported(gl::GLContext::ANGLE_texture_compression_dxt3) &&
gl->IsExtensionSupported(gl::GLContext::ANGLE_texture_compression_dxt5);
return gl->IsExtensionSupported(gl::GLContext::EXT_texture_compression_dxt1) &&
gl->IsExtensionSupported(gl::GLContext::ANGLE_texture_compression_dxt3) &&
gl->IsExtensionSupported(gl::GLContext::ANGLE_texture_compression_dxt5);
}
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionCompressedTextureS3TC, WEBGL_compressed_texture_s3tc)

Просмотреть файл

@ -42,6 +42,19 @@ WebGLExtensionCompressedTextureS3TC_SRGB::~WebGLExtensionCompressedTextureS3TC_S
{
}
bool
WebGLExtensionCompressedTextureS3TC_SRGB::IsSupported(const WebGLContext* webgl)
{
gl::GLContext* gl = webgl->GL();
if (gl->IsGLES())
return gl->IsExtensionSupported(gl::GLContext::EXT_texture_compression_s3tc_srgb);
// Desktop GL is more complicated: It's EXT_texture_sRGB, when
// EXT_texture_compression_s3tc is supported, that enables srgb+s3tc.
return gl->IsExtensionSupported(gl::GLContext::EXT_texture_sRGB) &&
gl->IsExtensionSupported(gl::GLContext::EXT_texture_compression_s3tc);
}
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionCompressedTextureS3TC_SRGB, WEBGL_compressed_texture_s3tc_srgb)
} // namespace mozilla

Просмотреть файл

@ -138,6 +138,8 @@ public:
explicit WebGLExtensionCompressedTextureS3TC_SRGB(WebGLContext*);
virtual ~WebGLExtensionCompressedTextureS3TC_SRGB();
static bool IsSupported(const WebGLContext*);
DECL_WEBGL_EXTENSION_GOOP
};

Просмотреть файл

@ -151,6 +151,7 @@ static const char* const sExtensionNames[] = {
"GL_EXT_texture3D",
"GL_EXT_texture_compression_dxt1",
"GL_EXT_texture_compression_s3tc",
"GL_EXT_texture_compression_s3tc_srgb",
"GL_EXT_texture_filter_anisotropic",
"GL_EXT_texture_format_BGRA8888",
"GL_EXT_texture_sRGB",
@ -1739,6 +1740,13 @@ GLContext::InitExtensions()
{
MarkExtensionUnsupported(EXT_texture_compression_s3tc);
}
// OSX supports EXT_texture_sRGB in Legacy contexts, but not in Core contexts.
// Though EXT_texture_sRGB was included into GL2.1, it *excludes* the interactions
// with s3tc. Strictly speaking, you must advertize support for EXT_texture_sRGB
// in order to allow for srgb+s3tc on desktop GL. The omission of EXT_texture_sRGB
// in OSX Core contexts appears to be a bug.
MarkExtensionSupported(EXT_texture_sRGB);
#endif
}

Просмотреть файл

@ -417,6 +417,7 @@ public:
EXT_texture3D,
EXT_texture_compression_dxt1,
EXT_texture_compression_s3tc,
EXT_texture_compression_s3tc_srgb,
EXT_texture_filter_anisotropic,
EXT_texture_format_BGRA8888,
EXT_texture_sRGB,