| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2014 Google Inc. | 2 * Copyright 2014 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 "SkPictureShader.h" | 8 #include "SkPictureShader.h" |
| 9 | 9 |
| 10 #include "SkBitmap.h" | 10 #include "SkBitmap.h" |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 } | 116 } |
| 117 | 117 |
| 118 SkShader* SkPictureShader::Create(const SkPicture* picture, TileMode tmx, TileMo
de tmy, | 118 SkShader* SkPictureShader::Create(const SkPicture* picture, TileMode tmx, TileMo
de tmy, |
| 119 const SkMatrix* localMatrix, const SkRe
ct* tile) { | 119 const SkMatrix* localMatrix, const SkRe
ct* tile) { |
| 120 if (!picture || picture->cullRect().isEmpty() || (tile && tile->isEmpty()))
{ | 120 if (!picture || picture->cullRect().isEmpty() || (tile && tile->isEmpty()))
{ |
| 121 return SkShader::CreateEmptyShader(); | 121 return SkShader::CreateEmptyShader(); |
| 122 } | 122 } |
| 123 return SkNEW_ARGS(SkPictureShader, (picture, tmx, tmy, localMatrix, tile)); | 123 return SkNEW_ARGS(SkPictureShader, (picture, tmx, tmy, localMatrix, tile)); |
| 124 } | 124 } |
| 125 | 125 |
| 126 // TODO: rename SK_DISALLOW_CROSSPROCESS_PICTUREIMAGEFILTERS to SK_DISALLOW_CROS
SPROCESS_PICTURES | |
| 127 | |
| 128 SkFlattenable* SkPictureShader::CreateProc(SkReadBuffer& buffer) { | 126 SkFlattenable* SkPictureShader::CreateProc(SkReadBuffer& buffer) { |
| 129 SkMatrix lm; | 127 SkMatrix lm; |
| 130 buffer.readMatrix(&lm); | 128 buffer.readMatrix(&lm); |
| 131 TileMode mx = (TileMode)buffer.read32(); | 129 TileMode mx = (TileMode)buffer.read32(); |
| 132 TileMode my = (TileMode)buffer.read32(); | 130 TileMode my = (TileMode)buffer.read32(); |
| 133 SkRect tile; | 131 SkRect tile; |
| 134 buffer.readRect(&tile); | 132 buffer.readRect(&tile); |
| 135 | 133 |
| 136 SkAutoTUnref<SkPicture> picture; | 134 SkAutoTUnref<SkPicture> picture; |
| 137 #ifdef SK_DISALLOW_CROSSPROCESS_PICTUREIMAGEFILTERS | 135 |
| 138 if (buffer.isCrossProcess()) { | 136 if (buffer.isCrossProcess() && SkPicture::PictureIOSecurityPrecautionsEnable
d()) { |
| 139 if (buffer.isVersionLT(SkReadBuffer::kPictureShaderHasPictureBool_Versio
n)) { | 137 if (buffer.isVersionLT(SkReadBuffer::kPictureShaderHasPictureBool_Versio
n)) { |
| 140 // Older code blindly serialized pictures. We don't trust them. | 138 // Older code blindly serialized pictures. We don't trust them. |
| 141 buffer.validate(false); | 139 buffer.validate(false); |
| 142 return NULL; | 140 return NULL; |
| 143 } | 141 } |
| 144 // Newer code won't serialize pictures in disallow-cross-process-picture
mode. | 142 // Newer code won't serialize pictures in disallow-cross-process-picture
mode. |
| 145 // Assert that they didn't serialize anything except a false here. | 143 // Assert that they didn't serialize anything except a false here. |
| 146 buffer.validate(!buffer.readBool()); | 144 buffer.validate(!buffer.readBool()); |
| 147 } else | 145 } else { |
| 148 #endif | |
| 149 { | |
| 150 // Old code always serialized the picture. New code writes a 'true' fir
st if it did. | 146 // Old code always serialized the picture. New code writes a 'true' fir
st if it did. |
| 151 if (buffer.isVersionLT(SkReadBuffer::kPictureShaderHasPictureBool_Versio
n) || | 147 if (buffer.isVersionLT(SkReadBuffer::kPictureShaderHasPictureBool_Versio
n) || |
| 152 buffer.readBool()) { | 148 buffer.readBool()) { |
| 153 picture.reset(SkPicture::CreateFromBuffer(buffer)); | 149 picture.reset(SkPicture::CreateFromBuffer(buffer)); |
| 154 } | 150 } |
| 155 } | 151 } |
| 156 return SkPictureShader::Create(picture, mx, my, &lm, &tile); | 152 return SkPictureShader::Create(picture, mx, my, &lm, &tile); |
| 157 } | 153 } |
| 158 | 154 |
| 159 void SkPictureShader::flatten(SkWriteBuffer& buffer) const { | 155 void SkPictureShader::flatten(SkWriteBuffer& buffer) const { |
| 160 buffer.writeMatrix(this->getLocalMatrix()); | 156 buffer.writeMatrix(this->getLocalMatrix()); |
| 161 buffer.write32(fTmx); | 157 buffer.write32(fTmx); |
| 162 buffer.write32(fTmy); | 158 buffer.write32(fTmy); |
| 163 buffer.writeRect(fTile); | 159 buffer.writeRect(fTile); |
| 164 | 160 |
| 165 #ifdef SK_DISALLOW_CROSSPROCESS_PICTUREIMAGEFILTERS | |
| 166 // The deserialization code won't trust that our serialized picture is safe
to deserialize. | 161 // The deserialization code won't trust that our serialized picture is safe
to deserialize. |
| 167 // So write a 'false' telling it that we're not serializing a picture. | 162 // So write a 'false' telling it that we're not serializing a picture. |
| 168 if (buffer.isCrossProcess()) { | 163 if (buffer.isCrossProcess() && SkPicture::PictureIOSecurityPrecautionsEnable
d()) { |
| 169 buffer.writeBool(false); | 164 buffer.writeBool(false); |
| 170 } else | 165 } else { |
| 171 #endif | |
| 172 { | |
| 173 buffer.writeBool(true); | 166 buffer.writeBool(true); |
| 174 fPicture->flatten(buffer); | 167 fPicture->flatten(buffer); |
| 175 } | 168 } |
| 176 } | 169 } |
| 177 | 170 |
| 178 SkShader* SkPictureShader::refBitmapShader(const SkMatrix& matrix, const SkMatri
x* localM, | 171 SkShader* SkPictureShader::refBitmapShader(const SkMatrix& matrix, const SkMatri
x* localM, |
| 179 const int maxTextureSize) const { | 172 const int maxTextureSize) const { |
| 180 SkASSERT(fPicture && !fPicture->cullRect().isEmpty()); | 173 SkASSERT(fPicture && !fPicture->cullRect().isEmpty()); |
| 181 | 174 |
| 182 SkMatrix m; | 175 SkMatrix m; |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 355 return bitmapShader->asFragmentProcessor(context, paint, viewM, NULL, paintC
olor, fp); | 348 return bitmapShader->asFragmentProcessor(context, paint, viewM, NULL, paintC
olor, fp); |
| 356 } | 349 } |
| 357 #else | 350 #else |
| 358 bool SkPictureShader::asFragmentProcessor(GrContext*, const SkPaint&, const SkMa
trix&, | 351 bool SkPictureShader::asFragmentProcessor(GrContext*, const SkPaint&, const SkMa
trix&, |
| 359 const SkMatrix*, GrColor*, | 352 const SkMatrix*, GrColor*, |
| 360 GrFragmentProcessor**) const { | 353 GrFragmentProcessor**) const { |
| 361 SkDEBUGFAIL("Should not call in GPU-less build"); | 354 SkDEBUGFAIL("Should not call in GPU-less build"); |
| 362 return false; | 355 return false; |
| 363 } | 356 } |
| 364 #endif | 357 #endif |
| OLD | NEW |