409d207c55e49518c39244d1487c0a0af741821e
[WebKit-https.git] / Source / WebCore / platform / graphics / chromium / Canvas2DLayerBridge.h
1 /*
2  * Copyright (C) 2012 Google Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  * 1.  Redistributions of source code must retain the above copyright
9  *     notice, this list of conditions and the following disclaimer.
10  * 2.  Redistributions in binary form must reproduce the above copyright
11  *     notice, this list of conditions and the following disclaimer in the
12  *     documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
18  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
21  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef Canvas2DLayerBridge_h
27 #define Canvas2DLayerBridge_h
28
29 #include "GraphicsContext3D.h"
30 #include "ImageBuffer.h" // For DeferralMode enum.
31 #include "IntSize.h"
32 #include "SkDeferredCanvas.h"
33 #include <public/WebExternalTextureLayer.h>
34 #include <public/WebExternalTextureLayerClient.h>
35 #include <wtf/PassOwnPtr.h>
36 #include <wtf/RefPtr.h>
37
38 namespace WebKit {
39 class WebGraphicsContext3D;
40 }
41
42 namespace WebCore {
43
44 class LayerChromium;
45
46 class Canvas2DLayerBridge : public WebKit::WebExternalTextureLayerClient, public SkDeferredCanvas::NotificationClient {
47     WTF_MAKE_NONCOPYABLE(Canvas2DLayerBridge);
48 public:
49     static PassOwnPtr<Canvas2DLayerBridge> create(PassRefPtr<GraphicsContext3D> context, const IntSize& size, DeferralMode deferralMode, unsigned textureId)
50     {
51         return adoptPtr(new Canvas2DLayerBridge(context, size, deferralMode, textureId));
52     }
53
54     virtual ~Canvas2DLayerBridge();
55
56     // WebKit::WebExternalTextureLayerClient implementation.
57     virtual unsigned prepareTexture(WebKit::WebTextureUpdater&) OVERRIDE;
58     virtual WebKit::WebGraphicsContext3D* context() OVERRIDE;
59
60     // SkDeferredCanvas::NotificationClient implementation
61     virtual void prepareForDraw();
62
63     SkCanvas* skCanvas(SkDevice*);
64     WebKit::WebLayer* layer();
65     void contextAcquired();
66
67     unsigned backBufferTexture();
68
69 private:
70     Canvas2DLayerBridge(PassRefPtr<GraphicsContext3D>, const IntSize&, DeferralMode, unsigned textureId);
71     SkDeferredCanvas* deferredCanvas();
72
73     DeferralMode m_deferralMode;
74     bool m_useDoubleBuffering;
75     unsigned m_frontBufferTexture;
76     unsigned m_backBufferTexture;
77     IntSize m_size;
78     SkCanvas* m_canvas;
79     WebKit::WebExternalTextureLayer m_layer;
80     RefPtr<GraphicsContext3D> m_context;
81 };
82
83 }
84
85 #endif