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