OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2009 Apple Inc. All rights reserved. | 2 * Copyright (C) 2009 Apple Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
489 | 489 |
490 ~ScopedFramebufferRestorer() | 490 ~ScopedFramebufferRestorer() |
491 { | 491 { |
492 m_context->restoreCurrentFramebuffer(); | 492 m_context->restoreCurrentFramebuffer(); |
493 } | 493 } |
494 | 494 |
495 private: | 495 private: |
496 RawPtrWillBeMember<WebGLRenderingContextBase> m_context; | 496 RawPtrWillBeMember<WebGLRenderingContextBase> m_context; |
497 }; | 497 }; |
498 | 498 |
499 class WebGLRenderingContextLostCallback final : public NoBaseWillBeGarbageCollec
tedFinalized<WebGLRenderingContextLostCallback>, public blink::WebGraphicsContex
t3D::WebGraphicsContextLostCallback { | 499 class WebGLRenderingContextLostCallback final : public NoBaseWillBeGarbageCollec
tedFinalized<WebGLRenderingContextLostCallback>, public WebGraphicsContext3D::We
bGraphicsContextLostCallback { |
500 WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED(WebGLRenderingContextLostCallback); | 500 WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED(WebGLRenderingContextLostCallback); |
501 public: | 501 public: |
502 static PassOwnPtrWillBeRawPtr<WebGLRenderingContextLostCallback> create(WebG
LRenderingContextBase* context) | 502 static PassOwnPtrWillBeRawPtr<WebGLRenderingContextLostCallback> create(WebG
LRenderingContextBase* context) |
503 { | 503 { |
504 return adoptPtrWillBeNoop(new WebGLRenderingContextLostCallback(context)
); | 504 return adoptPtrWillBeNoop(new WebGLRenderingContextLostCallback(context)
); |
505 } | 505 } |
506 | 506 |
507 virtual ~WebGLRenderingContextLostCallback() { } | 507 virtual ~WebGLRenderingContextLostCallback() { } |
508 | 508 |
509 virtual void onContextLost() { m_context->forceLostContext(WebGLRenderingCon
textBase::RealLostContext, WebGLRenderingContextBase::Auto); } | 509 virtual void onContextLost() { m_context->forceLostContext(WebGLRenderingCon
textBase::RealLostContext, WebGLRenderingContextBase::Auto); } |
510 | 510 |
511 DEFINE_INLINE_TRACE() | 511 DEFINE_INLINE_TRACE() |
512 { | 512 { |
513 visitor->trace(m_context); | 513 visitor->trace(m_context); |
514 } | 514 } |
515 | 515 |
516 private: | 516 private: |
517 explicit WebGLRenderingContextLostCallback(WebGLRenderingContextBase* contex
t) | 517 explicit WebGLRenderingContextLostCallback(WebGLRenderingContextBase* contex
t) |
518 : m_context(context) { } | 518 : m_context(context) { } |
519 | 519 |
520 RawPtrWillBeMember<WebGLRenderingContextBase> m_context; | 520 RawPtrWillBeMember<WebGLRenderingContextBase> m_context; |
521 }; | 521 }; |
522 | 522 |
523 class WebGLRenderingContextErrorMessageCallback final : public NoBaseWillBeGarba
geCollectedFinalized<WebGLRenderingContextErrorMessageCallback>, public blink::W
ebGraphicsContext3D::WebGraphicsErrorMessageCallback { | 523 class WebGLRenderingContextErrorMessageCallback final : public NoBaseWillBeGarba
geCollectedFinalized<WebGLRenderingContextErrorMessageCallback>, public WebGraph
icsContext3D::WebGraphicsErrorMessageCallback { |
524 WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED(WebGLRenderingContextErrorMessageCal
lback); | 524 WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED(WebGLRenderingContextErrorMessageCal
lback); |
525 public: | 525 public: |
526 static PassOwnPtrWillBeRawPtr<WebGLRenderingContextErrorMessageCallback> cre
ate(WebGLRenderingContextBase* context) | 526 static PassOwnPtrWillBeRawPtr<WebGLRenderingContextErrorMessageCallback> cre
ate(WebGLRenderingContextBase* context) |
527 { | 527 { |
528 return adoptPtrWillBeNoop(new WebGLRenderingContextErrorMessageCallback(
context)); | 528 return adoptPtrWillBeNoop(new WebGLRenderingContextErrorMessageCallback(
context)); |
529 } | 529 } |
530 | 530 |
531 virtual ~WebGLRenderingContextErrorMessageCallback() { } | 531 virtual ~WebGLRenderingContextErrorMessageCallback() { } |
532 | 532 |
533 virtual void onErrorMessage(const blink::WebString& message, blink::WGC3Dint
) | 533 virtual void onErrorMessage(const WebString& message, WGC3Dint) |
534 { | 534 { |
535 if (m_context->m_synthesizedErrorsToConsole) | 535 if (m_context->m_synthesizedErrorsToConsole) |
536 m_context->printGLErrorToConsole(message); | 536 m_context->printGLErrorToConsole(message); |
537 InspectorInstrumentation::didFireWebGLErrorOrWarning(m_context->canvas()
, message); | 537 InspectorInstrumentation::didFireWebGLErrorOrWarning(m_context->canvas()
, message); |
538 } | 538 } |
539 | 539 |
540 DEFINE_INLINE_TRACE() | 540 DEFINE_INLINE_TRACE() |
541 { | 541 { |
542 visitor->trace(m_context); | 542 visitor->trace(m_context); |
543 } | 543 } |
544 | 544 |
545 private: | 545 private: |
546 explicit WebGLRenderingContextErrorMessageCallback(WebGLRenderingContextBase
* context) | 546 explicit WebGLRenderingContextErrorMessageCallback(WebGLRenderingContextBase
* context) |
547 : m_context(context) { } | 547 : m_context(context) { } |
548 | 548 |
549 RawPtrWillBeMember<WebGLRenderingContextBase> m_context; | 549 RawPtrWillBeMember<WebGLRenderingContextBase> m_context; |
550 }; | 550 }; |
551 | 551 |
552 PassOwnPtr<blink::WebGraphicsContext3D> WebGLRenderingContextBase::createWebGrap
hicsContext3D(HTMLCanvasElement* canvas, WebGLContextAttributes attributes, unsi
gned webGLVersion) | 552 PassOwnPtr<WebGraphicsContext3D> WebGLRenderingContextBase::createWebGraphicsCon
text3D(HTMLCanvasElement* canvas, WebGLContextAttributes attributes, unsigned we
bGLVersion) |
553 { | 553 { |
554 Document& document = canvas->document(); | 554 Document& document = canvas->document(); |
555 LocalFrame* frame = document.frame(); | 555 LocalFrame* frame = document.frame(); |
556 if (!frame) { | 556 if (!frame) { |
557 canvas->dispatchEvent(WebGLContextEvent::create(EventTypeNames::webglcon
textcreationerror, false, true, "Web page was not allowed to create a WebGL cont
ext.")); | 557 canvas->dispatchEvent(WebGLContextEvent::create(EventTypeNames::webglcon
textcreationerror, false, true, "Web page was not allowed to create a WebGL cont
ext.")); |
558 return nullptr; | 558 return nullptr; |
559 } | 559 } |
560 Settings* settings = frame->settings(); | 560 Settings* settings = frame->settings(); |
561 | 561 |
562 // The FrameLoaderClient might block creation of a new WebGL context despite
the page settings; in | 562 // The FrameLoaderClient might block creation of a new WebGL context despite
the page settings; in |
563 // particular, if WebGL contexts were lost one or more times via the GL_ARB_
robustness extension. | 563 // particular, if WebGL contexts were lost one or more times via the GL_ARB_
robustness extension. |
564 if (!frame->loader().client()->allowWebGL(settings && settings->webGLEnabled
())) { | 564 if (!frame->loader().client()->allowWebGL(settings && settings->webGLEnabled
())) { |
565 canvas->dispatchEvent(WebGLContextEvent::create(EventTypeNames::webglcon
textcreationerror, false, true, "Web page was not allowed to create a WebGL cont
ext.")); | 565 canvas->dispatchEvent(WebGLContextEvent::create(EventTypeNames::webglcon
textcreationerror, false, true, "Web page was not allowed to create a WebGL cont
ext.")); |
566 return nullptr; | 566 return nullptr; |
567 } | 567 } |
568 | 568 |
569 blink::WebGraphicsContext3D::Attributes wgc3dAttributes = toWebGraphicsConte
xt3DAttributes(attributes, document.topDocument().url().string(), settings, webG
LVersion); | 569 WebGraphicsContext3D::Attributes wgc3dAttributes = toWebGraphicsContext3DAtt
ributes(attributes, document.topDocument().url().string(), settings, webGLVersio
n); |
570 blink::WebGLInfo glInfo; | 570 WebGLInfo glInfo; |
571 OwnPtr<blink::WebGraphicsContext3D> context = adoptPtr(blink::Platform::curr
ent()->createOffscreenGraphicsContext3D(wgc3dAttributes, 0, &glInfo)); | 571 OwnPtr<WebGraphicsContext3D> context = adoptPtr(Platform::current()->createO
ffscreenGraphicsContext3D(wgc3dAttributes, 0, &glInfo)); |
572 if (!context || shouldFailContextCreationForTesting) { | 572 if (!context || shouldFailContextCreationForTesting) { |
573 shouldFailContextCreationForTesting = false; | 573 shouldFailContextCreationForTesting = false; |
574 String statusMessage; | 574 String statusMessage; |
575 if (!glInfo.contextInfoCollectionFailure.isEmpty()) { | 575 if (!glInfo.contextInfoCollectionFailure.isEmpty()) { |
576 statusMessage.append("Could not create a WebGL context. "); | 576 statusMessage.append("Could not create a WebGL context. "); |
577 statusMessage.append(glInfo.contextInfoCollectionFailure); | 577 statusMessage.append(glInfo.contextInfoCollectionFailure); |
578 String vendorId = String::number(glInfo.vendorId); | 578 String vendorId = String::number(glInfo.vendorId); |
579 String deviceId = String::number(glInfo.deviceId); | 579 String deviceId = String::number(glInfo.deviceId); |
580 if (vendorId.isEmpty()) | 580 if (vendorId.isEmpty()) |
581 statusMessage.append("VendorId = Not Available"); | 581 statusMessage.append("VendorId = Not Available"); |
(...skipping 30 matching lines...) Expand all Loading... |
612 } | 612 } |
613 | 613 |
614 return context.release(); | 614 return context.release(); |
615 } | 615 } |
616 | 616 |
617 void WebGLRenderingContextBase::forceNextWebGLContextCreationToFail() | 617 void WebGLRenderingContextBase::forceNextWebGLContextCreationToFail() |
618 { | 618 { |
619 shouldFailContextCreationForTesting = true; | 619 shouldFailContextCreationForTesting = true; |
620 } | 620 } |
621 | 621 |
622 WebGLRenderingContextBase::WebGLRenderingContextBase(HTMLCanvasElement* passedCa
nvas, PassOwnPtr<blink::WebGraphicsContext3D> context, const WebGLContextAttribu
tes& requestedAttributes) | 622 WebGLRenderingContextBase::WebGLRenderingContextBase(HTMLCanvasElement* passedCa
nvas, PassOwnPtr<WebGraphicsContext3D> context, const WebGLContextAttributes& re
questedAttributes) |
623 : CanvasRenderingContext(passedCanvas) | 623 : CanvasRenderingContext(passedCanvas) |
624 , m_contextLostMode(NotLostContext) | 624 , m_contextLostMode(NotLostContext) |
625 , m_autoRecoveryMethod(Manual) | 625 , m_autoRecoveryMethod(Manual) |
626 , m_dispatchContextLostEventTimer(this, &WebGLRenderingContextBase::dispatch
ContextLostEvent) | 626 , m_dispatchContextLostEventTimer(this, &WebGLRenderingContextBase::dispatch
ContextLostEvent) |
627 , m_restoreAllowed(false) | 627 , m_restoreAllowed(false) |
628 , m_restoreTimer(this, &WebGLRenderingContextBase::maybeRestoreContext) | 628 , m_restoreTimer(this, &WebGLRenderingContextBase::maybeRestoreContext) |
629 , m_generatedImageCache(4) | 629 , m_generatedImageCache(4) |
630 , m_requestedAttributes(requestedAttributes) | 630 , m_requestedAttributes(requestedAttributes) |
631 , m_synthesizedErrorsToConsole(true) | 631 , m_synthesizedErrorsToConsole(true) |
632 , m_numGLErrorsToConsoleAllowed(maxGLErrorsAllowedToConsole) | 632 , m_numGLErrorsToConsoleAllowed(maxGLErrorsAllowedToConsole) |
(...skipping 16 matching lines...) Expand all Loading... |
649 #if ENABLE(OILPAN) | 649 #if ENABLE(OILPAN) |
650 m_sharedWebGraphicsContext3D = WebGLSharedWebGraphicsContext3D::create(buffe
r.release()); | 650 m_sharedWebGraphicsContext3D = WebGLSharedWebGraphicsContext3D::create(buffe
r.release()); |
651 #else | 651 #else |
652 m_drawingBuffer = buffer.release(); | 652 m_drawingBuffer = buffer.release(); |
653 #endif | 653 #endif |
654 | 654 |
655 drawingBuffer()->bind(); | 655 drawingBuffer()->bind(); |
656 setupFlags(); | 656 setupFlags(); |
657 } | 657 } |
658 | 658 |
659 PassRefPtr<DrawingBuffer> WebGLRenderingContextBase::createDrawingBuffer(PassOwn
Ptr<blink::WebGraphicsContext3D> context) | 659 PassRefPtr<DrawingBuffer> WebGLRenderingContextBase::createDrawingBuffer(PassOwn
Ptr<WebGraphicsContext3D> context) |
660 { | 660 { |
661 blink::WebGraphicsContext3D::Attributes attrs; | 661 WebGraphicsContext3D::Attributes attrs; |
662 attrs.alpha = m_requestedAttributes.alpha(); | 662 attrs.alpha = m_requestedAttributes.alpha(); |
663 attrs.depth = m_requestedAttributes.depth(); | 663 attrs.depth = m_requestedAttributes.depth(); |
664 attrs.stencil = m_requestedAttributes.stencil(); | 664 attrs.stencil = m_requestedAttributes.stencil(); |
665 attrs.antialias = m_requestedAttributes.antialias(); | 665 attrs.antialias = m_requestedAttributes.antialias(); |
666 attrs.premultipliedAlpha = m_requestedAttributes.premultipliedAlpha(); | 666 attrs.premultipliedAlpha = m_requestedAttributes.premultipliedAlpha(); |
667 DrawingBuffer::PreserveDrawingBuffer preserve = m_requestedAttributes.preser
veDrawingBuffer() ? DrawingBuffer::Preserve : DrawingBuffer::Discard; | 667 DrawingBuffer::PreserveDrawingBuffer preserve = m_requestedAttributes.preser
veDrawingBuffer() ? DrawingBuffer::Preserve : DrawingBuffer::Discard; |
668 return DrawingBuffer::create(context, clampedCanvasSize(), preserve, attrs); | 668 return DrawingBuffer::create(context, clampedCanvasSize(), preserve, attrs); |
669 } | 669 } |
670 | 670 |
671 void WebGLRenderingContextBase::initializeNewContext() | 671 void WebGLRenderingContextBase::initializeNewContext() |
(...skipping 1438 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2110 if (needToResetMinFilter) | 2110 if (needToResetMinFilter) |
2111 webContext()->texParameteri(target, GL_TEXTURE_MIN_FILTER, tex->getMinFi
lter()); | 2111 webContext()->texParameteri(target, GL_TEXTURE_MIN_FILTER, tex->getMinFi
lter()); |
2112 #endif | 2112 #endif |
2113 tex->generateMipmapLevelInfo(); | 2113 tex->generateMipmapLevelInfo(); |
2114 } | 2114 } |
2115 | 2115 |
2116 PassRefPtrWillBeRawPtr<WebGLActiveInfo> WebGLRenderingContextBase::getActiveAttr
ib(WebGLProgram* program, GLuint index) | 2116 PassRefPtrWillBeRawPtr<WebGLActiveInfo> WebGLRenderingContextBase::getActiveAttr
ib(WebGLProgram* program, GLuint index) |
2117 { | 2117 { |
2118 if (isContextLost() || !validateWebGLObject("getActiveAttrib", program)) | 2118 if (isContextLost() || !validateWebGLObject("getActiveAttrib", program)) |
2119 return nullptr; | 2119 return nullptr; |
2120 blink::WebGraphicsContext3D::ActiveInfo info; | 2120 WebGraphicsContext3D::ActiveInfo info; |
2121 if (!webContext()->getActiveAttrib(objectOrZero(program), index, info)) | 2121 if (!webContext()->getActiveAttrib(objectOrZero(program), index, info)) |
2122 return nullptr; | 2122 return nullptr; |
2123 return WebGLActiveInfo::create(info.name, info.type, info.size); | 2123 return WebGLActiveInfo::create(info.name, info.type, info.size); |
2124 } | 2124 } |
2125 | 2125 |
2126 PassRefPtrWillBeRawPtr<WebGLActiveInfo> WebGLRenderingContextBase::getActiveUnif
orm(WebGLProgram* program, GLuint index) | 2126 PassRefPtrWillBeRawPtr<WebGLActiveInfo> WebGLRenderingContextBase::getActiveUnif
orm(WebGLProgram* program, GLuint index) |
2127 { | 2127 { |
2128 if (isContextLost() || !validateWebGLObject("getActiveUniform", program)) | 2128 if (isContextLost() || !validateWebGLObject("getActiveUniform", program)) |
2129 return nullptr; | 2129 return nullptr; |
2130 blink::WebGraphicsContext3D::ActiveInfo info; | 2130 WebGraphicsContext3D::ActiveInfo info; |
2131 if (!webContext()->getActiveUniform(objectOrZero(program), index, info)) | 2131 if (!webContext()->getActiveUniform(objectOrZero(program), index, info)) |
2132 return nullptr; | 2132 return nullptr; |
2133 return WebGLActiveInfo::create(info.name, info.type, info.size); | 2133 return WebGLActiveInfo::create(info.name, info.type, info.size); |
2134 } | 2134 } |
2135 | 2135 |
2136 Nullable<WillBeHeapVector<RefPtrWillBeMember<WebGLShader>>> WebGLRenderingContex
tBase::getAttachedShaders(WebGLProgram* program) | 2136 Nullable<WillBeHeapVector<RefPtrWillBeMember<WebGLShader>>> WebGLRenderingContex
tBase::getAttachedShaders(WebGLProgram* program) |
2137 { | 2137 { |
2138 if (isContextLost() || !validateWebGLObject("getAttachedShaders", program)) | 2138 if (isContextLost() || !validateWebGLObject("getAttachedShaders", program)) |
2139 return nullptr; | 2139 return nullptr; |
2140 | 2140 |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2209 } | 2209 } |
2210 } | 2210 } |
2211 | 2211 |
2212 void WebGLRenderingContextBase::getContextAttributes(Nullable<WebGLContextAttrib
utes>& result) | 2212 void WebGLRenderingContextBase::getContextAttributes(Nullable<WebGLContextAttrib
utes>& result) |
2213 { | 2213 { |
2214 if (isContextLost()) | 2214 if (isContextLost()) |
2215 return; | 2215 return; |
2216 result.set(m_requestedAttributes); | 2216 result.set(m_requestedAttributes); |
2217 // Some requested attributes may not be honored, so we need to query the und
erlying | 2217 // Some requested attributes may not be honored, so we need to query the und
erlying |
2218 // context/drawing buffer and adjust accordingly. | 2218 // context/drawing buffer and adjust accordingly. |
2219 blink::WebGraphicsContext3D::Attributes attrs = drawingBuffer()->getActualAt
tributes(); | 2219 WebGraphicsContext3D::Attributes attrs = drawingBuffer()->getActualAttribute
s(); |
2220 if (m_requestedAttributes.depth() && !attrs.depth) | 2220 if (m_requestedAttributes.depth() && !attrs.depth) |
2221 result.get().setDepth(false); | 2221 result.get().setDepth(false); |
2222 if (m_requestedAttributes.stencil() && !attrs.stencil) | 2222 if (m_requestedAttributes.stencil() && !attrs.stencil) |
2223 result.get().setStencil(false); | 2223 result.get().setStencil(false); |
2224 result.get().setAntialias(drawingBuffer()->multisample()); | 2224 result.get().setAntialias(drawingBuffer()->multisample()); |
2225 } | 2225 } |
2226 | 2226 |
2227 GLenum WebGLRenderingContextBase::getError() | 2227 GLenum WebGLRenderingContextBase::getError() |
2228 { | 2228 { |
2229 if (m_lostContextErrors.size()) { | 2229 if (m_lostContextErrors.size()) { |
(...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2807 if (!uniformLocation || uniformLocation->program() != program) { | 2807 if (!uniformLocation || uniformLocation->program() != program) { |
2808 synthesizeGLError(GL_INVALID_OPERATION, "getUniform", "no uniformlocatio
n or not valid for this program"); | 2808 synthesizeGLError(GL_INVALID_OPERATION, "getUniform", "no uniformlocatio
n or not valid for this program"); |
2809 return ScriptValue::createNull(scriptState); | 2809 return ScriptValue::createNull(scriptState); |
2810 } | 2810 } |
2811 GLint location = uniformLocation->location(); | 2811 GLint location = uniformLocation->location(); |
2812 | 2812 |
2813 // FIXME: make this more efficient using WebGLUniformLocation and caching ty
pes in it | 2813 // FIXME: make this more efficient using WebGLUniformLocation and caching ty
pes in it |
2814 GLint activeUniforms = 0; | 2814 GLint activeUniforms = 0; |
2815 webContext()->getProgramiv(objectOrZero(program), GL_ACTIVE_UNIFORMS, &activ
eUniforms); | 2815 webContext()->getProgramiv(objectOrZero(program), GL_ACTIVE_UNIFORMS, &activ
eUniforms); |
2816 for (GLint i = 0; i < activeUniforms; i++) { | 2816 for (GLint i = 0; i < activeUniforms; i++) { |
2817 blink::WebGraphicsContext3D::ActiveInfo info; | 2817 WebGraphicsContext3D::ActiveInfo info; |
2818 if (!webContext()->getActiveUniform(objectOrZero(program), i, info)) | 2818 if (!webContext()->getActiveUniform(objectOrZero(program), i, info)) |
2819 return ScriptValue::createNull(scriptState); | 2819 return ScriptValue::createNull(scriptState); |
2820 String name = info.name; | 2820 String name = info.name; |
2821 StringBuilder nameBuilder; | 2821 StringBuilder nameBuilder; |
2822 // Strip "[0]" from the name if it's an array. | 2822 // Strip "[0]" from the name if it's an array. |
2823 if (info.size > 1 && name.endsWith("[0]")) | 2823 if (info.size > 1 && name.endsWith("[0]")) |
2824 info.name = name.left(name.length() - 3); | 2824 info.name = name.left(name.length() - 3); |
2825 // If it's an array, we need to iterate through each element, appending
"[index]" to the name. | 2825 // If it's an array, we need to iterate through each element, appending
"[index]" to the name. |
2826 for (GLint index = 0; index < info.size; ++index) { | 2826 for (GLint index = 0; index < info.size; ++index) { |
2827 nameBuilder.clear(); | 2827 nameBuilder.clear(); |
(...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3292 break; | 3292 break; |
3293 case GL_HALF_FLOAT_OES: | 3293 case GL_HALF_FLOAT_OES: |
3294 expectedViewType = DOMArrayBufferView::TypeUint16; | 3294 expectedViewType = DOMArrayBufferView::TypeUint16; |
3295 break; | 3295 break; |
3296 default: | 3296 default: |
3297 synthesizeGLError(GL_INVALID_ENUM, "readPixels", "invalid type"); | 3297 synthesizeGLError(GL_INVALID_ENUM, "readPixels", "invalid type"); |
3298 return; | 3298 return; |
3299 } | 3299 } |
3300 if (format != GL_RGBA || type != GL_UNSIGNED_BYTE) { | 3300 if (format != GL_RGBA || type != GL_UNSIGNED_BYTE) { |
3301 // Check against the implementation color read format and type. | 3301 // Check against the implementation color read format and type. |
3302 blink::WGC3Dint implFormat = 0, implType = 0; | 3302 WGC3Dint implFormat = 0, implType = 0; |
3303 webContext()->getIntegerv(GL_IMPLEMENTATION_COLOR_READ_FORMAT, &implForm
at); | 3303 webContext()->getIntegerv(GL_IMPLEMENTATION_COLOR_READ_FORMAT, &implForm
at); |
3304 webContext()->getIntegerv(GL_IMPLEMENTATION_COLOR_READ_TYPE, &implType); | 3304 webContext()->getIntegerv(GL_IMPLEMENTATION_COLOR_READ_TYPE, &implType); |
3305 if (!implFormat || !implType || format != static_cast<GLenum>(implFormat
) || type != static_cast<GLenum>(implType)) { | 3305 if (!implFormat || !implType || format != static_cast<GLenum>(implFormat
) || type != static_cast<GLenum>(implType)) { |
3306 synthesizeGLError(GL_INVALID_OPERATION, "readPixels", "format/type n
ot RGBA/UNSIGNED_BYTE or implementation-defined values"); | 3306 synthesizeGLError(GL_INVALID_OPERATION, "readPixels", "format/type n
ot RGBA/UNSIGNED_BYTE or implementation-defined values"); |
3307 return; | 3307 return; |
3308 } | 3308 } |
3309 } | 3309 } |
3310 // Validate array type against pixel type. | 3310 // Validate array type against pixel type. |
3311 if (pixels->type() != expectedViewType) { | 3311 if (pixels->type() != expectedViewType) { |
3312 synthesizeGLError(GL_INVALID_OPERATION, "readPixels", "ArrayBufferView w
as the wrong type for the pixel format"); | 3312 synthesizeGLError(GL_INVALID_OPERATION, "readPixels", "ArrayBufferView w
as the wrong type for the pixel format"); |
(...skipping 1322 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4635 if (!m_restoreAllowed) { | 4635 if (!m_restoreAllowed) { |
4636 if (m_contextLostMode == WebGLLoseContextLostContext) | 4636 if (m_contextLostMode == WebGLLoseContextLostContext) |
4637 synthesizeGLError(GL_INVALID_OPERATION, "restoreContext", "context r
estoration not allowed"); | 4637 synthesizeGLError(GL_INVALID_OPERATION, "restoreContext", "context r
estoration not allowed"); |
4638 return; | 4638 return; |
4639 } | 4639 } |
4640 | 4640 |
4641 if (!m_restoreTimer.isActive()) | 4641 if (!m_restoreTimer.isActive()) |
4642 m_restoreTimer.startOneShot(0, FROM_HERE); | 4642 m_restoreTimer.startOneShot(0, FROM_HERE); |
4643 } | 4643 } |
4644 | 4644 |
4645 blink::WebLayer* WebGLRenderingContextBase::platformLayer() const | 4645 WebLayer* WebGLRenderingContextBase::platformLayer() const |
4646 { | 4646 { |
4647 return isContextLost() ? 0 : drawingBuffer()->platformLayer(); | 4647 return isContextLost() ? 0 : drawingBuffer()->platformLayer(); |
4648 } | 4648 } |
4649 | 4649 |
4650 void WebGLRenderingContextBase::setFilterQuality(SkFilterQuality filterQuality) | 4650 void WebGLRenderingContextBase::setFilterQuality(SkFilterQuality filterQuality) |
4651 { | 4651 { |
4652 if (!isContextLost() && drawingBuffer()) { | 4652 if (!isContextLost() && drawingBuffer()) { |
4653 drawingBuffer()->setFilterQuality(filterQuality); | 4653 drawingBuffer()->setFilterQuality(filterQuality); |
4654 } | 4654 } |
4655 } | 4655 } |
(...skipping 1211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5867 // If the context was lost due to RealLostContext, we need to destroy the ol
d DrawingBuffer before creating new DrawingBuffer to ensure resource budget enou
gh. | 5867 // If the context was lost due to RealLostContext, we need to destroy the ol
d DrawingBuffer before creating new DrawingBuffer to ensure resource budget enou
gh. |
5868 if (drawingBuffer()) { | 5868 if (drawingBuffer()) { |
5869 #if ENABLE(OILPAN) | 5869 #if ENABLE(OILPAN) |
5870 m_sharedWebGraphicsContext3D->dispose(); | 5870 m_sharedWebGraphicsContext3D->dispose(); |
5871 #else | 5871 #else |
5872 m_drawingBuffer->beginDestruction(); | 5872 m_drawingBuffer->beginDestruction(); |
5873 m_drawingBuffer.clear(); | 5873 m_drawingBuffer.clear(); |
5874 #endif | 5874 #endif |
5875 } | 5875 } |
5876 | 5876 |
5877 blink::WebGraphicsContext3D::Attributes attributes = toWebGraphicsContext3DA
ttributes(m_requestedAttributes, canvas()->document().topDocument().url().string
(), settings, version()); | 5877 WebGraphicsContext3D::Attributes attributes = toWebGraphicsContext3DAttribut
es(m_requestedAttributes, canvas()->document().topDocument().url().string(), set
tings, version()); |
5878 OwnPtr<blink::WebGraphicsContext3D> context = adoptPtr(blink::Platform::curr
ent()->createOffscreenGraphicsContext3D(attributes, 0)); | 5878 OwnPtr<WebGraphicsContext3D> context = adoptPtr(Platform::current()->createO
ffscreenGraphicsContext3D(attributes, 0)); |
5879 RefPtr<DrawingBuffer> buffer; | 5879 RefPtr<DrawingBuffer> buffer; |
5880 if (context) { | 5880 if (context) { |
5881 // Construct a new drawing buffer with the new WebGraphicsContext3D. | 5881 // Construct a new drawing buffer with the new WebGraphicsContext3D. |
5882 buffer = createDrawingBuffer(context.release()); | 5882 buffer = createDrawingBuffer(context.release()); |
5883 // If DrawingBuffer::create() fails to allocate a fbo, |drawingBuffer| i
s set to null. | 5883 // If DrawingBuffer::create() fails to allocate a fbo, |drawingBuffer| i
s set to null. |
5884 } | 5884 } |
5885 if (!buffer) { | 5885 if (!buffer) { |
5886 if (m_contextLostMode == RealLostContext) { | 5886 if (m_contextLostMode == RealLostContext) { |
5887 m_restoreTimer.startOneShot(secondsBetweenRestoreAttempts, FROM_HERE
); | 5887 m_restoreTimer.startOneShot(secondsBetweenRestoreAttempts, FROM_HERE
); |
5888 } else { | 5888 } else { |
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6185 return m_sharedWebGraphicsContext3D ? m_sharedWebGraphicsContext3D->drawingB
uffer() : 0; | 6185 return m_sharedWebGraphicsContext3D ? m_sharedWebGraphicsContext3D->drawingB
uffer() : 0; |
6186 } | 6186 } |
6187 #else | 6187 #else |
6188 DrawingBuffer* WebGLRenderingContextBase::drawingBuffer() const | 6188 DrawingBuffer* WebGLRenderingContextBase::drawingBuffer() const |
6189 { | 6189 { |
6190 return m_drawingBuffer.get(); | 6190 return m_drawingBuffer.get(); |
6191 } | 6191 } |
6192 #endif | 6192 #endif |
6193 | 6193 |
6194 } // namespace blink | 6194 } // namespace blink |
OLD | NEW |