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 24 matching lines...) Expand all Loading... |
35 #include "core/fetch/ImageResource.h" | 35 #include "core/fetch/ImageResource.h" |
36 #include "core/frame/LocalFrame.h" | 36 #include "core/frame/LocalFrame.h" |
37 #include "core/frame/Settings.h" | 37 #include "core/frame/Settings.h" |
38 #include "core/html/HTMLCanvasElement.h" | 38 #include "core/html/HTMLCanvasElement.h" |
39 #include "core/html/HTMLImageElement.h" | 39 #include "core/html/HTMLImageElement.h" |
40 #include "core/html/HTMLVideoElement.h" | 40 #include "core/html/HTMLVideoElement.h" |
41 #include "core/html/ImageData.h" | 41 #include "core/html/ImageData.h" |
42 #include "core/html/canvas/ANGLEInstancedArrays.h" | 42 #include "core/html/canvas/ANGLEInstancedArrays.h" |
43 #include "core/html/canvas/CHROMIUMSubscribeUniform.h" | 43 #include "core/html/canvas/CHROMIUMSubscribeUniform.h" |
44 #include "core/html/canvas/CHROMIUMValuebuffer.h" | 44 #include "core/html/canvas/CHROMIUMValuebuffer.h" |
| 45 #include "core/html/canvas/ContextAttributeHelpers.h" |
45 #include "core/html/canvas/EXTBlendMinMax.h" | 46 #include "core/html/canvas/EXTBlendMinMax.h" |
46 #include "core/html/canvas/EXTFragDepth.h" | 47 #include "core/html/canvas/EXTFragDepth.h" |
47 #include "core/html/canvas/EXTShaderTextureLOD.h" | 48 #include "core/html/canvas/EXTShaderTextureLOD.h" |
48 #include "core/html/canvas/EXTTextureFilterAnisotropic.h" | 49 #include "core/html/canvas/EXTTextureFilterAnisotropic.h" |
49 #include "core/html/canvas/OESElementIndexUint.h" | 50 #include "core/html/canvas/OESElementIndexUint.h" |
50 #include "core/html/canvas/OESStandardDerivatives.h" | 51 #include "core/html/canvas/OESStandardDerivatives.h" |
51 #include "core/html/canvas/OESTextureFloat.h" | 52 #include "core/html/canvas/OESTextureFloat.h" |
52 #include "core/html/canvas/OESTextureFloatLinear.h" | 53 #include "core/html/canvas/OESTextureFloatLinear.h" |
53 #include "core/html/canvas/OESTextureHalfFloat.h" | 54 #include "core/html/canvas/OESTextureHalfFloat.h" |
54 #include "core/html/canvas/OESTextureHalfFloatLinear.h" | 55 #include "core/html/canvas/OESTextureHalfFloatLinear.h" |
(...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
551 visitor->trace(m_context); | 552 visitor->trace(m_context); |
552 } | 553 } |
553 | 554 |
554 private: | 555 private: |
555 explicit WebGLRenderingContextErrorMessageCallback(WebGLRenderingContextBase
* context) | 556 explicit WebGLRenderingContextErrorMessageCallback(WebGLRenderingContextBase
* context) |
556 : m_context(context) { } | 557 : m_context(context) { } |
557 | 558 |
558 RawPtrWillBeMember<WebGLRenderingContextBase> m_context; | 559 RawPtrWillBeMember<WebGLRenderingContextBase> m_context; |
559 }; | 560 }; |
560 | 561 |
561 WebGLRenderingContextBase::WebGLRenderingContextBase(HTMLCanvasElement* passedCa
nvas, PassOwnPtr<blink::WebGraphicsContext3D> context, WebGLContextAttributes* r
equestedAttributes) | 562 WebGLRenderingContextBase::WebGLRenderingContextBase(HTMLCanvasElement* passedCa
nvas, PassOwnPtr<blink::WebGraphicsContext3D> context, const WebGLContextAttribu
tes& requestedAttributes) |
562 : CanvasRenderingContext(passedCanvas) | 563 : CanvasRenderingContext(passedCanvas) |
563 , ActiveDOMObject(&passedCanvas->document()) | 564 , ActiveDOMObject(&passedCanvas->document()) |
564 , m_contextLostMode(NotLostContext) | 565 , m_contextLostMode(NotLostContext) |
565 , m_autoRecoveryMethod(Manual) | 566 , m_autoRecoveryMethod(Manual) |
566 , m_dispatchContextLostEventTimer(this, &WebGLRenderingContextBase::dispatch
ContextLostEvent) | 567 , m_dispatchContextLostEventTimer(this, &WebGLRenderingContextBase::dispatch
ContextLostEvent) |
567 , m_restoreAllowed(false) | 568 , m_restoreAllowed(false) |
568 , m_restoreTimer(this, &WebGLRenderingContextBase::maybeRestoreContext) | 569 , m_restoreTimer(this, &WebGLRenderingContextBase::maybeRestoreContext) |
569 , m_generatedImageCache(4) | 570 , m_generatedImageCache(4) |
570 , m_requestedAttributes(requestedAttributes->clone()) | 571 , m_requestedAttributes(requestedAttributes) |
571 , m_synthesizedErrorsToConsole(true) | 572 , m_synthesizedErrorsToConsole(true) |
572 , m_numGLErrorsToConsoleAllowed(maxGLErrorsAllowedToConsole) | 573 , m_numGLErrorsToConsoleAllowed(maxGLErrorsAllowedToConsole) |
573 , m_multisamplingAllowed(false) | 574 , m_multisamplingAllowed(false) |
574 , m_multisamplingObserverRegistered(false) | 575 , m_multisamplingObserverRegistered(false) |
575 , m_onePlusMaxNonDefaultTextureUnit(0) | 576 , m_onePlusMaxNonDefaultTextureUnit(0) |
576 { | 577 { |
577 ASSERT(context); | 578 ASSERT(context); |
578 | 579 |
579 m_contextGroup = WebGLContextGroup::create(); | 580 m_contextGroup = WebGLContextGroup::create(); |
580 m_contextGroup->addContext(this); | 581 m_contextGroup->addContext(this); |
(...skipping 14 matching lines...) Expand all Loading... |
595 drawingBuffer()->bind(); | 596 drawingBuffer()->bind(); |
596 setupFlags(); | 597 setupFlags(); |
597 initializeNewContext(); | 598 initializeNewContext(); |
598 } | 599 } |
599 | 600 |
600 PassRefPtr<DrawingBuffer> WebGLRenderingContextBase::createDrawingBuffer(PassOwn
Ptr<blink::WebGraphicsContext3D> context) | 601 PassRefPtr<DrawingBuffer> WebGLRenderingContextBase::createDrawingBuffer(PassOwn
Ptr<blink::WebGraphicsContext3D> context) |
601 { | 602 { |
602 RefPtr<WebGLRenderingContextEvictionManager> contextEvictionManager = adoptR
ef(new WebGLRenderingContextEvictionManager()); | 603 RefPtr<WebGLRenderingContextEvictionManager> contextEvictionManager = adoptR
ef(new WebGLRenderingContextEvictionManager()); |
603 | 604 |
604 blink::WebGraphicsContext3D::Attributes attrs; | 605 blink::WebGraphicsContext3D::Attributes attrs; |
605 attrs.alpha = m_requestedAttributes->alpha(); | 606 attrs.alpha = m_requestedAttributes.alpha(); |
606 attrs.depth = m_requestedAttributes->depth(); | 607 attrs.depth = m_requestedAttributes.depth(); |
607 attrs.stencil = m_requestedAttributes->stencil(); | 608 attrs.stencil = m_requestedAttributes.stencil(); |
608 attrs.antialias = m_requestedAttributes->antialias(); | 609 attrs.antialias = m_requestedAttributes.antialias(); |
609 attrs.premultipliedAlpha = m_requestedAttributes->premultipliedAlpha(); | 610 attrs.premultipliedAlpha = m_requestedAttributes.premultipliedAlpha(); |
610 DrawingBuffer::PreserveDrawingBuffer preserve = m_requestedAttributes->prese
rveDrawingBuffer() ? DrawingBuffer::Preserve : DrawingBuffer::Discard; | 611 DrawingBuffer::PreserveDrawingBuffer preserve = m_requestedAttributes.preser
veDrawingBuffer() ? DrawingBuffer::Preserve : DrawingBuffer::Discard; |
611 return DrawingBuffer::create(context, clampedCanvasSize(), preserve, attrs,
contextEvictionManager.release()); | 612 return DrawingBuffer::create(context, clampedCanvasSize(), preserve, attrs,
contextEvictionManager.release()); |
612 } | 613 } |
613 | 614 |
614 void WebGLRenderingContextBase::initializeNewContext() | 615 void WebGLRenderingContextBase::initializeNewContext() |
615 { | 616 { |
616 ASSERT(!isContextLost()); | 617 ASSERT(!isContextLost()); |
617 m_markedCanvasDirty = false; | 618 m_markedCanvasDirty = false; |
618 m_activeTextureUnit = 0; | 619 m_activeTextureUnit = 0; |
619 m_packAlignment = 4; | 620 m_packAlignment = 4; |
620 m_unpackAlignment = 4; | 621 m_unpackAlignment = 4; |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
691 | 692 |
692 activateContext(this); | 693 activateContext(this); |
693 } | 694 } |
694 | 695 |
695 void WebGLRenderingContextBase::setupFlags() | 696 void WebGLRenderingContextBase::setupFlags() |
696 { | 697 { |
697 ASSERT(drawingBuffer()); | 698 ASSERT(drawingBuffer()); |
698 if (Page* p = canvas()->document().page()) { | 699 if (Page* p = canvas()->document().page()) { |
699 m_synthesizedErrorsToConsole = p->settings().webGLErrorsToConsoleEnabled
(); | 700 m_synthesizedErrorsToConsole = p->settings().webGLErrorsToConsoleEnabled
(); |
700 | 701 |
701 if (!m_multisamplingObserverRegistered && m_requestedAttributes->antiali
as()) { | 702 if (!m_multisamplingObserverRegistered && m_requestedAttributes.antialia
s()) { |
702 m_multisamplingAllowed = drawingBuffer()->multisample(); | 703 m_multisamplingAllowed = drawingBuffer()->multisample(); |
703 p->addMultisamplingChangedObserver(this); | 704 p->addMultisamplingChangedObserver(this); |
704 m_multisamplingObserverRegistered = true; | 705 m_multisamplingObserverRegistered = true; |
705 } | 706 } |
706 } | 707 } |
707 | 708 |
708 m_isGLES2NPOTStrict = !extensionsUtil()->isExtensionEnabled("GL_OES_texture_
npot"); | 709 m_isGLES2NPOTStrict = !extensionsUtil()->isExtensionEnabled("GL_OES_texture_
npot"); |
709 m_isDepthStencilSupported = extensionsUtil()->isExtensionEnabled("GL_OES_pac
ked_depth_stencil"); | 710 m_isDepthStencilSupported = extensionsUtil()->isExtensionEnabled("GL_OES_pac
ked_depth_stencil"); |
710 } | 711 } |
711 | 712 |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
816 } | 817 } |
817 | 818 |
818 WebGLRenderingContextBase::HowToClear WebGLRenderingContextBase::clearIfComposit
ed(GLbitfield mask) | 819 WebGLRenderingContextBase::HowToClear WebGLRenderingContextBase::clearIfComposit
ed(GLbitfield mask) |
819 { | 820 { |
820 if (isContextLost()) | 821 if (isContextLost()) |
821 return Skipped; | 822 return Skipped; |
822 | 823 |
823 if (!drawingBuffer()->bufferClearNeeded() || (mask && m_framebufferBinding)) | 824 if (!drawingBuffer()->bufferClearNeeded() || (mask && m_framebufferBinding)) |
824 return Skipped; | 825 return Skipped; |
825 | 826 |
826 RefPtrWillBeRawPtr<WebGLContextAttributes> contextAttributes = getContextAtt
ributes(); | 827 Nullable<WebGLContextAttributes> contextAttributes; |
| 828 getContextAttributes(contextAttributes); |
| 829 if (contextAttributes.isNull()) { |
| 830 // Unlikely, but context was lost. |
| 831 return Skipped; |
| 832 } |
827 | 833 |
828 // Determine if it's possible to combine the clear the user asked for and th
is clear. | 834 // Determine if it's possible to combine the clear the user asked for and th
is clear. |
829 bool combinedClear = mask && !m_scissorEnabled; | 835 bool combinedClear = mask && !m_scissorEnabled; |
830 | 836 |
831 webContext()->disable(GL_SCISSOR_TEST); | 837 webContext()->disable(GL_SCISSOR_TEST); |
832 if (combinedClear && (mask & GL_COLOR_BUFFER_BIT)) { | 838 if (combinedClear && (mask & GL_COLOR_BUFFER_BIT)) { |
833 webContext()->clearColor(m_colorMask[0] ? m_clearColor[0] : 0, | 839 webContext()->clearColor(m_colorMask[0] ? m_clearColor[0] : 0, |
834 m_colorMask[1] ? m_clearColor[1] : 0, | 840 m_colorMask[1] ? m_clearColor[1] : 0, |
835 m_colorMask[2] ? m_clearColor[2] : 0, | 841 m_colorMask[2] ? m_clearColor[2] : 0, |
836 m_colorMask[3] ? m_clearColor[3] : 0); | 842 m_colorMask[3] ? m_clearColor[3] : 0); |
837 } else { | 843 } else { |
838 webContext()->clearColor(0, 0, 0, 0); | 844 webContext()->clearColor(0, 0, 0, 0); |
839 } | 845 } |
840 webContext()->colorMask(true, true, true, true); | 846 webContext()->colorMask(true, true, true, true); |
841 GLbitfield clearMask = GL_COLOR_BUFFER_BIT; | 847 GLbitfield clearMask = GL_COLOR_BUFFER_BIT; |
842 if (contextAttributes->depth()) { | 848 if (contextAttributes.get().depth()) { |
843 if (!combinedClear || !m_depthMask || !(mask & GL_DEPTH_BUFFER_BIT)) | 849 if (!combinedClear || !m_depthMask || !(mask & GL_DEPTH_BUFFER_BIT)) |
844 webContext()->clearDepth(1.0f); | 850 webContext()->clearDepth(1.0f); |
845 clearMask |= GL_DEPTH_BUFFER_BIT; | 851 clearMask |= GL_DEPTH_BUFFER_BIT; |
846 webContext()->depthMask(true); | 852 webContext()->depthMask(true); |
847 } | 853 } |
848 if (contextAttributes->stencil()) { | 854 if (contextAttributes.get().stencil()) { |
849 if (combinedClear && (mask & GL_STENCIL_BUFFER_BIT)) | 855 if (combinedClear && (mask & GL_STENCIL_BUFFER_BIT)) |
850 webContext()->clearStencil(m_clearStencil & m_stencilMask); | 856 webContext()->clearStencil(m_clearStencil & m_stencilMask); |
851 else | 857 else |
852 webContext()->clearStencil(0); | 858 webContext()->clearStencil(0); |
853 clearMask |= GL_STENCIL_BUFFER_BIT; | 859 clearMask |= GL_STENCIL_BUFFER_BIT; |
854 webContext()->stencilMaskSeparate(GL_FRONT, 0xFFFFFFFF); | 860 webContext()->stencilMaskSeparate(GL_FRONT, 0xFFFFFFFF); |
855 } | 861 } |
856 | 862 |
857 drawingBuffer()->clearFramebuffers(clearMask); | 863 drawingBuffer()->clearFramebuffers(clearMask); |
858 | 864 |
(...skipping 1225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2084 if (!program->linkStatus()) { | 2090 if (!program->linkStatus()) { |
2085 synthesizeGLError(GL_INVALID_OPERATION, "getAttribLocation", "program no
t linked"); | 2091 synthesizeGLError(GL_INVALID_OPERATION, "getAttribLocation", "program no
t linked"); |
2086 return 0; | 2092 return 0; |
2087 } | 2093 } |
2088 return webContext()->getAttribLocation(objectOrZero(program), name.utf8().da
ta()); | 2094 return webContext()->getAttribLocation(objectOrZero(program), name.utf8().da
ta()); |
2089 } | 2095 } |
2090 | 2096 |
2091 ScriptValue WebGLRenderingContextBase::getBufferParameter(ScriptState* scriptSta
te, GLenum target, GLenum pname) | 2097 ScriptValue WebGLRenderingContextBase::getBufferParameter(ScriptState* scriptSta
te, GLenum target, GLenum pname) |
2092 { | 2098 { |
2093 if (isContextLost()) | 2099 if (isContextLost()) |
2094 return WebGLAny(scriptState); | 2100 return ScriptValue::createNull(scriptState); |
2095 if (target != GL_ARRAY_BUFFER && target != GL_ELEMENT_ARRAY_BUFFER) { | 2101 if (target != GL_ARRAY_BUFFER && target != GL_ELEMENT_ARRAY_BUFFER) { |
2096 synthesizeGLError(GL_INVALID_ENUM, "getBufferParameter", "invalid target
"); | 2102 synthesizeGLError(GL_INVALID_ENUM, "getBufferParameter", "invalid target
"); |
2097 return WebGLAny(scriptState); | 2103 return ScriptValue::createNull(scriptState); |
2098 } | 2104 } |
2099 | 2105 |
2100 if (pname != GL_BUFFER_SIZE && pname != GL_BUFFER_USAGE) { | 2106 if (pname != GL_BUFFER_SIZE && pname != GL_BUFFER_USAGE) { |
2101 synthesizeGLError(GL_INVALID_ENUM, "getBufferParameter", "invalid parame
ter name"); | 2107 synthesizeGLError(GL_INVALID_ENUM, "getBufferParameter", "invalid parame
ter name"); |
2102 return WebGLAny(scriptState); | 2108 return ScriptValue::createNull(scriptState); |
2103 } | 2109 } |
2104 | 2110 |
2105 GLint value = 0; | 2111 GLint value = 0; |
2106 webContext()->getBufferParameteriv(target, pname, &value); | 2112 webContext()->getBufferParameteriv(target, pname, &value); |
2107 if (pname == GL_BUFFER_SIZE) | 2113 if (pname == GL_BUFFER_SIZE) |
2108 return WebGLAny(scriptState, value); | 2114 return WebGLAny(scriptState, value); |
2109 return WebGLAny(scriptState, static_cast<unsigned>(value)); | 2115 return WebGLAny(scriptState, static_cast<unsigned>(value)); |
2110 } | 2116 } |
2111 | 2117 |
2112 PassRefPtrWillBeRawPtr<WebGLContextAttributes> WebGLRenderingContextBase::getCon
textAttributes() | 2118 void WebGLRenderingContextBase::getContextAttributes(Nullable<WebGLContextAttrib
utes>& result) |
2113 { | 2119 { |
2114 if (isContextLost()) | 2120 if (isContextLost()) |
2115 return nullptr; | 2121 return; |
2116 // We always need to return a new WebGLContextAttributes object to | 2122 result.set(m_requestedAttributes); |
2117 // prevent the user from mutating any cached version. | |
2118 blink::WebGraphicsContext3D::Attributes attrs = drawingBuffer()->getActualAt
tributes(); | |
2119 RefPtrWillBeRawPtr<WebGLContextAttributes> attributes = m_requestedAttribute
s->clone(); | |
2120 // Some requested attributes may not be honored, so we need to query the und
erlying | 2123 // Some requested attributes may not be honored, so we need to query the und
erlying |
2121 // context/drawing buffer and adjust accordingly. | 2124 // context/drawing buffer and adjust accordingly. |
2122 if (m_requestedAttributes->depth() && !attrs.depth) | 2125 blink::WebGraphicsContext3D::Attributes attrs = drawingBuffer()->getActualAt
tributes(); |
2123 attributes->setDepth(false); | 2126 if (m_requestedAttributes.depth() && !attrs.depth) |
2124 if (m_requestedAttributes->stencil() && !attrs.stencil) | 2127 result.get().setDepth(false); |
2125 attributes->setStencil(false); | 2128 if (m_requestedAttributes.stencil() && !attrs.stencil) |
2126 attributes->setAntialias(drawingBuffer()->multisample()); | 2129 result.get().setStencil(false); |
2127 return attributes.release(); | 2130 result.get().setAntialias(drawingBuffer()->multisample()); |
2128 } | 2131 } |
2129 | 2132 |
2130 GLenum WebGLRenderingContextBase::getError() | 2133 GLenum WebGLRenderingContextBase::getError() |
2131 { | 2134 { |
2132 if (m_lostContextErrors.size()) { | 2135 if (m_lostContextErrors.size()) { |
2133 GLenum err = m_lostContextErrors.first(); | 2136 GLenum err = m_lostContextErrors.first(); |
2134 m_lostContextErrors.remove(0); | 2137 m_lostContextErrors.remove(0); |
2135 return err; | 2138 return err; |
2136 } | 2139 } |
2137 | 2140 |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2186 return extension.release(); | 2189 return extension.release(); |
2187 } | 2190 } |
2188 } | 2191 } |
2189 | 2192 |
2190 return nullptr; | 2193 return nullptr; |
2191 } | 2194 } |
2192 | 2195 |
2193 ScriptValue WebGLRenderingContextBase::getFramebufferAttachmentParameter(ScriptS
tate* scriptState, GLenum target, GLenum attachment, GLenum pname) | 2196 ScriptValue WebGLRenderingContextBase::getFramebufferAttachmentParameter(ScriptS
tate* scriptState, GLenum target, GLenum attachment, GLenum pname) |
2194 { | 2197 { |
2195 if (isContextLost() || !validateFramebufferFuncParameters("getFramebufferAtt
achmentParameter", target, attachment)) | 2198 if (isContextLost() || !validateFramebufferFuncParameters("getFramebufferAtt
achmentParameter", target, attachment)) |
2196 return WebGLAny(scriptState); | 2199 return ScriptValue::createNull(scriptState); |
2197 | 2200 |
2198 if (!m_framebufferBinding || !m_framebufferBinding->object()) { | 2201 if (!m_framebufferBinding || !m_framebufferBinding->object()) { |
2199 synthesizeGLError(GL_INVALID_OPERATION, "getFramebufferAttachmentParamet
er", "no framebuffer bound"); | 2202 synthesizeGLError(GL_INVALID_OPERATION, "getFramebufferAttachmentParamet
er", "no framebuffer bound"); |
2200 return WebGLAny(scriptState); | 2203 return ScriptValue::createNull(scriptState); |
2201 } | 2204 } |
2202 | 2205 |
2203 WebGLSharedObject* object = m_framebufferBinding->getAttachmentObject(attach
ment); | 2206 WebGLSharedObject* object = m_framebufferBinding->getAttachmentObject(attach
ment); |
2204 if (!object) { | 2207 if (!object) { |
2205 if (pname == GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE) | 2208 if (pname == GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE) |
2206 return WebGLAny(scriptState, GL_NONE); | 2209 return WebGLAny(scriptState, GL_NONE); |
2207 // OpenGL ES 2.0 specifies INVALID_ENUM in this case, while desktop GL | 2210 // OpenGL ES 2.0 specifies INVALID_ENUM in this case, while desktop GL |
2208 // specifies INVALID_OPERATION. | 2211 // specifies INVALID_OPERATION. |
2209 synthesizeGLError(GL_INVALID_ENUM, "getFramebufferAttachmentParameter",
"invalid parameter name"); | 2212 synthesizeGLError(GL_INVALID_ENUM, "getFramebufferAttachmentParameter",
"invalid parameter name"); |
2210 return WebGLAny(scriptState); | 2213 return ScriptValue::createNull(scriptState); |
2211 } | 2214 } |
2212 | 2215 |
2213 ASSERT(object->isTexture() || object->isRenderbuffer()); | 2216 ASSERT(object->isTexture() || object->isRenderbuffer()); |
2214 if (object->isTexture()) { | 2217 if (object->isTexture()) { |
2215 switch (pname) { | 2218 switch (pname) { |
2216 case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: | 2219 case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: |
2217 return WebGLAny(scriptState, GL_TEXTURE); | 2220 return WebGLAny(scriptState, GL_TEXTURE); |
2218 case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: | 2221 case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: |
2219 return WebGLAny(scriptState, PassRefPtrWillBeRawPtr<WebGLObject>(obj
ect)); | 2222 return WebGLAny(scriptState, PassRefPtrWillBeRawPtr<WebGLObject>(obj
ect)); |
2220 case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: | 2223 case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: |
2221 case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: | 2224 case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: |
2222 { | 2225 { |
2223 GLint value = 0; | 2226 GLint value = 0; |
2224 webContext()->getFramebufferAttachmentParameteriv(target, attach
ment, pname, &value); | 2227 webContext()->getFramebufferAttachmentParameteriv(target, attach
ment, pname, &value); |
2225 return WebGLAny(scriptState, value); | 2228 return WebGLAny(scriptState, value); |
2226 } | 2229 } |
2227 case GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT: | 2230 case GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT: |
2228 if (extensionEnabled(EXTsRGBName)) { | 2231 if (extensionEnabled(EXTsRGBName)) { |
2229 GLint value = 0; | 2232 GLint value = 0; |
2230 webContext()->getFramebufferAttachmentParameteriv(target, attach
ment, pname, &value); | 2233 webContext()->getFramebufferAttachmentParameteriv(target, attach
ment, pname, &value); |
2231 return WebGLAny(scriptState, value); | 2234 return WebGLAny(scriptState, value); |
2232 } | 2235 } |
2233 synthesizeGLError(GL_INVALID_ENUM, "getFramebufferAttachmentParamete
r", "invalid parameter name for renderbuffer attachment"); | 2236 synthesizeGLError(GL_INVALID_ENUM, "getFramebufferAttachmentParamete
r", "invalid parameter name for renderbuffer attachment"); |
2234 return WebGLAny(scriptState); | 2237 return ScriptValue::createNull(scriptState); |
2235 default: | 2238 default: |
2236 synthesizeGLError(GL_INVALID_ENUM, "getFramebufferAttachmentParamete
r", "invalid parameter name for texture attachment"); | 2239 synthesizeGLError(GL_INVALID_ENUM, "getFramebufferAttachmentParamete
r", "invalid parameter name for texture attachment"); |
2237 return WebGLAny(scriptState); | 2240 return ScriptValue::createNull(scriptState); |
2238 } | 2241 } |
2239 } else { | 2242 } else { |
2240 switch (pname) { | 2243 switch (pname) { |
2241 case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: | 2244 case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: |
2242 return WebGLAny(scriptState, GL_RENDERBUFFER); | 2245 return WebGLAny(scriptState, GL_RENDERBUFFER); |
2243 case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: | 2246 case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: |
2244 return WebGLAny(scriptState, PassRefPtrWillBeRawPtr<WebGLObject>(obj
ect)); | 2247 return WebGLAny(scriptState, PassRefPtrWillBeRawPtr<WebGLObject>(obj
ect)); |
2245 case GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT: | 2248 case GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT: |
2246 if (extensionEnabled(EXTsRGBName)) { | 2249 if (extensionEnabled(EXTsRGBName)) { |
2247 GLint value = 0; | 2250 GLint value = 0; |
2248 webContext()->getFramebufferAttachmentParameteriv(target, attach
ment, pname, &value); | 2251 webContext()->getFramebufferAttachmentParameteriv(target, attach
ment, pname, &value); |
2249 return WebGLAny(scriptState, value); | 2252 return WebGLAny(scriptState, value); |
2250 } | 2253 } |
2251 synthesizeGLError(GL_INVALID_ENUM, "getFramebufferAttachmentParamete
r", "invalid parameter name for renderbuffer attachment"); | 2254 synthesizeGLError(GL_INVALID_ENUM, "getFramebufferAttachmentParamete
r", "invalid parameter name for renderbuffer attachment"); |
2252 return WebGLAny(scriptState); | 2255 return ScriptValue::createNull(scriptState); |
2253 default: | 2256 default: |
2254 synthesizeGLError(GL_INVALID_ENUM, "getFramebufferAttachmentParamete
r", "invalid parameter name for renderbuffer attachment"); | 2257 synthesizeGLError(GL_INVALID_ENUM, "getFramebufferAttachmentParamete
r", "invalid parameter name for renderbuffer attachment"); |
2255 return WebGLAny(scriptState); | 2258 return ScriptValue::createNull(scriptState); |
2256 } | 2259 } |
2257 } | 2260 } |
2258 } | 2261 } |
2259 | 2262 |
2260 ScriptValue WebGLRenderingContextBase::getParameter(ScriptState* scriptState, GL
enum pname) | 2263 ScriptValue WebGLRenderingContextBase::getParameter(ScriptState* scriptState, GL
enum pname) |
2261 { | 2264 { |
2262 if (isContextLost()) | 2265 if (isContextLost()) |
2263 return WebGLAny(scriptState); | 2266 return ScriptValue::createNull(scriptState); |
2264 const int intZero = 0; | 2267 const int intZero = 0; |
2265 switch (pname) { | 2268 switch (pname) { |
2266 case GL_ACTIVE_TEXTURE: | 2269 case GL_ACTIVE_TEXTURE: |
2267 return getUnsignedIntParameter(scriptState, pname); | 2270 return getUnsignedIntParameter(scriptState, pname); |
2268 case GL_ALIASED_LINE_WIDTH_RANGE: | 2271 case GL_ALIASED_LINE_WIDTH_RANGE: |
2269 return getWebGLFloatArrayParameter(scriptState, pname); | 2272 return getWebGLFloatArrayParameter(scriptState, pname); |
2270 case GL_ALIASED_POINT_SIZE_RANGE: | 2273 case GL_ALIASED_POINT_SIZE_RANGE: |
2271 return getWebGLFloatArrayParameter(scriptState, pname); | 2274 return getWebGLFloatArrayParameter(scriptState, pname); |
2272 case GL_ALPHA_BITS: | 2275 case GL_ALPHA_BITS: |
2273 return getIntParameter(scriptState, pname); | 2276 return getIntParameter(scriptState, pname); |
(...skipping 23 matching lines...) Expand all Loading... |
2297 return getBooleanArrayParameter(scriptState, pname); | 2300 return getBooleanArrayParameter(scriptState, pname); |
2298 case GL_COMPRESSED_TEXTURE_FORMATS: | 2301 case GL_COMPRESSED_TEXTURE_FORMATS: |
2299 return WebGLAny(scriptState, DOMUint32Array::create(m_compressedTextureF
ormats.data(), m_compressedTextureFormats.size())); | 2302 return WebGLAny(scriptState, DOMUint32Array::create(m_compressedTextureF
ormats.data(), m_compressedTextureFormats.size())); |
2300 case GL_CULL_FACE: | 2303 case GL_CULL_FACE: |
2301 return getBooleanParameter(scriptState, pname); | 2304 return getBooleanParameter(scriptState, pname); |
2302 case GL_CULL_FACE_MODE: | 2305 case GL_CULL_FACE_MODE: |
2303 return getUnsignedIntParameter(scriptState, pname); | 2306 return getUnsignedIntParameter(scriptState, pname); |
2304 case GL_CURRENT_PROGRAM: | 2307 case GL_CURRENT_PROGRAM: |
2305 return WebGLAny(scriptState, PassRefPtrWillBeRawPtr<WebGLObject>(m_curre
ntProgram.get())); | 2308 return WebGLAny(scriptState, PassRefPtrWillBeRawPtr<WebGLObject>(m_curre
ntProgram.get())); |
2306 case GL_DEPTH_BITS: | 2309 case GL_DEPTH_BITS: |
2307 if (!m_framebufferBinding && !m_requestedAttributes->depth()) | 2310 if (!m_framebufferBinding && !m_requestedAttributes.depth()) |
2308 return WebGLAny(scriptState, intZero); | 2311 return WebGLAny(scriptState, intZero); |
2309 return getIntParameter(scriptState, pname); | 2312 return getIntParameter(scriptState, pname); |
2310 case GL_DEPTH_CLEAR_VALUE: | 2313 case GL_DEPTH_CLEAR_VALUE: |
2311 return getFloatParameter(scriptState, pname); | 2314 return getFloatParameter(scriptState, pname); |
2312 case GL_DEPTH_FUNC: | 2315 case GL_DEPTH_FUNC: |
2313 return getUnsignedIntParameter(scriptState, pname); | 2316 return getUnsignedIntParameter(scriptState, pname); |
2314 case GL_DEPTH_RANGE: | 2317 case GL_DEPTH_RANGE: |
2315 return getWebGLFloatArrayParameter(scriptState, pname); | 2318 return getWebGLFloatArrayParameter(scriptState, pname); |
2316 case GL_DEPTH_TEST: | 2319 case GL_DEPTH_TEST: |
2317 return getBooleanParameter(scriptState, pname); | 2320 return getBooleanParameter(scriptState, pname); |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2396 return getUnsignedIntParameter(scriptState, pname); | 2399 return getUnsignedIntParameter(scriptState, pname); |
2397 case GL_STENCIL_BACK_PASS_DEPTH_PASS: | 2400 case GL_STENCIL_BACK_PASS_DEPTH_PASS: |
2398 return getUnsignedIntParameter(scriptState, pname); | 2401 return getUnsignedIntParameter(scriptState, pname); |
2399 case GL_STENCIL_BACK_REF: | 2402 case GL_STENCIL_BACK_REF: |
2400 return getIntParameter(scriptState, pname); | 2403 return getIntParameter(scriptState, pname); |
2401 case GL_STENCIL_BACK_VALUE_MASK: | 2404 case GL_STENCIL_BACK_VALUE_MASK: |
2402 return getUnsignedIntParameter(scriptState, pname); | 2405 return getUnsignedIntParameter(scriptState, pname); |
2403 case GL_STENCIL_BACK_WRITEMASK: | 2406 case GL_STENCIL_BACK_WRITEMASK: |
2404 return getUnsignedIntParameter(scriptState, pname); | 2407 return getUnsignedIntParameter(scriptState, pname); |
2405 case GL_STENCIL_BITS: | 2408 case GL_STENCIL_BITS: |
2406 if (!m_framebufferBinding && !m_requestedAttributes->stencil()) | 2409 if (!m_framebufferBinding && !m_requestedAttributes.stencil()) |
2407 return WebGLAny(scriptState, intZero); | 2410 return WebGLAny(scriptState, intZero); |
2408 return getIntParameter(scriptState, pname); | 2411 return getIntParameter(scriptState, pname); |
2409 case GL_STENCIL_CLEAR_VALUE: | 2412 case GL_STENCIL_CLEAR_VALUE: |
2410 return getIntParameter(scriptState, pname); | 2413 return getIntParameter(scriptState, pname); |
2411 case GL_STENCIL_FAIL: | 2414 case GL_STENCIL_FAIL: |
2412 return getUnsignedIntParameter(scriptState, pname); | 2415 return getUnsignedIntParameter(scriptState, pname); |
2413 case GL_STENCIL_FUNC: | 2416 case GL_STENCIL_FUNC: |
2414 return getUnsignedIntParameter(scriptState, pname); | 2417 return getUnsignedIntParameter(scriptState, pname); |
2415 case GL_STENCIL_PASS_DEPTH_FAIL: | 2418 case GL_STENCIL_PASS_DEPTH_FAIL: |
2416 return getUnsignedIntParameter(scriptState, pname); | 2419 return getUnsignedIntParameter(scriptState, pname); |
(...skipping 24 matching lines...) Expand all Loading... |
2441 case GL_VENDOR: | 2444 case GL_VENDOR: |
2442 return WebGLAny(scriptState, String("WebKit")); | 2445 return WebGLAny(scriptState, String("WebKit")); |
2443 case GL_VERSION: | 2446 case GL_VERSION: |
2444 return WebGLAny(scriptState, "WebGL 1.0 (" + String(webContext()->getStr
ing(GL_VERSION)) + ")"); | 2447 return WebGLAny(scriptState, "WebGL 1.0 (" + String(webContext()->getStr
ing(GL_VERSION)) + ")"); |
2445 case GL_VIEWPORT: | 2448 case GL_VIEWPORT: |
2446 return getWebGLIntArrayParameter(scriptState, pname); | 2449 return getWebGLIntArrayParameter(scriptState, pname); |
2447 case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES: // OES_standard_derivatives | 2450 case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES: // OES_standard_derivatives |
2448 if (extensionEnabled(OESStandardDerivativesName)) | 2451 if (extensionEnabled(OESStandardDerivativesName)) |
2449 return getUnsignedIntParameter(scriptState, GL_FRAGMENT_SHADER_DERIV
ATIVE_HINT_OES); | 2452 return getUnsignedIntParameter(scriptState, GL_FRAGMENT_SHADER_DERIV
ATIVE_HINT_OES); |
2450 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na
me, OES_standard_derivatives not enabled"); | 2453 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na
me, OES_standard_derivatives not enabled"); |
2451 return WebGLAny(scriptState); | 2454 return ScriptValue::createNull(scriptState); |
2452 case WebGLDebugRendererInfo::UNMASKED_RENDERER_WEBGL: | 2455 case WebGLDebugRendererInfo::UNMASKED_RENDERER_WEBGL: |
2453 if (extensionEnabled(WebGLDebugRendererInfoName)) | 2456 if (extensionEnabled(WebGLDebugRendererInfoName)) |
2454 return WebGLAny(scriptState, webContext()->getString(GL_RENDERER)); | 2457 return WebGLAny(scriptState, webContext()->getString(GL_RENDERER)); |
2455 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na
me, WEBGL_debug_renderer_info not enabled"); | 2458 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na
me, WEBGL_debug_renderer_info not enabled"); |
2456 return WebGLAny(scriptState); | 2459 return ScriptValue::createNull(scriptState); |
2457 case WebGLDebugRendererInfo::UNMASKED_VENDOR_WEBGL: | 2460 case WebGLDebugRendererInfo::UNMASKED_VENDOR_WEBGL: |
2458 if (extensionEnabled(WebGLDebugRendererInfoName)) | 2461 if (extensionEnabled(WebGLDebugRendererInfoName)) |
2459 return WebGLAny(scriptState, webContext()->getString(GL_VENDOR)); | 2462 return WebGLAny(scriptState, webContext()->getString(GL_VENDOR)); |
2460 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na
me, WEBGL_debug_renderer_info not enabled"); | 2463 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na
me, WEBGL_debug_renderer_info not enabled"); |
2461 return WebGLAny(scriptState); | 2464 return ScriptValue::createNull(scriptState); |
2462 case GL_VERTEX_ARRAY_BINDING_OES: // OES_vertex_array_object | 2465 case GL_VERTEX_ARRAY_BINDING_OES: // OES_vertex_array_object |
2463 if (extensionEnabled(OESVertexArrayObjectName)) { | 2466 if (extensionEnabled(OESVertexArrayObjectName)) { |
2464 if (!m_boundVertexArrayObject->isDefaultObject()) | 2467 if (!m_boundVertexArrayObject->isDefaultObject()) |
2465 return WebGLAny(scriptState, PassRefPtrWillBeRawPtr<WebGLObject>
(m_boundVertexArrayObject.get())); | 2468 return WebGLAny(scriptState, PassRefPtrWillBeRawPtr<WebGLObject>
(m_boundVertexArrayObject.get())); |
2466 return WebGLAny(scriptState); | 2469 return ScriptValue::createNull(scriptState); |
2467 } | 2470 } |
2468 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na
me, OES_vertex_array_object not enabled"); | 2471 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na
me, OES_vertex_array_object not enabled"); |
2469 return WebGLAny(scriptState); | 2472 return ScriptValue::createNull(scriptState); |
2470 case GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT: // EXT_texture_filter_anisotropic | 2473 case GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT: // EXT_texture_filter_anisotropic |
2471 if (extensionEnabled(EXTTextureFilterAnisotropicName)) | 2474 if (extensionEnabled(EXTTextureFilterAnisotropicName)) |
2472 return getUnsignedIntParameter(scriptState, GL_MAX_TEXTURE_MAX_ANISO
TROPY_EXT); | 2475 return getUnsignedIntParameter(scriptState, GL_MAX_TEXTURE_MAX_ANISO
TROPY_EXT); |
2473 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na
me, EXT_texture_filter_anisotropic not enabled"); | 2476 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na
me, EXT_texture_filter_anisotropic not enabled"); |
2474 return WebGLAny(scriptState); | 2477 return ScriptValue::createNull(scriptState); |
2475 case GL_MAX_COLOR_ATTACHMENTS_EXT: // EXT_draw_buffers BEGIN | 2478 case GL_MAX_COLOR_ATTACHMENTS_EXT: // EXT_draw_buffers BEGIN |
2476 if (extensionEnabled(WebGLDrawBuffersName)) | 2479 if (extensionEnabled(WebGLDrawBuffersName)) |
2477 return WebGLAny(scriptState, maxColorAttachments()); | 2480 return WebGLAny(scriptState, maxColorAttachments()); |
2478 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na
me, WEBGL_draw_buffers not enabled"); | 2481 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na
me, WEBGL_draw_buffers not enabled"); |
2479 return WebGLAny(scriptState); | 2482 return ScriptValue::createNull(scriptState); |
2480 case GL_MAX_DRAW_BUFFERS_EXT: | 2483 case GL_MAX_DRAW_BUFFERS_EXT: |
2481 if (extensionEnabled(WebGLDrawBuffersName)) | 2484 if (extensionEnabled(WebGLDrawBuffersName)) |
2482 return WebGLAny(scriptState, maxDrawBuffers()); | 2485 return WebGLAny(scriptState, maxDrawBuffers()); |
2483 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na
me, WEBGL_draw_buffers not enabled"); | 2486 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na
me, WEBGL_draw_buffers not enabled"); |
2484 return WebGLAny(scriptState); | 2487 return ScriptValue::createNull(scriptState); |
2485 default: | 2488 default: |
2486 if (extensionEnabled(WebGLDrawBuffersName) | 2489 if (extensionEnabled(WebGLDrawBuffersName) |
2487 && pname >= GL_DRAW_BUFFER0_EXT | 2490 && pname >= GL_DRAW_BUFFER0_EXT |
2488 && pname < static_cast<GLenum>(GL_DRAW_BUFFER0_EXT + maxDrawBuffers(
))) { | 2491 && pname < static_cast<GLenum>(GL_DRAW_BUFFER0_EXT + maxDrawBuffers(
))) { |
2489 GLint value = GL_NONE; | 2492 GLint value = GL_NONE; |
2490 if (m_framebufferBinding) | 2493 if (m_framebufferBinding) |
2491 value = m_framebufferBinding->getDrawBuffer(pname); | 2494 value = m_framebufferBinding->getDrawBuffer(pname); |
2492 else // emulated backbuffer | 2495 else // emulated backbuffer |
2493 value = m_backDrawBuffer; | 2496 value = m_backDrawBuffer; |
2494 return WebGLAny(scriptState, value); | 2497 return WebGLAny(scriptState, value); |
2495 } | 2498 } |
2496 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na
me"); | 2499 synthesizeGLError(GL_INVALID_ENUM, "getParameter", "invalid parameter na
me"); |
2497 return WebGLAny(scriptState); | 2500 return ScriptValue::createNull(scriptState); |
2498 } | 2501 } |
2499 } | 2502 } |
2500 | 2503 |
2501 ScriptValue WebGLRenderingContextBase::getProgramParameter(ScriptState* scriptSt
ate, WebGLProgram* program, GLenum pname) | 2504 ScriptValue WebGLRenderingContextBase::getProgramParameter(ScriptState* scriptSt
ate, WebGLProgram* program, GLenum pname) |
2502 { | 2505 { |
2503 if (isContextLost() || !validateWebGLObject("getProgramParameter", program)) | 2506 if (isContextLost() || !validateWebGLObject("getProgramParameter", program)) |
2504 return WebGLAny(scriptState); | 2507 return ScriptValue::createNull(scriptState); |
2505 | 2508 |
2506 GLint value = 0; | 2509 GLint value = 0; |
2507 switch (pname) { | 2510 switch (pname) { |
2508 case GL_DELETE_STATUS: | 2511 case GL_DELETE_STATUS: |
2509 return WebGLAny(scriptState, program->isDeleted()); | 2512 return WebGLAny(scriptState, program->isDeleted()); |
2510 case GL_VALIDATE_STATUS: | 2513 case GL_VALIDATE_STATUS: |
2511 webContext()->getProgramiv(objectOrZero(program), pname, &value); | 2514 webContext()->getProgramiv(objectOrZero(program), pname, &value); |
2512 return WebGLAny(scriptState, static_cast<bool>(value)); | 2515 return WebGLAny(scriptState, static_cast<bool>(value)); |
2513 case GL_LINK_STATUS: | 2516 case GL_LINK_STATUS: |
2514 return WebGLAny(scriptState, program->linkStatus()); | 2517 return WebGLAny(scriptState, program->linkStatus()); |
2515 case GL_ATTACHED_SHADERS: | 2518 case GL_ATTACHED_SHADERS: |
2516 case GL_ACTIVE_ATTRIBUTES: | 2519 case GL_ACTIVE_ATTRIBUTES: |
2517 case GL_ACTIVE_UNIFORMS: | 2520 case GL_ACTIVE_UNIFORMS: |
2518 webContext()->getProgramiv(objectOrZero(program), pname, &value); | 2521 webContext()->getProgramiv(objectOrZero(program), pname, &value); |
2519 return WebGLAny(scriptState, value); | 2522 return WebGLAny(scriptState, value); |
2520 default: | 2523 default: |
2521 synthesizeGLError(GL_INVALID_ENUM, "getProgramParameter", "invalid param
eter name"); | 2524 synthesizeGLError(GL_INVALID_ENUM, "getProgramParameter", "invalid param
eter name"); |
2522 return WebGLAny(scriptState); | 2525 return ScriptValue::createNull(scriptState); |
2523 } | 2526 } |
2524 } | 2527 } |
2525 | 2528 |
2526 String WebGLRenderingContextBase::getProgramInfoLog(WebGLProgram* program) | 2529 String WebGLRenderingContextBase::getProgramInfoLog(WebGLProgram* program) |
2527 { | 2530 { |
2528 if (isContextLost()) | 2531 if (isContextLost()) |
2529 return String(); | 2532 return String(); |
2530 if (!validateWebGLObject("getProgramInfoLog", program)) | 2533 if (!validateWebGLObject("getProgramInfoLog", program)) |
2531 return ""; | 2534 return ""; |
2532 return ensureNotNull(webContext()->getProgramInfoLog(objectOrZero(program)))
; | 2535 return ensureNotNull(webContext()->getProgramInfoLog(objectOrZero(program)))
; |
2533 } | 2536 } |
2534 | 2537 |
2535 ScriptValue WebGLRenderingContextBase::getRenderbufferParameter(ScriptState* scr
iptState, GLenum target, GLenum pname) | 2538 ScriptValue WebGLRenderingContextBase::getRenderbufferParameter(ScriptState* scr
iptState, GLenum target, GLenum pname) |
2536 { | 2539 { |
2537 if (isContextLost()) | 2540 if (isContextLost()) |
2538 return WebGLAny(scriptState); | 2541 return ScriptValue::createNull(scriptState); |
2539 if (target != GL_RENDERBUFFER) { | 2542 if (target != GL_RENDERBUFFER) { |
2540 synthesizeGLError(GL_INVALID_ENUM, "getRenderbufferParameter", "invalid
target"); | 2543 synthesizeGLError(GL_INVALID_ENUM, "getRenderbufferParameter", "invalid
target"); |
2541 return WebGLAny(scriptState); | 2544 return ScriptValue::createNull(scriptState); |
2542 } | 2545 } |
2543 if (!m_renderbufferBinding || !m_renderbufferBinding->object()) { | 2546 if (!m_renderbufferBinding || !m_renderbufferBinding->object()) { |
2544 synthesizeGLError(GL_INVALID_OPERATION, "getRenderbufferParameter", "no
renderbuffer bound"); | 2547 synthesizeGLError(GL_INVALID_OPERATION, "getRenderbufferParameter", "no
renderbuffer bound"); |
2545 return WebGLAny(scriptState); | 2548 return ScriptValue::createNull(scriptState); |
2546 } | 2549 } |
2547 | 2550 |
2548 GLint value = 0; | 2551 GLint value = 0; |
2549 switch (pname) { | 2552 switch (pname) { |
2550 case GL_RENDERBUFFER_WIDTH: | 2553 case GL_RENDERBUFFER_WIDTH: |
2551 case GL_RENDERBUFFER_HEIGHT: | 2554 case GL_RENDERBUFFER_HEIGHT: |
2552 case GL_RENDERBUFFER_RED_SIZE: | 2555 case GL_RENDERBUFFER_RED_SIZE: |
2553 case GL_RENDERBUFFER_GREEN_SIZE: | 2556 case GL_RENDERBUFFER_GREEN_SIZE: |
2554 case GL_RENDERBUFFER_BLUE_SIZE: | 2557 case GL_RENDERBUFFER_BLUE_SIZE: |
2555 case GL_RENDERBUFFER_ALPHA_SIZE: | 2558 case GL_RENDERBUFFER_ALPHA_SIZE: |
2556 case GL_RENDERBUFFER_DEPTH_SIZE: | 2559 case GL_RENDERBUFFER_DEPTH_SIZE: |
2557 webContext()->getRenderbufferParameteriv(target, pname, &value); | 2560 webContext()->getRenderbufferParameteriv(target, pname, &value); |
2558 return WebGLAny(scriptState, value); | 2561 return WebGLAny(scriptState, value); |
2559 case GL_RENDERBUFFER_STENCIL_SIZE: | 2562 case GL_RENDERBUFFER_STENCIL_SIZE: |
2560 if (m_renderbufferBinding->emulatedStencilBuffer()) { | 2563 if (m_renderbufferBinding->emulatedStencilBuffer()) { |
2561 webContext()->bindRenderbuffer(target, objectOrZero(m_renderbufferBi
nding->emulatedStencilBuffer())); | 2564 webContext()->bindRenderbuffer(target, objectOrZero(m_renderbufferBi
nding->emulatedStencilBuffer())); |
2562 webContext()->getRenderbufferParameteriv(target, pname, &value); | 2565 webContext()->getRenderbufferParameteriv(target, pname, &value); |
2563 webContext()->bindRenderbuffer(target, objectOrZero(m_renderbufferBi
nding.get())); | 2566 webContext()->bindRenderbuffer(target, objectOrZero(m_renderbufferBi
nding.get())); |
2564 } else { | 2567 } else { |
2565 webContext()->getRenderbufferParameteriv(target, pname, &value); | 2568 webContext()->getRenderbufferParameteriv(target, pname, &value); |
2566 } | 2569 } |
2567 return WebGLAny(scriptState, value); | 2570 return WebGLAny(scriptState, value); |
2568 case GL_RENDERBUFFER_INTERNAL_FORMAT: | 2571 case GL_RENDERBUFFER_INTERNAL_FORMAT: |
2569 return WebGLAny(scriptState, m_renderbufferBinding->internalFormat()); | 2572 return WebGLAny(scriptState, m_renderbufferBinding->internalFormat()); |
2570 default: | 2573 default: |
2571 synthesizeGLError(GL_INVALID_ENUM, "getRenderbufferParameter", "invalid
parameter name"); | 2574 synthesizeGLError(GL_INVALID_ENUM, "getRenderbufferParameter", "invalid
parameter name"); |
2572 return WebGLAny(scriptState); | 2575 return ScriptValue::createNull(scriptState); |
2573 } | 2576 } |
2574 } | 2577 } |
2575 | 2578 |
2576 ScriptValue WebGLRenderingContextBase::getShaderParameter(ScriptState* scriptSta
te, WebGLShader* shader, GLenum pname) | 2579 ScriptValue WebGLRenderingContextBase::getShaderParameter(ScriptState* scriptSta
te, WebGLShader* shader, GLenum pname) |
2577 { | 2580 { |
2578 if (isContextLost() || !validateWebGLObject("getShaderParameter", shader)) | 2581 if (isContextLost() || !validateWebGLObject("getShaderParameter", shader)) |
2579 return WebGLAny(scriptState); | 2582 return ScriptValue::createNull(scriptState); |
2580 GLint value = 0; | 2583 GLint value = 0; |
2581 switch (pname) { | 2584 switch (pname) { |
2582 case GL_DELETE_STATUS: | 2585 case GL_DELETE_STATUS: |
2583 return WebGLAny(scriptState, shader->isDeleted()); | 2586 return WebGLAny(scriptState, shader->isDeleted()); |
2584 case GL_COMPILE_STATUS: | 2587 case GL_COMPILE_STATUS: |
2585 webContext()->getShaderiv(objectOrZero(shader), pname, &value); | 2588 webContext()->getShaderiv(objectOrZero(shader), pname, &value); |
2586 return WebGLAny(scriptState, static_cast<bool>(value)); | 2589 return WebGLAny(scriptState, static_cast<bool>(value)); |
2587 case GL_SHADER_TYPE: | 2590 case GL_SHADER_TYPE: |
2588 webContext()->getShaderiv(objectOrZero(shader), pname, &value); | 2591 webContext()->getShaderiv(objectOrZero(shader), pname, &value); |
2589 return WebGLAny(scriptState, static_cast<unsigned>(value)); | 2592 return WebGLAny(scriptState, static_cast<unsigned>(value)); |
2590 default: | 2593 default: |
2591 synthesizeGLError(GL_INVALID_ENUM, "getShaderParameter", "invalid parame
ter name"); | 2594 synthesizeGLError(GL_INVALID_ENUM, "getShaderParameter", "invalid parame
ter name"); |
2592 return WebGLAny(scriptState); | 2595 return ScriptValue::createNull(scriptState); |
2593 } | 2596 } |
2594 } | 2597 } |
2595 | 2598 |
2596 String WebGLRenderingContextBase::getShaderInfoLog(WebGLShader* shader) | 2599 String WebGLRenderingContextBase::getShaderInfoLog(WebGLShader* shader) |
2597 { | 2600 { |
2598 if (isContextLost()) | 2601 if (isContextLost()) |
2599 return String(); | 2602 return String(); |
2600 if (!validateWebGLObject("getShaderInfoLog", shader)) | 2603 if (!validateWebGLObject("getShaderInfoLog", shader)) |
2601 return ""; | 2604 return ""; |
2602 return ensureNotNull(webContext()->getShaderInfoLog(objectOrZero(shader))); | 2605 return ensureNotNull(webContext()->getShaderInfoLog(objectOrZero(shader))); |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2659 } | 2662 } |
2660 } | 2663 } |
2661 } | 2664 } |
2662 | 2665 |
2663 return result; | 2666 return result; |
2664 } | 2667 } |
2665 | 2668 |
2666 ScriptValue WebGLRenderingContextBase::getTexParameter(ScriptState* scriptState,
GLenum target, GLenum pname) | 2669 ScriptValue WebGLRenderingContextBase::getTexParameter(ScriptState* scriptState,
GLenum target, GLenum pname) |
2667 { | 2670 { |
2668 if (isContextLost()) | 2671 if (isContextLost()) |
2669 return WebGLAny(scriptState); | 2672 return ScriptValue::createNull(scriptState); |
2670 WebGLTexture* tex = validateTextureBinding("getTexParameter", target, false)
; | 2673 WebGLTexture* tex = validateTextureBinding("getTexParameter", target, false)
; |
2671 if (!tex) | 2674 if (!tex) |
2672 return WebGLAny(scriptState); | 2675 return ScriptValue::createNull(scriptState); |
2673 switch (pname) { | 2676 switch (pname) { |
2674 case GL_TEXTURE_MAG_FILTER: | 2677 case GL_TEXTURE_MAG_FILTER: |
2675 case GL_TEXTURE_MIN_FILTER: | 2678 case GL_TEXTURE_MIN_FILTER: |
2676 case GL_TEXTURE_WRAP_S: | 2679 case GL_TEXTURE_WRAP_S: |
2677 case GL_TEXTURE_WRAP_T: | 2680 case GL_TEXTURE_WRAP_T: |
2678 { | 2681 { |
2679 GLint value = 0; | 2682 GLint value = 0; |
2680 webContext()->getTexParameteriv(target, pname, &value); | 2683 webContext()->getTexParameteriv(target, pname, &value); |
2681 return WebGLAny(scriptState, static_cast<unsigned>(value)); | 2684 return WebGLAny(scriptState, static_cast<unsigned>(value)); |
2682 } | 2685 } |
2683 case GL_TEXTURE_MAX_ANISOTROPY_EXT: // EXT_texture_filter_anisotropic | 2686 case GL_TEXTURE_MAX_ANISOTROPY_EXT: // EXT_texture_filter_anisotropic |
2684 if (extensionEnabled(EXTTextureFilterAnisotropicName)) { | 2687 if (extensionEnabled(EXTTextureFilterAnisotropicName)) { |
2685 GLfloat value = 0.f; | 2688 GLfloat value = 0.f; |
2686 webContext()->getTexParameterfv(target, pname, &value); | 2689 webContext()->getTexParameterfv(target, pname, &value); |
2687 return WebGLAny(scriptState, value); | 2690 return WebGLAny(scriptState, value); |
2688 } | 2691 } |
2689 synthesizeGLError(GL_INVALID_ENUM, "getTexParameter", "invalid parameter
name, EXT_texture_filter_anisotropic not enabled"); | 2692 synthesizeGLError(GL_INVALID_ENUM, "getTexParameter", "invalid parameter
name, EXT_texture_filter_anisotropic not enabled"); |
2690 return WebGLAny(scriptState); | 2693 return ScriptValue::createNull(scriptState); |
2691 default: | 2694 default: |
2692 synthesizeGLError(GL_INVALID_ENUM, "getTexParameter", "invalid parameter
name"); | 2695 synthesizeGLError(GL_INVALID_ENUM, "getTexParameter", "invalid parameter
name"); |
2693 return WebGLAny(scriptState); | 2696 return ScriptValue::createNull(scriptState); |
2694 } | 2697 } |
2695 } | 2698 } |
2696 | 2699 |
2697 ScriptValue WebGLRenderingContextBase::getUniform(ScriptState* scriptState, WebG
LProgram* program, const WebGLUniformLocation* uniformLocation) | 2700 ScriptValue WebGLRenderingContextBase::getUniform(ScriptState* scriptState, WebG
LProgram* program, const WebGLUniformLocation* uniformLocation) |
2698 { | 2701 { |
2699 if (isContextLost() || !validateWebGLObject("getUniform", program)) | 2702 if (isContextLost() || !validateWebGLObject("getUniform", program)) |
2700 return WebGLAny(scriptState); | 2703 return ScriptValue::createNull(scriptState); |
2701 if (!uniformLocation || uniformLocation->program() != program) { | 2704 if (!uniformLocation || uniformLocation->program() != program) { |
2702 synthesizeGLError(GL_INVALID_OPERATION, "getUniform", "no uniformlocatio
n or not valid for this program"); | 2705 synthesizeGLError(GL_INVALID_OPERATION, "getUniform", "no uniformlocatio
n or not valid for this program"); |
2703 return WebGLAny(scriptState); | 2706 return ScriptValue::createNull(scriptState); |
2704 } | 2707 } |
2705 GLint location = uniformLocation->location(); | 2708 GLint location = uniformLocation->location(); |
2706 | 2709 |
2707 // FIXME: make this more efficient using WebGLUniformLocation and caching ty
pes in it | 2710 // FIXME: make this more efficient using WebGLUniformLocation and caching ty
pes in it |
2708 GLint activeUniforms = 0; | 2711 GLint activeUniforms = 0; |
2709 webContext()->getProgramiv(objectOrZero(program), GL_ACTIVE_UNIFORMS, &activ
eUniforms); | 2712 webContext()->getProgramiv(objectOrZero(program), GL_ACTIVE_UNIFORMS, &activ
eUniforms); |
2710 for (GLint i = 0; i < activeUniforms; i++) { | 2713 for (GLint i = 0; i < activeUniforms; i++) { |
2711 blink::WebGraphicsContext3D::ActiveInfo info; | 2714 blink::WebGraphicsContext3D::ActiveInfo info; |
2712 if (!webContext()->getActiveUniform(objectOrZero(program), i, info)) | 2715 if (!webContext()->getActiveUniform(objectOrZero(program), i, info)) |
2713 return WebGLAny(scriptState); | 2716 return ScriptValue::createNull(scriptState); |
2714 String name = info.name; | 2717 String name = info.name; |
2715 StringBuilder nameBuilder; | 2718 StringBuilder nameBuilder; |
2716 // Strip "[0]" from the name if it's an array. | 2719 // Strip "[0]" from the name if it's an array. |
2717 if (info.size > 1 && name.endsWith("[0]")) | 2720 if (info.size > 1 && name.endsWith("[0]")) |
2718 info.name = name.left(name.length() - 3); | 2721 info.name = name.left(name.length() - 3); |
2719 // If it's an array, we need to iterate through each element, appending
"[index]" to the name. | 2722 // If it's an array, we need to iterate through each element, appending
"[index]" to the name. |
2720 for (GLint index = 0; index < info.size; ++index) { | 2723 for (GLint index = 0; index < info.size; ++index) { |
2721 nameBuilder.clear(); | 2724 nameBuilder.clear(); |
2722 nameBuilder.append(info.name); | 2725 nameBuilder.append(info.name); |
2723 if (info.size > 1 && index >= 1) { | 2726 if (info.size > 1 && index >= 1) { |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2793 length = 16; | 2796 length = 16; |
2794 break; | 2797 break; |
2795 case GL_SAMPLER_2D: | 2798 case GL_SAMPLER_2D: |
2796 case GL_SAMPLER_CUBE: | 2799 case GL_SAMPLER_CUBE: |
2797 baseType = GL_INT; | 2800 baseType = GL_INT; |
2798 length = 1; | 2801 length = 1; |
2799 break; | 2802 break; |
2800 default: | 2803 default: |
2801 // Can't handle this type | 2804 // Can't handle this type |
2802 synthesizeGLError(GL_INVALID_VALUE, "getUniform", "unhandled
type"); | 2805 synthesizeGLError(GL_INVALID_VALUE, "getUniform", "unhandled
type"); |
2803 return WebGLAny(scriptState); | 2806 return ScriptValue::createNull(scriptState); |
2804 } | 2807 } |
2805 switch (baseType) { | 2808 switch (baseType) { |
2806 case GL_FLOAT: { | 2809 case GL_FLOAT: { |
2807 GLfloat value[16] = {0}; | 2810 GLfloat value[16] = {0}; |
2808 webContext()->getUniformfv(objectOrZero(program), location,
value); | 2811 webContext()->getUniformfv(objectOrZero(program), location,
value); |
2809 if (length == 1) | 2812 if (length == 1) |
2810 return WebGLAny(scriptState, value[0]); | 2813 return WebGLAny(scriptState, value[0]); |
2811 return WebGLAny(scriptState, DOMFloat32Array::create(value,
length)); | 2814 return WebGLAny(scriptState, DOMFloat32Array::create(value,
length)); |
2812 } | 2815 } |
2813 case GL_INT: { | 2816 case GL_INT: { |
(...skipping 15 matching lines...) Expand all Loading... |
2829 return WebGLAny(scriptState, static_cast<bool>(value[0])); | 2832 return WebGLAny(scriptState, static_cast<bool>(value[0])); |
2830 } | 2833 } |
2831 default: | 2834 default: |
2832 notImplemented(); | 2835 notImplemented(); |
2833 } | 2836 } |
2834 } | 2837 } |
2835 } | 2838 } |
2836 } | 2839 } |
2837 // If we get here, something went wrong in our unfortunately complex logic a
bove | 2840 // If we get here, something went wrong in our unfortunately complex logic a
bove |
2838 synthesizeGLError(GL_INVALID_VALUE, "getUniform", "unknown error"); | 2841 synthesizeGLError(GL_INVALID_VALUE, "getUniform", "unknown error"); |
2839 return WebGLAny(scriptState); | 2842 return ScriptValue::createNull(scriptState); |
2840 } | 2843 } |
2841 | 2844 |
2842 PassRefPtrWillBeRawPtr<WebGLUniformLocation> WebGLRenderingContextBase::getUnifo
rmLocation(WebGLProgram* program, const String& name) | 2845 PassRefPtrWillBeRawPtr<WebGLUniformLocation> WebGLRenderingContextBase::getUnifo
rmLocation(WebGLProgram* program, const String& name) |
2843 { | 2846 { |
2844 if (isContextLost() || !validateWebGLObject("getUniformLocation", program)) | 2847 if (isContextLost() || !validateWebGLObject("getUniformLocation", program)) |
2845 return nullptr; | 2848 return nullptr; |
2846 if (!validateLocationLength("getUniformLocation", name)) | 2849 if (!validateLocationLength("getUniformLocation", name)) |
2847 return nullptr; | 2850 return nullptr; |
2848 if (!validateString("getUniformLocation", name)) | 2851 if (!validateString("getUniformLocation", name)) |
2849 return nullptr; | 2852 return nullptr; |
2850 if (isPrefixReserved(name)) | 2853 if (isPrefixReserved(name)) |
2851 return nullptr; | 2854 return nullptr; |
2852 if (!program->linkStatus()) { | 2855 if (!program->linkStatus()) { |
2853 synthesizeGLError(GL_INVALID_OPERATION, "getUniformLocation", "program n
ot linked"); | 2856 synthesizeGLError(GL_INVALID_OPERATION, "getUniformLocation", "program n
ot linked"); |
2854 return nullptr; | 2857 return nullptr; |
2855 } | 2858 } |
2856 GLint uniformLocation = webContext()->getUniformLocation(objectOrZero(progra
m), name.utf8().data()); | 2859 GLint uniformLocation = webContext()->getUniformLocation(objectOrZero(progra
m), name.utf8().data()); |
2857 if (uniformLocation == -1) | 2860 if (uniformLocation == -1) |
2858 return nullptr; | 2861 return nullptr; |
2859 return WebGLUniformLocation::create(program, uniformLocation); | 2862 return WebGLUniformLocation::create(program, uniformLocation); |
2860 } | 2863 } |
2861 | 2864 |
2862 ScriptValue WebGLRenderingContextBase::getVertexAttrib(ScriptState* scriptState,
GLuint index, GLenum pname) | 2865 ScriptValue WebGLRenderingContextBase::getVertexAttrib(ScriptState* scriptState,
GLuint index, GLenum pname) |
2863 { | 2866 { |
2864 if (isContextLost()) | 2867 if (isContextLost()) |
2865 return WebGLAny(scriptState); | 2868 return ScriptValue::createNull(scriptState); |
2866 if (index >= m_maxVertexAttribs) { | 2869 if (index >= m_maxVertexAttribs) { |
2867 synthesizeGLError(GL_INVALID_VALUE, "getVertexAttrib", "index out of ran
ge"); | 2870 synthesizeGLError(GL_INVALID_VALUE, "getVertexAttrib", "index out of ran
ge"); |
2868 return WebGLAny(scriptState); | 2871 return ScriptValue::createNull(scriptState); |
2869 } | 2872 } |
2870 const WebGLVertexArrayObjectOES::VertexAttribState& state = m_boundVertexArr
ayObject->getVertexAttribState(index); | 2873 const WebGLVertexArrayObjectOES::VertexAttribState& state = m_boundVertexArr
ayObject->getVertexAttribState(index); |
2871 | 2874 |
2872 if (extensionEnabled(ANGLEInstancedArraysName) && pname == GL_VERTEX_ATTRIB_
ARRAY_DIVISOR_ANGLE) | 2875 if (extensionEnabled(ANGLEInstancedArraysName) && pname == GL_VERTEX_ATTRIB_
ARRAY_DIVISOR_ANGLE) |
2873 return WebGLAny(scriptState, state.divisor); | 2876 return WebGLAny(scriptState, state.divisor); |
2874 | 2877 |
2875 switch (pname) { | 2878 switch (pname) { |
2876 case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: | 2879 case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: |
2877 if (!state.bufferBinding || !state.bufferBinding->object()) | 2880 if (!state.bufferBinding || !state.bufferBinding->object()) |
2878 return WebGLAny(scriptState); | 2881 return ScriptValue::createNull(scriptState); |
2879 return WebGLAny(scriptState, PassRefPtrWillBeRawPtr<WebGLObject>(state.b
ufferBinding.get())); | 2882 return WebGLAny(scriptState, PassRefPtrWillBeRawPtr<WebGLObject>(state.b
ufferBinding.get())); |
2880 case GL_VERTEX_ATTRIB_ARRAY_ENABLED: | 2883 case GL_VERTEX_ATTRIB_ARRAY_ENABLED: |
2881 return WebGLAny(scriptState, state.enabled); | 2884 return WebGLAny(scriptState, state.enabled); |
2882 case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED: | 2885 case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED: |
2883 return WebGLAny(scriptState, state.normalized); | 2886 return WebGLAny(scriptState, state.normalized); |
2884 case GL_VERTEX_ATTRIB_ARRAY_SIZE: | 2887 case GL_VERTEX_ATTRIB_ARRAY_SIZE: |
2885 return WebGLAny(scriptState, state.size); | 2888 return WebGLAny(scriptState, state.size); |
2886 case GL_VERTEX_ATTRIB_ARRAY_STRIDE: | 2889 case GL_VERTEX_ATTRIB_ARRAY_STRIDE: |
2887 return WebGLAny(scriptState, state.originalStride); | 2890 return WebGLAny(scriptState, state.originalStride); |
2888 case GL_VERTEX_ATTRIB_ARRAY_TYPE: | 2891 case GL_VERTEX_ATTRIB_ARRAY_TYPE: |
2889 return WebGLAny(scriptState, state.type); | 2892 return WebGLAny(scriptState, state.type); |
2890 case GL_CURRENT_VERTEX_ATTRIB: | 2893 case GL_CURRENT_VERTEX_ATTRIB: |
2891 return WebGLAny(scriptState, DOMFloat32Array::create(m_vertexAttribValue
[index].value, 4)); | 2894 return WebGLAny(scriptState, DOMFloat32Array::create(m_vertexAttribValue
[index].value, 4)); |
2892 default: | 2895 default: |
2893 synthesizeGLError(GL_INVALID_ENUM, "getVertexAttrib", "invalid parameter
name"); | 2896 synthesizeGLError(GL_INVALID_ENUM, "getVertexAttrib", "invalid parameter
name"); |
2894 return WebGLAny(scriptState); | 2897 return ScriptValue::createNull(scriptState); |
2895 } | 2898 } |
2896 } | 2899 } |
2897 | 2900 |
2898 long long WebGLRenderingContextBase::getVertexAttribOffset(GLuint index, GLenum
pname) | 2901 long long WebGLRenderingContextBase::getVertexAttribOffset(GLuint index, GLenum
pname) |
2899 { | 2902 { |
2900 if (isContextLost()) | 2903 if (isContextLost()) |
2901 return 0; | 2904 return 0; |
2902 if (pname != GL_VERTEX_ATTRIB_ARRAY_POINTER) { | 2905 if (pname != GL_VERTEX_ATTRIB_ARRAY_POINTER) { |
2903 synthesizeGLError(GL_INVALID_ENUM, "getVertexAttribOffset", "invalid par
ameter name"); | 2906 synthesizeGLError(GL_INVALID_ENUM, "getVertexAttribOffset", "invalid par
ameter name"); |
2904 return 0; | 2907 return 0; |
(...skipping 1684 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4589 { | 4592 { |
4590 unsigned need = WebGLImageConversion::getChannelBitsByFormat(texInternalForm
at); | 4593 unsigned need = WebGLImageConversion::getChannelBitsByFormat(texInternalForm
at); |
4591 unsigned have = WebGLImageConversion::getChannelBitsByFormat(colorBufferForm
at); | 4594 unsigned have = WebGLImageConversion::getChannelBitsByFormat(colorBufferForm
at); |
4592 return (need & have) == need; | 4595 return (need & have) == need; |
4593 } | 4596 } |
4594 | 4597 |
4595 GLenum WebGLRenderingContextBase::boundFramebufferColorFormat() | 4598 GLenum WebGLRenderingContextBase::boundFramebufferColorFormat() |
4596 { | 4599 { |
4597 if (m_framebufferBinding && m_framebufferBinding->object()) | 4600 if (m_framebufferBinding && m_framebufferBinding->object()) |
4598 return m_framebufferBinding->colorBufferFormat(); | 4601 return m_framebufferBinding->colorBufferFormat(); |
4599 if (m_requestedAttributes->alpha()) | 4602 if (m_requestedAttributes.alpha()) |
4600 return GL_RGBA; | 4603 return GL_RGBA; |
4601 return GL_RGB; | 4604 return GL_RGB; |
4602 } | 4605 } |
4603 | 4606 |
4604 WebGLTexture* WebGLRenderingContextBase::validateTextureBinding(const char* func
tionName, GLenum target, bool useSixEnumsForCubeMap) | 4607 WebGLTexture* WebGLRenderingContextBase::validateTextureBinding(const char* func
tionName, GLenum target, bool useSixEnumsForCubeMap) |
4605 { | 4608 { |
4606 WebGLTexture* tex = nullptr; | 4609 WebGLTexture* tex = nullptr; |
4607 switch (target) { | 4610 switch (target) { |
4608 case GL_TEXTURE_2D: | 4611 case GL_TEXTURE_2D: |
4609 tex = m_textureUnits[m_activeTextureUnit].m_texture2DBinding.get(); | 4612 tex = m_textureUnits[m_activeTextureUnit].m_texture2DBinding.get(); |
(...skipping 986 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5596 // 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. | 5599 // 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. |
5597 if (drawingBuffer()) { | 5600 if (drawingBuffer()) { |
5598 #if ENABLE(OILPAN) | 5601 #if ENABLE(OILPAN) |
5599 m_sharedWebGraphicsContext3D->dispose(); | 5602 m_sharedWebGraphicsContext3D->dispose(); |
5600 #else | 5603 #else |
5601 m_drawingBuffer->beginDestruction(); | 5604 m_drawingBuffer->beginDestruction(); |
5602 m_drawingBuffer.clear(); | 5605 m_drawingBuffer.clear(); |
5603 #endif | 5606 #endif |
5604 } | 5607 } |
5605 | 5608 |
5606 blink::WebGraphicsContext3D::Attributes attributes = m_requestedAttributes->
attributes(canvas()->document().topDocument().url().string(), settings, version(
)); | 5609 blink::WebGraphicsContext3D::Attributes attributes = toWebGraphicsContext3DA
ttributes(m_requestedAttributes, canvas()->document().topDocument().url().string
(), settings, version()); |
5607 OwnPtr<blink::WebGraphicsContext3D> context = adoptPtr(blink::Platform::curr
ent()->createOffscreenGraphicsContext3D(attributes, 0)); | 5610 OwnPtr<blink::WebGraphicsContext3D> context = adoptPtr(blink::Platform::curr
ent()->createOffscreenGraphicsContext3D(attributes, 0)); |
5608 RefPtr<DrawingBuffer> buffer; | 5611 RefPtr<DrawingBuffer> buffer; |
5609 if (context) { | 5612 if (context) { |
5610 // Construct a new drawing buffer with the new WebGraphicsContext3D. | 5613 // Construct a new drawing buffer with the new WebGraphicsContext3D. |
5611 buffer = createDrawingBuffer(context.release()); | 5614 buffer = createDrawingBuffer(context.release()); |
5612 // If DrawingBuffer::create() fails to allocate a fbo, |drawingBuffer| i
s set to null. | 5615 // If DrawingBuffer::create() fails to allocate a fbo, |drawingBuffer| i
s set to null. |
5613 } | 5616 } |
5614 if (!buffer) { | 5617 if (!buffer) { |
5615 if (m_contextLostMode == RealLostContext) { | 5618 if (m_contextLostMode == RealLostContext) { |
5616 m_restoreTimer.startOneShot(secondsBetweenRestoreAttempts, FROM_HERE
); | 5619 m_restoreTimer.startOneShot(secondsBetweenRestoreAttempts, FROM_HERE
); |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5735 InspectorInstrumentation::didFireWebGLWarning(canvas()); | 5738 InspectorInstrumentation::didFireWebGLWarning(canvas()); |
5736 } | 5739 } |
5737 | 5740 |
5738 void WebGLRenderingContextBase::applyStencilTest() | 5741 void WebGLRenderingContextBase::applyStencilTest() |
5739 { | 5742 { |
5740 bool haveStencilBuffer = false; | 5743 bool haveStencilBuffer = false; |
5741 | 5744 |
5742 if (m_framebufferBinding) | 5745 if (m_framebufferBinding) |
5743 haveStencilBuffer = m_framebufferBinding->hasStencilBuffer(); | 5746 haveStencilBuffer = m_framebufferBinding->hasStencilBuffer(); |
5744 else { | 5747 else { |
5745 RefPtrWillBeRawPtr<WebGLContextAttributes> attributes = getContextAttrib
utes(); | 5748 Nullable<WebGLContextAttributes> attributes; |
5746 haveStencilBuffer = attributes->stencil(); | 5749 getContextAttributes(attributes); |
| 5750 haveStencilBuffer = !attributes.isNull() && attributes.get().stencil(); |
5747 } | 5751 } |
5748 enableOrDisable(GL_STENCIL_TEST, | 5752 enableOrDisable(GL_STENCIL_TEST, |
5749 m_stencilEnabled && haveStencilBuffer); | 5753 m_stencilEnabled && haveStencilBuffer); |
5750 } | 5754 } |
5751 | 5755 |
5752 void WebGLRenderingContextBase::enableOrDisable(GLenum capability, bool enable) | 5756 void WebGLRenderingContextBase::enableOrDisable(GLenum capability, bool enable) |
5753 { | 5757 { |
5754 if (isContextLost()) | 5758 if (isContextLost()) |
5755 return; | 5759 return; |
5756 if (enable) | 5760 if (enable) |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5863 return m_sharedWebGraphicsContext3D ? m_sharedWebGraphicsContext3D->drawingB
uffer() : 0; | 5867 return m_sharedWebGraphicsContext3D ? m_sharedWebGraphicsContext3D->drawingB
uffer() : 0; |
5864 } | 5868 } |
5865 #else | 5869 #else |
5866 DrawingBuffer* WebGLRenderingContextBase::drawingBuffer() const | 5870 DrawingBuffer* WebGLRenderingContextBase::drawingBuffer() const |
5867 { | 5871 { |
5868 return m_drawingBuffer.get(); | 5872 return m_drawingBuffer.get(); |
5869 } | 5873 } |
5870 #endif | 5874 #endif |
5871 | 5875 |
5872 } // namespace blink | 5876 } // namespace blink |
OLD | NEW |