summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-01-23 17:21:03 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-01-23 16:25:15 +0000
commitc551f43206405019121bd2b2c93714319a0a3300 (patch)
tree1f48c30631c421fd4bbb3c36da20183c8a2ed7d7 /chromium/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
parent7961cea6d1041e3e454dae6a1da660b453efd238 (diff)
downloadqtwebengine-chromium-c551f43206405019121bd2b2c93714319a0a3300.tar.gz
BASELINE: Update Chromium to 79.0.3945.139
Change-Id: I336b7182fab9bca80b709682489c07db112eaca5 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc')
-rw-r--r--chromium/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc178
1 files changed, 97 insertions, 81 deletions
diff --git a/chromium/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc b/chromium/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
index 1a094f9a03b..03338285aa6 100644
--- a/chromium/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
+++ b/chromium/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
@@ -28,6 +28,7 @@
#include <memory>
#include <utility>
+#include "base/feature_list.h"
#include "base/numerics/checked_math.h"
#include "base/stl_util.h"
#include "build/build_config.h"
@@ -115,6 +116,10 @@
#include "third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_contents.h"
namespace blink {
+namespace {
+const base::Feature kLowLatencyWebGLSwapChain{
+ "LowLatencyWebGLSwapChain", base::FEATURE_DISABLED_BY_DEFAULT};
+} // namespace
bool WebGLRenderingContextBase::webgl_context_limits_initialized_ = false;
unsigned WebGLRenderingContextBase::max_active_webgl_contexts_ = 0;
@@ -440,6 +445,7 @@ void StripComments::Process(UChar c) {
break;
case kMiddleOfLine:
+ case kInPreprocessorDirective:
if (c == '/' && Peek(temp)) {
if (temp == '/') {
parse_state_ = kInSingleLineComment;
@@ -463,14 +469,6 @@ void StripComments::Process(UChar c) {
Emit(c);
break;
- case kInPreprocessorDirective:
- // No matter what the character is, just pass it
- // through. Do not parse comments in this state. This
- // might not be the right thing to do long term, but it
- // should handle the #error preprocessor directive.
- Emit(c);
- break;
-
case kInSingleLineComment:
// Line-continuation characters are processed before comment processing.
// Advance string if a new line character is immediately behind
@@ -772,9 +770,11 @@ WebGLRenderingContextBase::GetStaticBitmapImage(
}
scoped_refptr<StaticBitmapImage> WebGLRenderingContextBase::GetImage(
- AccelerationHint hint) const {
+ AccelerationHint hint) {
if (!GetDrawingBuffer())
return nullptr;
+
+ ScopedFramebufferRestorer fbo_restorer(this);
GetDrawingBuffer()->ResolveAndBindForReadAndDraw();
// Use the drawing buffer size here instead of the canvas size to ensure that
// sizing is consistent for the GetStaticBitmapImage() result. The forced
@@ -1097,7 +1097,7 @@ scoped_refptr<DrawingBuffer> WebGLRenderingContextBase::CreateDrawingBuffer(
: DrawingBuffer::kAllowChromiumImage;
bool using_swap_chain =
- RuntimeEnabledFeatures::WebGLSwapChainEnabled() &&
+ base::FeatureList::IsEnabled(kLowLatencyWebGLSwapChain) &&
context_provider->GetCapabilities().shared_image_swap_chain &&
CreationAttributes().desynchronized;
@@ -1391,22 +1391,31 @@ void WebGLRenderingContextBase::DidDraw() {
CanvasRenderingContext::DidDraw();
}
-void WebGLRenderingContextBase::PushFrame() {
+bool WebGLRenderingContextBase::PushFrame() {
int width = GetDrawingBuffer()->Size().Width();
int height = GetDrawingBuffer()->Size().Height();
+ int submitted_frame = false;
if (PaintRenderingResultsToCanvas(kBackBuffer)) {
if (Host()->GetOrCreateCanvasResourceProvider(kPreferAcceleration)) {
- Host()->PushFrame(Host()->ResourceProvider()->ProduceCanvasResource(),
- SkIRect::MakeWH(width, height));
+ submitted_frame =
+ Host()->PushFrame(Host()->ResourceProvider()->ProduceCanvasResource(),
+ SkIRect::MakeWH(width, height));
}
}
MarkLayerComposited();
+ return submitted_frame;
}
void WebGLRenderingContextBase::FinalizeFrame() {
if (GetDrawingBuffer() && GetDrawingBuffer()->UsingSwapChain())
GetDrawingBuffer()->PresentSwapChain();
marked_canvas_dirty_ = false;
+
+ // For low-latency canvases
+ const bool webgl_overlay_enabled =
+ RuntimeEnabledFeatures::WebGLImageChromiumEnabled() || UsingSwapChain();
+ if (canvas() && canvas()->LowLatencyEnabled() && !webgl_overlay_enabled)
+ PaintRenderingResultsToCanvas(kBackBuffer);
}
void WebGLRenderingContextBase::OnErrorMessage(const char* message,
@@ -1611,7 +1620,7 @@ bool WebGLRenderingContextBase::ContextCreatedOnXRCompatibleAdapter() {
bool WebGLRenderingContextBase::CopyRenderingResultsFromDrawingBuffer(
CanvasResourceProvider* resource_provider,
- SourceDrawingBuffer source_buffer) const {
+ SourceDrawingBuffer source_buffer) {
if (!drawing_buffer_)
return false;
if (resource_provider->IsAccelerated()) {
@@ -1657,8 +1666,7 @@ IntSize WebGLRenderingContextBase::DrawingBufferSize() const {
return GetDrawingBuffer()->Size();
}
-scoped_refptr<Uint8Array>
-WebGLRenderingContextBase::PaintRenderingResultsToDataArray(
+sk_sp<SkData> WebGLRenderingContextBase::PaintRenderingResultsToDataArray(
SourceDrawingBuffer source_buffer) {
if (isContextLost())
return nullptr;
@@ -2911,7 +2919,7 @@ ScriptValue WebGLRenderingContextBase::getBufferParameter(
GLenum target,
GLenum pname) {
if (isContextLost() || !ValidateBufferTarget("getBufferParameter", target))
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
switch (pname) {
case GL_BUFFER_USAGE: {
@@ -2929,7 +2937,7 @@ ScriptValue WebGLRenderingContextBase::getBufferParameter(
default:
SynthesizeGLError(GL_INVALID_ENUM, "getBufferParameter",
"invalid parameter name");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
}
}
@@ -3033,7 +3041,7 @@ ScriptValue WebGLRenderingContextBase::getExtension(ScriptState* script_state,
ToV8(extension, script_state->GetContext()->Global(),
script_state->GetIsolate());
- return ScriptValue(script_state, wrapped_extension);
+ return ScriptValue(script_state->GetIsolate(), wrapped_extension);
}
ScriptValue WebGLRenderingContextBase::getFramebufferAttachmentParameter(
@@ -3044,18 +3052,18 @@ ScriptValue WebGLRenderingContextBase::getFramebufferAttachmentParameter(
if (isContextLost() ||
!ValidateFramebufferFuncParameters("getFramebufferAttachmentParameter",
target, attachment))
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
if (!framebuffer_binding_ || !framebuffer_binding_->Object()) {
SynthesizeGLError(GL_INVALID_OPERATION, "getFramebufferAttachmentParameter",
"no framebuffer bound");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
}
if (framebuffer_binding_ && framebuffer_binding_->Opaque()) {
SynthesizeGLError(GL_INVALID_OPERATION, "getFramebufferAttachmentParameter",
"cannot query parameters of an opaque framebuffer");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
}
WebGLSharedObject* attachment_object =
@@ -3067,7 +3075,7 @@ ScriptValue WebGLRenderingContextBase::getFramebufferAttachmentParameter(
// specifies INVALID_OPERATION.
SynthesizeGLError(GL_INVALID_ENUM, "getFramebufferAttachmentParameter",
"invalid parameter name");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
}
DCHECK(attachment_object->IsTexture() || attachment_object->IsRenderbuffer());
@@ -3093,11 +3101,11 @@ ScriptValue WebGLRenderingContextBase::getFramebufferAttachmentParameter(
}
SynthesizeGLError(GL_INVALID_ENUM, "getFramebufferAttachmentParameter",
"invalid parameter name for renderbuffer attachment");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
default:
SynthesizeGLError(GL_INVALID_ENUM, "getFramebufferAttachmentParameter",
"invalid parameter name for texture attachment");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
}
} else {
switch (pname) {
@@ -3114,11 +3122,11 @@ ScriptValue WebGLRenderingContextBase::getFramebufferAttachmentParameter(
}
SynthesizeGLError(GL_INVALID_ENUM, "getFramebufferAttachmentParameter",
"invalid parameter name for renderbuffer attachment");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
default:
SynthesizeGLError(GL_INVALID_ENUM, "getFramebufferAttachmentParameter",
"invalid parameter name for renderbuffer attachment");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
}
}
}
@@ -3126,7 +3134,7 @@ ScriptValue WebGLRenderingContextBase::getFramebufferAttachmentParameter(
ScriptValue WebGLRenderingContextBase::getParameter(ScriptState* script_state,
GLenum pname) {
if (isContextLost())
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
const int kIntZero = 0;
switch (pname) {
case GL_ACTIVE_TEXTURE:
@@ -3336,7 +3344,7 @@ ScriptValue WebGLRenderingContextBase::getParameter(ScriptState* script_state,
SynthesizeGLError(
GL_INVALID_ENUM, "getParameter",
"invalid parameter name, OES_standard_derivatives not enabled");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
case WebGLDebugRendererInfo::kUnmaskedRendererWebgl:
if (ExtensionEnabled(kWebGLDebugRendererInfoName))
return WebGLAny(script_state,
@@ -3344,7 +3352,7 @@ ScriptValue WebGLRenderingContextBase::getParameter(ScriptState* script_state,
SynthesizeGLError(
GL_INVALID_ENUM, "getParameter",
"invalid parameter name, WEBGL_debug_renderer_info not enabled");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
case WebGLDebugRendererInfo::kUnmaskedVendorWebgl:
if (ExtensionEnabled(kWebGLDebugRendererInfoName))
return WebGLAny(script_state,
@@ -3352,59 +3360,60 @@ ScriptValue WebGLRenderingContextBase::getParameter(ScriptState* script_state,
SynthesizeGLError(
GL_INVALID_ENUM, "getParameter",
"invalid parameter name, WEBGL_debug_renderer_info not enabled");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
case GL_VERTEX_ARRAY_BINDING_OES: // OES_vertex_array_object
if (ExtensionEnabled(kOESVertexArrayObjectName) || IsWebGL2OrHigher()) {
if (!bound_vertex_array_object_->IsDefaultObject())
return WebGLAny(script_state, bound_vertex_array_object_.Get());
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
}
SynthesizeGLError(
GL_INVALID_ENUM, "getParameter",
"invalid parameter name, OES_vertex_array_object not enabled");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
case GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT: // EXT_texture_filter_anisotropic
- if (ExtensionEnabled(kEXTTextureFilterAnisotropicName))
- return GetUnsignedIntParameter(script_state,
- GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT);
+ if (ExtensionEnabled(kEXTTextureFilterAnisotropicName)) {
+ return GetFloatParameter(script_state,
+ GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT);
+ }
SynthesizeGLError(
GL_INVALID_ENUM, "getParameter",
"invalid parameter name, EXT_texture_filter_anisotropic not enabled");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
case GL_MAX_COLOR_ATTACHMENTS_EXT: // EXT_draw_buffers BEGIN
if (ExtensionEnabled(kWebGLDrawBuffersName) || IsWebGL2OrHigher())
return WebGLAny(script_state, MaxColorAttachments());
SynthesizeGLError(
GL_INVALID_ENUM, "getParameter",
"invalid parameter name, WEBGL_draw_buffers not enabled");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
case GL_MAX_DRAW_BUFFERS_EXT:
if (ExtensionEnabled(kWebGLDrawBuffersName) || IsWebGL2OrHigher())
return WebGLAny(script_state, MaxDrawBuffers());
SynthesizeGLError(
GL_INVALID_ENUM, "getParameter",
"invalid parameter name, WEBGL_draw_buffers not enabled");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
case GL_TIMESTAMP_EXT:
if (ExtensionEnabled(kEXTDisjointTimerQueryName))
return WebGLAny(script_state, 0);
SynthesizeGLError(
GL_INVALID_ENUM, "getParameter",
"invalid parameter name, EXT_disjoint_timer_query not enabled");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
case GL_GPU_DISJOINT_EXT:
if (ExtensionEnabled(kEXTDisjointTimerQueryName))
return GetBooleanParameter(script_state, GL_GPU_DISJOINT_EXT);
SynthesizeGLError(
GL_INVALID_ENUM, "getParameter",
"invalid parameter name, EXT_disjoint_timer_query not enabled");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
case GL_MAX_VIEWS_OVR:
if (ExtensionEnabled(kOVRMultiview2Name))
return GetIntParameter(script_state, pname);
SynthesizeGLError(GL_INVALID_ENUM, "getParameter",
"invalid parameter name, OVR_multiview2 not enabled");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
default:
if ((ExtensionEnabled(kWebGLDrawBuffersName) || IsWebGL2OrHigher()) &&
pname >= GL_DRAW_BUFFER0_EXT &&
@@ -3418,7 +3427,7 @@ ScriptValue WebGLRenderingContextBase::getParameter(ScriptState* script_state,
}
SynthesizeGLError(GL_INVALID_ENUM, "getParameter",
"invalid parameter name");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
}
}
@@ -3427,7 +3436,7 @@ ScriptValue WebGLRenderingContextBase::getProgramParameter(
WebGLProgram* program,
GLenum pname) {
if (!ValidateWebGLProgramOrShader("getProgramParamter", program)) {
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
}
GLint value = 0;
@@ -3443,7 +3452,7 @@ ScriptValue WebGLRenderingContextBase::getProgramParameter(
if (!ExtensionEnabled(kKHRParallelShaderCompileName)) {
SynthesizeGLError(GL_INVALID_ENUM, "getProgramParameter",
"invalid parameter name");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
}
bool completed;
if (checkProgramCompletionQueryAvailable(program, &completed)) {
@@ -3455,7 +3464,7 @@ ScriptValue WebGLRenderingContextBase::getProgramParameter(
if (!IsWebGL2OrHigher()) {
SynthesizeGLError(GL_INVALID_ENUM, "getProgramParameter",
"invalid parameter name");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
}
FALLTHROUGH;
case GL_ATTACHED_SHADERS:
@@ -3467,7 +3476,7 @@ ScriptValue WebGLRenderingContextBase::getProgramParameter(
if (!IsWebGL2OrHigher()) {
SynthesizeGLError(GL_INVALID_ENUM, "getProgramParameter",
"invalid parameter name");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
}
ContextGL()->GetProgramiv(ObjectOrZero(program), pname, &value);
return WebGLAny(script_state, static_cast<unsigned>(value));
@@ -3480,7 +3489,7 @@ ScriptValue WebGLRenderingContextBase::getProgramParameter(
default:
SynthesizeGLError(GL_INVALID_ENUM, "getProgramParameter",
"invalid parameter name");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
}
}
@@ -3496,16 +3505,16 @@ ScriptValue WebGLRenderingContextBase::getRenderbufferParameter(
GLenum target,
GLenum pname) {
if (isContextLost())
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
if (target != GL_RENDERBUFFER) {
SynthesizeGLError(GL_INVALID_ENUM, "getRenderbufferParameter",
"invalid target");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
}
if (!renderbuffer_binding_ || !renderbuffer_binding_->Object()) {
SynthesizeGLError(GL_INVALID_OPERATION, "getRenderbufferParameter",
"no renderbuffer bound");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
}
GLint value = 0;
@@ -3514,7 +3523,7 @@ ScriptValue WebGLRenderingContextBase::getRenderbufferParameter(
if (!IsWebGL2OrHigher()) {
SynthesizeGLError(GL_INVALID_ENUM, "getRenderbufferParameter",
"invalid parameter name");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
}
FALLTHROUGH;
case GL_RENDERBUFFER_WIDTH:
@@ -3534,7 +3543,7 @@ ScriptValue WebGLRenderingContextBase::getRenderbufferParameter(
default:
SynthesizeGLError(GL_INVALID_ENUM, "getRenderbufferParameter",
"invalid parameter name");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
}
}
@@ -3543,7 +3552,7 @@ ScriptValue WebGLRenderingContextBase::getShaderParameter(
WebGLShader* shader,
GLenum pname) {
if (!ValidateWebGLProgramOrShader("getShaderParameter", shader)) {
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
}
GLint value = 0;
switch (pname) {
@@ -3556,7 +3565,7 @@ ScriptValue WebGLRenderingContextBase::getShaderParameter(
if (!ExtensionEnabled(kKHRParallelShaderCompileName)) {
SynthesizeGLError(GL_INVALID_ENUM, "getShaderParameter",
"invalid parameter name");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
}
ContextGL()->GetShaderiv(ObjectOrZero(shader), pname, &value);
return WebGLAny(script_state, static_cast<bool>(value));
@@ -3566,7 +3575,7 @@ ScriptValue WebGLRenderingContextBase::getShaderParameter(
default:
SynthesizeGLError(GL_INVALID_ENUM, "getShaderParameter",
"invalid parameter name");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
}
}
@@ -3637,9 +3646,9 @@ ScriptValue WebGLRenderingContextBase::getTexParameter(
GLenum target,
GLenum pname) {
if (isContextLost())
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
if (!ValidateTextureBinding("getTexParameter", target))
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
switch (pname) {
case GL_TEXTURE_MAG_FILTER:
case GL_TEXTURE_MIN_FILTER:
@@ -3658,11 +3667,11 @@ ScriptValue WebGLRenderingContextBase::getTexParameter(
SynthesizeGLError(
GL_INVALID_ENUM, "getTexParameter",
"invalid parameter name, EXT_texture_filter_anisotropic not enabled");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
default:
SynthesizeGLError(GL_INVALID_ENUM, "getTexParameter",
"invalid parameter name");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
}
}
@@ -3671,12 +3680,12 @@ ScriptValue WebGLRenderingContextBase::getUniform(
WebGLProgram* program,
const WebGLUniformLocation* uniform_location) {
if (!ValidateWebGLProgramOrShader("getUniform", program))
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
DCHECK(uniform_location);
if (uniform_location->Program() != program) {
SynthesizeGLError(GL_INVALID_OPERATION, "getUniform",
"no uniformlocation or not valid for this program");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
}
GLint location = uniform_location->Location();
@@ -3685,11 +3694,11 @@ ScriptValue WebGLRenderingContextBase::getUniform(
ContextGL()->GetProgramiv(program_id, GL_ACTIVE_UNIFORM_MAX_LENGTH,
&max_name_length);
if (max_name_length < 0)
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
if (max_name_length == 0) {
SynthesizeGLError(GL_INVALID_VALUE, "getUniform",
"no active uniforms exist");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
}
// FIXME: make this more efficient using WebGLUniformLocation and caching
@@ -3707,7 +3716,7 @@ ScriptValue WebGLRenderingContextBase::getUniform(
&size, &type,
reinterpret_cast<GLchar*>(name_ptr));
if (size < 0)
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
String name(name_impl->Substring(0, name_length));
StringBuilder name_builder;
// Strip "[0]" from the name if it's an array.
@@ -3802,7 +3811,7 @@ ScriptValue WebGLRenderingContextBase::getUniform(
SynthesizeGLError(
GL_INVALID_VALUE, "getUniform",
"unhandled type, WEBGL_video_texture extension not enabled");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
}
base_type = GL_INT;
length = 1;
@@ -3812,7 +3821,7 @@ ScriptValue WebGLRenderingContextBase::getUniform(
// Can't handle this type
SynthesizeGLError(GL_INVALID_VALUE, "getUniform",
"unhandled type");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
}
// handle GLenums for WebGL 2.0 or higher
switch (type) {
@@ -3887,7 +3896,7 @@ ScriptValue WebGLRenderingContextBase::getUniform(
if (context_type_ != Platform::kWebGL2ComputeContextType) {
SynthesizeGLError(GL_INVALID_VALUE, "getUniform",
"unhandled type");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
}
base_type = GL_INT;
length = 1;
@@ -3897,7 +3906,7 @@ ScriptValue WebGLRenderingContextBase::getUniform(
// Can't handle this type
SynthesizeGLError(GL_INVALID_VALUE, "getUniform",
"unhandled type");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
}
}
switch (base_type) {
@@ -3944,7 +3953,7 @@ ScriptValue WebGLRenderingContextBase::getUniform(
// If we get here, something went wrong in our unfortunately complex logic
// above
SynthesizeGLError(GL_INVALID_VALUE, "getUniform", "unknown error");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
}
WebGLUniformLocation* WebGLRenderingContextBase::getUniformLocation(
@@ -3975,11 +3984,11 @@ ScriptValue WebGLRenderingContextBase::getVertexAttrib(
GLuint index,
GLenum pname) {
if (isContextLost())
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
if (index >= max_vertex_attribs_) {
SynthesizeGLError(GL_INVALID_VALUE, "getVertexAttrib",
"index out of range");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
}
if ((ExtensionEnabled(kANGLEInstancedArraysName) || IsWebGL2OrHigher()) &&
@@ -4033,7 +4042,7 @@ ScriptValue WebGLRenderingContextBase::getVertexAttrib(
NOTREACHED();
break;
}
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
}
case GL_VERTEX_ATTRIB_ARRAY_INTEGER:
if (IsWebGL2OrHigher()) {
@@ -4045,7 +4054,7 @@ ScriptValue WebGLRenderingContextBase::getVertexAttrib(
default:
SynthesizeGLError(GL_INVALID_ENUM, "getVertexAttrib",
"invalid parameter name");
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
}
}
@@ -5455,9 +5464,13 @@ void WebGLRenderingContextBase::TexImageHelperCanvasRenderingContextHost(
// TODO(crbug.com/612542): Implement GPU-to-GPU copy path for more
// cases, like copying to layers of 3D textures, and elements of
// 2D texture arrays.
+ bool flip_y = unpack_flip_y_;
+ if (is_origin_top_left_ && is_webgl_canvas)
+ flip_y = !flip_y;
+
TexImageImpl(function_id, target, level, internalformat, xoffset, yoffset,
zoffset, format, type, image.get(),
- WebGLImageConversion::kHtmlDomCanvas, unpack_flip_y_,
+ WebGLImageConversion::kHtmlDomCanvas, flip_y,
unpack_premultiply_alpha_, source_sub_rectangle, depth,
unpack_image_height);
}
@@ -5722,7 +5735,7 @@ void WebGLRenderingContextBase::TexImageHelperImageBitmap(
SkPixmap pixmap;
uint8_t* pixel_data_ptr = nullptr;
- scoped_refptr<Uint8Array> pixel_data;
+ Vector<uint8_t> pixel_data;
// In the case where an ImageBitmap is not texture backed, peekPixels() always
// succeed. However, when it is texture backed and !canUseTexImageByGPU, we
// do a GPU read back.
@@ -5732,7 +5745,7 @@ void WebGLRenderingContextBase::TexImageHelperImageBitmap(
} else {
pixel_data = bitmap->CopyBitmapData(
bitmap->IsPremultiplied() ? kPremultiplyAlpha : kUnpremultiplyAlpha);
- pixel_data_ptr = pixel_data->Data();
+ pixel_data_ptr = pixel_data.data();
}
Vector<uint8_t> data;
bool need_conversion = true;
@@ -6803,7 +6816,7 @@ ScriptValue WebGLRenderingContextBase::GetIntParameter(
if (value == 0) {
// This indicates read framebuffer is incomplete and an
// INVALID_OPERATION has been generated.
- return ScriptValue::CreateNull(script_state);
+ return ScriptValue::CreateNull(script_state->GetIsolate());
}
break;
default:
@@ -7502,9 +7515,12 @@ void WebGLRenderingContextBase::PrintGLErrorToConsole(const String& message) {
}
void WebGLRenderingContextBase::PrintWarningToConsole(const String& message) {
- Host()->GetTopExecutionContext()->AddConsoleMessage(
- ConsoleMessage::Create(mojom::ConsoleMessageSource::kRendering,
- mojom::ConsoleMessageLevel::kWarning, message));
+ blink::ExecutionContext* context = Host()->GetTopExecutionContext();
+ if (context) {
+ context->AddConsoleMessage(
+ ConsoleMessage::Create(mojom::ConsoleMessageSource::kRendering,
+ mojom::ConsoleMessageLevel::kWarning, message));
+ }
}
bool WebGLRenderingContextBase::ValidateFramebufferFuncParameters(