12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2010 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CC_OUTPUT_GL_RENDERER_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CC_OUTPUT_GL_RENDERER_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/cancelable_callback.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/base/cc_export.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "cc/base/scoped_ptr_vector.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/output/direct_renderer.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/output/gl_renderer_draw_cache.h" 137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "cc/output/program_binding.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/output/renderer.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/quads/checkerboard_draw_quad.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/quads/debug_border_draw_quad.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/quads/io_surface_draw_quad.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/quads/render_pass_draw_quad.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/quads/solid_color_draw_quad.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/quads/tile_draw_quad.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/quads/yuv_video_draw_quad.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/quad_f.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class SkBitmap; 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace blink { class WebGraphicsContext3D; } 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)namespace gpu { 29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)namespace gles2 { 30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class GLES2Interface; 31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class GLRendererShaderTest; 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class OutputSurface; 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class PictureDrawQuad; 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ScopedResource; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class StreamVideoDrawQuad; 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class TextureDrawQuad; 4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class TextureMailboxDeleter; 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class GeometryBinding; 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ScopedEnsureFramebufferAllocation; 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Class that handles drawing of composited render layers using GL. 47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass CC_EXPORT GLRenderer : public DirectRenderer { 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static scoped_ptr<GLRenderer> Create( 5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) RendererClient* client, 5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const LayerTreeSettings* settings, 5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) OutputSurface* output_surface, 5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ResourceProvider* resource_provider, 5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) TextureMailboxDeleter* texture_mailbox_deleter, 55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) int highp_threshold_min); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~GLRenderer(); 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5987f58e12eeb69005db1f255eab8e88bab8977eecboliu@chromium.org virtual const RendererCapabilitiesImpl& Capabilities() const OVERRIDE; 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebGraphicsContext3D* Context(); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Waits for rendering to finish. 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Finish() OVERRIDE; 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoNoOp() OVERRIDE; 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void SwapBuffers(const CompositorFrameMetadata& metadata) OVERRIDE; 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void GetFramebufferPixels(void* pixels, gfx::Rect rect) OVERRIDE; 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool IsContextLost() OVERRIDE; 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetVisible(bool visible) OVERRIDE; 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SendManagedMemoryStats(size_t bytes_visible, 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t bytes_visible_and_nearby, 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t bytes_allocated) OVERRIDE; 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 79a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) static void DebugGLCall(gpu::gles2::GLES2Interface* gl, 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char* command, 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char* file, 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int line); 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GLRenderer(RendererClient* client, 8658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const LayerTreeSettings* settings, 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OutputSurface* output_surface, 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ResourceProvider* resource_provider, 8958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) TextureMailboxDeleter* texture_mailbox_deleter, 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int highp_threshold_min); 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool IsBackbufferDiscarded() const { return is_backbuffer_discarded_; } 9390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void InitializeGrContext(); 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::QuadF& SharedGeometryQuad() const { return shared_geometry_quad_; } 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GeometryBinding* SharedGeometry() const { 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return shared_geometry_.get(); 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void GetFramebufferPixelsAsync(gfx::Rect rect, 10190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) scoped_ptr<CopyOutputRequest> request); 1027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void GetFramebufferTexture(unsigned texture_id, 103d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ResourceFormat texture_format, 1047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) gfx::Rect device_rect); 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ReleaseRenderPassTextures(); 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 107fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch void SetStencilEnabled(bool enabled); 108fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch bool stencil_enabled() const { return stencil_shadow_; } 109fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch void SetBlendEnabled(bool enabled); 110fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch bool blend_enabled() const { return blend_shadow_; } 111fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void BindFramebufferToOutputSurface(DrawingFrame* frame) OVERRIDE; 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool BindFramebufferToTexture(DrawingFrame* frame, 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ScopedResource* resource, 115868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) gfx::Rect target_rect) OVERRIDE; 116868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void SetDrawViewport(gfx::Rect window_space_viewport) OVERRIDE; 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetScissorTestRect(gfx::Rect scissor_rect) OVERRIDE; 11868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) virtual void DiscardPixels(bool has_external_stencil_test, 11968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) bool draw_rect_covers_full_surface) OVERRIDE; 12068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) virtual void ClearFramebuffer(DrawingFrame* frame, 12168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) bool has_external_stencil_test) OVERRIDE; 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void DoDrawQuad(DrawingFrame* frame, const class DrawQuad*) OVERRIDE; 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void BeginDrawingFrame(DrawingFrame* frame) OVERRIDE; 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void FinishDrawingFrame(DrawingFrame* frame) OVERRIDE; 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool FlippedFramebuffer() const OVERRIDE; 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void EnsureScissorTestEnabled() OVERRIDE; 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void EnsureScissorTestDisabled() OVERRIDE; 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void CopyCurrentRenderPassToBitmap( 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DrawingFrame* frame, 13090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) scoped_ptr<CopyOutputRequest> request) OVERRIDE; 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void FinishDrawingQuadList() OVERRIDE; 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Check if quad needs antialiasing and if so, inflate the quad and 13458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // fill edge array for fragment shader. local_quad is set to 13558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // inflated quad if antialiasing is required, otherwise it is left 13658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // unchanged. edge array is filled with inflated quad's edge data 13758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // if antialiasing is required, otherwise it is left unchanged. 13858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Returns true if quad requires antialiasing and false otherwise. 13958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static bool SetupQuadForAntialiasing(const gfx::Transform& device_transform, 14058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const DrawQuad* quad, 14158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) gfx::QuadF* local_quad, 14258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) float edge[24]); 14358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) friend class GLRendererShaderPixelTest; 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class GLRendererShaderTest; 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static void ToGLMatrix(float* gl_matrix, const gfx::Transform& transform); 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void DrawCheckerboardQuad(const DrawingFrame* frame, 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const CheckerboardDrawQuad* quad); 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void DrawDebugBorderQuad(const DrawingFrame* frame, 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const DebugBorderDrawQuad* quad); 154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<ScopedResource> GetBackgroundWithFilters( 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DrawingFrame* frame, 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const RenderPassDrawQuad* quad, 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Transform& contents_device_transform, 158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const gfx::Transform& contents_device_transformInverse, 159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool* background_changed); 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void DrawRenderPassQuad(DrawingFrame* frame, const RenderPassDrawQuad* quad); 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void DrawSolidColorQuad(const DrawingFrame* frame, 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const SolidColorDrawQuad* quad); 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void DrawStreamVideoQuad(const DrawingFrame* frame, 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const StreamVideoDrawQuad* quad); 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void EnqueueTextureQuad(const DrawingFrame* frame, 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const TextureDrawQuad* quad); 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void FlushTextureQuadCache(); 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void DrawIOSurfaceQuad(const DrawingFrame* frame, 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const IOSurfaceDrawQuad* quad); 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void DrawTileQuad(const DrawingFrame* frame, const TileDrawQuad* quad); 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void DrawContentQuad(const DrawingFrame* frame, 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const ContentDrawQuadBase* quad, 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ResourceProvider::ResourceId resource_id); 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void DrawYUVVideoQuad(const DrawingFrame* frame, 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const YUVVideoDrawQuad* quad); 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void DrawPictureQuad(const DrawingFrame* frame, 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const PictureDrawQuad* quad); 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetShaderOpacity(float opacity, int alpha_location); 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetShaderQuadF(const gfx::QuadF& quad, int quad_location); 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void DrawQuadGeometry(const DrawingFrame* frame, 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Transform& draw_transform, 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::RectF& quad_rect, 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int matrix_location); 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetUseProgram(unsigned program); 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void CopyTextureToFramebuffer(const DrawingFrame* frame, 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int texture_id, 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect rect, 1907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const gfx::Transform& draw_matrix, 1917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool flip_vertically); 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool UseScopedTexture(DrawingFrame* frame, 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ScopedResource* resource, 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect viewport_rect); 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool MakeContextCurrent(); 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 199a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void InitializeSharedObjects(); 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void CleanupSharedObjects(); 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) typedef base::Callback<void(scoped_ptr<CopyOutputRequest> copy_request, 20390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool success)> 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AsyncGetFramebufferPixelsCleanupCallback; 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void DoGetFramebufferPixels( 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) uint8* pixels, 2077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) gfx::Rect window_rect, 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const AsyncGetFramebufferPixelsCleanupCallback& cleanup_callback); 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void FinishedReadback( 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const AsyncGetFramebufferPixelsCleanupCallback& cleanup_callback, 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) unsigned source_buffer, 212a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch unsigned query, 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) uint8_t* dest_pixels, 2147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) gfx::Size size); 2157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void PassOnSkBitmap(scoped_ptr<SkBitmap> bitmap, 2167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_ptr<SkAutoLockPixels> lock, 2177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_ptr<CopyOutputRequest> request, 2187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool success); 219eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 22090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void ReinitializeGLState(); 22190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 222eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void DiscardBackbuffer() OVERRIDE; 223eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void EnsureBackbuffer() OVERRIDE; 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void EnforceMemoryPolicy(); 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 22687f58e12eeb69005db1f255eab8e88bab8977eecboliu@chromium.org RendererCapabilitiesImpl capabilities_; 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unsigned offscreen_framebuffer_id_; 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<GeometryBinding> shared_geometry_; 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::QuadF shared_geometry_quad_; 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This block of bindings defines all of the programs used by the compositor 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // itself. Add any new programs here to GLRendererShaderTest. 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Tiled layer shaders. 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef ProgramBinding<VertexShaderTile, FragmentShaderRGBATexAlpha> 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TileProgram; 239eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch typedef ProgramBinding<VertexShaderTileAA, FragmentShaderRGBATexClampAlphaAA> 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TileProgramAA; 241eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch typedef ProgramBinding<VertexShaderTileAA, 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FragmentShaderRGBATexClampSwizzleAlphaAA> 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TileProgramSwizzleAA; 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef ProgramBinding<VertexShaderTile, FragmentShaderRGBATexOpaque> 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TileProgramOpaque; 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef ProgramBinding<VertexShaderTile, FragmentShaderRGBATexSwizzleAlpha> 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TileProgramSwizzle; 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef ProgramBinding<VertexShaderTile, FragmentShaderRGBATexSwizzleOpaque> 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TileProgramSwizzleOpaque; 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef ProgramBinding<VertexShaderPosTex, FragmentShaderCheckerboard> 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TileCheckerboardProgram; 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Texture shaders. 254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typedef ProgramBinding<VertexShaderPosTexTransform, 255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FragmentShaderRGBATexVaryingAlpha> TextureProgram; 256eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch typedef ProgramBinding<VertexShaderPosTexTransform, 257eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FragmentShaderRGBATexPremultiplyAlpha> 258eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch NonPremultipliedTextureProgram; 259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typedef ProgramBinding<VertexShaderPosTexTransform, 2607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FragmentShaderTexBackgroundVaryingAlpha> 2617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch TextureBackgroundProgram; 2627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch typedef ProgramBinding<VertexShaderPosTexTransform, 263a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch FragmentShaderTexBackgroundPremultiplyAlpha> 2647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NonPremultipliedTextureBackgroundProgram; 265c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Render surface shaders. 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef ProgramBinding<VertexShaderPosTexTransform, 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FragmentShaderRGBATexAlpha> RenderPassProgram; 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef ProgramBinding<VertexShaderPosTexTransform, 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FragmentShaderRGBATexAlphaMask> RenderPassMaskProgram; 271eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch typedef ProgramBinding<VertexShaderQuadTexTransformAA, 2727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FragmentShaderRGBATexAlphaAA> RenderPassProgramAA; 273eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch typedef ProgramBinding<VertexShaderQuadTexTransformAA, 2747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FragmentShaderRGBATexAlphaMaskAA> 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderPassMaskProgramAA; 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef ProgramBinding<VertexShaderPosTexTransform, 277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FragmentShaderRGBATexColorMatrixAlpha> 278c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RenderPassColorMatrixProgram; 279eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch typedef ProgramBinding<VertexShaderQuadTexTransformAA, 280c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FragmentShaderRGBATexAlphaMaskColorMatrixAA> 281c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RenderPassMaskColorMatrixProgramAA; 282eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch typedef ProgramBinding<VertexShaderQuadTexTransformAA, 283c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FragmentShaderRGBATexAlphaColorMatrixAA> 284c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RenderPassColorMatrixProgramAA; 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef ProgramBinding<VertexShaderPosTexTransform, 286c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FragmentShaderRGBATexAlphaMaskColorMatrix> 287c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RenderPassMaskColorMatrixProgram; 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Video shaders. 290f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) typedef ProgramBinding<VertexShaderVideoTransform, FragmentShaderRGBATex> 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VideoStreamTextureProgram; 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef ProgramBinding<VertexShaderPosTexYUVStretch, FragmentShaderYUVVideo> 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VideoYUVProgram; 294868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) typedef ProgramBinding<VertexShaderPosTexYUVStretch, FragmentShaderYUVAVideo> 295868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) VideoYUVAProgram; 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Special purpose / effects shaders. 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef ProgramBinding<VertexShaderPos, FragmentShaderColor> 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DebugBorderProgram; 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef ProgramBinding<VertexShaderQuad, FragmentShaderColor> 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SolidColorProgram; 302eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch typedef ProgramBinding<VertexShaderQuadAA, FragmentShaderColorAA> 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SolidColorProgramAA; 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 305f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const TileProgram* GetTileProgram( 306f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TexCoordPrecision precision, SamplerType sampler); 307f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const TileProgramOpaque* GetTileProgramOpaque( 308f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TexCoordPrecision precision, SamplerType sampler); 309f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const TileProgramAA* GetTileProgramAA( 310f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TexCoordPrecision precision, SamplerType sampler); 311f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const TileProgramSwizzle* GetTileProgramSwizzle( 312f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TexCoordPrecision precision, SamplerType sampler); 313c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const TileProgramSwizzleOpaque* GetTileProgramSwizzleOpaque( 314f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TexCoordPrecision precision, SamplerType sampler); 315c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const TileProgramSwizzleAA* GetTileProgramSwizzleAA( 316f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TexCoordPrecision precision, SamplerType sampler); 317f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const TileCheckerboardProgram* GetTileCheckerboardProgram(); 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 320c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const RenderPassProgram* GetRenderPassProgram( 321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TexCoordPrecision precision); 322c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const RenderPassProgramAA* GetRenderPassProgramAA( 323c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TexCoordPrecision precision); 324c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const RenderPassMaskProgram* GetRenderPassMaskProgram( 325c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TexCoordPrecision precision); 326c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const RenderPassMaskProgramAA* GetRenderPassMaskProgramAA( 327c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TexCoordPrecision precision); 328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const RenderPassColorMatrixProgram* GetRenderPassColorMatrixProgram( 329c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TexCoordPrecision precision); 330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const RenderPassColorMatrixProgramAA* GetRenderPassColorMatrixProgramAA( 331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TexCoordPrecision precision); 332c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const RenderPassMaskColorMatrixProgram* GetRenderPassMaskColorMatrixProgram( 333c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TexCoordPrecision precision); 334c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const RenderPassMaskColorMatrixProgramAA* 335c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetRenderPassMaskColorMatrixProgramAA(TexCoordPrecision precision); 336c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 337c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const TextureProgram* GetTextureProgram( 338c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TexCoordPrecision precision); 339eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const NonPremultipliedTextureProgram* GetNonPremultipliedTextureProgram( 340c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TexCoordPrecision precision); 3417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const TextureBackgroundProgram* GetTextureBackgroundProgram( 3427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch TexCoordPrecision precision); 3437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const NonPremultipliedTextureBackgroundProgram* 3447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch GetNonPremultipliedTextureBackgroundProgram(TexCoordPrecision precision); 345f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const TextureProgram* GetTextureIOSurfaceProgram( 346c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TexCoordPrecision precision); 347c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 348c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const VideoYUVProgram* GetVideoYUVProgram( 349c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TexCoordPrecision precision); 350868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const VideoYUVAProgram* GetVideoYUVAProgram( 351868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) TexCoordPrecision precision); 352c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const VideoStreamTextureProgram* GetVideoStreamTextureProgram( 353c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TexCoordPrecision precision); 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const DebugBorderProgram* GetDebugBorderProgram(); 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const SolidColorProgram* GetSolidColorProgram(); 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const SolidColorProgramAA* GetSolidColorProgramAA(); 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 359f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TileProgram tile_program_[NumTexCoordPrecisions][NumSamplerTypes]; 360f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TileProgramOpaque 361f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) tile_program_opaque_[NumTexCoordPrecisions][NumSamplerTypes]; 362f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TileProgramAA tile_program_aa_[NumTexCoordPrecisions][NumSamplerTypes]; 363f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TileProgramSwizzle 364f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) tile_program_swizzle_[NumTexCoordPrecisions][NumSamplerTypes]; 365f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TileProgramSwizzleOpaque 366f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) tile_program_swizzle_opaque_[NumTexCoordPrecisions][NumSamplerTypes]; 367f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TileProgramSwizzleAA 368f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) tile_program_swizzle_aa_[NumTexCoordPrecisions][NumSamplerTypes]; 369f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 370f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TileCheckerboardProgram tile_checkerboard_program_; 371f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 372f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TextureProgram texture_program_[NumTexCoordPrecisions]; 373f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) NonPremultipliedTextureProgram 374f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) nonpremultiplied_texture_program_[NumTexCoordPrecisions]; 375f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TextureBackgroundProgram texture_background_program_[NumTexCoordPrecisions]; 376f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) NonPremultipliedTextureBackgroundProgram 377f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) nonpremultiplied_texture_background_program_[NumTexCoordPrecisions]; 378f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TextureProgram texture_io_surface_program_[NumTexCoordPrecisions]; 379f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 380f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RenderPassProgram render_pass_program_[NumTexCoordPrecisions]; 381f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RenderPassProgramAA render_pass_program_aa_[NumTexCoordPrecisions]; 382f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RenderPassMaskProgram render_pass_mask_program_[NumTexCoordPrecisions]; 383f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RenderPassMaskProgramAA render_pass_mask_program_aa_[NumTexCoordPrecisions]; 384f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RenderPassColorMatrixProgram 385f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) render_pass_color_matrix_program_[NumTexCoordPrecisions]; 386f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RenderPassColorMatrixProgramAA 387f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) render_pass_color_matrix_program_aa_[NumTexCoordPrecisions]; 388f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RenderPassMaskColorMatrixProgram 389f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) render_pass_mask_color_matrix_program_[NumTexCoordPrecisions]; 390f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RenderPassMaskColorMatrixProgramAA 391f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) render_pass_mask_color_matrix_program_aa_[NumTexCoordPrecisions]; 392f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 393f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) VideoYUVProgram video_yuv_program_[NumTexCoordPrecisions]; 394f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) VideoYUVAProgram video_yuva_program_[NumTexCoordPrecisions]; 395f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) VideoStreamTextureProgram 396f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) video_stream_texture_program_[NumTexCoordPrecisions]; 397f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 398f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DebugBorderProgram debug_border_program_; 399f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SolidColorProgram solid_color_program_; 400f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SolidColorProgramAA solid_color_program_aa_; 401f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 402f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebGraphicsContext3D* context_; 403a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) gpu::gles2::GLES2Interface* gl_; 4048bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) gpu::ContextSupport* context_support_; 4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 40690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) skia::RefPtr<GrContext> gr_context_; 40790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) skia::RefPtr<SkCanvas> sk_canvas_; 40890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 40958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) TextureMailboxDeleter* texture_mailbox_deleter_; 41058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect swap_buffer_rect_; 4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect scissor_rect_; 413eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch gfx::Rect viewport_; 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_backbuffer_discarded_; 4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_using_bind_uniform_; 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool visible_; 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_scissor_enabled_; 418f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool scissor_rect_needs_reset_; 419fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch bool stencil_shadow_; 4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool blend_shadow_; 4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unsigned program_shadow_; 4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TexturedQuadDrawCache draw_cache_; 423c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int highp_threshold_min_; 424b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) int highp_threshold_cache_; 425c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 426c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) struct PendingAsyncReadPixels; 427c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedPtrVector<PendingAsyncReadPixels> pending_async_read_pixels_; 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<ResourceProvider::ScopedWriteLockGL> current_framebuffer_lock_; 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<ResourceProvider::Fence> last_swap_fence_; 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 433c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SkBitmap on_demand_tile_raster_bitmap_; 434c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ResourceProvider::ResourceId on_demand_tile_raster_resource_id_; 435c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(GLRenderer); 4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Setting DEBUG_GL_CALLS to 1 will call glGetError() after almost every GL 4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// call made by the compositor. Useful for debugging rendering issues but 4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// will significantly degrade performance. 4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define DEBUG_GL_CALLS 0 4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if DEBUG_GL_CALLS && !defined(NDEBUG) 4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define GLC(context, x) \ 446c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) (x, GLRenderer::DebugGLCall(&* context, #x, __FILE__, __LINE__)) 4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define GLC(context, x) (x) 4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 451c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace cc 4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // CC_OUTPUT_GL_RENDERER_H_ 454