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

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

Issue 778453002: Remove backend factories (Closed) Base URL: https://skia.googlesource.com/skia.git@unichoice
Patch Set: more clang warnings Created 6 years 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
« no previous file with comments | « src/effects/SkLumaColorFilter.cpp ('k') | src/effects/SkMorphologyImageFilter.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "SkBitmap.h" 8 #include "SkBitmap.h"
9 #include "SkMagnifierImageFilter.h" 9 #include "SkMagnifierImageFilter.h"
10 #include "SkColorPriv.h" 10 #include "SkColorPriv.h"
11 #include "SkReadBuffer.h" 11 #include "SkReadBuffer.h"
12 #include "SkWriteBuffer.h" 12 #include "SkWriteBuffer.h"
13 #include "SkValidationUtils.h" 13 #include "SkValidationUtils.h"
14 14
15 //////////////////////////////////////////////////////////////////////////////// 15 ////////////////////////////////////////////////////////////////////////////////
16 #if SK_SUPPORT_GPU 16 #if SK_SUPPORT_GPU
17 #include "GrInvariantOutput.h"
17 #include "effects/GrSingleTextureEffect.h" 18 #include "effects/GrSingleTextureEffect.h"
18 #include "gl/GrGLProcessor.h" 19 #include "gl/GrGLProcessor.h"
19 #include "gl/builders/GrGLProgramBuilder.h"
20 #include "gl/GrGLSL.h" 20 #include "gl/GrGLSL.h"
21 #include "gl/GrGLTexture.h" 21 #include "gl/GrGLTexture.h"
22 #include "GrInvariantOutput.h" 22 #include "gl/builders/GrGLProgramBuilder.h"
23 #include "GrTBackendProcessorFactory.h"
24
25 class GrGLMagnifierEffect;
26 23
27 class GrMagnifierEffect : public GrSingleTextureEffect { 24 class GrMagnifierEffect : public GrSingleTextureEffect {
28 25
29 public: 26 public:
30 static GrFragmentProcessor* Create(GrTexture* texture, 27 static GrFragmentProcessor* Create(GrTexture* texture,
31 float xOffset, 28 float xOffset,
32 float yOffset, 29 float yOffset,
33 float xInvZoom, 30 float xInvZoom,
34 float yInvZoom, 31 float yInvZoom,
35 float xInvInset, 32 float xInvInset,
36 float yInvInset) { 33 float yInvInset) {
37 return SkNEW_ARGS(GrMagnifierEffect, (texture, 34 return SkNEW_ARGS(GrMagnifierEffect, (texture,
38 xOffset, 35 xOffset,
39 yOffset, 36 yOffset,
40 xInvZoom, 37 xInvZoom,
41 yInvZoom, 38 yInvZoom,
42 xInvInset, 39 xInvInset,
43 yInvInset)); 40 yInvInset));
44 } 41 }
45 42
46 virtual ~GrMagnifierEffect() {}; 43 virtual ~GrMagnifierEffect() {};
47 44
48 static const char* Name() { return "Magnifier"; } 45 virtual const char* name() const SK_OVERRIDE { return "Magnifier"; }
49 46
50 virtual const GrBackendFragmentProcessorFactory& getFactory() const SK_OVERR IDE; 47 virtual void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) cons t SK_OVERRIDE;
48
49 virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
50
51 float x_offset() const { return fXOffset; } 51 float x_offset() const { return fXOffset; }
52 float y_offset() const { return fYOffset; } 52 float y_offset() const { return fYOffset; }
53 float x_inv_zoom() const { return fXInvZoom; } 53 float x_inv_zoom() const { return fXInvZoom; }
54 float y_inv_zoom() const { return fYInvZoom; } 54 float y_inv_zoom() const { return fYInvZoom; }
55 float x_inv_inset() const { return fXInvInset; } 55 float x_inv_inset() const { return fXInvInset; }
56 float y_inv_inset() const { return fYInvInset; } 56 float y_inv_inset() const { return fYInvInset; }
57 57
58 typedef GrGLMagnifierEffect GLProcessor;
59
60 private: 58 private:
61 GrMagnifierEffect(GrTexture* texture, 59 GrMagnifierEffect(GrTexture* texture,
62 float xOffset, 60 float xOffset,
63 float yOffset, 61 float yOffset,
64 float xInvZoom, 62 float xInvZoom,
65 float yInvZoom, 63 float yInvZoom,
66 float xInvInset, 64 float xInvInset,
67 float yInvInset) 65 float yInvInset)
68 : GrSingleTextureEffect(texture, GrCoordTransform::MakeDivByTextureWHMat rix(texture)) 66 : GrSingleTextureEffect(texture, GrCoordTransform::MakeDivByTextureWHMat rix(texture))
69 , fXOffset(xOffset) 67 , fXOffset(xOffset)
70 , fYOffset(yOffset) 68 , fYOffset(yOffset)
71 , fXInvZoom(xInvZoom) 69 , fXInvZoom(xInvZoom)
72 , fYInvZoom(yInvZoom) 70 , fYInvZoom(yInvZoom)
73 , fXInvInset(xInvInset) 71 , fXInvInset(xInvInset)
74 , fYInvInset(yInvInset) {} 72 , fYInvInset(yInvInset) {
73 this->initClassID<GrMagnifierEffect>();
74 }
75 75
76 virtual bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE; 76 virtual bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
77 77
78 virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVE RRIDE; 78 virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVE RRIDE;
79 79
80 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; 80 GR_DECLARE_FRAGMENT_PROCESSOR_TEST;
81 81
82 float fXOffset; 82 float fXOffset;
83 float fYOffset; 83 float fYOffset;
84 float fXInvZoom; 84 float fXInvZoom;
85 float fYInvZoom; 85 float fYInvZoom;
86 float fXInvInset; 86 float fXInvInset;
87 float fYInvInset; 87 float fYInvInset;
88 88
89 typedef GrSingleTextureEffect INHERITED; 89 typedef GrSingleTextureEffect INHERITED;
90 }; 90 };
91 91
92 // For brevity 92 // For brevity
93 typedef GrGLProgramDataManager::UniformHandle UniformHandle; 93 typedef GrGLProgramDataManager::UniformHandle UniformHandle;
94 94
95 class GrGLMagnifierEffect : public GrGLFragmentProcessor { 95 class GrGLMagnifierEffect : public GrGLFragmentProcessor {
96 public: 96 public:
97 GrGLMagnifierEffect(const GrBackendProcessorFactory&, const GrProcessor&); 97 GrGLMagnifierEffect(const GrProcessor&);
98 98
99 virtual void emitCode(GrGLFPBuilder*, 99 virtual void emitCode(GrGLFPBuilder*,
100 const GrFragmentProcessor&, 100 const GrFragmentProcessor&,
101 const char* outputColor, 101 const char* outputColor,
102 const char* inputColor, 102 const char* inputColor,
103 const TransformedCoordsArray&, 103 const TransformedCoordsArray&,
104 const TextureSamplerArray&) SK_OVERRIDE; 104 const TextureSamplerArray&) SK_OVERRIDE;
105 105
106 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O VERRIDE; 106 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O VERRIDE;
107 107
108 private: 108 private:
109 UniformHandle fOffsetVar; 109 UniformHandle fOffsetVar;
110 UniformHandle fInvZoomVar; 110 UniformHandle fInvZoomVar;
111 UniformHandle fInvInsetVar; 111 UniformHandle fInvInsetVar;
112 112
113 typedef GrGLFragmentProcessor INHERITED; 113 typedef GrGLFragmentProcessor INHERITED;
114 }; 114 };
115 115
116 GrGLMagnifierEffect::GrGLMagnifierEffect(const GrBackendProcessorFactory& factor y, 116 GrGLMagnifierEffect::GrGLMagnifierEffect(const GrProcessor&) {
117 const GrProcessor&)
118 : INHERITED(factory) {
119 } 117 }
120 118
121 void GrGLMagnifierEffect::emitCode(GrGLFPBuilder* builder, 119 void GrGLMagnifierEffect::emitCode(GrGLFPBuilder* builder,
122 const GrFragmentProcessor&, 120 const GrFragmentProcessor&,
123 const char* outputColor, 121 const char* outputColor,
124 const char* inputColor, 122 const char* inputColor,
125 const TransformedCoordsArray& coords, 123 const TransformedCoordsArray& coords,
126 const TextureSamplerArray& samplers) { 124 const TextureSamplerArray& samplers) {
127 fOffsetVar = builder->addUniform( 125 fOffsetVar = builder->addUniform(
128 GrGLProgramBuilder::kFragment_Visibility | 126 GrGLProgramBuilder::kFragment_Visibility |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 void GrGLMagnifierEffect::setData(const GrGLProgramDataManager& pdman, 172 void GrGLMagnifierEffect::setData(const GrGLProgramDataManager& pdman,
175 const GrProcessor& effect) { 173 const GrProcessor& effect) {
176 const GrMagnifierEffect& zoom = effect.cast<GrMagnifierEffect>(); 174 const GrMagnifierEffect& zoom = effect.cast<GrMagnifierEffect>();
177 pdman.set2f(fOffsetVar, zoom.x_offset(), zoom.y_offset()); 175 pdman.set2f(fOffsetVar, zoom.x_offset(), zoom.y_offset());
178 pdman.set2f(fInvZoomVar, zoom.x_inv_zoom(), zoom.y_inv_zoom()); 176 pdman.set2f(fInvZoomVar, zoom.x_inv_zoom(), zoom.y_inv_zoom());
179 pdman.set2f(fInvInsetVar, zoom.x_inv_inset(), zoom.y_inv_inset()); 177 pdman.set2f(fInvInsetVar, zoom.x_inv_inset(), zoom.y_inv_inset());
180 } 178 }
181 179
182 ///////////////////////////////////////////////////////////////////// 180 /////////////////////////////////////////////////////////////////////
183 181
182 void GrMagnifierEffect::getGLProcessorKey(const GrGLCaps& caps,
183 GrProcessorKeyBuilder* b) const {
184 GrGLMagnifierEffect::GenKey(*this, caps, b);
185 }
186
187 GrGLFragmentProcessor* GrMagnifierEffect::createGLInstance() const {
188 return SkNEW_ARGS(GrGLMagnifierEffect, (*this));
189 }
190
184 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrMagnifierEffect); 191 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrMagnifierEffect);
185 192
186 GrFragmentProcessor* GrMagnifierEffect::TestCreate(SkRandom* random, 193 GrFragmentProcessor* GrMagnifierEffect::TestCreate(SkRandom* random,
187 GrContext* context, 194 GrContext* context,
188 const GrDrawTargetCaps&, 195 const GrDrawTargetCaps&,
189 GrTexture** textures) { 196 GrTexture** textures) {
190 GrTexture* texture = textures[0]; 197 GrTexture* texture = textures[0];
191 const int kMaxWidth = 200; 198 const int kMaxWidth = 200;
192 const int kMaxHeight = 200; 199 const int kMaxHeight = 200;
193 const int kMaxInset = 20; 200 const int kMaxInset = 20;
(...skipping 10 matching lines...) Expand all
204 texture->width() / (float) x, 211 texture->width() / (float) x,
205 texture->height() / (float) y, 212 texture->height() / (float) y,
206 (float) inset / texture->width(), 213 (float) inset / texture->width(),
207 (float) inset / texture->height()); 214 (float) inset / texture->height());
208 SkASSERT(effect); 215 SkASSERT(effect);
209 return effect; 216 return effect;
210 } 217 }
211 218
212 /////////////////////////////////////////////////////////////////////////////// 219 ///////////////////////////////////////////////////////////////////////////////
213 220
214 const GrBackendFragmentProcessorFactory& GrMagnifierEffect::getFactory() const {
215 return GrTBackendFragmentProcessorFactory<GrMagnifierEffect>::getInstance();
216 }
217
218 bool GrMagnifierEffect::onIsEqual(const GrFragmentProcessor& sBase) const { 221 bool GrMagnifierEffect::onIsEqual(const GrFragmentProcessor& sBase) const {
219 const GrMagnifierEffect& s = sBase.cast<GrMagnifierEffect>(); 222 const GrMagnifierEffect& s = sBase.cast<GrMagnifierEffect>();
220 return (this->fXOffset == s.fXOffset && 223 return (this->fXOffset == s.fXOffset &&
221 this->fYOffset == s.fYOffset && 224 this->fYOffset == s.fYOffset &&
222 this->fXInvZoom == s.fXInvZoom && 225 this->fXInvZoom == s.fXInvZoom &&
223 this->fYInvZoom == s.fYInvZoom && 226 this->fYInvZoom == s.fYInvZoom &&
224 this->fXInvInset == s.fXInvInset && 227 this->fXInvInset == s.fXInvInset &&
225 this->fYInvInset == s.fYInvInset); 228 this->fYInvInset == s.fYInvInset);
226 } 229 }
227 230
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 350
348 int x_val = SkPin32(SkScalarFloorToInt(x_interp), 0, width - 1); 351 int x_val = SkPin32(SkScalarFloorToInt(x_interp), 0, width - 1);
349 int y_val = SkPin32(SkScalarFloorToInt(y_interp), 0, height - 1); 352 int y_val = SkPin32(SkScalarFloorToInt(y_interp), 0, height - 1);
350 353
351 *dptr = sptr[y_val * width + x_val]; 354 *dptr = sptr[y_val * width + x_val];
352 dptr++; 355 dptr++;
353 } 356 }
354 } 357 }
355 return true; 358 return true;
356 } 359 }
OLDNEW
« no previous file with comments | « src/effects/SkLumaColorFilter.cpp ('k') | src/effects/SkMorphologyImageFilter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698