| 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 115 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 126                               GLboolean* colorMask, | 126                               GLboolean* colorMask, | 
| 127                               DrawingBuffer*); | 127                               DrawingBuffer*); | 
| 128   ~ScopedRGBEmulationColorMask(); | 128   ~ScopedRGBEmulationColorMask(); | 
| 129 | 129 | 
| 130  private: | 130  private: | 
| 131   gpu::gles2::GLES2Interface* m_contextGL; | 131   gpu::gles2::GLES2Interface* m_contextGL; | 
| 132   GLboolean m_colorMask[4]; | 132   GLboolean m_colorMask[4]; | 
| 133   const bool m_requiresEmulation; | 133   const bool m_requiresEmulation; | 
| 134 }; | 134 }; | 
| 135 | 135 | 
| 136 class MODULES_EXPORT WebGLRenderingContextBase : public CanvasRenderingContext { | 136 class MODULES_EXPORT WebGLRenderingContextBase : public CanvasRenderingContext, | 
|  | 137                                                  public DrawingBuffer::Client { | 
| 137   WTF_MAKE_NONCOPYABLE(WebGLRenderingContextBase); | 138   WTF_MAKE_NONCOPYABLE(WebGLRenderingContextBase); | 
| 138 | 139 | 
| 139  public: | 140  public: | 
| 140   ~WebGLRenderingContextBase() override; | 141   ~WebGLRenderingContextBase() override; | 
| 141 | 142 | 
| 142   virtual String contextName() const = 0; | 143   virtual String contextName() const = 0; | 
| 143   virtual void registerContextExtensions() = 0; | 144   virtual void registerContextExtensions() = 0; | 
| 144 | 145 | 
| 145   virtual void initializeNewContext(); | 146   virtual void initializeNewContext(); | 
| 146 | 147 | 
| (...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 539   void forceLostContext(LostContextMode, AutoRecoveryMethod); | 540   void forceLostContext(LostContextMode, AutoRecoveryMethod); | 
| 540   void forceRestoreContext(); | 541   void forceRestoreContext(); | 
| 541   void loseContextImpl(LostContextMode, AutoRecoveryMethod); | 542   void loseContextImpl(LostContextMode, AutoRecoveryMethod); | 
| 542 | 543 | 
| 543   // Utilities to restore GL state to match the rendering context's | 544   // Utilities to restore GL state to match the rendering context's | 
| 544   // saved state. Use these after contextGL()-based state changes that | 545   // saved state. Use these after contextGL()-based state changes that | 
| 545   // bypass the rendering context. | 546   // bypass the rendering context. | 
| 546   void restoreScissorEnabled(); | 547   void restoreScissorEnabled(); | 
| 547   void restoreScissorBox(); | 548   void restoreScissorBox(); | 
| 548   void restoreClearColor(); | 549   void restoreClearColor(); | 
| 549   void restoreClearDepthf(); |  | 
| 550   void restoreClearStencil(); |  | 
| 551   void restoreStencilMaskSeparate(); |  | 
| 552   void restoreColorMask(); | 550   void restoreColorMask(); | 
| 553   void restoreDepthMask(); |  | 
| 554 | 551 | 
| 555   gpu::gles2::GLES2Interface* contextGL() const { | 552   gpu::gles2::GLES2Interface* contextGL() const { | 
| 556     DrawingBuffer* d = drawingBuffer(); | 553     DrawingBuffer* d = drawingBuffer(); | 
| 557     if (!d) | 554     if (!d) | 
| 558       return nullptr; | 555       return nullptr; | 
| 559     return d->contextGL(); | 556     return d->contextGL(); | 
| 560   } | 557   } | 
| 561   WebGLContextGroup* contextGroup() const { return m_contextGroup.get(); } | 558   WebGLContextGroup* contextGroup() const { return m_contextGroup.get(); } | 
| 562   Extensions3DUtil* extensionsUtil(); | 559   Extensions3DUtil* extensionsUtil(); | 
| 563 | 560 | 
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 614   friend class WebGLDebugShaders; | 611   friend class WebGLDebugShaders; | 
| 615   friend class WebGLCompressedTextureASTC; | 612   friend class WebGLCompressedTextureASTC; | 
| 616   friend class WebGLCompressedTextureATC; | 613   friend class WebGLCompressedTextureATC; | 
| 617   friend class WebGLCompressedTextureETC; | 614   friend class WebGLCompressedTextureETC; | 
| 618   friend class WebGLCompressedTextureETC1; | 615   friend class WebGLCompressedTextureETC1; | 
| 619   friend class WebGLCompressedTexturePVRTC; | 616   friend class WebGLCompressedTexturePVRTC; | 
| 620   friend class WebGLCompressedTextureS3TC; | 617   friend class WebGLCompressedTextureS3TC; | 
| 621   friend class WebGLCompressedTextureS3TCsRGB; | 618   friend class WebGLCompressedTextureS3TCsRGB; | 
| 622   friend class WebGLRenderingContextErrorMessageCallback; | 619   friend class WebGLRenderingContextErrorMessageCallback; | 
| 623   friend class WebGLVertexArrayObjectBase; | 620   friend class WebGLVertexArrayObjectBase; | 
|  | 621   friend class ScopedDrawingBufferBinder; | 
| 624   friend class ScopedTexture2DRestorer; | 622   friend class ScopedTexture2DRestorer; | 
| 625   friend class ScopedFramebufferRestorer; | 623   friend class ScopedFramebufferRestorer; | 
| 626   // To allow V8WebGL[2]RenderingContext to call visitChildDOMWrappers. | 624   // To allow V8WebGL[2]RenderingContext to call visitChildDOMWrappers. | 
| 627   friend class V8WebGLRenderingContext; | 625   friend class V8WebGLRenderingContext; | 
| 628 | 626 | 
| 629   WebGLRenderingContextBase(HTMLCanvasElement*, | 627   WebGLRenderingContextBase(HTMLCanvasElement*, | 
| 630                             std::unique_ptr<WebGraphicsContext3DProvider>, | 628                             std::unique_ptr<WebGraphicsContext3DProvider>, | 
| 631                             const CanvasContextCreationAttributes&, | 629                             const CanvasContextCreationAttributes&, | 
| 632                             unsigned); | 630                             unsigned); | 
| 633   WebGLRenderingContextBase(OffscreenCanvas*, | 631   WebGLRenderingContextBase(OffscreenCanvas*, | 
| 634                             std::unique_ptr<WebGraphicsContext3DProvider>, | 632                             std::unique_ptr<WebGraphicsContext3DProvider>, | 
| 635                             const CanvasContextCreationAttributes&, | 633                             const CanvasContextCreationAttributes&, | 
| 636                             unsigned); | 634                             unsigned); | 
| 637   PassRefPtr<DrawingBuffer> createDrawingBuffer( | 635   PassRefPtr<DrawingBuffer> createDrawingBuffer( | 
| 638       std::unique_ptr<WebGraphicsContext3DProvider>, | 636       std::unique_ptr<WebGraphicsContext3DProvider>, | 
| 639       DrawingBuffer::ChromiumImageUsage); | 637       DrawingBuffer::ChromiumImageUsage); | 
| 640   void setupFlags(); | 638   void setupFlags(); | 
| 641 | 639 | 
| 642   // CanvasRenderingContext implementation. | 640   // CanvasRenderingContext implementation. | 
| 643   bool is3d() const override { return true; } | 641   bool is3d() const override { return true; } | 
| 644   bool isAccelerated() const override { return true; } | 642   bool isAccelerated() const override { return true; } | 
| 645   void setIsHidden(bool) override; | 643   void setIsHidden(bool) override; | 
| 646   bool paintRenderingResultsToCanvas(SourceDrawingBuffer) override; | 644   bool paintRenderingResultsToCanvas(SourceDrawingBuffer) override; | 
| 647   WebLayer* platformLayer() const override; | 645   WebLayer* platformLayer() const override; | 
| 648   void stop() override; | 646   void stop() override; | 
| 649 | 647 | 
|  | 648   // DrawingBuffer::Client implementation. | 
|  | 649   bool DrawingBufferClientIsBoundForDraw() override; | 
|  | 650   void DrawingBufferClientRestoreScissorTest() override; | 
|  | 651   void DrawingBufferClientRestoreMaskAndClearValues() override; | 
|  | 652   void DrawingBufferClientRestorePixelPackAlignment() override; | 
|  | 653   void DrawingBufferClientRestoreTexture2DBinding() override; | 
|  | 654   void DrawingBufferClientRestoreRenderbufferBinding() override; | 
|  | 655   void DrawingBufferClientRestoreFramebufferBinding() override; | 
|  | 656   void DrawingBufferClientRestorePixelUnpackBufferBinding() override; | 
|  | 657 | 
| 650   void addSharedObject(WebGLSharedObject*); | 658   void addSharedObject(WebGLSharedObject*); | 
| 651   void addContextObject(WebGLContextObject*); | 659   void addContextObject(WebGLContextObject*); | 
| 652   void detachAndRemoveAllObjects(); | 660   void detachAndRemoveAllObjects(); | 
| 653 | 661 | 
| 654   virtual void destroyContext(); | 662   virtual void destroyContext(); | 
| 655   void markContextChanged(ContentChangeType); | 663   void markContextChanged(ContentChangeType); | 
| 656 | 664 | 
| 657   void onErrorMessage(const char*, int32_t id); | 665   void onErrorMessage(const char*, int32_t id); | 
| 658 | 666 | 
| 659   void notifyCanvasContextChanged(); | 667   void notifyCanvasContextChanged(); | 
| (...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 910   class ScopedDrawingBufferBinder { | 918   class ScopedDrawingBufferBinder { | 
| 911     STACK_ALLOCATED(); | 919     STACK_ALLOCATED(); | 
| 912 | 920 | 
| 913    public: | 921    public: | 
| 914     ScopedDrawingBufferBinder(DrawingBuffer* drawingBuffer, | 922     ScopedDrawingBufferBinder(DrawingBuffer* drawingBuffer, | 
| 915                               WebGLFramebuffer* framebufferBinding) | 923                               WebGLFramebuffer* framebufferBinding) | 
| 916         : m_drawingBuffer(drawingBuffer), | 924         : m_drawingBuffer(drawingBuffer), | 
| 917           m_readFramebufferBinding(framebufferBinding) { | 925           m_readFramebufferBinding(framebufferBinding) { | 
| 918       // Commit DrawingBuffer if needed (e.g., for multisampling) | 926       // Commit DrawingBuffer if needed (e.g., for multisampling) | 
| 919       if (!m_readFramebufferBinding && m_drawingBuffer) | 927       if (!m_readFramebufferBinding && m_drawingBuffer) | 
| 920         m_drawingBuffer->commit(); | 928         m_drawingBuffer->resolveAndBindForReadAndDraw(); | 
| 921     } | 929     } | 
| 922 | 930 | 
| 923     ~ScopedDrawingBufferBinder() { | 931     ~ScopedDrawingBufferBinder() { | 
| 924       // Restore DrawingBuffer if needed | 932       // Restore DrawingBuffer if needed | 
| 925       if (!m_readFramebufferBinding && m_drawingBuffer) | 933       if (!m_readFramebufferBinding && m_drawingBuffer) | 
| 926         m_drawingBuffer->restoreFramebufferBindings(); | 934         m_drawingBuffer->restoreFramebufferBindings(); | 
| 927     } | 935     } | 
| 928 | 936 | 
| 929    private: | 937    private: | 
| 930     DrawingBuffer* m_drawingBuffer; | 938     DrawingBuffer* m_drawingBuffer; | 
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 970     // Skip clearing the backbuffer. | 978     // Skip clearing the backbuffer. | 
| 971     Skipped, | 979     Skipped, | 
| 972     // Clear the backbuffer. | 980     // Clear the backbuffer. | 
| 973     JustClear, | 981     JustClear, | 
| 974     // Combine webgl.clear() API with the backbuffer clear, so webgl.clear() | 982     // Combine webgl.clear() API with the backbuffer clear, so webgl.clear() | 
| 975     // doesn't have to call glClear() again. | 983     // doesn't have to call glClear() again. | 
| 976     CombinedClear | 984     CombinedClear | 
| 977   }; | 985   }; | 
| 978   HowToClear clearIfComposited(GLbitfield clearMask = 0); | 986   HowToClear clearIfComposited(GLbitfield clearMask = 0); | 
| 979 | 987 | 
| 980   // Helper to restore state that clearing the framebuffer may destroy. |  | 
| 981   void restoreStateAfterClear(); |  | 
| 982 |  | 
| 983   // Convert texture internal format. | 988   // Convert texture internal format. | 
| 984   GLenum convertTexInternalFormat(GLenum internalformat, GLenum type); | 989   GLenum convertTexInternalFormat(GLenum internalformat, GLenum type); | 
| 985 | 990 | 
| 986   enum TexImageFunctionType { | 991   enum TexImageFunctionType { | 
| 987     TexImage, | 992     TexImage, | 
| 988     TexSubImage, | 993     TexSubImage, | 
| 989     CopyTexImage, | 994     CopyTexImage, | 
| 990     CompressedTexImage | 995     CompressedTexImage | 
| 991   }; | 996   }; | 
| 992   enum TexImageFunctionID { | 997   enum TexImageFunctionID { | 
| (...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1552                   context, | 1557                   context, | 
| 1553                   context->is3d(), | 1558                   context->is3d(), | 
| 1554                   context.is3d()); | 1559                   context.is3d()); | 
| 1555 | 1560 | 
| 1556 }  // namespace blink | 1561 }  // namespace blink | 
| 1557 | 1562 | 
| 1558 WTF_ALLOW_MOVE_INIT_AND_COMPARE_WITH_MEM_FUNCTIONS( | 1563 WTF_ALLOW_MOVE_INIT_AND_COMPARE_WITH_MEM_FUNCTIONS( | 
| 1559     blink::WebGLRenderingContextBase::TextureUnitState); | 1564     blink::WebGLRenderingContextBase::TextureUnitState); | 
| 1560 | 1565 | 
| 1561 #endif  // WebGLRenderingContextBase_h | 1566 #endif  // WebGLRenderingContextBase_h | 
| OLD | NEW | 
|---|