1635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/*
2d0825bca7fe65beaee391d30da42e937db621564Steve Block * Copyright (C) 2010 Google Inc. All rights reserved.
38f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian *
4635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Redistribution and use in source and binary forms, with or without
5635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * modification, are permitted provided that the following conditions are
6635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * met:
78f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian *
8635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *     * Redistributions of source code must retain the above copyright
9635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * notice, this list of conditions and the following disclaimer.
10635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *     * Redistributions in binary form must reproduce the above
11635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * copyright notice, this list of conditions and the following disclaimer
12635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * in the documentation and/or other materials provided with the
13635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * distribution.
14635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *     * Neither the name of Google Inc. nor the names of its
15635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * contributors may be used to endorse or promote products derived from
16635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * this software without specific prior written permission.
17d0825bca7fe65beaee391d30da42e937db621564Steve Block *
18635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project */
30635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
315e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block
32dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#ifndef LayerRendererChromium_h
33dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#define LayerRendererChromium_h
34635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
35dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if USE(ACCELERATED_COMPOSITING)
36dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
37e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "ContentLayerChromium.h"
38dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "IntRect.h"
39dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "LayerChromium.h"
40cad810f21b803229eb11403f9209855525a25d57Steve Block#include "LayerTilerChromium.h"
416b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#include "RenderSurfaceChromium.h"
42e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block#include "SkBitmap.h"
43bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#include "VideoLayerChromium.h"
442bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "cc/CCCanvasLayerImpl.h"
4581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "cc/CCHeadsUpDisplay.h"
462bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "cc/CCPluginLayerImpl.h"
472bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "cc/CCVideoLayerImpl.h"
48e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block#include <wtf/HashMap.h>
49dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <wtf/Noncopyable.h>
50dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <wtf/PassOwnPtr.h>
51bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#include <wtf/PassRefPtr.h>
52bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#include <wtf/RefCounted.h>
53dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <wtf/Vector.h>
54dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
552daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if USE(CG)
56dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include <CoreGraphics/CGContext.h>
57dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include <wtf/RetainPtr.h>
58dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#endif
59dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch
60635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectnamespace WebCore {
61635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
622daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass CCHeadsUpDisplay;
6381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass CCLayerImpl;
6481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass GeometryBinding;
6568513a70bcd92384395513322f1b801e7bf9c729Steve Blockclass GraphicsContext3D;
66e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block
67e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block// Class that handles drawing of composited render layers using GL.
68bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenclass LayerRendererChromium : public RefCounted<LayerRendererChromium> {
69dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockpublic:
702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    static PassRefPtr<LayerRendererChromium> create(PassRefPtr<GraphicsContext3D>, PassOwnPtr<TilePaintInterface> contentPaint);
71dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
72dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    ~LayerRendererChromium();
73dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
7468513a70bcd92384395513322f1b801e7bf9c729Steve Block    GraphicsContext3D* context();
7568513a70bcd92384395513322f1b801e7bf9c729Steve Block
762bde8e466a4451c7319e3a072d118917957d6554Steve Block    void invalidateRootLayerRect(const IntRect& dirtyRect);
772bde8e466a4451c7319e3a072d118917957d6554Steve Block
782bde8e466a4451c7319e3a072d118917957d6554Steve Block    void setViewport(const IntRect& visibleRect, const IntRect& contentRect, const IntPoint& scrollPosition);
7968513a70bcd92384395513322f1b801e7bf9c729Steve Block
80cad810f21b803229eb11403f9209855525a25d57Steve Block    // updates and draws the current layers onto the backbuffer
812bde8e466a4451c7319e3a072d118917957d6554Steve Block    void updateAndDrawLayers();
8268513a70bcd92384395513322f1b801e7bf9c729Steve Block
8368513a70bcd92384395513322f1b801e7bf9c729Steve Block    // waits for rendering to finish
8468513a70bcd92384395513322f1b801e7bf9c729Steve Block    void finish();
8568513a70bcd92384395513322f1b801e7bf9c729Steve Block
8668513a70bcd92384395513322f1b801e7bf9c729Steve Block    // puts backbuffer onscreen
8768513a70bcd92384395513322f1b801e7bf9c729Steve Block    void present();
88dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
892bde8e466a4451c7319e3a072d118917957d6554Steve Block    IntSize viewportSize() const { return m_viewportVisibleRect.size(); }
9081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
912daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void setRootLayer(PassRefPtr<LayerChromium>);
92dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    LayerChromium* rootLayer() { return m_rootLayer.get(); }
93e14391e94c850b8bd03680c23b38978db68687a8John Reck    void transferRootLayer(LayerRendererChromium* other) { other->m_rootLayer = m_rootLayer.release(); }
94dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
95e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    bool hardwareCompositing() const { return m_hardwareCompositing; }
96dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
97cad810f21b803229eb11403f9209855525a25d57Steve Block    void setCompositeOffscreen(bool);
9881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    bool isCompositingOffscreen() const { return m_compositeOffscreen; }
995af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
100e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    unsigned createLayerTexture();
101bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    void deleteLayerTexture(unsigned);
10206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
10368513a70bcd92384395513322f1b801e7bf9c729Steve Block    static void debugGLCall(GraphicsContext3D*, const char* command, const char* file, int line);
104545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
105e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    const TransformationMatrix& projectionMatrix() const { return m_projectionMatrix; }
106e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block
107e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    void useShader(unsigned);
108e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block
109e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    bool checkTextureSize(const IntSize&);
110e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block
11181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    const GeometryBinding* sharedGeometry() const { return m_sharedGeometry.get(); }
11281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    const LayerChromium::BorderProgram* borderProgram() const { return m_borderProgram.get(); }
11354cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block    const CCHeadsUpDisplay::Program* headsUpDisplayProgram() const { return m_headsUpDisplayProgram.get(); }
11481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    const RenderSurfaceChromium::Program* renderSurfaceProgram() const { return m_renderSurfaceProgram.get(); }
11581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    const RenderSurfaceChromium::MaskProgram* renderSurfaceMaskProgram() const { return m_renderSurfaceMaskProgram.get(); }
11681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    const LayerTilerChromium::Program* tilerProgram() const { return m_tilerProgram.get(); }
1172bde8e466a4451c7319e3a072d118917957d6554Steve Block    const CCCanvasLayerImpl::Program* canvasLayerProgram() const { return m_canvasLayerProgram.get(); }
1182bde8e466a4451c7319e3a072d118917957d6554Steve Block    const CCPluginLayerImpl::Program* pluginLayerProgram() const { return m_pluginLayerProgram.get(); }
1192bde8e466a4451c7319e3a072d118917957d6554Steve Block    const CCVideoLayerImpl::RGBAProgram* videoLayerRGBAProgram() const { return m_videoLayerRGBAProgram.get(); }
1202bde8e466a4451c7319e3a072d118917957d6554Steve Block    const CCVideoLayerImpl::YUVProgram* videoLayerYUVProgram() const { return m_videoLayerYUVProgram.get(); }
121e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block
12268513a70bcd92384395513322f1b801e7bf9c729Steve Block    void resizeOnscreenContent(const IntSize&);
12368513a70bcd92384395513322f1b801e7bf9c729Steve Block
12468513a70bcd92384395513322f1b801e7bf9c729Steve Block    void getFramebufferPixels(void *pixels, const IntRect& rect);
12568513a70bcd92384395513322f1b801e7bf9c729Steve Block
126f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    TextureManager* textureManager() const { return m_textureManager.get(); }
127f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
12881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    CCHeadsUpDisplay* headsUpDisplay() { return m_headsUpDisplay.get(); }
12981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
130f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    void setScissorToRect(const IntRect&);
131f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
13281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    String layerTreeAsText() const;
13381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
1342daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void addChildContext(GraphicsContext3D*);
1352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void removeChildContext(GraphicsContext3D*);
1362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
137e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockprivate:
1382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    typedef Vector<RefPtr<CCLayerImpl> > LayerList;
1392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    typedef HashMap<GraphicsContext3D*, int> ChildContextMap;
1402daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
1412daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    explicit LayerRendererChromium(PassRefPtr<GraphicsContext3D>, PassOwnPtr<TilePaintInterface> contentPaint);
142a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
1432daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void updateLayers(LayerList& renderSurfaceLayerList);
1442bde8e466a4451c7319e3a072d118917957d6554Steve Block    void updateRootLayerContents();
1452daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void updatePropertiesAndRenderSurfaces(LayerChromium*, const TransformationMatrix& parentMatrix, LayerList& renderSurfaceLayerList, LayerList& layers);
1462daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
14754cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block    void paintLayerContents(const LayerList&);
1482bde8e466a4451c7319e3a072d118917957d6554Steve Block    void updateCompositorResourcesRecursive(LayerChromium*);
149e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block
1502daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void drawLayers(const LayerList& renderSurfaceLayerList);
15181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    void drawLayer(CCLayerImpl*, RenderSurfaceChromium*);
15281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
15381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    void drawRootLayer();
1542bde8e466a4451c7319e3a072d118917957d6554Steve Block    LayerTexture* getOffscreenLayerTexture();
1552bde8e466a4451c7319e3a072d118917957d6554Steve Block    void copyOffscreenTextureToDisplay();
156cad810f21b803229eb11403f9209855525a25d57Steve Block
157e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    bool isLayerVisible(LayerChromium*, const TransformationMatrix&, const IntRect& visibleRect);
158e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block
1596b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    void setDrawViewportRect(const IntRect&, bool flipY);
1605ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
1616b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    bool useRenderSurface(RenderSurfaceChromium*);
1625ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
163e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    bool makeContextCurrent();
164e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block
1652daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    static bool compareLayerZ(const RefPtr<CCLayerImpl>&, const RefPtr<CCLayerImpl>&);
16681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
16781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    void dumpRenderSurfaces(TextStream&, int indent, LayerChromium*) const;
1686b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner
169e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    bool initializeSharedObjects();
170e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    void cleanupSharedObjects();
171e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block
1722bde8e466a4451c7319e3a072d118917957d6554Steve Block    IntRect m_viewportVisibleRect;
1732bde8e466a4451c7319e3a072d118917957d6554Steve Block    IntRect m_viewportContentRect;
1742bde8e466a4451c7319e3a072d118917957d6554Steve Block    IntPoint m_viewportScrollPosition;
175e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block
176e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    TransformationMatrix m_projectionMatrix;
177dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
178dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    RefPtr<LayerChromium> m_rootLayer;
1792bde8e466a4451c7319e3a072d118917957d6554Steve Block    OwnPtr<TilePaintInterface> m_rootLayerContentPaint;
1802bde8e466a4451c7319e3a072d118917957d6554Steve Block    OwnPtr<LayerTilerChromium> m_rootLayerContentTiler;
181dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
182e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    bool m_hardwareCompositing;
183e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block
1846b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    unsigned m_currentShader;
1856b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    RenderSurfaceChromium* m_currentRenderSurface;
1866b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner
1876b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    unsigned m_offscreenFramebufferId;
188cad810f21b803229eb11403f9209855525a25d57Steve Block    bool m_compositeOffscreen;
189e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block
19081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#if USE(SKIA)
1912daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    OwnPtr<SkCanvas> m_rootLayerCanvas;
1925af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    OwnPtr<PlatformContextSkia> m_rootLayerSkiaContext;
1935af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    OwnPtr<GraphicsContext> m_rootLayerGraphicsContext;
1942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#elif USE(CG)
195dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    Vector<uint8_t> m_rootLayerBackingStore;
196dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    RetainPtr<CGContextRef> m_rootLayerCGContext;
197dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    OwnPtr<GraphicsContext> m_rootLayerGraphicsContext;
1985af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke#endif
199dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch
2006b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    // Maximum texture dimensions supported.
201e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    int m_maxTextureSize;
202e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block
203e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    // Store values that are shared between instances of each layer type
204e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    // associated with this instance of the compositor. Since there can be
205e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    // multiple instances of the compositor running in the same renderer process
206e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    // we cannot store these values in static variables.
20781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    OwnPtr<GeometryBinding> m_sharedGeometry;
20881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    OwnPtr<LayerChromium::BorderProgram> m_borderProgram;
20954cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block    OwnPtr<CCHeadsUpDisplay::Program> m_headsUpDisplayProgram;
21081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    OwnPtr<RenderSurfaceChromium::Program> m_renderSurfaceProgram;
21181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    OwnPtr<RenderSurfaceChromium::MaskProgram> m_renderSurfaceMaskProgram;
21281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    OwnPtr<LayerTilerChromium::Program> m_tilerProgram;
2132bde8e466a4451c7319e3a072d118917957d6554Steve Block    OwnPtr<CCCanvasLayerImpl::Program> m_canvasLayerProgram;
2142bde8e466a4451c7319e3a072d118917957d6554Steve Block    OwnPtr<CCVideoLayerImpl::RGBAProgram> m_videoLayerRGBAProgram;
2152bde8e466a4451c7319e3a072d118917957d6554Steve Block    OwnPtr<CCVideoLayerImpl::YUVProgram> m_videoLayerYUVProgram;
2162bde8e466a4451c7319e3a072d118917957d6554Steve Block    OwnPtr<CCPluginLayerImpl::Program> m_pluginLayerProgram;
217f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
218f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    OwnPtr<TextureManager> m_textureManager;
219e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block
22081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    OwnPtr<CCHeadsUpDisplay> m_headsUpDisplay;
22181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
222a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    RefPtr<GraphicsContext3D> m_context;
2232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    ChildContextMap m_childContexts;
2242daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
2252daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // If true, the child contexts were copied to the compositor texture targets
2262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // and the compositor will need to wait on the proper latches before using
2272daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // the target textures. If false, the compositor is reusing the textures
2282daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // from last frame.
2292daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    bool m_childContextsWereCopied;
2302daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
2312daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    bool m_contextSupportsLatch;
2326b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner
2336b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    RenderSurfaceChromium* m_defaultRenderSurface;
234dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block};
235d0825bca7fe65beaee391d30da42e937db621564Steve Block
236e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block// Setting DEBUG_GL_CALLS to 1 will call glGetError() after almost every GL
237e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block// call made by the compositor. Useful for debugging rendering issues but
238e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block// will significantly degrade performance.
239e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#define DEBUG_GL_CALLS 0
240e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block
241e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#if DEBUG_GL_CALLS && !defined ( NDEBUG )
24268513a70bcd92384395513322f1b801e7bf9c729Steve Block#define GLC(context, x) { (x), LayerRendererChromium::debugGLCall(context, #x, __FILE__, __LINE__); }
243e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#else
24468513a70bcd92384395513322f1b801e7bf9c729Steve Block#define GLC(context, x) (x)
245e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#endif
246e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block
247e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block
248635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
249635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
250dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif // USE(ACCELERATED_COMPOSITING)
2515e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block
2525e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#endif
253