| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 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 "GrTextureParamsAdjuster.h" | 8 #include "GrTextureParamsAdjuster.h" |
| 9 | 9 |
| 10 #include "GrCaps.h" | 10 #include "GrCaps.h" |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 | 28 |
| 29 ////////////////////////////////////////////////////////////////////////////// | 29 ////////////////////////////////////////////////////////////////////////////// |
| 30 | 30 |
| 31 static GrTexture* copy_on_gpu(GrTexture* inputTexture, const SkIRect* subset, | 31 static GrTexture* copy_on_gpu(GrTexture* inputTexture, const SkIRect* subset, |
| 32 const CopyParams& copyParams) { | 32 const CopyParams& copyParams) { |
| 33 SkASSERT(!subset || !subset->isEmpty()); | 33 SkASSERT(!subset || !subset->isEmpty()); |
| 34 GrContext* context = inputTexture->getContext(); | 34 GrContext* context = inputTexture->getContext(); |
| 35 SkASSERT(context); | 35 SkASSERT(context); |
| 36 const GrCaps* caps = context->caps(); | 36 const GrCaps* caps = context->caps(); |
| 37 | 37 |
| 38 // Either it's a cache miss or the original wasn't cached to begin with. | 38 GrPixelConfig config = GrMakePixelConfigUncompressed(inputTexture->config())
; |
| 39 GrSurfaceDesc rtDesc = inputTexture->desc(); | |
| 40 rtDesc.fFlags = rtDesc.fFlags | kRenderTarget_GrSurfaceFlag; | |
| 41 rtDesc.fWidth = copyParams.fWidth; | |
| 42 rtDesc.fHeight = copyParams.fHeight; | |
| 43 rtDesc.fConfig = GrMakePixelConfigUncompressed(rtDesc.fConfig); | |
| 44 | 39 |
| 45 // If the config isn't renderable try converting to either A8 or an 32 bit c
onfig. Otherwise, | 40 // If the config isn't renderable try converting to either A8 or an 32 bit c
onfig. Otherwise, |
| 46 // fail. | 41 // fail. |
| 47 if (!caps->isConfigRenderable(rtDesc.fConfig, false)) { | 42 if (!caps->isConfigRenderable(config, false)) { |
| 48 if (GrPixelConfigIsAlphaOnly(rtDesc.fConfig)) { | 43 if (GrPixelConfigIsAlphaOnly(config)) { |
| 49 if (caps->isConfigRenderable(kAlpha_8_GrPixelConfig, false)) { | 44 if (caps->isConfigRenderable(kAlpha_8_GrPixelConfig, false)) { |
| 50 rtDesc.fConfig = kAlpha_8_GrPixelConfig; | 45 config = kAlpha_8_GrPixelConfig; |
| 51 } else if (caps->isConfigRenderable(kSkia8888_GrPixelConfig, false))
{ | 46 } else if (caps->isConfigRenderable(kSkia8888_GrPixelConfig, false))
{ |
| 52 rtDesc.fConfig = kSkia8888_GrPixelConfig; | 47 config = kSkia8888_GrPixelConfig; |
| 53 } else { | 48 } else { |
| 54 return nullptr; | 49 return nullptr; |
| 55 } | 50 } |
| 56 } else if (kRGB_GrColorComponentFlags == | 51 } else if (kRGB_GrColorComponentFlags == |
| 57 (kRGB_GrColorComponentFlags & GrPixelConfigComponentMask(rtDe
sc.fConfig))) { | 52 (kRGB_GrColorComponentFlags & GrPixelConfigComponentMask(config)
)) { |
| 58 if (caps->isConfigRenderable(kSkia8888_GrPixelConfig, false)) { | 53 if (caps->isConfigRenderable(kSkia8888_GrPixelConfig, false)) { |
| 59 rtDesc.fConfig = kSkia8888_GrPixelConfig; | 54 config = kSkia8888_GrPixelConfig; |
| 60 } else { | 55 } else { |
| 61 return nullptr; | 56 return nullptr; |
| 62 } | 57 } |
| 63 } else { | 58 } else { |
| 64 return nullptr; | 59 return nullptr; |
| 65 } | 60 } |
| 66 } | 61 } |
| 67 | 62 |
| 68 SkAutoTUnref<GrTexture> copy(context->textureProvider()->createTexture(rtDes
c, | 63 sk_sp<GrDrawContext> copyDC = context->newDrawContext(SkBackingFit::kExact,
copyParams.fWidth, |
| 69 SkBud
geted::kYes)); | 64 copyParams.fHeight, co
nfig); |
| 70 if (!copy) { | 65 if (!copyDC) { |
| 71 return nullptr; | 66 return nullptr; |
| 72 } | 67 } |
| 73 | 68 |
| 74 // TODO: If no scaling is being performed then use copySurface. | |
| 75 | |
| 76 GrPaint paint; | 69 GrPaint paint; |
| 77 paint.setGammaCorrect(true); | 70 paint.setGammaCorrect(true); |
| 78 | 71 |
| 79 // TODO: Initializing these values for no reason cause the compiler is compl
aining | 72 SkScalar sx SK_INIT_TO_AVOID_WARNING; |
| 80 SkScalar sx = 0.f; | 73 SkScalar sy SK_INIT_TO_AVOID_WARNING; |
| 81 SkScalar sy = 0.f; | |
| 82 if (subset) { | 74 if (subset) { |
| 83 sx = 1.f / inputTexture->width(); | 75 sx = 1.f / inputTexture->width(); |
| 84 sy = 1.f / inputTexture->height(); | 76 sy = 1.f / inputTexture->height(); |
| 85 } | 77 } |
| 86 | 78 |
| 87 if (copyParams.fFilter != GrTextureParams::kNone_FilterMode && subset && | 79 if (copyParams.fFilter != GrTextureParams::kNone_FilterMode && subset && |
| 88 (subset->width() != copyParams.fWidth || subset->height() != copyParams.
fHeight)) { | 80 (subset->width() != copyParams.fWidth || subset->height() != copyParams.
fHeight)) { |
| 89 SkRect domain; | 81 SkRect domain; |
| 90 domain.fLeft = (subset->fLeft + 0.5f) * sx; | 82 domain.fLeft = (subset->fLeft + 0.5f) * sx; |
| 91 domain.fTop = (subset->fTop + 0.5f)* sy; | 83 domain.fTop = (subset->fTop + 0.5f)* sy; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 108 if (subset) { | 100 if (subset) { |
| 109 localRect = SkRect::Make(*subset); | 101 localRect = SkRect::Make(*subset); |
| 110 localRect.fLeft *= sx; | 102 localRect.fLeft *= sx; |
| 111 localRect.fTop *= sy; | 103 localRect.fTop *= sy; |
| 112 localRect.fRight *= sx; | 104 localRect.fRight *= sx; |
| 113 localRect.fBottom *= sy; | 105 localRect.fBottom *= sy; |
| 114 } else { | 106 } else { |
| 115 localRect = SkRect::MakeWH(1.f, 1.f); | 107 localRect = SkRect::MakeWH(1.f, 1.f); |
| 116 } | 108 } |
| 117 | 109 |
| 118 sk_sp<GrDrawContext> drawContext(context->drawContext(sk_ref_sp(copy->asRend
erTarget()))); | 110 SkRect dstRect = SkRect::MakeIWH(copyParams.fWidth, copyParams.fHeight); |
| 119 if (!drawContext) { | 111 copyDC->fillRectToRect(GrNoClip(), paint, SkMatrix::I(), dstRect, localRect)
; |
| 120 return nullptr; | 112 return copyDC->asTexture().release(); |
| 121 } | |
| 122 | |
| 123 SkRect dstRect = SkRect::MakeWH(SkIntToScalar(rtDesc.fWidth), SkIntToScalar(
rtDesc.fHeight)); | |
| 124 drawContext->fillRectToRect(GrNoClip(), paint, SkMatrix::I(), dstRect, local
Rect); | |
| 125 return copy.release(); | |
| 126 } | 113 } |
| 127 | 114 |
| 128 GrTextureAdjuster::GrTextureAdjuster(GrTexture* original, | 115 GrTextureAdjuster::GrTextureAdjuster(GrTexture* original, |
| 129 const SkIRect& contentArea, | 116 const SkIRect& contentArea, |
| 130 bool isAlphaOnly) | 117 bool isAlphaOnly) |
| 131 : INHERITED(contentArea.width(), contentArea.height(), isAlphaOnly) | 118 : INHERITED(contentArea.width(), contentArea.height(), isAlphaOnly) |
| 132 , fOriginal(original) { | 119 , fOriginal(original) { |
| 133 SkASSERT(SkIRect::MakeWH(original->width(), original->height()).contains(con
tentArea)); | 120 SkASSERT(SkIRect::MakeWH(original->width(), original->height()).contains(con
tentArea)); |
| 134 if (contentArea.fLeft > 0 || contentArea.fTop > 0 || | 121 if (contentArea.fLeft > 0 || contentArea.fTop > 0 || |
| 135 contentArea.fRight < original->width() || contentArea.fBottom < original
->height()) { | 122 contentArea.fRight < original->width() || contentArea.fBottom < original
->height()) { |
| (...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 529 } | 516 } |
| 530 | 517 |
| 531 GrTexture* GrTextureMaker::generateTextureForParams(const CopyParams& copyParams
, bool willBeMipped, | 518 GrTexture* GrTextureMaker::generateTextureForParams(const CopyParams& copyParams
, bool willBeMipped, |
| 532 SkSourceGammaTreatment gamma
Treatment) { | 519 SkSourceGammaTreatment gamma
Treatment) { |
| 533 SkAutoTUnref<GrTexture> original(this->refOriginalTexture(willBeMipped, gamm
aTreatment)); | 520 SkAutoTUnref<GrTexture> original(this->refOriginalTexture(willBeMipped, gamm
aTreatment)); |
| 534 if (!original) { | 521 if (!original) { |
| 535 return nullptr; | 522 return nullptr; |
| 536 } | 523 } |
| 537 return copy_on_gpu(original, nullptr, copyParams); | 524 return copy_on_gpu(original, nullptr, copyParams); |
| 538 } | 525 } |
| OLD | NEW |