| OLD | NEW | 
|     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  Loading... | 
|   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  |   203     SkPixelRef* pr = SkNEW_ARGS(SkGrPixelRef, (surface, cached)); | 
|   204     SkImageInfo info; |  | 
|   205     surface->asImageInfo(&info); |  | 
|   206     SkPixelRef* pr = SkNEW_ARGS(SkGrPixelRef, (info, surface, cached)); |  | 
|   207  |   204  | 
|   208     this->setPixelRef(pr, 0)->unref(); |   205     this->setPixelRef(pr, 0)->unref(); | 
|   209 } |   206 } | 
|   210  |   207  | 
|   211 SkGpuDevice::SkGpuDevice(GrContext* context, |   208 SkGpuDevice::SkGpuDevice(GrContext* context, | 
|   212                          SkBitmap::Config config, |   209                          SkBitmap::Config config, | 
|   213                          int width, |   210                          int width, | 
|   214                          int height, |   211                          int height, | 
|   215                          int sampleCount) |   212                          int sampleCount) | 
|   216     : SkBitmapDevice(config, width, height, false /*isOpaque*/) |   213     : SkBitmapDevice(config, width, height, false /*isOpaque*/) { | 
|   217 { |   214  | 
|   218     fDrawProcs = NULL; |   215     fDrawProcs = NULL; | 
|   219  |   216  | 
|   220     fContext = context; |   217     fContext = context; | 
|   221     fContext->ref(); |   218     fContext->ref(); | 
|   222  |   219  | 
|   223     fRenderTarget = NULL; |   220     fRenderTarget = NULL; | 
|   224     fNeedClear = false; |   221     fNeedClear = false; | 
|   225  |   222  | 
|   226     if (config != SkBitmap::kRGB_565_Config) { |   223     if (config != SkBitmap::kRGB_565_Config) { | 
|   227         config = SkBitmap::kARGB_8888_Config; |   224         config = SkBitmap::kARGB_8888_Config; | 
|   228     } |   225     } | 
|   229  |   226  | 
|   230     GrTextureDesc desc; |   227     GrTextureDesc desc; | 
|   231     desc.fFlags = kRenderTarget_GrTextureFlagBit; |   228     desc.fFlags = kRenderTarget_GrTextureFlagBit; | 
|   232     desc.fWidth = width; |   229     desc.fWidth = width; | 
|   233     desc.fHeight = height; |   230     desc.fHeight = height; | 
|   234     desc.fConfig = SkBitmapConfig2GrPixelConfig(config); |   231     desc.fConfig = SkBitmapConfig2GrPixelConfig(config); | 
|   235     desc.fSampleCnt = sampleCount; |   232     desc.fSampleCnt = sampleCount; | 
|   236  |   233  | 
|   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          |  | 
|   245     SkAutoTUnref<GrTexture> texture(fContext->createUncachedTexture(desc, NULL, 
      0)); |   234     SkAutoTUnref<GrTexture> texture(fContext->createUncachedTexture(desc, NULL, 
      0)); | 
|   246  |   235  | 
|   247     if (NULL != texture) { |   236     if (NULL != texture) { | 
|   248         fRenderTarget = texture->asRenderTarget(); |   237         fRenderTarget = texture->asRenderTarget(); | 
|   249         fRenderTarget->ref(); |   238         fRenderTarget->ref(); | 
|   250  |   239  | 
|   251         SkASSERT(NULL != fRenderTarget); |   240         SkASSERT(NULL != fRenderTarget); | 
|   252  |   241  | 
|   253         // wrap the bitmap with a pixelref to expose our texture |   242         // wrap the bitmap with a pixelref to expose our texture | 
|   254         SkGrPixelRef* pr = SkNEW_ARGS(SkGrPixelRef, (info, texture)); |   243         SkGrPixelRef* pr = SkNEW_ARGS(SkGrPixelRef, (texture)); | 
|   255         this->setPixelRef(pr, 0)->unref(); |   244         this->setPixelRef(pr, 0)->unref(); | 
|   256     } else { |   245     } else { | 
|   257         GrPrintf("--- failed to create gpu-offscreen [%d %d]\n", |   246         GrPrintf("--- failed to create gpu-offscreen [%d %d]\n", | 
|   258                  width, height); |   247                  width, height); | 
|   259         SkASSERT(false); |   248         SkASSERT(false); | 
|   260     } |   249     } | 
|   261 } |   250 } | 
|   262  |   251  | 
|   263 SkGpuDevice::~SkGpuDevice() { |   252 SkGpuDevice::~SkGpuDevice() { | 
|   264     if (fDrawProcs) { |   253     if (fDrawProcs) { | 
| (...skipping 565 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   830  |   819  | 
|   831     // Draw the mask into maskTexture with the path's top-left at the origin usi
      ng tempPaint. |   820     // Draw the mask into maskTexture with the path's top-left at the origin usi
      ng tempPaint. | 
|   832     SkMatrix translate; |   821     SkMatrix translate; | 
|   833     translate.setTranslate(-maskRect.fLeft, -maskRect.fTop); |   822     translate.setTranslate(-maskRect.fLeft, -maskRect.fTop); | 
|   834     am.set(context, translate); |   823     am.set(context, translate); | 
|   835     context->drawPath(tempPaint, devPath, stroke); |   824     context->drawPath(tempPaint, devPath, stroke); | 
|   836     return true; |   825     return true; | 
|   837 } |   826 } | 
|   838  |   827  | 
|   839 SkBitmap wrap_texture(GrTexture* texture) { |   828 SkBitmap wrap_texture(GrTexture* texture) { | 
|   840     SkImageInfo info; |  | 
|   841     texture->asImageInfo(&info); |  | 
|   842  |  | 
|   843     SkBitmap result; |   829     SkBitmap result; | 
|   844     result.setConfig(info); |   830     bool dummy; | 
|   845     result.setPixelRef(SkNEW_ARGS(SkGrPixelRef, (info, texture)))->unref(); |   831     SkBitmap::Config config = grConfig2skConfig(texture->config(), &dummy); | 
 |   832     result.setConfig(config, texture->width(), texture->height()); | 
 |   833     result.setPixelRef(SkNEW_ARGS(SkGrPixelRef, (texture)))->unref(); | 
|   846     return result; |   834     return result; | 
|   847 } |   835 } | 
|   848  |   836  | 
|   849 }; |   837 }; | 
|   850  |   838  | 
|   851 void SkGpuDevice::drawPath(const SkDraw& draw, const SkPath& origSrcPath, |   839 void SkGpuDevice::drawPath(const SkDraw& draw, const SkPath& origSrcPath, | 
|   852                            const SkPaint& paint, const SkMatrix* prePathMatrix, |   840                            const SkPaint& paint, const SkMatrix* prePathMatrix, | 
|   853                            bool pathIsMutable) { |   841                            bool pathIsMutable) { | 
|   854     CHECK_FOR_ANNOTATION(paint); |   842     CHECK_FOR_ANNOTATION(paint); | 
|   855     CHECK_SHOULD_DRAW(draw, false); |   843     CHECK_SHOULD_DRAW(draw, false); | 
| (...skipping 1037 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1893                          GrTexture* texture, |  1881                          GrTexture* texture, | 
|  1894                          bool needClear) |  1882                          bool needClear) | 
|  1895     : SkBitmapDevice(make_bitmap(context, texture->asRenderTarget())) { |  1883     : SkBitmapDevice(make_bitmap(context, texture->asRenderTarget())) { | 
|  1896  |  1884  | 
|  1897     SkASSERT(texture && texture->asRenderTarget()); |  1885     SkASSERT(texture && texture->asRenderTarget()); | 
|  1898     // This constructor is called from onCreateCompatibleDevice. It has locked t
      he RT in the texture |  1886     // This constructor is called from onCreateCompatibleDevice. It has locked t
      he RT in the texture | 
|  1899     // cache. We pass true for the third argument so that it will get unlocked. |  1887     // cache. We pass true for the third argument so that it will get unlocked. | 
|  1900     this->initFromRenderTarget(context, texture->asRenderTarget(), true); |  1888     this->initFromRenderTarget(context, texture->asRenderTarget(), true); | 
|  1901     fNeedClear = needClear; |  1889     fNeedClear = needClear; | 
|  1902 } |  1890 } | 
| OLD | NEW |