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

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

Issue 68973005: Expand pixelref to return SkImageInfo and rowbytes (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: undo mod to GpuBitmapCopy test, and change bitmapdevice to not ask for alloc w/ kNo_Config Created 7 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 | Annotate | Revision Log
« no previous file with comments | « src/gpu/GrSurface.cpp ('k') | src/gpu/SkGr.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 * Copyright 2011 Google Inc. 2 * Copyright 2011 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkGpuDevice.h" 8 #include "SkGpuDevice.h"
9 9
10 #include "effects/GrBicubicEffect.h" 10 #include "effects/GrBicubicEffect.h"
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 fRenderTarget->ref(); 193 fRenderTarget->ref();
194 194
195 // Hold onto to the texture in the pixel ref (if there is one) because the t exture holds a ref 195 // Hold onto to the texture in the pixel ref (if there is one) because the t exture holds a ref
196 // on the RT but not vice-versa. 196 // on the RT but not vice-versa.
197 // TODO: Remove this trickery once we figure out how to make SkGrPixelRef do this without 197 // TODO: Remove this trickery once we figure out how to make SkGrPixelRef do this without
198 // busting chrome (for a currently unknown reason). 198 // busting chrome (for a currently unknown reason).
199 GrSurface* surface = fRenderTarget->asTexture(); 199 GrSurface* surface = fRenderTarget->asTexture();
200 if (NULL == surface) { 200 if (NULL == surface) {
201 surface = fRenderTarget; 201 surface = fRenderTarget;
202 } 202 }
203 SkPixelRef* pr = SkNEW_ARGS(SkGrPixelRef, (surface, cached)); 203
204 SkImageInfo info;
205 surface->asImageInfo(&info);
206 SkPixelRef* pr = SkNEW_ARGS(SkGrPixelRef, (info, surface, cached));
204 207
205 this->setPixelRef(pr, 0)->unref(); 208 this->setPixelRef(pr, 0)->unref();
206 } 209 }
207 210
208 SkGpuDevice::SkGpuDevice(GrContext* context, 211 SkGpuDevice::SkGpuDevice(GrContext* context,
209 SkBitmap::Config config, 212 SkBitmap::Config config,
210 int width, 213 int width,
211 int height, 214 int height,
212 int sampleCount) 215 int sampleCount)
213 : SkBitmapDevice(config, width, height, false /*isOpaque*/) { 216 : SkBitmapDevice(config, width, height, false /*isOpaque*/)
214 217 {
215 fDrawProcs = NULL; 218 fDrawProcs = NULL;
216 219
217 fContext = context; 220 fContext = context;
218 fContext->ref(); 221 fContext->ref();
219 222
220 fRenderTarget = NULL; 223 fRenderTarget = NULL;
221 fNeedClear = false; 224 fNeedClear = false;
222 225
223 if (config != SkBitmap::kRGB_565_Config) { 226 if (config != SkBitmap::kRGB_565_Config) {
224 config = SkBitmap::kARGB_8888_Config; 227 config = SkBitmap::kARGB_8888_Config;
225 } 228 }
226 229
227 GrTextureDesc desc; 230 GrTextureDesc desc;
228 desc.fFlags = kRenderTarget_GrTextureFlagBit; 231 desc.fFlags = kRenderTarget_GrTextureFlagBit;
229 desc.fWidth = width; 232 desc.fWidth = width;
230 desc.fHeight = height; 233 desc.fHeight = height;
231 desc.fConfig = SkBitmapConfig2GrPixelConfig(config); 234 desc.fConfig = SkBitmapConfig2GrPixelConfig(config);
232 desc.fSampleCnt = sampleCount; 235 desc.fSampleCnt = sampleCount;
233 236
237 SkImageInfo info;
238 if (!GrPixelConfig2ColorType(desc.fConfig, &info.fColorType)) {
239 sk_throw();
240 }
241 info.fWidth = width;
242 info.fHeight = height;
243 info.fAlphaType = kPremul_SkAlphaType;
244
234 SkAutoTUnref<GrTexture> texture(fContext->createUncachedTexture(desc, NULL, 0)); 245 SkAutoTUnref<GrTexture> texture(fContext->createUncachedTexture(desc, NULL, 0));
235 246
236 if (NULL != texture) { 247 if (NULL != texture) {
237 fRenderTarget = texture->asRenderTarget(); 248 fRenderTarget = texture->asRenderTarget();
238 fRenderTarget->ref(); 249 fRenderTarget->ref();
239 250
240 SkASSERT(NULL != fRenderTarget); 251 SkASSERT(NULL != fRenderTarget);
241 252
242 // wrap the bitmap with a pixelref to expose our texture 253 // wrap the bitmap with a pixelref to expose our texture
243 SkGrPixelRef* pr = SkNEW_ARGS(SkGrPixelRef, (texture)); 254 SkGrPixelRef* pr = SkNEW_ARGS(SkGrPixelRef, (info, texture));
244 this->setPixelRef(pr, 0)->unref(); 255 this->setPixelRef(pr, 0)->unref();
245 } else { 256 } else {
246 GrPrintf("--- failed to create gpu-offscreen [%d %d]\n", 257 GrPrintf("--- failed to create gpu-offscreen [%d %d]\n",
247 width, height); 258 width, height);
248 SkASSERT(false); 259 SkASSERT(false);
249 } 260 }
250 } 261 }
251 262
252 SkGpuDevice::~SkGpuDevice() { 263 SkGpuDevice::~SkGpuDevice() {
253 if (fDrawProcs) { 264 if (fDrawProcs) {
(...skipping 565 matching lines...) Expand 10 before | Expand all | Expand 10 after
819 830
820 // Draw the mask into maskTexture with the path's top-left at the origin usi ng tempPaint. 831 // Draw the mask into maskTexture with the path's top-left at the origin usi ng tempPaint.
821 SkMatrix translate; 832 SkMatrix translate;
822 translate.setTranslate(-maskRect.fLeft, -maskRect.fTop); 833 translate.setTranslate(-maskRect.fLeft, -maskRect.fTop);
823 am.set(context, translate); 834 am.set(context, translate);
824 context->drawPath(tempPaint, devPath, stroke); 835 context->drawPath(tempPaint, devPath, stroke);
825 return true; 836 return true;
826 } 837 }
827 838
828 SkBitmap wrap_texture(GrTexture* texture) { 839 SkBitmap wrap_texture(GrTexture* texture) {
840 SkImageInfo info;
841 texture->asImageInfo(&info);
842
829 SkBitmap result; 843 SkBitmap result;
830 bool dummy; 844 result.setConfig(info);
831 SkBitmap::Config config = grConfig2skConfig(texture->config(), &dummy); 845 result.setPixelRef(SkNEW_ARGS(SkGrPixelRef, (info, texture)))->unref();
832 result.setConfig(config, texture->width(), texture->height());
833 result.setPixelRef(SkNEW_ARGS(SkGrPixelRef, (texture)))->unref();
834 return result; 846 return result;
835 } 847 }
836 848
837 }; 849 };
838 850
839 void SkGpuDevice::drawPath(const SkDraw& draw, const SkPath& origSrcPath, 851 void SkGpuDevice::drawPath(const SkDraw& draw, const SkPath& origSrcPath,
840 const SkPaint& paint, const SkMatrix* prePathMatrix, 852 const SkPaint& paint, const SkMatrix* prePathMatrix,
841 bool pathIsMutable) { 853 bool pathIsMutable) {
842 CHECK_FOR_ANNOTATION(paint); 854 CHECK_FOR_ANNOTATION(paint);
843 CHECK_SHOULD_DRAW(draw, false); 855 CHECK_SHOULD_DRAW(draw, false);
(...skipping 1037 matching lines...) Expand 10 before | Expand all | Expand 10 after
1881 GrTexture* texture, 1893 GrTexture* texture,
1882 bool needClear) 1894 bool needClear)
1883 : SkBitmapDevice(make_bitmap(context, texture->asRenderTarget())) { 1895 : SkBitmapDevice(make_bitmap(context, texture->asRenderTarget())) {
1884 1896
1885 SkASSERT(texture && texture->asRenderTarget()); 1897 SkASSERT(texture && texture->asRenderTarget());
1886 // This constructor is called from onCreateCompatibleDevice. It has locked t he RT in the texture 1898 // This constructor is called from onCreateCompatibleDevice. It has locked t he RT in the texture
1887 // cache. We pass true for the third argument so that it will get unlocked. 1899 // cache. We pass true for the third argument so that it will get unlocked.
1888 this->initFromRenderTarget(context, texture->asRenderTarget(), true); 1900 this->initFromRenderTarget(context, texture->asRenderTarget(), true);
1889 fNeedClear = needClear; 1901 fNeedClear = needClear;
1890 } 1902 }
OLDNEW
« no previous file with comments | « src/gpu/GrSurface.cpp ('k') | src/gpu/SkGr.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698