OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 #include "GrContext.h" | 9 #include "GrContext.h" |
10 | 10 |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 #define RETURN_FALSE_IF_ABANDONED if (fDrawingMgr.abandoned()) { return false; } | 57 #define RETURN_FALSE_IF_ABANDONED if (fDrawingMgr.abandoned()) { return false; } |
58 #define RETURN_NULL_IF_ABANDONED if (fDrawingMgr.abandoned()) { return NULL; } | 58 #define RETURN_NULL_IF_ABANDONED if (fDrawingMgr.abandoned()) { return NULL; } |
59 | 59 |
60 | 60 |
61 //////////////////////////////////////////////////////////////////////////////// | 61 //////////////////////////////////////////////////////////////////////////////// |
62 | 62 |
63 void GrContext::DrawingMgr::init(GrContext* context) { | 63 void GrContext::DrawingMgr::init(GrContext* context) { |
64 fContext = context; | 64 fContext = context; |
65 | 65 |
66 #ifdef IMMEDIATE_MODE | 66 #ifdef IMMEDIATE_MODE |
67 fDrawTarget = SkNEW_ARGS(GrImmediateDrawTarget, (context)); | 67 fDrawTarget = new GrImmediateDrawTarget(context); |
68 #else | 68 #else |
69 fDrawTarget = SkNEW_ARGS(GrBufferedDrawTarget, (context)); | 69 fDrawTarget = new GrBufferedDrawTarget(context); |
70 #endif | 70 #endif |
71 } | 71 } |
72 | 72 |
73 void GrContext::DrawingMgr::cleanup() { | 73 void GrContext::DrawingMgr::cleanup() { |
74 SkSafeSetNull(fDrawTarget); | 74 SkSafeSetNull(fDrawTarget); |
75 for (int i = 0; i < kNumPixelGeometries; ++i) { | 75 for (int i = 0; i < kNumPixelGeometries; ++i) { |
76 SkSafeSetNull(fDrawContext[i][0]); | 76 SkSafeSetNull(fDrawContext[i][0]); |
77 SkSafeSetNull(fDrawContext[i][1]); | 77 SkSafeSetNull(fDrawContext[i][1]); |
78 } | 78 } |
79 } | 79 } |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
115 GrDrawContext* GrContext::DrawingMgr::drawContext(const SkSurfaceProps* surfaceP
rops) { | 115 GrDrawContext* GrContext::DrawingMgr::drawContext(const SkSurfaceProps* surfaceP
rops) { |
116 if (this->abandoned()) { | 116 if (this->abandoned()) { |
117 return NULL; | 117 return NULL; |
118 } | 118 } |
119 | 119 |
120 const SkSurfaceProps props(SkSurfacePropsCopyOrDefault(surfaceProps)); | 120 const SkSurfaceProps props(SkSurfacePropsCopyOrDefault(surfaceProps)); |
121 | 121 |
122 SkASSERT(props.pixelGeometry() < kNumPixelGeometries); | 122 SkASSERT(props.pixelGeometry() < kNumPixelGeometries); |
123 if (!fDrawContext[props.pixelGeometry()][props.isUseDistanceFieldFonts()]) { | 123 if (!fDrawContext[props.pixelGeometry()][props.isUseDistanceFieldFonts()]) { |
124 fDrawContext[props.pixelGeometry()][props.isUseDistanceFieldFonts()] = | 124 fDrawContext[props.pixelGeometry()][props.isUseDistanceFieldFonts()] = |
125 SkNEW_ARGS(GrDrawContext, (fContext, fDrawTarget, props)); | 125 new GrDrawContext(fContext, fDrawTarget, props); |
126 } | 126 } |
127 | 127 |
128 return fDrawContext[props.pixelGeometry()][props.isUseDistanceFieldFonts()];
| 128 return fDrawContext[props.pixelGeometry()][props.isUseDistanceFieldFonts()];
|
129 } | 129 } |
130 | 130 |
131 //////////////////////////////////////////////////////////////////////////////// | 131 //////////////////////////////////////////////////////////////////////////////// |
132 | 132 |
133 | 133 |
134 GrContext* GrContext::Create(GrBackend backend, GrBackendContext backendContext)
{ | 134 GrContext* GrContext::Create(GrBackend backend, GrBackendContext backendContext)
{ |
135 GrContextOptions defaultOptions; | 135 GrContextOptions defaultOptions; |
136 return Create(backend, backendContext, defaultOptions); | 136 return Create(backend, backendContext, defaultOptions); |
137 } | 137 } |
138 | 138 |
139 GrContext* GrContext::Create(GrBackend backend, GrBackendContext backendContext, | 139 GrContext* GrContext::Create(GrBackend backend, GrBackendContext backendContext, |
140 const GrContextOptions& options) { | 140 const GrContextOptions& options) { |
141 GrContext* context = SkNEW(GrContext); | 141 GrContext* context = new GrContext; |
142 | 142 |
143 if (context->init(backend, backendContext, options)) { | 143 if (context->init(backend, backendContext, options)) { |
144 return context; | 144 return context; |
145 } else { | 145 } else { |
146 context->unref(); | 146 context->unref(); |
147 return NULL; | 147 return NULL; |
148 } | 148 } |
149 } | 149 } |
150 | 150 |
151 static int32_t gNextID = 1; | 151 static int32_t gNextID = 1; |
(...skipping 23 matching lines...) Expand all Loading... |
175 fGpu = GrGpu::Create(backend, backendContext, options, this); | 175 fGpu = GrGpu::Create(backend, backendContext, options, this); |
176 if (!fGpu) { | 176 if (!fGpu) { |
177 return false; | 177 return false; |
178 } | 178 } |
179 this->initCommon(); | 179 this->initCommon(); |
180 return true; | 180 return true; |
181 } | 181 } |
182 | 182 |
183 void GrContext::initCommon() { | 183 void GrContext::initCommon() { |
184 fCaps = SkRef(fGpu->caps()); | 184 fCaps = SkRef(fGpu->caps()); |
185 fResourceCache = SkNEW_ARGS(GrResourceCache, (fCaps)); | 185 fResourceCache = new GrResourceCache(fCaps); |
186 fResourceCache->setOverBudgetCallback(OverBudgetCB, this); | 186 fResourceCache->setOverBudgetCallback(OverBudgetCB, this); |
187 fResourceProvider = SkNEW_ARGS(GrResourceProvider, (fGpu, fResourceCache)); | 187 fResourceProvider = new GrResourceProvider(fGpu, fResourceCache); |
188 | 188 |
189 fLayerCache.reset(SkNEW_ARGS(GrLayerCache, (this))); | 189 fLayerCache.reset(new GrLayerCache(this)); |
190 | 190 |
191 fDidTestPMConversions = false; | 191 fDidTestPMConversions = false; |
192 | 192 |
193 fDrawingMgr.init(this); | 193 fDrawingMgr.init(this); |
194 | 194 |
195 // GrBatchFontCache will eventually replace GrFontCache | 195 // GrBatchFontCache will eventually replace GrFontCache |
196 fBatchFontCache = SkNEW_ARGS(GrBatchFontCache, (this)); | 196 fBatchFontCache = new GrBatchFontCache(this); |
197 | 197 |
198 fTextBlobCache.reset(SkNEW_ARGS(GrTextBlobCache, (TextBlobCacheOverBudgetCB,
this))); | 198 fTextBlobCache.reset(new GrTextBlobCache(TextBlobCacheOverBudgetCB, this)); |
199 } | 199 } |
200 | 200 |
201 GrContext::~GrContext() { | 201 GrContext::~GrContext() { |
202 if (!fGpu) { | 202 if (!fGpu) { |
203 SkASSERT(!fCaps); | 203 SkASSERT(!fCaps); |
204 return; | 204 return; |
205 } | 205 } |
206 | 206 |
207 this->flush(); | 207 this->flush(); |
208 | 208 |
209 fDrawingMgr.cleanup(); | 209 fDrawingMgr.cleanup(); |
210 | 210 |
211 for (int i = 0; i < fCleanUpData.count(); ++i) { | 211 for (int i = 0; i < fCleanUpData.count(); ++i) { |
212 (*fCleanUpData[i].fFunc)(this, fCleanUpData[i].fInfo); | 212 (*fCleanUpData[i].fFunc)(this, fCleanUpData[i].fInfo); |
213 } | 213 } |
214 | 214 |
215 SkDELETE(fResourceProvider); | 215 delete fResourceProvider; |
216 SkDELETE(fResourceCache); | 216 delete fResourceCache; |
217 SkDELETE(fBatchFontCache); | 217 delete fBatchFontCache; |
218 | 218 |
219 fGpu->unref(); | 219 fGpu->unref(); |
220 fCaps->unref(); | 220 fCaps->unref(); |
221 SkSafeUnref(fPathRendererChain); | 221 SkSafeUnref(fPathRendererChain); |
222 SkSafeUnref(fSoftwarePathRenderer); | 222 SkSafeUnref(fSoftwarePathRenderer); |
223 } | 223 } |
224 | 224 |
225 void GrContext::abandonContext() { | 225 void GrContext::abandonContext() { |
226 fResourceProvider->abandon(); | 226 fResourceProvider->abandon(); |
227 // abandon first to so destructors | 227 // abandon first to so destructors |
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
638 GrPathRenderer* GrContext::getPathRenderer(const GrDrawTarget* target, | 638 GrPathRenderer* GrContext::getPathRenderer(const GrDrawTarget* target, |
639 const GrPipelineBuilder* pipelineBuil
der, | 639 const GrPipelineBuilder* pipelineBuil
der, |
640 const SkMatrix& viewMatrix, | 640 const SkMatrix& viewMatrix, |
641 const SkPath& path, | 641 const SkPath& path, |
642 const GrStrokeInfo& stroke, | 642 const GrStrokeInfo& stroke, |
643 bool allowSW, | 643 bool allowSW, |
644 GrPathRendererChain::DrawType drawTyp
e, | 644 GrPathRendererChain::DrawType drawTyp
e, |
645 GrPathRendererChain::StencilSupport*
stencilSupport) { | 645 GrPathRendererChain::StencilSupport*
stencilSupport) { |
646 | 646 |
647 if (!fPathRendererChain) { | 647 if (!fPathRendererChain) { |
648 fPathRendererChain = SkNEW_ARGS(GrPathRendererChain, (this)); | 648 fPathRendererChain = new GrPathRendererChain(this); |
649 } | 649 } |
650 | 650 |
651 GrPathRenderer* pr = fPathRendererChain->getPathRenderer(target, | 651 GrPathRenderer* pr = fPathRendererChain->getPathRenderer(target, |
652 pipelineBuilder, | 652 pipelineBuilder, |
653 viewMatrix, | 653 viewMatrix, |
654 path, | 654 path, |
655 stroke, | 655 stroke, |
656 drawType, | 656 drawType, |
657 stencilSupport); | 657 stencilSupport); |
658 | 658 |
659 if (!pr && allowSW) { | 659 if (!pr && allowSW) { |
660 if (!fSoftwarePathRenderer) { | 660 if (!fSoftwarePathRenderer) { |
661 fSoftwarePathRenderer = SkNEW_ARGS(GrSoftwarePathRenderer, (this)); | 661 fSoftwarePathRenderer = new GrSoftwarePathRenderer(this); |
662 } | 662 } |
663 pr = fSoftwarePathRenderer; | 663 pr = fSoftwarePathRenderer; |
664 } | 664 } |
665 | 665 |
666 return pr; | 666 return pr; |
667 } | 667 } |
668 | 668 |
669 //////////////////////////////////////////////////////////////////////////////// | 669 //////////////////////////////////////////////////////////////////////////////// |
670 int GrContext::getRecommendedSampleCount(GrPixelConfig config, | 670 int GrContext::getRecommendedSampleCount(GrPixelConfig config, |
671 SkScalar dpi) const { | 671 SkScalar dpi) const { |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
754 ////////////////////////////////////////////////////////////////////////////// | 754 ////////////////////////////////////////////////////////////////////////////// |
755 | 755 |
756 void GrContext::addGpuTraceMarker(const GrGpuTraceMarker* marker) { | 756 void GrContext::addGpuTraceMarker(const GrGpuTraceMarker* marker) { |
757 fGpu->addGpuTraceMarker(marker); | 757 fGpu->addGpuTraceMarker(marker); |
758 } | 758 } |
759 | 759 |
760 void GrContext::removeGpuTraceMarker(const GrGpuTraceMarker* marker) { | 760 void GrContext::removeGpuTraceMarker(const GrGpuTraceMarker* marker) { |
761 fGpu->removeGpuTraceMarker(marker); | 761 fGpu->removeGpuTraceMarker(marker); |
762 } | 762 } |
763 | 763 |
OLD | NEW |