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

Side by Side Diff: src/effects/SkMatrixConvolutionImageFilter.cpp

Issue 23021015: Initial error handling code (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Comments fixed Created 7 years, 2 months 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
OLDNEW
1 /* 1 /*
2 * Copyright 2012 The Android Open Source Project 2 * Copyright 2012 The Android Open Source Project
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 "SkMatrixConvolutionImageFilter.h" 8 #include "SkMatrixConvolutionImageFilter.h"
9 #include "SkBitmap.h" 9 #include "SkBitmap.h"
10 #include "SkColorPriv.h" 10 #include "SkColorPriv.h"
11 #include "SkFlattenableBuffers.h" 11 #include "SkFlattenableBuffers.h"
12 #include "SkRect.h" 12 #include "SkRect.h"
13 #include "SkUnPreMultiply.h" 13 #include "SkUnPreMultiply.h"
14 14
15 #if SK_SUPPORT_GPU 15 #if SK_SUPPORT_GPU
16 #include "gl/GrGLEffect.h" 16 #include "gl/GrGLEffect.h"
17 #include "effects/GrSingleTextureEffect.h" 17 #include "effects/GrSingleTextureEffect.h"
18 #include "GrTBackendEffectFactory.h" 18 #include "GrTBackendEffectFactory.h"
19 #include "GrTexture.h" 19 #include "GrTexture.h"
20 #include "SkMatrix.h" 20 #include "SkMatrix.h"
21 21
22 #endif 22 #endif
23 23
24 namespace {
25
26 bool TileModeIsValid(SkMatrixConvolutionImageFilter::TileMode tileMode) {
mtklein 2013/10/16 18:54:09 I just have this feeling tfarina is going to swoop
sugoi1 2013/10/16 20:07:41 Done.
27 switch (tileMode) {
28 case SkMatrixConvolutionImageFilter::kClamp_TileMode:
29 case SkMatrixConvolutionImageFilter::kRepeat_TileMode:
30 case SkMatrixConvolutionImageFilter::kClampToBlack_TileMode:
31 return true;
32 default:
33 break;
34 }
35 return false;
36 }
37
38 }
39
24 SkMatrixConvolutionImageFilter::SkMatrixConvolutionImageFilter(const SkISize& ke rnelSize, const SkScalar* kernel, SkScalar gain, SkScalar bias, const SkIPoint& target, TileMode tileMode, bool convolveAlpha, SkImageFilter* input) 40 SkMatrixConvolutionImageFilter::SkMatrixConvolutionImageFilter(const SkISize& ke rnelSize, const SkScalar* kernel, SkScalar gain, SkScalar bias, const SkIPoint& target, TileMode tileMode, bool convolveAlpha, SkImageFilter* input)
25 : INHERITED(input), 41 : INHERITED(input),
26 fKernelSize(kernelSize), 42 fKernelSize(kernelSize),
27 fGain(gain), 43 fGain(gain),
28 fBias(bias), 44 fBias(bias),
29 fTarget(target), 45 fTarget(target),
30 fTileMode(tileMode), 46 fTileMode(tileMode),
31 fConvolveAlpha(convolveAlpha) { 47 fConvolveAlpha(convolveAlpha) {
32 uint32_t size = fKernelSize.fWidth * fKernelSize.fHeight; 48 uint32_t size = fKernelSize.fWidth * fKernelSize.fHeight;
33 fKernel = SkNEW_ARRAY(SkScalar, size); 49 fKernel = SkNEW_ARRAY(SkScalar, size);
34 memcpy(fKernel, kernel, size * sizeof(SkScalar)); 50 memcpy(fKernel, kernel, size * sizeof(SkScalar));
35 SkASSERT(kernelSize.fWidth >= 1 && kernelSize.fHeight >= 1); 51 SkASSERT(kernelSize.fWidth >= 1 && kernelSize.fHeight >= 1);
36 SkASSERT(target.fX >= 0 && target.fX < kernelSize.fWidth); 52 SkASSERT(target.fX >= 0 && target.fX < kernelSize.fWidth);
37 SkASSERT(target.fY >= 0 && target.fY < kernelSize.fHeight); 53 SkASSERT(target.fY >= 0 && target.fY < kernelSize.fHeight);
38 } 54 }
39 55
40 SkMatrixConvolutionImageFilter::SkMatrixConvolutionImageFilter(SkFlattenableRead Buffer& buffer) : INHERITED(buffer) { 56 SkMatrixConvolutionImageFilter::SkMatrixConvolutionImageFilter(SkFlattenableRead Buffer& buffer) : INHERITED(buffer) {
41 fKernelSize.fWidth = buffer.readInt(); 57 fKernelSize.fWidth = buffer.readInt();
42 fKernelSize.fHeight = buffer.readInt(); 58 fKernelSize.fHeight = buffer.readInt();
43 uint32_t size = fKernelSize.fWidth * fKernelSize.fHeight; 59 uint32_t size = fKernelSize.fWidth * fKernelSize.fHeight;
44 fKernel = SkNEW_ARRAY(SkScalar, size); 60 fKernel = SkNEW_ARRAY(SkScalar, size);
45 SkDEBUGCODE(uint32_t readSize = )buffer.readScalarArray(fKernel); 61 SkDEBUGCODE(uint32_t readSize = )buffer.readScalarArray(fKernel);
46 SkASSERT(readSize == size); 62 SkASSERT(readSize == size);
47 fGain = buffer.readScalar(); 63 fGain = buffer.readScalar();
48 fBias = buffer.readScalar(); 64 fBias = buffer.readScalar();
49 fTarget.fX = buffer.readInt(); 65 fTarget.fX = buffer.readInt();
50 fTarget.fY = buffer.readInt(); 66 fTarget.fY = buffer.readInt();
51 fTileMode = (TileMode) buffer.readInt(); 67 fTileMode = (TileMode) buffer.readInt();
52 fConvolveAlpha = buffer.readBool(); 68 fConvolveAlpha = buffer.readBool();
69 buffer.validate(SkScalarIsFinite(fGain) &&
70 SkScalarIsFinite(fBias) &&
71 TileModeIsValid(fTileMode));
53 } 72 }
54 73
55 void SkMatrixConvolutionImageFilter::flatten(SkFlattenableWriteBuffer& buffer) c onst { 74 void SkMatrixConvolutionImageFilter::flatten(SkFlattenableWriteBuffer& buffer) c onst {
56 this->INHERITED::flatten(buffer); 75 this->INHERITED::flatten(buffer);
57 buffer.writeInt(fKernelSize.fWidth); 76 buffer.writeInt(fKernelSize.fWidth);
58 buffer.writeInt(fKernelSize.fHeight); 77 buffer.writeInt(fKernelSize.fHeight);
59 buffer.writeScalarArray(fKernel, fKernelSize.fWidth * fKernelSize.fHeight); 78 buffer.writeScalarArray(fKernel, fKernelSize.fWidth * fKernelSize.fHeight);
60 buffer.writeScalar(fGain); 79 buffer.writeScalar(fGain);
61 buffer.writeScalar(fBias); 80 buffer.writeScalar(fBias);
62 buffer.writeInt(fTarget.fX); 81 buffer.writeInt(fTarget.fX);
(...skipping 498 matching lines...) Expand 10 before | Expand all | Expand 10 after
561 fBias, 580 fBias,
562 fTarget, 581 fTarget,
563 fTileMode, 582 fTileMode,
564 fConvolveAlpha); 583 fConvolveAlpha);
565 return true; 584 return true;
566 } 585 }
567 586
568 /////////////////////////////////////////////////////////////////////////////// 587 ///////////////////////////////////////////////////////////////////////////////
569 588
570 #endif 589 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698