зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1229332 - Implement EXT_color_buffer_float. - r=jrmuizel
This commit is contained in:
Родитель
cb6a19b2c4
Коммит
3af240fd90
|
@ -32,6 +32,7 @@ WebGLContext::GetExtensionString(WebGLExtensionID ext)
|
|||
|
||||
WEBGL_EXTENSION_IDENTIFIER(ANGLE_instanced_arrays)
|
||||
WEBGL_EXTENSION_IDENTIFIER(EXT_blend_minmax)
|
||||
WEBGL_EXTENSION_IDENTIFIER(EXT_color_buffer_float)
|
||||
WEBGL_EXTENSION_IDENTIFIER(EXT_color_buffer_half_float)
|
||||
WEBGL_EXTENSION_IDENTIFIER(EXT_frag_depth)
|
||||
WEBGL_EXTENSION_IDENTIFIER(EXT_shader_texture_lod)
|
||||
|
@ -151,7 +152,18 @@ WebGLContext::IsExtensionSupported(WebGLExtensionID ext) const
|
|||
break;
|
||||
}
|
||||
|
||||
if (!IsWebGL2()) {
|
||||
if (IsWebGL2()) {
|
||||
// WebGL2-only extensions
|
||||
switch (ext) {
|
||||
// EXT_
|
||||
case WebGLExtensionID::EXT_color_buffer_float:
|
||||
return WebGLExtensionEXTColorBufferFloat::IsSupported(this);
|
||||
|
||||
default:
|
||||
// For warnings-as-errors.
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
// WebGL1-only extensions
|
||||
switch (ext) {
|
||||
// ANGLE_
|
||||
|
@ -331,6 +343,9 @@ WebGLContext::EnableExtension(WebGLExtensionID ext)
|
|||
case WebGLExtensionID::EXT_blend_minmax:
|
||||
obj = new WebGLExtensionBlendMinMax(this);
|
||||
break;
|
||||
case WebGLExtensionID::EXT_color_buffer_float:
|
||||
obj = new WebGLExtensionEXTColorBufferFloat(this);
|
||||
break;
|
||||
case WebGLExtensionID::EXT_color_buffer_half_float:
|
||||
obj = new WebGLExtensionColorBufferHalfFloat(this);
|
||||
break;
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "WebGLExtensions.h"
|
||||
|
||||
#include "GLContext.h"
|
||||
#include "mozilla/dom/WebGL2RenderingContextBinding.h"
|
||||
#include "WebGLContext.h"
|
||||
#include "WebGLFormats.h"
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
WebGLExtensionEXTColorBufferFloat::WebGLExtensionEXTColorBufferFloat(WebGLContext* webgl)
|
||||
: WebGLExtensionBase(webgl)
|
||||
{
|
||||
MOZ_ASSERT(IsSupported(webgl), "Don't construct extension if unsupported.");
|
||||
|
||||
auto& fua = webgl->mFormatUsage;
|
||||
|
||||
auto fnUpdateUsage = [&fua](GLenum sizedFormat, webgl::EffectiveFormat effFormat) {
|
||||
auto usage = fua->EditUsage(effFormat);
|
||||
usage->isRenderable = true;
|
||||
fua->AllowRBFormat(sizedFormat, usage);
|
||||
};
|
||||
|
||||
#define FOO(x) fnUpdateUsage(LOCAL_GL_ ## x, webgl::EffectiveFormat::x)
|
||||
|
||||
FOO(R16F);
|
||||
FOO(RG16F);
|
||||
FOO(RGBA16F);
|
||||
|
||||
FOO(R32F);
|
||||
FOO(RG32F);
|
||||
FOO(RGBA32F);
|
||||
|
||||
FOO(R11F_G11F_B10F);
|
||||
|
||||
#undef FOO
|
||||
}
|
||||
|
||||
/*static*/ bool
|
||||
WebGLExtensionEXTColorBufferFloat::IsSupported(const WebGLContext* webgl)
|
||||
{
|
||||
const gl::GLContext* gl = webgl->GL();
|
||||
return gl->IsSupported(gl::GLFeature::EXT_color_buffer_float);
|
||||
}
|
||||
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionEXTColorBufferFloat, EXT_color_buffer_float)
|
||||
|
||||
} // namespace mozilla
|
|
@ -153,6 +153,18 @@ public:
|
|||
DECL_WEBGL_EXTENSION_GOOP
|
||||
};
|
||||
|
||||
class WebGLExtensionEXTColorBufferFloat
|
||||
: public WebGLExtensionBase
|
||||
{
|
||||
public:
|
||||
explicit WebGLExtensionEXTColorBufferFloat(WebGLContext*);
|
||||
virtual ~WebGLExtensionEXTColorBufferFloat() { }
|
||||
|
||||
static bool IsSupported(const WebGLContext*);
|
||||
|
||||
DECL_WEBGL_EXTENSION_GOOP
|
||||
};
|
||||
|
||||
class WebGLExtensionFragDepth
|
||||
: public WebGLExtensionBase
|
||||
{
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
#include "mozilla/dom/WebGL2RenderingContextBinding.h"
|
||||
#include "mozilla/dom/WebGLRenderingContextBinding.h"
|
||||
#include "mozilla/RefPtr.h"
|
||||
#include "nsPrintfCString.h"
|
||||
#include "WebGLActiveInfo.h"
|
||||
#include "WebGLContext.h"
|
||||
#include "WebGLShader.h"
|
||||
|
|
|
@ -139,6 +139,7 @@ enum class WebGLTexDimensions : uint8_t {
|
|||
enum class WebGLExtensionID : uint8_t {
|
||||
ANGLE_instanced_arrays,
|
||||
EXT_blend_minmax,
|
||||
EXT_color_buffer_float,
|
||||
EXT_color_buffer_half_float,
|
||||
EXT_frag_depth,
|
||||
EXT_sRGB,
|
||||
|
|
|
@ -112,6 +112,7 @@ UNIFIED_SOURCES += [
|
|||
'WebGLExtensionDisjointTimerQuery.cpp',
|
||||
'WebGLExtensionDrawBuffers.cpp',
|
||||
'WebGLExtensionElementIndexUint.cpp',
|
||||
'WebGLExtensionEXTColorBufferFloat.cpp',
|
||||
'WebGLExtensionFragDepth.cpp',
|
||||
'WebGLExtensionInstancedArrays.cpp',
|
||||
'WebGLExtensionLoseContext.cpp',
|
||||
|
|
|
@ -95,6 +95,7 @@ enum class GLFeature {
|
|||
element_index_uint,
|
||||
ES2_compatibility,
|
||||
ES3_compatibility,
|
||||
EXT_color_buffer_float,
|
||||
frag_color_float,
|
||||
frag_depth,
|
||||
framebuffer_blit,
|
||||
|
|
|
@ -186,6 +186,16 @@ static const FeatureInfo sFeatureInfoArr[] = {
|
|||
GLContext::Extensions_End
|
||||
}
|
||||
},
|
||||
{
|
||||
"EXT_color_buffer_float",
|
||||
GLVersion::GL3,
|
||||
GLESVersion::NONE,
|
||||
GLContext::Extension_None,
|
||||
{
|
||||
GLContext::EXT_color_buffer_float,
|
||||
GLContext::Extensions_End
|
||||
}
|
||||
},
|
||||
{
|
||||
// Removes clamping for float color outputs from frag shaders.
|
||||
"frag_color_float",
|
||||
|
|
Загрузка…
Ссылка в новой задаче