Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(326)

Side by Side Diff: cc/output/direct_renderer.h

Issue 1533773002: Delete CC. (Closed) Base URL: git@github.com:domokit/mojo.git@cl-2e
Patch Set: rebase Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/output/delegating_renderer_unittest.cc ('k') | cc/output/direct_renderer.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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_DIRECT_RENDERER_H_
6 #define CC_OUTPUT_DIRECT_RENDERER_H_
7
8 #include "base/basictypes.h"
9 #include "base/callback.h"
10 #include "base/containers/scoped_ptr_hash_map.h"
11 #include "cc/base/scoped_ptr_deque.h"
12 #include "cc/output/overlay_processor.h"
13 #include "cc/output/renderer.h"
14 #include "cc/resources/resource_provider.h"
15 #include "cc/resources/scoped_resource.h"
16 #include "ui/gfx/geometry/quad_f.h"
17
18 namespace cc {
19
20 class DrawPolygon;
21 class ResourceProvider;
22
23 // This is the base class for code shared between the GL and software
24 // renderer implementations. "Direct" refers to the fact that it does not
25 // delegate rendering to another compositor.
26 class DirectRenderer : public Renderer {
27 public:
28 ~DirectRenderer() override;
29
30 void DecideRenderPassAllocationsForFrame(
31 const RenderPassList& render_passes_in_draw_order) override;
32 bool HasAllocatedResourcesForTesting(RenderPassId id) const override;
33 void DrawFrame(RenderPassList* render_passes_in_draw_order,
34 float device_scale_factor,
35 const gfx::Rect& device_viewport_rect,
36 const gfx::Rect& device_clip_rect,
37 bool disable_picture_quad_image_filtering) override;
38
39 struct DrawingFrame {
40 DrawingFrame();
41 ~DrawingFrame();
42
43 const RenderPassList* render_passes_in_draw_order;
44 const RenderPass* root_render_pass;
45 const RenderPass* current_render_pass;
46 const ScopedResource* current_texture;
47
48 gfx::Rect root_damage_rect;
49 gfx::Rect device_viewport_rect;
50 gfx::Rect device_clip_rect;
51
52 gfx::Transform projection_matrix;
53 gfx::Transform window_matrix;
54
55 bool disable_picture_quad_image_filtering;
56
57 OverlayCandidateList overlay_list;
58 };
59
60 void SetEnlargePassTextureAmountForTesting(const gfx::Vector2d& amount);
61 void DoDrawPolygon(const DrawPolygon& poly,
62 DrawingFrame* frame,
63 const gfx::Rect& render_pass_scissor,
64 bool use_render_pass_scissor);
65
66 protected:
67 enum SurfaceInitializationMode {
68 SURFACE_INITIALIZATION_MODE_PRESERVE,
69 SURFACE_INITIALIZATION_MODE_SCISSORED_CLEAR,
70 SURFACE_INITIALIZATION_MODE_FULL_SURFACE_CLEAR,
71 };
72
73 DirectRenderer(RendererClient* client,
74 const RendererSettings* settings,
75 OutputSurface* output_surface,
76 ResourceProvider* resource_provider);
77
78 static gfx::RectF QuadVertexRect();
79 static void QuadRectTransform(gfx::Transform* quad_rect_transform,
80 const gfx::Transform& quad_transform,
81 const gfx::RectF& quad_rect);
82 void InitializeViewport(DrawingFrame* frame,
83 const gfx::Rect& draw_rect,
84 const gfx::Rect& viewport_rect,
85 const gfx::Size& surface_size);
86 gfx::Rect MoveFromDrawToWindowSpace(const DrawingFrame* frame,
87 const gfx::Rect& draw_rect) const;
88
89 bool NeedDeviceClip(const DrawingFrame* frame) const;
90 gfx::Rect DeviceClipRectInDrawSpace(const DrawingFrame* frame) const;
91 gfx::Rect DeviceViewportRectInDrawSpace(const DrawingFrame* frame) const;
92 gfx::Rect OutputSurfaceRectInDrawSpace(const DrawingFrame* frame) const;
93 static gfx::Rect ComputeScissorRectForRenderPass(const DrawingFrame* frame);
94 void SetScissorStateForQuad(const DrawingFrame* frame,
95 const DrawQuad& quad,
96 const gfx::Rect& render_pass_scissor,
97 bool use_render_pass_scissor);
98 bool ShouldSkipQuad(const DrawQuad& quad,
99 const gfx::Rect& render_pass_scissor);
100 void SetScissorTestRectInDrawSpace(const DrawingFrame* frame,
101 const gfx::Rect& draw_space_rect);
102
103 static gfx::Size RenderPassTextureSize(const RenderPass* render_pass);
104
105 void FlushPolygons(ScopedPtrDeque<DrawPolygon>* poly_list,
106 DrawingFrame* frame,
107 const gfx::Rect& render_pass_scissor,
108 bool use_render_pass_scissor);
109 void DrawRenderPass(DrawingFrame* frame, const RenderPass* render_pass);
110 bool UseRenderPass(DrawingFrame* frame, const RenderPass* render_pass);
111
112 virtual void BindFramebufferToOutputSurface(DrawingFrame* frame) = 0;
113 virtual bool BindFramebufferToTexture(DrawingFrame* frame,
114 const ScopedResource* resource,
115 const gfx::Rect& target_rect) = 0;
116 virtual void SetDrawViewport(const gfx::Rect& window_space_viewport) = 0;
117 virtual void SetScissorTestRect(const gfx::Rect& scissor_rect) = 0;
118 virtual void PrepareSurfaceForPass(
119 DrawingFrame* frame,
120 SurfaceInitializationMode initialization_mode,
121 const gfx::Rect& render_pass_scissor) = 0;
122 // clip_region is a (possibly null) pointer to a quad in the same
123 // space as the quad. When non-null only the area of the quad that overlaps
124 // with clip_region will be drawn.
125 virtual void DoDrawQuad(DrawingFrame* frame,
126 const DrawQuad* quad,
127 const gfx::QuadF* clip_region) = 0;
128 virtual void BeginDrawingFrame(DrawingFrame* frame) = 0;
129 virtual void FinishDrawingFrame(DrawingFrame* frame) = 0;
130 virtual void FinishDrawingQuadList();
131 virtual bool FlippedFramebuffer(const DrawingFrame* frame) const = 0;
132 virtual void EnsureScissorTestEnabled() = 0;
133 virtual void EnsureScissorTestDisabled() = 0;
134 virtual void DiscardBackbuffer() {}
135 virtual void EnsureBackbuffer() {}
136
137 virtual void CopyCurrentRenderPassToBitmap(
138 DrawingFrame* frame,
139 scoped_ptr<CopyOutputRequest> request) = 0;
140
141 base::ScopedPtrHashMap<RenderPassId, scoped_ptr<ScopedResource>> render_pass_t extures_;
142 OutputSurface* output_surface_;
143 ResourceProvider* resource_provider_;
144 scoped_ptr<OverlayProcessor> overlay_processor_;
145
146 // For use in coordinate conversion, this stores the output rect, viewport
147 // rect (= unflipped version of glViewport rect), and the size of target
148 // framebuffer. During a draw, this stores the values for the current render
149 // pass; in between draws, they retain the values for the root render pass of
150 // the last draw.
151 gfx::Rect current_draw_rect_;
152 gfx::Rect current_viewport_rect_;
153 gfx::Size current_surface_size_;
154
155 private:
156 gfx::Vector2d enlarge_pass_texture_amount_;
157
158 DISALLOW_COPY_AND_ASSIGN(DirectRenderer);
159 };
160
161 } // namespace cc
162
163 #endif // CC_OUTPUT_DIRECT_RENDERER_H_
OLDNEW
« no previous file with comments | « cc/output/delegating_renderer_unittest.cc ('k') | cc/output/direct_renderer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698