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

Side by Side Diff: src/gpu/GrContext.cpp

Issue 1406173003: Loosen requirement that there be only one GrDrawTarget (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Fix comment Created 5 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
« no previous file with comments | « include/gpu/GrRenderTarget.h ('k') | src/gpu/GrDrawContext.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 #define ASSERT_OWNED_RESOURCE(R) SkASSERT(!(R) || (R)->getContext() == this) 55 #define ASSERT_OWNED_RESOURCE(R) SkASSERT(!(R) || (R)->getContext() == this)
56 #define RETURN_IF_ABANDONED if (fDrawingMgr.abandoned()) { return; } 56 #define RETURN_IF_ABANDONED if (fDrawingMgr.abandoned()) { return; }
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 nullptr; } 58 #define RETURN_NULL_IF_ABANDONED if (fDrawingMgr.abandoned()) { return nullptr; }
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 fDrawTarget = new GrDrawTarget(context->getGpu(), context->resourceProvider( ));
66 } 65 }
67 66
68 void GrContext::DrawingMgr::cleanup() { 67 void GrContext::DrawingMgr::cleanup() {
69 SkSafeSetNull(fDrawTarget); 68 for (int i = 0; i < fDrawTargets.count(); ++i) {
69 fDrawTargets[i]->unref();
70 }
71
72 fDrawTargets.reset();
73
70 delete fNVPRTextContext; 74 delete fNVPRTextContext;
71 fNVPRTextContext = nullptr; 75 fNVPRTextContext = nullptr;
76
72 for (int i = 0; i < kNumPixelGeometries; ++i) { 77 for (int i = 0; i < kNumPixelGeometries; ++i) {
73 delete fTextContexts[i][0]; 78 delete fTextContexts[i][0];
74 fTextContexts[i][0] = nullptr; 79 fTextContexts[i][0] = nullptr;
75 delete fTextContexts[i][1]; 80 delete fTextContexts[i][1];
76 fTextContexts[i][1] = nullptr; 81 fTextContexts[i][1] = nullptr;
77 } 82 }
78 } 83 }
79 84
80 GrContext::DrawingMgr::~DrawingMgr() { 85 GrContext::DrawingMgr::~DrawingMgr() {
81 this->cleanup(); 86 this->cleanup();
82 } 87 }
83 88
84 void GrContext::DrawingMgr::abandon() { 89 void GrContext::DrawingMgr::abandon() {
90 fAbandoned = true;
85 this->cleanup(); 91 this->cleanup();
86 } 92 }
87 93
88 void GrContext::DrawingMgr::reset() { 94 void GrContext::DrawingMgr::reset() {
89 if (fDrawTarget) { 95 for (int i = 0; i < fDrawTargets.count(); ++i) {
90 fDrawTarget->reset(); 96 fDrawTargets[i]->reset();
91 } 97 }
92 } 98 }
93 99
94 void GrContext::DrawingMgr::flush() { 100 void GrContext::DrawingMgr::flush() {
95 if (fDrawTarget) { 101 for (int i = 0; i < fDrawTargets.count(); ++i) {
96 fDrawTarget->flush(); 102 fDrawTargets[i]->flush();
97 } 103 }
98 } 104 }
99 105
100 GrTextContext* GrContext::DrawingMgr::textContext(const SkSurfaceProps& props, 106 GrTextContext* GrContext::DrawingMgr::textContext(const SkSurfaceProps& props,
101 GrRenderTarget* rt) { 107 GrRenderTarget* rt) {
102 if (this->abandoned()) { 108 if (this->abandoned()) {
103 return nullptr; 109 return nullptr;
104 } 110 }
105 111
106 SkASSERT(props.pixelGeometry() < kNumPixelGeometries); 112 SkASSERT(props.pixelGeometry() < kNumPixelGeometries);
(...skipping 11 matching lines...) Expand all
118 } 124 }
119 } 125 }
120 126
121 if (!fTextContexts[props.pixelGeometry()][useDIF]) { 127 if (!fTextContexts[props.pixelGeometry()][useDIF]) {
122 fTextContexts[props.pixelGeometry()][useDIF] = GrAtlasTextContext::Creat e(fContext, props); 128 fTextContexts[props.pixelGeometry()][useDIF] = GrAtlasTextContext::Creat e(fContext, props);
123 } 129 }
124 130
125 return fTextContexts[props.pixelGeometry()][useDIF]; 131 return fTextContexts[props.pixelGeometry()][useDIF];
126 } 132 }
127 133
134 GrDrawTarget* GrContext::DrawingMgr::newDrawTarget(GrRenderTarget* rt) {
135 SkASSERT(fContext);
136
137 // When MDB is disabled we always just return the single drawTarget
138 #ifndef ENABLE_MDB
139 if (fDrawTargets.count()) {
140 SkASSERT(fDrawTargets.count() == 1);
141 // DrawingMgr gets the creation ref - this ref is for the caller
142 return SkRef(fDrawTargets[0]);
143 }
144 #endif
145
146 GrDrawTarget* dt = new GrDrawTarget(fContext->getGpu(), fContext->resourcePr ovider());
147
148 *fDrawTargets.append() = dt;
149
150 // DrawingMgr gets the creation ref - this ref is for the caller
151 return SkRef(dt);
152 }
153
128 GrDrawContext* GrContext::DrawingMgr::drawContext(GrRenderTarget* rt, 154 GrDrawContext* GrContext::DrawingMgr::drawContext(GrRenderTarget* rt,
129 const SkSurfaceProps* surfaceP rops) { 155 const SkSurfaceProps* surfaceP rops) {
130 if (this->abandoned()) { 156 if (this->abandoned()) {
131 return nullptr; 157 return nullptr;
132 } 158 }
133 159
134 return new GrDrawContext(fContext, rt, fDrawTarget, surfaceProps); 160 return new GrDrawContext(fContext, rt, surfaceProps);
135 } 161 }
136 162
137 //////////////////////////////////////////////////////////////////////////////// 163 ////////////////////////////////////////////////////////////////////////////////
138 164
139 165
140 GrContext* GrContext::Create(GrBackend backend, GrBackendContext backendContext) { 166 GrContext* GrContext::Create(GrBackend backend, GrBackendContext backendContext) {
141 GrContextOptions defaultOptions; 167 GrContextOptions defaultOptions;
142 return Create(backend, backendContext, defaultOptions); 168 return Create(backend, backendContext, defaultOptions);
143 } 169 }
144 170
(...skipping 614 matching lines...) Expand 10 before | Expand all | Expand 10 after
759 785
760 void GrContext::setResourceCacheLimits(int maxTextures, size_t maxTextureBytes) { 786 void GrContext::setResourceCacheLimits(int maxTextures, size_t maxTextureBytes) {
761 fResourceCache->setLimits(maxTextures, maxTextureBytes); 787 fResourceCache->setLimits(maxTextures, maxTextureBytes);
762 } 788 }
763 789
764 ////////////////////////////////////////////////////////////////////////////// 790 //////////////////////////////////////////////////////////////////////////////
765 791
766 void GrContext::dumpMemoryStatistics(SkTraceMemoryDump* traceMemoryDump) const { 792 void GrContext::dumpMemoryStatistics(SkTraceMemoryDump* traceMemoryDump) const {
767 fResourceCache->dumpMemoryStatistics(traceMemoryDump); 793 fResourceCache->dumpMemoryStatistics(traceMemoryDump);
768 } 794 }
OLDNEW
« no previous file with comments | « include/gpu/GrRenderTarget.h ('k') | src/gpu/GrDrawContext.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698