software_renderer.h revision b2df76ea8fec9e32f6f3718986dba0d95315b29c
1// Copyright 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CC_OUTPUT_SOFTWARE_RENDERER_H_ 6#define CC_OUTPUT_SOFTWARE_RENDERER_H_ 7 8#include "base/basictypes.h" 9#include "cc/base/cc_export.h" 10#include "cc/output/compositor_frame.h" 11#include "cc/output/direct_renderer.h" 12 13namespace cc { 14 15class OutputSurface; 16class SoftwareOutputDevice; 17class ContentDrawQuadBase; 18class DebugBorderDrawQuad; 19class PictureDrawQuad; 20class RendererClient; 21class RenderPassDrawQuad; 22class ResourceProvider; 23class SolidColorDrawQuad; 24class TextureDrawQuad; 25class TileDrawQuad; 26 27class CC_EXPORT SoftwareRenderer : public DirectRenderer { 28 public: 29 static scoped_ptr<SoftwareRenderer> Create( 30 RendererClient* client, 31 OutputSurface* output_surface, 32 ResourceProvider* resource_provider); 33 34 virtual ~SoftwareRenderer(); 35 virtual const RendererCapabilities& Capabilities() const OVERRIDE; 36 virtual void ViewportChanged() OVERRIDE; 37 virtual void Finish() OVERRIDE; 38 virtual void SwapBuffers(const LatencyInfo& latency_info) OVERRIDE; 39 virtual void GetFramebufferPixels(void* pixels, gfx::Rect rect) OVERRIDE; 40 virtual void SetVisible(bool visible) OVERRIDE; 41 virtual void SendManagedMemoryStats( 42 size_t bytes_visible, 43 size_t bytes_visible_and_nearby, 44 size_t bytes_allocated) OVERRIDE {} 45 virtual void ReceiveCompositorFrameAck( 46 const CompositorFrameAck& ack) OVERRIDE; 47 48 protected: 49 virtual void BindFramebufferToOutputSurface(DrawingFrame* frame) OVERRIDE; 50 virtual bool BindFramebufferToTexture( 51 DrawingFrame* frame, 52 const ScopedResource* texture, 53 gfx::Rect framebuffer_rect) OVERRIDE; 54 virtual void SetDrawViewportSize(gfx::Size viewport_size) OVERRIDE; 55 virtual void SetScissorTestRect(gfx::Rect scissor_rect) OVERRIDE; 56 virtual void ClearFramebuffer(DrawingFrame* frame) OVERRIDE; 57 virtual void DoDrawQuad(DrawingFrame* frame, const DrawQuad* quad) OVERRIDE; 58 virtual void BeginDrawingFrame(DrawingFrame* frame) OVERRIDE; 59 virtual void FinishDrawingFrame(DrawingFrame* frame) OVERRIDE; 60 virtual bool FlippedFramebuffer() const OVERRIDE; 61 virtual void EnsureScissorTestEnabled() OVERRIDE; 62 virtual void EnsureScissorTestDisabled() OVERRIDE; 63 virtual void CopyCurrentRenderPassToBitmap( 64 DrawingFrame* frame, 65 const CopyRenderPassCallback& callback) OVERRIDE; 66 67 private: 68 SoftwareRenderer( 69 RendererClient* client, 70 OutputSurface* output_surface, 71 ResourceProvider* resource_provider); 72 73 void ClearCanvas(SkColor color); 74 void SetClipRect(gfx::Rect rect); 75 bool IsSoftwareResource(ResourceProvider::ResourceId resource_id) const; 76 77 void DrawDebugBorderQuad(const DrawingFrame* frame, 78 const DebugBorderDrawQuad* quad); 79 void DrawPictureQuad(const DrawingFrame* frame, 80 const PictureDrawQuad* quad); 81 void DrawSolidColorQuad(const DrawingFrame* frame, 82 const SolidColorDrawQuad* quad); 83 void DrawTextureQuad(const DrawingFrame* frame, 84 const TextureDrawQuad* quad); 85 void DrawTileQuad(const DrawingFrame* frame, 86 const TileDrawQuad* quad); 87 void DrawRenderPassQuad(const DrawingFrame* frame, 88 const RenderPassDrawQuad* quad); 89 void DrawUnsupportedQuad(const DrawingFrame* frame, 90 const DrawQuad* quad); 91 92 RendererCapabilities capabilities_; 93 bool visible_; 94 bool is_scissor_enabled_; 95 bool is_viewport_changed_; 96 gfx::Rect scissor_rect_; 97 98 OutputSurface* output_surface_; 99 SoftwareOutputDevice* output_device_; 100 SkCanvas* root_canvas_; 101 SkCanvas* current_canvas_; 102 SkPaint current_paint_; 103 scoped_ptr<ResourceProvider::ScopedWriteLockSoftware> 104 current_framebuffer_lock_; 105 CompositorFrame compositor_frame_; 106 107 DISALLOW_COPY_AND_ASSIGN(SoftwareRenderer); 108}; 109 110} // namespace cc 111 112#endif // CC_OUTPUT_SOFTWARE_RENDERER_H_ 113