Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(574)

Side by Side Diff: third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.h

Issue 2402603002: State management cleanup (Closed)
Patch Set: Make state dirtying explosive Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 GLboolean* colorMask, 125 GLboolean* colorMask,
126 DrawingBuffer*); 126 DrawingBuffer*);
127 ~ScopedRGBEmulationColorMask(); 127 ~ScopedRGBEmulationColorMask();
128 128
129 private: 129 private:
130 gpu::gles2::GLES2Interface* m_contextGL; 130 gpu::gles2::GLES2Interface* m_contextGL;
131 GLboolean m_colorMask[4]; 131 GLboolean m_colorMask[4];
132 const bool m_requiresEmulation; 132 const bool m_requiresEmulation;
133 }; 133 };
134 134
135 class MODULES_EXPORT WebGLRenderingContextBase : public CanvasRenderingContext { 135 class MODULES_EXPORT WebGLRenderingContextBase
136 : public CanvasRenderingContext,
137 public DrawingBufferStateTracker {
136 WTF_MAKE_NONCOPYABLE(WebGLRenderingContextBase); 138 WTF_MAKE_NONCOPYABLE(WebGLRenderingContextBase);
137 139
138 public: 140 public:
139 ~WebGLRenderingContextBase() override; 141 ~WebGLRenderingContextBase() override;
140 142
141 virtual String contextName() const = 0; 143 virtual String contextName() const = 0;
142 virtual void registerContextExtensions() = 0; 144 virtual void registerContextExtensions() = 0;
143 145
144 virtual void initializeNewContext(); 146 virtual void initializeNewContext();
145 147
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after
538 void forceLostContext(LostContextMode, AutoRecoveryMethod); 540 void forceLostContext(LostContextMode, AutoRecoveryMethod);
539 void forceRestoreContext(); 541 void forceRestoreContext();
540 void loseContextImpl(LostContextMode, AutoRecoveryMethod); 542 void loseContextImpl(LostContextMode, AutoRecoveryMethod);
541 543
542 // Utilities to restore GL state to match the rendering context's 544 // Utilities to restore GL state to match the rendering context's
543 // saved state. Use these after contextGL()-based state changes that 545 // saved state. Use these after contextGL()-based state changes that
544 // bypass the rendering context. 546 // bypass the rendering context.
545 void restoreScissorEnabled(); 547 void restoreScissorEnabled();
546 void restoreScissorBox(); 548 void restoreScissorBox();
547 void restoreClearColor(); 549 void restoreClearColor();
548 void restoreClearDepthf();
549 void restoreClearStencil();
550 void restoreStencilMaskSeparate();
551 void restoreColorMask(); 550 void restoreColorMask();
552 void restoreDepthMask();
553 551
554 gpu::gles2::GLES2Interface* contextGL() const { 552 gpu::gles2::GLES2Interface* contextGL() const {
555 DrawingBuffer* d = drawingBuffer(); 553 DrawingBuffer* d = drawingBuffer();
556 if (!d) 554 if (!d)
557 return nullptr; 555 return nullptr;
558 return d->contextGL(); 556 return d->contextGL();
559 } 557 }
560 WebGLContextGroup* contextGroup() const { return m_contextGroup.get(); } 558 WebGLContextGroup* contextGroup() const { return m_contextGroup.get(); }
561 Extensions3DUtil* extensionsUtil(); 559 Extensions3DUtil* extensionsUtil();
562 560
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
610 friend class WebGLDebugShaders; 608 friend class WebGLDebugShaders;
611 friend class WebGLCompressedTextureASTC; 609 friend class WebGLCompressedTextureASTC;
612 friend class WebGLCompressedTextureATC; 610 friend class WebGLCompressedTextureATC;
613 friend class WebGLCompressedTextureES30; 611 friend class WebGLCompressedTextureES30;
614 friend class WebGLCompressedTextureETC1; 612 friend class WebGLCompressedTextureETC1;
615 friend class WebGLCompressedTexturePVRTC; 613 friend class WebGLCompressedTexturePVRTC;
616 friend class WebGLCompressedTextureS3TC; 614 friend class WebGLCompressedTextureS3TC;
617 friend class WebGLCompressedTextureS3TCsRGB; 615 friend class WebGLCompressedTextureS3TCsRGB;
618 friend class WebGLRenderingContextErrorMessageCallback; 616 friend class WebGLRenderingContextErrorMessageCallback;
619 friend class WebGLVertexArrayObjectBase; 617 friend class WebGLVertexArrayObjectBase;
618 friend class ScopedDrawingBufferBinder;
620 friend class ScopedTexture2DRestorer; 619 friend class ScopedTexture2DRestorer;
621 friend class ScopedFramebufferRestorer; 620 friend class ScopedFramebufferRestorer;
622 // To allow V8WebGL[2]RenderingContext to call visitChildDOMWrappers. 621 // To allow V8WebGL[2]RenderingContext to call visitChildDOMWrappers.
623 friend class V8WebGLRenderingContext; 622 friend class V8WebGLRenderingContext;
624 623
625 WebGLRenderingContextBase(HTMLCanvasElement*, 624 WebGLRenderingContextBase(HTMLCanvasElement*,
626 std::unique_ptr<WebGraphicsContext3DProvider>, 625 std::unique_ptr<WebGraphicsContext3DProvider>,
627 const CanvasContextCreationAttributes&, 626 const CanvasContextCreationAttributes&,
628 unsigned); 627 unsigned);
629 WebGLRenderingContextBase(OffscreenCanvas*, 628 WebGLRenderingContextBase(OffscreenCanvas*,
630 std::unique_ptr<WebGraphicsContext3DProvider>, 629 std::unique_ptr<WebGraphicsContext3DProvider>,
631 const CanvasContextCreationAttributes&, 630 const CanvasContextCreationAttributes&,
632 unsigned); 631 unsigned);
633 PassRefPtr<DrawingBuffer> createDrawingBuffer( 632 PassRefPtr<DrawingBuffer> createDrawingBuffer(
634 std::unique_ptr<WebGraphicsContext3DProvider>, 633 std::unique_ptr<WebGraphicsContext3DProvider>,
635 DrawingBuffer::ChromiumImageUsage); 634 DrawingBuffer::ChromiumImageUsage);
636 void setupFlags(); 635 void setupFlags();
637 636
638 // CanvasRenderingContext implementation. 637 // CanvasRenderingContext implementation.
639 bool is3d() const override { return true; } 638 bool is3d() const override { return true; }
640 bool isAccelerated() const override { return true; } 639 bool isAccelerated() const override { return true; }
641 void setIsHidden(bool) override; 640 void setIsHidden(bool) override;
642 bool paintRenderingResultsToCanvas(SourceDrawingBuffer) override; 641 bool paintRenderingResultsToCanvas(SourceDrawingBuffer) override;
643 WebLayer* platformLayer() const override; 642 WebLayer* platformLayer() const override;
644 void stop() override; 643 void stop() override;
645 644
645 // DrawingBufferRestoreStateSource implementation.
646 void GetDrawingBufferRestoreState(DrawingBufferRestoreState*) override;
647
646 void addSharedObject(WebGLSharedObject*); 648 void addSharedObject(WebGLSharedObject*);
647 void addContextObject(WebGLContextObject*); 649 void addContextObject(WebGLContextObject*);
648 void detachAndRemoveAllObjects(); 650 void detachAndRemoveAllObjects();
649 651
650 void destroyContext(); 652 void destroyContext();
651 void markContextChanged(ContentChangeType); 653 void markContextChanged(ContentChangeType);
652 654
653 void onErrorMessage(const char*, int32_t id); 655 void onErrorMessage(const char*, int32_t id);
654 656
655 void notifyCanvasContextChanged(); 657 void notifyCanvasContextChanged();
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
906 class ScopedDrawingBufferBinder { 908 class ScopedDrawingBufferBinder {
907 STACK_ALLOCATED(); 909 STACK_ALLOCATED();
908 910
909 public: 911 public:
910 ScopedDrawingBufferBinder(DrawingBuffer* drawingBuffer, 912 ScopedDrawingBufferBinder(DrawingBuffer* drawingBuffer,
911 WebGLFramebuffer* framebufferBinding) 913 WebGLFramebuffer* framebufferBinding)
912 : m_drawingBuffer(drawingBuffer), 914 : m_drawingBuffer(drawingBuffer),
913 m_readFramebufferBinding(framebufferBinding) { 915 m_readFramebufferBinding(framebufferBinding) {
914 // Commit DrawingBuffer if needed (e.g., for multisampling) 916 // Commit DrawingBuffer if needed (e.g., for multisampling)
915 if (!m_readFramebufferBinding && m_drawingBuffer) 917 if (!m_readFramebufferBinding && m_drawingBuffer)
916 m_drawingBuffer->commit(); 918 m_drawingBuffer->resolveAndBindForReadAndDraw();
917 } 919 }
918 920
919 ~ScopedDrawingBufferBinder() { 921 ~ScopedDrawingBufferBinder() {
920 // Restore DrawingBuffer if needed 922 // Restore DrawingBuffer if needed
921 if (!m_readFramebufferBinding && m_drawingBuffer) 923 if (!m_readFramebufferBinding && m_drawingBuffer)
922 m_drawingBuffer->restoreFramebufferBindings(); 924 m_drawingBuffer->restoreFramebufferBindings();
923 } 925 }
924 926
925 private: 927 private:
926 DrawingBuffer* m_drawingBuffer; 928 DrawingBuffer* m_drawingBuffer;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
966 // Skip clearing the backbuffer. 968 // Skip clearing the backbuffer.
967 Skipped, 969 Skipped,
968 // Clear the backbuffer. 970 // Clear the backbuffer.
969 JustClear, 971 JustClear,
970 // Combine webgl.clear() API with the backbuffer clear, so webgl.clear() 972 // Combine webgl.clear() API with the backbuffer clear, so webgl.clear()
971 // doesn't have to call glClear() again. 973 // doesn't have to call glClear() again.
972 CombinedClear 974 CombinedClear
973 }; 975 };
974 HowToClear clearIfComposited(GLbitfield clearMask = 0); 976 HowToClear clearIfComposited(GLbitfield clearMask = 0);
975 977
976 // Helper to restore state that clearing the framebuffer may destroy.
977 void restoreStateAfterClear();
978
979 // Convert texture internal format. 978 // Convert texture internal format.
980 GLenum convertTexInternalFormat(GLenum internalformat, GLenum type); 979 GLenum convertTexInternalFormat(GLenum internalformat, GLenum type);
981 980
982 enum TexImageFunctionType { 981 enum TexImageFunctionType {
983 TexImage, 982 TexImage,
984 TexSubImage, 983 TexSubImage,
985 CopyTexImage, 984 CopyTexImage,
986 CompressedTexImage 985 CompressedTexImage
987 }; 986 };
988 enum TexImageFunctionID { 987 enum TexImageFunctionID {
(...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after
1548 context, 1547 context,
1549 context->is3d(), 1548 context->is3d(),
1550 context.is3d()); 1549 context.is3d());
1551 1550
1552 } // namespace blink 1551 } // namespace blink
1553 1552
1554 WTF_ALLOW_MOVE_INIT_AND_COMPARE_WITH_MEM_FUNCTIONS( 1553 WTF_ALLOW_MOVE_INIT_AND_COMPARE_WITH_MEM_FUNCTIONS(
1555 blink::WebGLRenderingContextBase::TextureUnitState); 1554 blink::WebGLRenderingContextBase::TextureUnitState);
1556 1555
1557 #endif // WebGLRenderingContextBase_h 1556 #endif // WebGLRenderingContextBase_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698