| 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 196 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   207     fRenderTarget->ref(); |   207     fRenderTarget->ref(); | 
|   208  |   208  | 
|   209     // Hold onto to the texture in the pixel ref (if there is one) because the t
      exture holds a ref |   209     // Hold onto to the texture in the pixel ref (if there is one) because the t
      exture holds a ref | 
|   210     // on the RT but not vice-versa. |   210     // on the RT but not vice-versa. | 
|   211     // TODO: Remove this trickery once we figure out how to make SkGrPixelRef do
       this without |   211     // TODO: Remove this trickery once we figure out how to make SkGrPixelRef do
       this without | 
|   212     // busting chrome (for a currently unknown reason). |   212     // busting chrome (for a currently unknown reason). | 
|   213     GrSurface* surface = fRenderTarget->asTexture(); |   213     GrSurface* surface = fRenderTarget->asTexture(); | 
|   214     if (NULL == surface) { |   214     if (NULL == surface) { | 
|   215         surface = fRenderTarget; |   215         surface = fRenderTarget; | 
|   216     } |   216     } | 
|   217  |   217     SkPixelRef* pr = SkNEW_ARGS(SkGrPixelRef, (surface, cached)); | 
|   218     SkImageInfo info; |  | 
|   219     surface->asImageInfo(&info); |  | 
|   220     SkPixelRef* pr = SkNEW_ARGS(SkGrPixelRef, (info, surface, cached)); |  | 
|   221  |   218  | 
|   222     this->setPixelRef(pr, 0)->unref(); |   219     this->setPixelRef(pr, 0)->unref(); | 
|   223 } |   220 } | 
|   224  |   221  | 
|   225 SkGpuDevice::SkGpuDevice(GrContext* context, |   222 SkGpuDevice::SkGpuDevice(GrContext* context, | 
|   226                          SkBitmap::Config config, |   223                          SkBitmap::Config config, | 
|   227                          int width, |   224                          int width, | 
|   228                          int height, |   225                          int height, | 
|   229                          int sampleCount) |   226                          int sampleCount) | 
|   230     : SkBitmapDevice(make_bitmap(config, width, height, false /*isOpaque*/)) |   227     : SkBitmapDevice(make_bitmap(config, width, height, false /*isOpaque*/)) { | 
|   231 { |   228  | 
|   232     fDrawProcs = NULL; |   229     fDrawProcs = NULL; | 
|   233  |   230  | 
|   234     fContext = context; |   231     fContext = context; | 
|   235     fContext->ref(); |   232     fContext->ref(); | 
|   236  |   233  | 
|   237     fRenderTarget = NULL; |   234     fRenderTarget = NULL; | 
|   238     fNeedClear = false; |   235     fNeedClear = false; | 
|   239  |   236  | 
|   240     if (config != SkBitmap::kRGB_565_Config) { |   237     if (config != SkBitmap::kRGB_565_Config) { | 
|   241         config = SkBitmap::kARGB_8888_Config; |   238         config = SkBitmap::kARGB_8888_Config; | 
|   242     } |   239     } | 
|   243  |   240  | 
|   244     GrTextureDesc desc; |   241     GrTextureDesc desc; | 
|   245     desc.fFlags = kRenderTarget_GrTextureFlagBit; |   242     desc.fFlags = kRenderTarget_GrTextureFlagBit; | 
|   246     desc.fWidth = width; |   243     desc.fWidth = width; | 
|   247     desc.fHeight = height; |   244     desc.fHeight = height; | 
|   248     desc.fConfig = SkBitmapConfig2GrPixelConfig(config); |   245     desc.fConfig = SkBitmapConfig2GrPixelConfig(config); | 
|   249     desc.fSampleCnt = sampleCount; |   246     desc.fSampleCnt = sampleCount; | 
|   250  |   247  | 
|   251     SkImageInfo info; |  | 
|   252     if (!GrPixelConfig2ColorType(desc.fConfig, &info.fColorType)) { |  | 
|   253         sk_throw(); |  | 
|   254     } |  | 
|   255     info.fWidth = width; |  | 
|   256     info.fHeight = height; |  | 
|   257     info.fAlphaType = kPremul_SkAlphaType; |  | 
|   258          |  | 
|   259     SkAutoTUnref<GrTexture> texture(fContext->createUncachedTexture(desc, NULL, 
      0)); |   248     SkAutoTUnref<GrTexture> texture(fContext->createUncachedTexture(desc, NULL, 
      0)); | 
|   260  |   249  | 
|   261     if (NULL != texture) { |   250     if (NULL != texture) { | 
|   262         fRenderTarget = texture->asRenderTarget(); |   251         fRenderTarget = texture->asRenderTarget(); | 
|   263         fRenderTarget->ref(); |   252         fRenderTarget->ref(); | 
|   264  |   253  | 
|   265         SkASSERT(NULL != fRenderTarget); |   254         SkASSERT(NULL != fRenderTarget); | 
|   266  |   255  | 
|   267         // wrap the bitmap with a pixelref to expose our texture |   256         // wrap the bitmap with a pixelref to expose our texture | 
|   268         SkGrPixelRef* pr = SkNEW_ARGS(SkGrPixelRef, (info, texture)); |   257         SkGrPixelRef* pr = SkNEW_ARGS(SkGrPixelRef, (texture)); | 
|   269         this->setPixelRef(pr, 0)->unref(); |   258         this->setPixelRef(pr, 0)->unref(); | 
|   270     } else { |   259     } else { | 
|   271         GrPrintf("--- failed to create gpu-offscreen [%d %d]\n", |   260         GrPrintf("--- failed to create gpu-offscreen [%d %d]\n", | 
|   272                  width, height); |   261                  width, height); | 
|   273         SkASSERT(false); |   262         SkASSERT(false); | 
|   274     } |   263     } | 
|   275 } |   264 } | 
|   276  |   265  | 
|   277 SkGpuDevice::~SkGpuDevice() { |   266 SkGpuDevice::~SkGpuDevice() { | 
|   278     if (fDrawProcs) { |   267     if (fDrawProcs) { | 
| (...skipping 565 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   844  |   833  | 
|   845     // Draw the mask into maskTexture with the path's top-left at the origin usi
      ng tempPaint. |   834     // Draw the mask into maskTexture with the path's top-left at the origin usi
      ng tempPaint. | 
|   846     SkMatrix translate; |   835     SkMatrix translate; | 
|   847     translate.setTranslate(-maskRect.fLeft, -maskRect.fTop); |   836     translate.setTranslate(-maskRect.fLeft, -maskRect.fTop); | 
|   848     am.set(context, translate); |   837     am.set(context, translate); | 
|   849     context->drawPath(tempPaint, devPath, stroke); |   838     context->drawPath(tempPaint, devPath, stroke); | 
|   850     return true; |   839     return true; | 
|   851 } |   840 } | 
|   852  |   841  | 
|   853 SkBitmap wrap_texture(GrTexture* texture) { |   842 SkBitmap wrap_texture(GrTexture* texture) { | 
|   854     SkImageInfo info; |  | 
|   855     texture->asImageInfo(&info); |  | 
|   856  |  | 
|   857     SkBitmap result; |   843     SkBitmap result; | 
|   858     result.setConfig(info); |   844     bool dummy; | 
|   859     result.setPixelRef(SkNEW_ARGS(SkGrPixelRef, (info, texture)))->unref(); |   845     SkBitmap::Config config = grConfig2skConfig(texture->config(), &dummy); | 
 |   846     result.setConfig(config, texture->width(), texture->height()); | 
 |   847     result.setPixelRef(SkNEW_ARGS(SkGrPixelRef, (texture)))->unref(); | 
|   860     return result; |   848     return result; | 
|   861 } |   849 } | 
|   862  |   850  | 
|   863 }; |   851 }; | 
|   864  |   852  | 
|   865 void SkGpuDevice::drawPath(const SkDraw& draw, const SkPath& origSrcPath, |   853 void SkGpuDevice::drawPath(const SkDraw& draw, const SkPath& origSrcPath, | 
|   866                            const SkPaint& paint, const SkMatrix* prePathMatrix, |   854                            const SkPaint& paint, const SkMatrix* prePathMatrix, | 
|   867                            bool pathIsMutable) { |   855                            bool pathIsMutable) { | 
|   868     CHECK_FOR_ANNOTATION(paint); |   856     CHECK_FOR_ANNOTATION(paint); | 
|   869     CHECK_SHOULD_DRAW(draw, false); |   857     CHECK_SHOULD_DRAW(draw, false); | 
| (...skipping 1042 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1912                          GrTexture* texture, |  1900                          GrTexture* texture, | 
|  1913                          bool needClear) |  1901                          bool needClear) | 
|  1914     : SkBitmapDevice(make_bitmap(context, texture->asRenderTarget())) { |  1902     : SkBitmapDevice(make_bitmap(context, texture->asRenderTarget())) { | 
|  1915  |  1903  | 
|  1916     SkASSERT(texture && texture->asRenderTarget()); |  1904     SkASSERT(texture && texture->asRenderTarget()); | 
|  1917     // This constructor is called from onCreateCompatibleDevice. It has locked t
      he RT in the texture |  1905     // This constructor is called from onCreateCompatibleDevice. It has locked t
      he RT in the texture | 
|  1918     // cache. We pass true for the third argument so that it will get unlocked. |  1906     // cache. We pass true for the third argument so that it will get unlocked. | 
|  1919     this->initFromRenderTarget(context, texture->asRenderTarget(), true); |  1907     this->initFromRenderTarget(context, texture->asRenderTarget(), true); | 
|  1920     fNeedClear = needClear; |  1908     fNeedClear = needClear; | 
|  1921 } |  1909 } | 
| OLD | NEW |