[chromium] Move deferral-related logic out of Canvas2DLayerChromium
[WebKit.git] / Source / WebCore / platform / graphics / chromium / TextureLayerChromium.h
1 /*
2  * Copyright (C) 2010 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
27 #ifndef TextureLayerChromium_h
28 #define TextureLayerChromium_h
29
30 #if USE(ACCELERATED_COMPOSITING)
31
32 #include "LayerChromium.h"
33
34 namespace WebCore {
35
36 class TextureLayerChromiumClient {
37 public:
38     // Called to prepare this layer's texture for compositing. The client may queue a texture
39     // upload or copy on the CCTextureUpdater.
40     // Returns the texture ID to be used for compositing.
41     virtual unsigned prepareTexture(CCTextureUpdater&) = 0;
42
43     // Returns the context that is providing the texture. Used for rate limiting and detecting lost context.
44     virtual GraphicsContext3D* context() = 0;
45
46 protected:
47     virtual ~TextureLayerChromiumClient() { }
48 };
49
50 // A Layer containing a the rendered output of a plugin instance.
51 class TextureLayerChromium : public LayerChromium {
52 public:
53     // If this texture layer requires special preparation logic for each frame driven by
54     // the compositor, pass in a non-nil client. Pass in a nil client pointer if texture updates
55     // are driven by an external process.
56     static PassRefPtr<TextureLayerChromium> create(TextureLayerChromiumClient*);
57     virtual ~TextureLayerChromium();
58
59     void clearClient() { m_client = 0; }
60
61     virtual PassOwnPtr<CCLayerImpl> createCCLayerImpl() OVERRIDE;
62
63     // Sets whether this texture should be Y-flipped at draw time. Defaults to true.
64     void setFlipped(bool);
65
66     // Sets a UV transform to be used at draw time. Defaults to (0, 0, 1, 1).
67     void setUVRect(const FloatRect&);
68
69     // Sets whether the alpha channel is premultiplied or unpremultiplied. Defaults to true.
70     void setPremultipliedAlpha(bool);
71
72     // Sets whether this context should rate limit on damage to prevent too many frames from
73     // being queued up before the compositor gets a chance to run. Requires a non-nil client.
74     // Defaults to false.
75     void setRateLimitContext(bool);
76
77     // Code path for plugins which supply their own texture ID.
78     void setTextureId(unsigned);
79
80     void willModifyTexture();
81
82     virtual void setNeedsDisplayRect(const FloatRect&) OVERRIDE;
83
84     virtual void setLayerTreeHost(CCLayerTreeHost*) OVERRIDE;
85     virtual bool drawsContent() const OVERRIDE;
86     virtual void update(CCTextureUpdater&, const CCOcclusionTracker*) OVERRIDE;
87     virtual void pushPropertiesTo(CCLayerImpl*) OVERRIDE;
88
89 protected:
90     explicit TextureLayerChromium(TextureLayerChromiumClient*);
91
92 private:
93     TextureLayerChromiumClient* m_client;
94
95     bool m_flipped;
96     FloatRect m_uvRect;
97     bool m_premultipliedAlpha;
98     bool m_rateLimitContext;
99     bool m_contextLost;
100
101     unsigned m_textureId;
102 };
103
104 }
105 #endif // USE(ACCELERATED_COMPOSITING)
106
107 #endif