Chromium Code Reviews

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: cleanup Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff |
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 virtual uint32_t classID() const {
52 static uint32_t id = GenClassID();
53 return id;
54 }
51 float x_offset() const { return fXOffset; } 55 float x_offset() const { return fXOffset; }
52 float y_offset() const { return fYOffset; } 56 float y_offset() const { return fYOffset; }
53 float x_inv_zoom() const { return fXInvZoom; } 57 float x_inv_zoom() const { return fXInvZoom; }
54 float y_inv_zoom() const { return fYInvZoom; } 58 float y_inv_zoom() const { return fYInvZoom; }
55 float x_inv_inset() const { return fXInvInset; } 59 float x_inv_inset() const { return fXInvInset; }
56 float y_inv_inset() const { return fYInvInset; } 60 float y_inv_inset() const { return fYInvInset; }
57 61
58 typedef GrGLMagnifierEffect GLProcessor;
59
60 private: 62 private:
61 GrMagnifierEffect(GrTexture* texture, 63 GrMagnifierEffect(GrTexture* texture,
62 float xOffset, 64 float xOffset,
63 float yOffset, 65 float yOffset,
64 float xInvZoom, 66 float xInvZoom,
65 float yInvZoom, 67 float yInvZoom,
66 float xInvInset, 68 float xInvInset,
67 float yInvInset) 69 float yInvInset)
68 : GrSingleTextureEffect(texture, GrCoordTransform::MakeDivByTextureWHMat rix(texture)) 70 : GrSingleTextureEffect(texture, GrCoordTransform::MakeDivByTextureWHMat rix(texture))
69 , fXOffset(xOffset) 71 , fXOffset(xOffset)
(...skipping 17 matching lines...)
87 float fYInvInset; 89 float fYInvInset;
88 90
89 typedef GrSingleTextureEffect INHERITED; 91 typedef GrSingleTextureEffect INHERITED;
90 }; 92 };
91 93
92 // For brevity 94 // For brevity
93 typedef GrGLProgramDataManager::UniformHandle UniformHandle; 95 typedef GrGLProgramDataManager::UniformHandle UniformHandle;
94 96
95 class GrGLMagnifierEffect : public GrGLFragmentProcessor { 97 class GrGLMagnifierEffect : public GrGLFragmentProcessor {
96 public: 98 public:
97 GrGLMagnifierEffect(const GrBackendProcessorFactory&, const GrProcessor&); 99 GrGLMagnifierEffect(const GrProcessor&);
98 100
99 virtual void emitCode(GrGLFPBuilder*, 101 virtual void emitCode(GrGLFPBuilder*,
100 const GrFragmentProcessor&, 102 const GrFragmentProcessor&,
101 const char* outputColor, 103 const char* outputColor,
102 const char* inputColor, 104 const char* inputColor,
103 const TransformedCoordsArray&, 105 const TransformedCoordsArray&,
104 const TextureSamplerArray&) SK_OVERRIDE; 106 const TextureSamplerArray&) SK_OVERRIDE;
105 107
106 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O VERRIDE; 108 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O VERRIDE;
107 109
108 private: 110 private:
109 UniformHandle fOffsetVar; 111 UniformHandle fOffsetVar;
110 UniformHandle fInvZoomVar; 112 UniformHandle fInvZoomVar;
111 UniformHandle fInvInsetVar; 113 UniformHandle fInvInsetVar;
112 114
113 typedef GrGLFragmentProcessor INHERITED; 115 typedef GrGLFragmentProcessor INHERITED;
114 }; 116 };
115 117
116 GrGLMagnifierEffect::GrGLMagnifierEffect(const GrBackendProcessorFactory& factor y, 118 GrGLMagnifierEffect::GrGLMagnifierEffect(const GrProcessor&) {
117 const GrProcessor&)
118 : INHERITED(factory) {
119 } 119 }
120 120
121 void GrGLMagnifierEffect::emitCode(GrGLFPBuilder* builder, 121 void GrGLMagnifierEffect::emitCode(GrGLFPBuilder* builder,
122 const GrFragmentProcessor&, 122 const GrFragmentProcessor&,
123 const char* outputColor, 123 const char* outputColor,
124 const char* inputColor, 124 const char* inputColor,
125 const TransformedCoordsArray& coords, 125 const TransformedCoordsArray& coords,
126 const TextureSamplerArray& samplers) { 126 const TextureSamplerArray& samplers) {
127 fOffsetVar = builder->addUniform( 127 fOffsetVar = builder->addUniform(
128 GrGLProgramBuilder::kFragment_Visibility | 128 GrGLProgramBuilder::kFragment_Visibility |
(...skipping 45 matching lines...)
174 void GrGLMagnifierEffect::setData(const GrGLProgramDataManager& pdman, 174 void GrGLMagnifierEffect::setData(const GrGLProgramDataManager& pdman,
175 const GrProcessor& effect) { 175 const GrProcessor& effect) {
176 const GrMagnifierEffect& zoom = effect.cast<GrMagnifierEffect>(); 176 const GrMagnifierEffect& zoom = effect.cast<GrMagnifierEffect>();
177 pdman.set2f(fOffsetVar, zoom.x_offset(), zoom.y_offset()); 177 pdman.set2f(fOffsetVar, zoom.x_offset(), zoom.y_offset());
178 pdman.set2f(fInvZoomVar, zoom.x_inv_zoom(), zoom.y_inv_zoom()); 178 pdman.set2f(fInvZoomVar, zoom.x_inv_zoom(), zoom.y_inv_zoom());
179 pdman.set2f(fInvInsetVar, zoom.x_inv_inset(), zoom.y_inv_inset()); 179 pdman.set2f(fInvInsetVar, zoom.x_inv_inset(), zoom.y_inv_inset());
180 } 180 }
181 181
182 ///////////////////////////////////////////////////////////////////// 182 /////////////////////////////////////////////////////////////////////
183 183
184 void GrMagnifierEffect::getGLProcessorKey(const GrGLCaps& caps,
185 GrProcessorKeyBuilder* b) const {
186 GrGLMagnifierEffect::GenKey(*this, caps, b);
187 }
188
189 GrGLFragmentProcessor* GrMagnifierEffect::createGLInstance() const {
190 return SkNEW_ARGS(GrGLMagnifierEffect, (*this));
191 }
192
184 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrMagnifierEffect); 193 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrMagnifierEffect);
185 194
186 GrFragmentProcessor* GrMagnifierEffect::TestCreate(SkRandom* random, 195 GrFragmentProcessor* GrMagnifierEffect::TestCreate(SkRandom* random,
187 GrContext* context, 196 GrContext* context,
188 const GrDrawTargetCaps&, 197 const GrDrawTargetCaps&,
189 GrTexture** textures) { 198 GrTexture** textures) {
190 GrTexture* texture = textures[0]; 199 GrTexture* texture = textures[0];
191 const int kMaxWidth = 200; 200 const int kMaxWidth = 200;
192 const int kMaxHeight = 200; 201 const int kMaxHeight = 200;
193 const int kMaxInset = 20; 202 const int kMaxInset = 20;
(...skipping 10 matching lines...)
204 texture->width() / (float) x, 213 texture->width() / (float) x,
205 texture->height() / (float) y, 214 texture->height() / (float) y,
206 (float) inset / texture->width(), 215 (float) inset / texture->width(),
207 (float) inset / texture->height()); 216 (float) inset / texture->height());
208 SkASSERT(effect); 217 SkASSERT(effect);
209 return effect; 218 return effect;
210 } 219 }
211 220
212 /////////////////////////////////////////////////////////////////////////////// 221 ///////////////////////////////////////////////////////////////////////////////
213 222
214 const GrBackendFragmentProcessorFactory& GrMagnifierEffect::getFactory() const {
215 return GrTBackendFragmentProcessorFactory<GrMagnifierEffect>::getInstance();
216 }
217
218 bool GrMagnifierEffect::onIsEqual(const GrFragmentProcessor& sBase) const { 223 bool GrMagnifierEffect::onIsEqual(const GrFragmentProcessor& sBase) const {
219 const GrMagnifierEffect& s = sBase.cast<GrMagnifierEffect>(); 224 const GrMagnifierEffect& s = sBase.cast<GrMagnifierEffect>();
220 return (this->fXOffset == s.fXOffset && 225 return (this->fXOffset == s.fXOffset &&
221 this->fYOffset == s.fYOffset && 226 this->fYOffset == s.fYOffset &&
222 this->fXInvZoom == s.fXInvZoom && 227 this->fXInvZoom == s.fXInvZoom &&
223 this->fYInvZoom == s.fYInvZoom && 228 this->fYInvZoom == s.fYInvZoom &&
224 this->fXInvInset == s.fXInvInset && 229 this->fXInvInset == s.fXInvInset &&
225 this->fYInvInset == s.fYInvInset); 230 this->fYInvInset == s.fYInvInset);
226 } 231 }
227 232
(...skipping 119 matching lines...)
347 352
348 int x_val = SkPin32(SkScalarFloorToInt(x_interp), 0, width - 1); 353 int x_val = SkPin32(SkScalarFloorToInt(x_interp), 0, width - 1);
349 int y_val = SkPin32(SkScalarFloorToInt(y_interp), 0, height - 1); 354 int y_val = SkPin32(SkScalarFloorToInt(y_interp), 0, height - 1);
350 355
351 *dptr = sptr[y_val * width + x_val]; 356 *dptr = sptr[y_val * width + x_val];
352 dptr++; 357 dptr++;
353 } 358 }
354 } 359 }
355 return true; 360 return true;
356 } 361 }
OLDNEW

Powered by Google App Engine