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

Side by Side Diff: cc/direct_renderer.cc

Issue 11189043: cc: Rename cc classes and members to match filenames (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 2 months 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "config.h" 5 #include "config.h"
6 6
7 #include "CCDirectRenderer.h" 7 #include "CCDirectRenderer.h"
8 8
9 #include "CCMathUtil.h" 9 #include "CCMathUtil.h"
10 #include <public/WebTransformationMatrix.h> 10 #include <public/WebTransformationMatrix.h>
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 43
44 // Map from ([-1, -1] to [1, 1]) -> ([0, 0] to [1, 1]) 44 // Map from ([-1, -1] to [1, 1]) -> ([0, 0] to [1, 1])
45 canvas.translate3d(0.5, 0.5, 0.5); 45 canvas.translate3d(0.5, 0.5, 0.5);
46 canvas.scale3d(0.5, 0.5, 0.5); 46 canvas.scale3d(0.5, 0.5, 0.5);
47 47
48 return canvas; 48 return canvas;
49 } 49 }
50 50
51 namespace cc { 51 namespace cc {
52 52
53 CCDirectRenderer::DrawingFrame::DrawingFrame() 53 DirectRenderer::DrawingFrame::DrawingFrame()
54 : rootRenderPass(0) 54 : rootRenderPass(0)
55 , currentRenderPass(0) 55 , currentRenderPass(0)
56 , currentTexture(0) 56 , currentTexture(0)
57 , flippedY(false) 57 , flippedY(false)
58 { 58 {
59 } 59 }
60 60
61 CCDirectRenderer::DrawingFrame::~DrawingFrame() 61 DirectRenderer::DrawingFrame::~DrawingFrame()
62 { 62 {
63 } 63 }
64 64
65 // 65 //
66 // static 66 // static
67 FloatRect CCDirectRenderer::quadVertexRect() 67 FloatRect DirectRenderer::quadVertexRect()
68 { 68 {
69 return FloatRect(-0.5, -0.5, 1, 1); 69 return FloatRect(-0.5, -0.5, 1, 1);
70 } 70 }
71 71
72 // static 72 // static
73 void CCDirectRenderer::quadRectTransform(WebKit::WebTransformationMatrix* quadRe ctTransform, const WebKit::WebTransformationMatrix& quadTransform, const FloatRe ct& quadRect) 73 void DirectRenderer::quadRectTransform(WebKit::WebTransformationMatrix* quadRect Transform, const WebKit::WebTransformationMatrix& quadTransform, const FloatRect & quadRect)
74 { 74 {
75 *quadRectTransform = quadTransform; 75 *quadRectTransform = quadTransform;
76 quadRectTransform->translate(0.5 * quadRect.width() + quadRect.x(), 0.5 * qu adRect.height() + quadRect.y()); 76 quadRectTransform->translate(0.5 * quadRect.width() + quadRect.x(), 0.5 * qu adRect.height() + quadRect.y());
77 quadRectTransform->scaleNonUniform(quadRect.width(), quadRect.height()); 77 quadRectTransform->scaleNonUniform(quadRect.width(), quadRect.height());
78 } 78 }
79 79
80 // static 80 // static
81 void CCDirectRenderer::initializeMatrices(DrawingFrame& frame, const IntRect& dr awRect, bool flipY) 81 void DirectRenderer::initializeMatrices(DrawingFrame& frame, const IntRect& draw Rect, bool flipY)
82 { 82 {
83 if (flipY) 83 if (flipY)
84 frame.projectionMatrix = orthoProjectionMatrix(drawRect.x(), drawRect.ma xX(), drawRect.maxY(), drawRect.y()); 84 frame.projectionMatrix = orthoProjectionMatrix(drawRect.x(), drawRect.ma xX(), drawRect.maxY(), drawRect.y());
85 else 85 else
86 frame.projectionMatrix = orthoProjectionMatrix(drawRect.x(), drawRect.ma xX(), drawRect.y(), drawRect.maxY()); 86 frame.projectionMatrix = orthoProjectionMatrix(drawRect.x(), drawRect.ma xX(), drawRect.y(), drawRect.maxY());
87 frame.windowMatrix = windowMatrix(0, 0, drawRect.width(), drawRect.height()) ; 87 frame.windowMatrix = windowMatrix(0, 0, drawRect.width(), drawRect.height()) ;
88 frame.flippedY = flipY; 88 frame.flippedY = flipY;
89 } 89 }
90 90
91 // static 91 // static
92 IntRect CCDirectRenderer::moveScissorToWindowSpace(const DrawingFrame& frame, Fl oatRect scissorRect) 92 IntRect DirectRenderer::moveScissorToWindowSpace(const DrawingFrame& frame, Floa tRect scissorRect)
93 { 93 {
94 IntRect scissorRectInCanvasSpace = enclosingIntRect(scissorRect); 94 IntRect scissorRectInCanvasSpace = enclosingIntRect(scissorRect);
95 // The scissor coordinates must be supplied in viewport space so we need to offset 95 // The scissor coordinates must be supplied in viewport space so we need to offset
96 // by the relative position of the top left corner of the current render pas s. 96 // by the relative position of the top left corner of the current render pas s.
97 IntRect framebufferOutputRect = frame.currentRenderPass->outputRect(); 97 IntRect framebufferOutputRect = frame.currentRenderPass->outputRect();
98 scissorRectInCanvasSpace.setX(scissorRectInCanvasSpace.x() - framebufferOutp utRect.x()); 98 scissorRectInCanvasSpace.setX(scissorRectInCanvasSpace.x() - framebufferOutp utRect.x());
99 if (frame.flippedY && !frame.currentTexture) 99 if (frame.flippedY && !frame.currentTexture)
100 scissorRectInCanvasSpace.setY(framebufferOutputRect.height() - (scissorR ectInCanvasSpace.maxY() - framebufferOutputRect.y())); 100 scissorRectInCanvasSpace.setY(framebufferOutputRect.height() - (scissorR ectInCanvasSpace.maxY() - framebufferOutputRect.y()));
101 else 101 else
102 scissorRectInCanvasSpace.setY(scissorRectInCanvasSpace.y() - framebuffer OutputRect.y()); 102 scissorRectInCanvasSpace.setY(scissorRectInCanvasSpace.y() - framebuffer OutputRect.y());
103 return scissorRectInCanvasSpace; 103 return scissorRectInCanvasSpace;
104 } 104 }
105 105
106 CCDirectRenderer::CCDirectRenderer(CCRendererClient* client, CCResourceProvider* resourceProvider) 106 DirectRenderer::DirectRenderer(RendererClient* client, ResourceProvider* resourc eProvider)
107 : CCRenderer(client) 107 : Renderer(client)
108 , m_resourceProvider(resourceProvider) 108 , m_resourceProvider(resourceProvider)
109 { 109 {
110 } 110 }
111 111
112 CCDirectRenderer::~CCDirectRenderer() 112 DirectRenderer::~DirectRenderer()
113 { 113 {
114 } 114 }
115 115
116 void CCDirectRenderer::decideRenderPassAllocationsForFrame(const CCRenderPassLis t& renderPassesInDrawOrder) 116 void DirectRenderer::decideRenderPassAllocationsForFrame(const RenderPassList& r enderPassesInDrawOrder)
117 { 117 {
118 base::hash_map<CCRenderPass::Id, const CCRenderPass*> renderPassesInFrame; 118 base::hash_map<RenderPass::Id, const RenderPass*> renderPassesInFrame;
119 for (size_t i = 0; i < renderPassesInDrawOrder.size(); ++i) 119 for (size_t i = 0; i < renderPassesInDrawOrder.size(); ++i)
120 renderPassesInFrame.insert(std::pair<CCRenderPass::Id, const CCRenderPas s*>(renderPassesInDrawOrder[i]->id(), renderPassesInDrawOrder[i])); 120 renderPassesInFrame.insert(std::pair<RenderPass::Id, const RenderPass*>( renderPassesInDrawOrder[i]->id(), renderPassesInDrawOrder[i]));
121 121
122 std::vector<CCRenderPass::Id> passesToDelete; 122 std::vector<RenderPass::Id> passesToDelete;
123 ScopedPtrHashMap<CCRenderPass::Id, CachedTexture>::const_iterator passIterat or; 123 ScopedPtrHashMap<RenderPass::Id, CachedTexture>::const_iterator passIterator ;
124 for (passIterator = m_renderPassTextures.begin(); passIterator != m_renderPa ssTextures.end(); ++passIterator) { 124 for (passIterator = m_renderPassTextures.begin(); passIterator != m_renderPa ssTextures.end(); ++passIterator) {
125 base::hash_map<CCRenderPass::Id, const CCRenderPass*>::const_iterator it = renderPassesInFrame.find(passIterator->first); 125 base::hash_map<RenderPass::Id, const RenderPass*>::const_iterator it = r enderPassesInFrame.find(passIterator->first);
126 if (it == renderPassesInFrame.end()) { 126 if (it == renderPassesInFrame.end()) {
127 passesToDelete.push_back(passIterator->first); 127 passesToDelete.push_back(passIterator->first);
128 continue; 128 continue;
129 } 129 }
130 130
131 const CCRenderPass* renderPassInFrame = it->second; 131 const RenderPass* renderPassInFrame = it->second;
132 const IntSize& requiredSize = renderPassTextureSize(renderPassInFrame); 132 const IntSize& requiredSize = renderPassTextureSize(renderPassInFrame);
133 GC3Denum requiredFormat = renderPassTextureFormat(renderPassInFrame); 133 GC3Denum requiredFormat = renderPassTextureFormat(renderPassInFrame);
134 CachedTexture* texture = passIterator->second; 134 CachedTexture* texture = passIterator->second;
135 ASSERT(texture); 135 ASSERT(texture);
136 136
137 if (texture->id() && (texture->size() != requiredSize || texture->format () != requiredFormat)) 137 if (texture->id() && (texture->size() != requiredSize || texture->format () != requiredFormat))
138 texture->free(); 138 texture->free();
139 } 139 }
140 140
141 // Delete RenderPass textures from the previous frame that will not be used again. 141 // Delete RenderPass textures from the previous frame that will not be used again.
142 for (size_t i = 0; i < passesToDelete.size(); ++i) 142 for (size_t i = 0; i < passesToDelete.size(); ++i)
143 m_renderPassTextures.erase(passesToDelete[i]); 143 m_renderPassTextures.erase(passesToDelete[i]);
144 144
145 for (size_t i = 0; i < renderPassesInDrawOrder.size(); ++i) { 145 for (size_t i = 0; i < renderPassesInDrawOrder.size(); ++i) {
146 if (!m_renderPassTextures.contains(renderPassesInDrawOrder[i]->id())) { 146 if (!m_renderPassTextures.contains(renderPassesInDrawOrder[i]->id())) {
147 scoped_ptr<CachedTexture> texture = CachedTexture::create(m_resourcePr ovider); 147 scoped_ptr<CachedTexture> texture = CachedTexture::create(m_resourcePr ovider);
148 m_renderPassTextures.set(renderPassesInDrawOrder[i]->id(), texture.P ass()); 148 m_renderPassTextures.set(renderPassesInDrawOrder[i]->id(), texture.P ass());
149 } 149 }
150 } 150 }
151 } 151 }
152 152
153 void CCDirectRenderer::drawFrame(const CCRenderPassList& renderPassesInDrawOrder , const CCRenderPassIdHashMap& renderPassesById) 153 void DirectRenderer::drawFrame(const RenderPassList& renderPassesInDrawOrder, co nst RenderPassIdHashMap& renderPassesById)
154 { 154 {
155 const CCRenderPass* rootRenderPass = renderPassesInDrawOrder.back(); 155 const RenderPass* rootRenderPass = renderPassesInDrawOrder.back();
156 ASSERT(rootRenderPass); 156 ASSERT(rootRenderPass);
157 157
158 DrawingFrame frame; 158 DrawingFrame frame;
159 frame.renderPassesById = &renderPassesById; 159 frame.renderPassesById = &renderPassesById;
160 frame.rootRenderPass = rootRenderPass; 160 frame.rootRenderPass = rootRenderPass;
161 frame.rootDamageRect = capabilities().usingPartialSwap ? rootRenderPass->dam ageRect() : rootRenderPass->outputRect(); 161 frame.rootDamageRect = capabilities().usingPartialSwap ? rootRenderPass->dam ageRect() : rootRenderPass->outputRect();
162 frame.rootDamageRect.intersect(IntRect(IntPoint::zero(), viewportSize())); 162 frame.rootDamageRect.intersect(IntRect(IntPoint::zero(), viewportSize()));
163 163
164 beginDrawingFrame(frame); 164 beginDrawingFrame(frame);
165 for (size_t i = 0; i < renderPassesInDrawOrder.size(); ++i) 165 for (size_t i = 0; i < renderPassesInDrawOrder.size(); ++i)
166 drawRenderPass(frame, renderPassesInDrawOrder[i]); 166 drawRenderPass(frame, renderPassesInDrawOrder[i]);
167 finishDrawingFrame(frame); 167 finishDrawingFrame(frame);
168 } 168 }
169 169
170 void CCDirectRenderer::drawRenderPass(DrawingFrame& frame, const CCRenderPass* r enderPass) 170 void DirectRenderer::drawRenderPass(DrawingFrame& frame, const RenderPass* rende rPass)
171 { 171 {
172 if (!useRenderPass(frame, renderPass)) 172 if (!useRenderPass(frame, renderPass))
173 return; 173 return;
174 174
175 frame.scissorRectInRenderPassSpace = frame.currentRenderPass->outputRect(); 175 frame.scissorRectInRenderPassSpace = frame.currentRenderPass->outputRect();
176 if (frame.rootDamageRect != frame.rootRenderPass->outputRect()) { 176 if (frame.rootDamageRect != frame.rootRenderPass->outputRect()) {
177 WebTransformationMatrix inverseTransformToRoot = frame.currentRenderPass ->transformToRootTarget().inverse(); 177 WebTransformationMatrix inverseTransformToRoot = frame.currentRenderPass ->transformToRootTarget().inverse();
178 frame.scissorRectInRenderPassSpace.intersect(CCMathUtil::projectClippedR ect(inverseTransformToRoot, frame.rootDamageRect)); 178 frame.scissorRectInRenderPassSpace.intersect(MathUtil::projectClippedRec t(inverseTransformToRoot, frame.rootDamageRect));
179 } 179 }
180 180
181 enableScissorTestRect(moveScissorToWindowSpace(frame, frame.scissorRectInRen derPassSpace)); 181 enableScissorTestRect(moveScissorToWindowSpace(frame, frame.scissorRectInRen derPassSpace));
182 clearFramebuffer(frame); 182 clearFramebuffer(frame);
183 183
184 const CCQuadList& quadList = renderPass->quadList(); 184 const QuadList& quadList = renderPass->quadList();
185 for (CCQuadList::constBackToFrontIterator it = quadList.backToFrontBegin(); it != quadList.backToFrontEnd(); ++it) { 185 for (QuadList::constBackToFrontIterator it = quadList.backToFrontBegin(); it != quadList.backToFrontEnd(); ++it) {
186 FloatRect quadScissorRect = frame.scissorRectInRenderPassSpace; 186 FloatRect quadScissorRect = frame.scissorRectInRenderPassSpace;
187 quadScissorRect.intersect((*it)->clippedRectInTarget()); 187 quadScissorRect.intersect((*it)->clippedRectInTarget());
188 if (!quadScissorRect.isEmpty()) { 188 if (!quadScissorRect.isEmpty()) {
189 enableScissorTestRect(moveScissorToWindowSpace(frame, quadScissorRec t)); 189 enableScissorTestRect(moveScissorToWindowSpace(frame, quadScissorRec t));
190 drawQuad(frame, *it); 190 drawQuad(frame, *it);
191 } 191 }
192 } 192 }
193 193
194 CachedTexture* texture = m_renderPassTextures.get(renderPass->id()); 194 CachedTexture* texture = m_renderPassTextures.get(renderPass->id());
195 if (texture) 195 if (texture)
196 texture->setIsComplete(!renderPass->hasOcclusionFromOutsideTargetSurface ()); 196 texture->setIsComplete(!renderPass->hasOcclusionFromOutsideTargetSurface ());
197 } 197 }
198 198
199 bool CCDirectRenderer::useRenderPass(DrawingFrame& frame, const CCRenderPass* re nderPass) 199 bool DirectRenderer::useRenderPass(DrawingFrame& frame, const RenderPass* render Pass)
200 { 200 {
201 frame.currentRenderPass = renderPass; 201 frame.currentRenderPass = renderPass;
202 frame.currentTexture = 0; 202 frame.currentTexture = 0;
203 203
204 if (renderPass == frame.rootRenderPass) { 204 if (renderPass == frame.rootRenderPass) {
205 bindFramebufferToOutputSurface(frame); 205 bindFramebufferToOutputSurface(frame);
206 initializeMatrices(frame, renderPass->outputRect(), flippedFramebuffer() ); 206 initializeMatrices(frame, renderPass->outputRect(), flippedFramebuffer() );
207 setDrawViewportSize(renderPass->outputRect().size()); 207 setDrawViewportSize(renderPass->outputRect().size());
208 return true; 208 return true;
209 } 209 }
210 210
211 CachedTexture* texture = m_renderPassTextures.get(renderPass->id()); 211 CachedTexture* texture = m_renderPassTextures.get(renderPass->id());
212 ASSERT(texture); 212 ASSERT(texture);
213 if (!texture->id() && !texture->allocate(CCRenderer::ImplPool, renderPassTex tureSize(renderPass), renderPassTextureFormat(renderPass), CCResourceProvider::T extureUsageFramebuffer)) 213 if (!texture->id() && !texture->allocate(Renderer::ImplPool, renderPassTextu reSize(renderPass), renderPassTextureFormat(renderPass), ResourceProvider::Textu reUsageFramebuffer))
214 return false; 214 return false;
215 215
216 return bindFramebufferToTexture(frame, texture, renderPass->outputRect()); 216 return bindFramebufferToTexture(frame, texture, renderPass->outputRect());
217 } 217 }
218 218
219 bool CCDirectRenderer::haveCachedResourcesForRenderPassId(CCRenderPass::Id id) c onst 219 bool DirectRenderer::haveCachedResourcesForRenderPassId(RenderPass::Id id) const
220 { 220 {
221 CachedTexture* texture = m_renderPassTextures.get(id); 221 CachedTexture* texture = m_renderPassTextures.get(id);
222 return texture && texture->id() && texture->isComplete(); 222 return texture && texture->id() && texture->isComplete();
223 } 223 }
224 224
225 // static 225 // static
226 IntSize CCDirectRenderer::renderPassTextureSize(const CCRenderPass* pass) 226 IntSize DirectRenderer::renderPassTextureSize(const RenderPass* pass)
227 { 227 {
228 return pass->outputRect().size(); 228 return pass->outputRect().size();
229 } 229 }
230 230
231 // static 231 // static
232 GC3Denum CCDirectRenderer::renderPassTextureFormat(const CCRenderPass*) 232 GC3Denum DirectRenderer::renderPassTextureFormat(const RenderPass*)
233 { 233 {
234 return GraphicsContext3D::RGBA; 234 return GraphicsContext3D::RGBA;
235 } 235 }
236 236
237 } 237 }
OLDNEW
« cc/active_animation.h ('K') | « cc/direct_renderer.h ('k') | cc/draw_quad.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698