| OLD | NEW |
| 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 "SkDevice.h" | 11 #include "SkDevice.h" |
| 12 #include "SkReadBuffer.h" | 12 #include "SkReadBuffer.h" |
| 13 #include "SkWriteBuffer.h" | 13 #include "SkWriteBuffer.h" |
| 14 #include "SkValidationUtils.h" | 14 #include "SkValidationUtils.h" |
| 15 | 15 |
| 16 //////////////////////////////////////////////////////////////////////////////// | 16 //////////////////////////////////////////////////////////////////////////////// |
| 17 #if SK_SUPPORT_GPU | 17 #if SK_SUPPORT_GPU |
| 18 #include "GrInvariantOutput.h" | 18 #include "GrInvariantOutput.h" |
| 19 #include "effects/GrSingleTextureEffect.h" | 19 #include "effects/GrSingleTextureEffect.h" |
| 20 #include "gl/GrGLFragmentProcessor.h" | 20 #include "glsl/GrGLSLFragmentProcessor.h" |
| 21 #include "gl/GrGLTexture.h" | |
| 22 #include "glsl/GrGLSLFragmentShaderBuilder.h" | 21 #include "glsl/GrGLSLFragmentShaderBuilder.h" |
| 23 #include "glsl/GrGLSLProgramBuilder.h" | 22 #include "glsl/GrGLSLProgramBuilder.h" |
| 24 #include "glsl/GrGLSLProgramDataManager.h" | 23 #include "glsl/GrGLSLProgramDataManager.h" |
| 25 | 24 |
| 26 class GrMagnifierEffect : public GrSingleTextureEffect { | 25 class GrMagnifierEffect : public GrSingleTextureEffect { |
| 27 | 26 |
| 28 public: | 27 public: |
| 29 static GrFragmentProcessor* Create(GrTexture* texture, | 28 static GrFragmentProcessor* Create(GrTexture* texture, |
| 30 const SkRect& bounds, | 29 const SkRect& bounds, |
| 31 float xOffset, | 30 float xOffset, |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 , fBounds(bounds) | 67 , fBounds(bounds) |
| 69 , fXOffset(xOffset) | 68 , fXOffset(xOffset) |
| 70 , fYOffset(yOffset) | 69 , fYOffset(yOffset) |
| 71 , fXInvZoom(xInvZoom) | 70 , fXInvZoom(xInvZoom) |
| 72 , fYInvZoom(yInvZoom) | 71 , fYInvZoom(yInvZoom) |
| 73 , fXInvInset(xInvInset) | 72 , fXInvInset(xInvInset) |
| 74 , fYInvInset(yInvInset) { | 73 , fYInvInset(yInvInset) { |
| 75 this->initClassID<GrMagnifierEffect>(); | 74 this->initClassID<GrMagnifierEffect>(); |
| 76 } | 75 } |
| 77 | 76 |
| 78 GrGLFragmentProcessor* onCreateGLInstance() const override; | 77 GrGLSLFragmentProcessor* onCreateGLInstance() const override; |
| 79 | 78 |
| 80 void onGetGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const ov
erride; | 79 void onGetGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const ov
erride; |
| 81 | 80 |
| 82 bool onIsEqual(const GrFragmentProcessor&) const override; | 81 bool onIsEqual(const GrFragmentProcessor&) const override; |
| 83 | 82 |
| 84 void onComputeInvariantOutput(GrInvariantOutput* inout) const override; | 83 void onComputeInvariantOutput(GrInvariantOutput* inout) const override; |
| 85 | 84 |
| 86 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; | 85 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; |
| 87 | 86 |
| 88 SkRect fBounds; | 87 SkRect fBounds; |
| 89 float fXOffset; | 88 float fXOffset; |
| 90 float fYOffset; | 89 float fYOffset; |
| 91 float fXInvZoom; | 90 float fXInvZoom; |
| 92 float fYInvZoom; | 91 float fYInvZoom; |
| 93 float fXInvInset; | 92 float fXInvInset; |
| 94 float fYInvInset; | 93 float fYInvInset; |
| 95 | 94 |
| 96 typedef GrSingleTextureEffect INHERITED; | 95 typedef GrSingleTextureEffect INHERITED; |
| 97 }; | 96 }; |
| 98 | 97 |
| 99 // For brevity | 98 // For brevity |
| 100 typedef GrGLSLProgramDataManager::UniformHandle UniformHandle; | 99 typedef GrGLSLProgramDataManager::UniformHandle UniformHandle; |
| 101 | 100 |
| 102 class GrGLMagnifierEffect : public GrGLFragmentProcessor { | 101 class GrGLMagnifierEffect : public GrGLSLFragmentProcessor { |
| 103 public: | 102 public: |
| 104 GrGLMagnifierEffect(const GrProcessor&); | 103 GrGLMagnifierEffect(const GrProcessor&); |
| 105 | 104 |
| 106 virtual void emitCode(EmitArgs&) override; | 105 virtual void emitCode(EmitArgs&) override; |
| 107 | 106 |
| 108 protected: | 107 protected: |
| 109 void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override
; | 108 void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override
; |
| 110 | 109 |
| 111 private: | 110 private: |
| 112 UniformHandle fOffsetVar; | 111 UniformHandle fOffsetVar; |
| 113 UniformHandle fInvZoomVar; | 112 UniformHandle fInvZoomVar; |
| 114 UniformHandle fInvInsetVar; | 113 UniformHandle fInvInsetVar; |
| 115 UniformHandle fBoundsVar; | 114 UniformHandle fBoundsVar; |
| 116 | 115 |
| 117 typedef GrGLFragmentProcessor INHERITED; | 116 typedef GrGLSLFragmentProcessor INHERITED; |
| 118 }; | 117 }; |
| 119 | 118 |
| 120 GrGLMagnifierEffect::GrGLMagnifierEffect(const GrProcessor&) { | 119 GrGLMagnifierEffect::GrGLMagnifierEffect(const GrProcessor&) { |
| 121 } | 120 } |
| 122 | 121 |
| 123 void GrGLMagnifierEffect::emitCode(EmitArgs& args) { | 122 void GrGLMagnifierEffect::emitCode(EmitArgs& args) { |
| 124 fOffsetVar = args.fBuilder->addUniform( | 123 fOffsetVar = args.fBuilder->addUniform( |
| 125 GrGLSLProgramBuilder::kFragment_Visibility, | 124 GrGLSLProgramBuilder::kFragment_Visibility, |
| 126 kVec2f_GrSLType, kDefault_GrSLPrecision, "Offset"); | 125 kVec2f_GrSLType, kDefault_GrSLPrecision, "Offset"); |
| 127 fInvZoomVar = args.fBuilder->addUniform( | 126 fInvZoomVar = args.fBuilder->addUniform( |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 179 zoom.bounds().width(), zoom.bounds().height()); | 178 zoom.bounds().width(), zoom.bounds().height()); |
| 180 } | 179 } |
| 181 | 180 |
| 182 ///////////////////////////////////////////////////////////////////// | 181 ///////////////////////////////////////////////////////////////////// |
| 183 | 182 |
| 184 void GrMagnifierEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, | 183 void GrMagnifierEffect::onGetGLProcessorKey(const GrGLSLCaps& caps, |
| 185 GrProcessorKeyBuilder* b) const { | 184 GrProcessorKeyBuilder* b) const { |
| 186 GrGLMagnifierEffect::GenKey(*this, caps, b); | 185 GrGLMagnifierEffect::GenKey(*this, caps, b); |
| 187 } | 186 } |
| 188 | 187 |
| 189 GrGLFragmentProcessor* GrMagnifierEffect::onCreateGLInstance() const { | 188 GrGLSLFragmentProcessor* GrMagnifierEffect::onCreateGLInstance() const { |
| 190 return new GrGLMagnifierEffect(*this); | 189 return new GrGLMagnifierEffect(*this); |
| 191 } | 190 } |
| 192 | 191 |
| 193 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrMagnifierEffect); | 192 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrMagnifierEffect); |
| 194 | 193 |
| 195 const GrFragmentProcessor* GrMagnifierEffect::TestCreate(GrProcessorTestData* d)
{ | 194 const GrFragmentProcessor* GrMagnifierEffect::TestCreate(GrProcessorTestData* d)
{ |
| 196 GrTexture* texture = d->fTextures[0]; | 195 GrTexture* texture = d->fTextures[0]; |
| 197 const int kMaxWidth = 200; | 196 const int kMaxWidth = 200; |
| 198 const int kMaxHeight = 200; | 197 const int kMaxHeight = 200; |
| 199 const int kMaxInset = 20; | 198 const int kMaxInset = 20; |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 370 | 369 |
| 371 #ifndef SK_IGNORE_TO_STRING | 370 #ifndef SK_IGNORE_TO_STRING |
| 372 void SkMagnifierImageFilter::toString(SkString* str) const { | 371 void SkMagnifierImageFilter::toString(SkString* str) const { |
| 373 str->appendf("SkMagnifierImageFilter: ("); | 372 str->appendf("SkMagnifierImageFilter: ("); |
| 374 str->appendf("src: (%f,%f,%f,%f) ", | 373 str->appendf("src: (%f,%f,%f,%f) ", |
| 375 fSrcRect.fLeft, fSrcRect.fTop, fSrcRect.fRight, fSrcRect.fBotto
m); | 374 fSrcRect.fLeft, fSrcRect.fTop, fSrcRect.fRight, fSrcRect.fBotto
m); |
| 376 str->appendf("inset: %f", fInset); | 375 str->appendf("inset: %f", fInset); |
| 377 str->append(")"); | 376 str->append(")"); |
| 378 } | 377 } |
| 379 #endif | 378 #endif |
| OLD | NEW |