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

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: Minor fixes 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 static bool tile_mode_is_valid(SkMatrixConvolutionImageFilter::TileMode tileMode ) {
25 switch (tileMode) {
26 case SkMatrixConvolutionImageFilter::kClamp_TileMode:
27 case SkMatrixConvolutionImageFilter::kRepeat_TileMode:
28 case SkMatrixConvolutionImageFilter::kClampToBlack_TileMode:
29 return true;
30 default:
31 break;
32 }
33 return false;
34 }
35
24 SkMatrixConvolutionImageFilter::SkMatrixConvolutionImageFilter(const SkISize& ke rnelSize, const SkScalar* kernel, SkScalar gain, SkScalar bias, const SkIPoint& target, TileMode tileMode, bool convolveAlpha, SkImageFilter* input) 36 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), 37 : INHERITED(input),
26 fKernelSize(kernelSize), 38 fKernelSize(kernelSize),
27 fGain(gain), 39 fGain(gain),
28 fBias(bias), 40 fBias(bias),
29 fTarget(target), 41 fTarget(target),
30 fTileMode(tileMode), 42 fTileMode(tileMode),
31 fConvolveAlpha(convolveAlpha) { 43 fConvolveAlpha(convolveAlpha) {
32 uint32_t size = fKernelSize.fWidth * fKernelSize.fHeight; 44 uint32_t size = fKernelSize.fWidth * fKernelSize.fHeight;
33 fKernel = SkNEW_ARRAY(SkScalar, size); 45 fKernel = SkNEW_ARRAY(SkScalar, size);
34 memcpy(fKernel, kernel, size * sizeof(SkScalar)); 46 memcpy(fKernel, kernel, size * sizeof(SkScalar));
35 SkASSERT(kernelSize.fWidth >= 1 && kernelSize.fHeight >= 1); 47 SkASSERT(kernelSize.fWidth >= 1 && kernelSize.fHeight >= 1);
36 SkASSERT(target.fX >= 0 && target.fX < kernelSize.fWidth); 48 SkASSERT(target.fX >= 0 && target.fX < kernelSize.fWidth);
37 SkASSERT(target.fY >= 0 && target.fY < kernelSize.fHeight); 49 SkASSERT(target.fY >= 0 && target.fY < kernelSize.fHeight);
38 } 50 }
39 51
40 SkMatrixConvolutionImageFilter::SkMatrixConvolutionImageFilter(SkFlattenableRead Buffer& buffer) : INHERITED(buffer) { 52 SkMatrixConvolutionImageFilter::SkMatrixConvolutionImageFilter(SkFlattenableRead Buffer& buffer) : INHERITED(buffer) {
41 fKernelSize.fWidth = buffer.readInt(); 53 fKernelSize.fWidth = buffer.readInt();
42 fKernelSize.fHeight = buffer.readInt(); 54 fKernelSize.fHeight = buffer.readInt();
43 uint32_t size = fKernelSize.fWidth * fKernelSize.fHeight; 55 uint32_t size = fKernelSize.fWidth * fKernelSize.fHeight;
44 fKernel = SkNEW_ARRAY(SkScalar, size); 56 fKernel = SkNEW_ARRAY(SkScalar, size);
45 SkDEBUGCODE(uint32_t readSize = )buffer.readScalarArray(fKernel); 57 SkDEBUGCODE(uint32_t readSize = )buffer.readScalarArray(fKernel);
46 SkASSERT(readSize == size); 58 SkASSERT(readSize == size);
47 fGain = buffer.readScalar(); 59 fGain = buffer.readScalar();
48 fBias = buffer.readScalar(); 60 fBias = buffer.readScalar();
49 fTarget.fX = buffer.readInt(); 61 fTarget.fX = buffer.readInt();
50 fTarget.fY = buffer.readInt(); 62 fTarget.fY = buffer.readInt();
51 fTileMode = (TileMode) buffer.readInt(); 63 fTileMode = (TileMode) buffer.readInt();
52 fConvolveAlpha = buffer.readBool(); 64 fConvolveAlpha = buffer.readBool();
65 buffer.validate(SkScalarIsFinite(fGain) &&
66 SkScalarIsFinite(fBias) &&
67 tile_mode_is_valid(fTileMode));
53 } 68 }
54 69
55 void SkMatrixConvolutionImageFilter::flatten(SkFlattenableWriteBuffer& buffer) c onst { 70 void SkMatrixConvolutionImageFilter::flatten(SkFlattenableWriteBuffer& buffer) c onst {
56 this->INHERITED::flatten(buffer); 71 this->INHERITED::flatten(buffer);
57 buffer.writeInt(fKernelSize.fWidth); 72 buffer.writeInt(fKernelSize.fWidth);
58 buffer.writeInt(fKernelSize.fHeight); 73 buffer.writeInt(fKernelSize.fHeight);
59 buffer.writeScalarArray(fKernel, fKernelSize.fWidth * fKernelSize.fHeight); 74 buffer.writeScalarArray(fKernel, fKernelSize.fWidth * fKernelSize.fHeight);
60 buffer.writeScalar(fGain); 75 buffer.writeScalar(fGain);
61 buffer.writeScalar(fBias); 76 buffer.writeScalar(fBias);
62 buffer.writeInt(fTarget.fX); 77 buffer.writeInt(fTarget.fX);
(...skipping 498 matching lines...) Expand 10 before | Expand all | Expand 10 after
561 fBias, 576 fBias,
562 fTarget, 577 fTarget,
563 fTileMode, 578 fTileMode,
564 fConvolveAlpha); 579 fConvolveAlpha);
565 return true; 580 return true;
566 } 581 }
567 582
568 /////////////////////////////////////////////////////////////////////////////// 583 ///////////////////////////////////////////////////////////////////////////////
569 584
570 #endif 585 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698