| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2012 Google Inc. | 3 * Copyright 2012 Google Inc. |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 #include "SkSweepGradient.h" | 9 #include "SkSweepGradient.h" |
| 10 | 10 |
| (...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 170 *dstC++ = cache[toggle + index]; | 170 *dstC++ = cache[toggle + index]; |
| 171 toggle = next_dither_toggle16(toggle); | 171 toggle = next_dither_toggle16(toggle); |
| 172 } | 172 } |
| 173 } | 173 } |
| 174 } | 174 } |
| 175 | 175 |
| 176 ///////////////////////////////////////////////////////////////////// | 176 ///////////////////////////////////////////////////////////////////// |
| 177 | 177 |
| 178 #if SK_SUPPORT_GPU | 178 #if SK_SUPPORT_GPU |
| 179 | 179 |
| 180 #include "GrTBackendProcessorFactory.h" | 180 #include "SkGr.h" |
| 181 #include "gl/builders/GrGLProgramBuilder.h" | 181 #include "gl/builders/GrGLProgramBuilder.h" |
| 182 #include "SkGr.h" | |
| 183 | 182 |
| 184 class GrGLSweepGradient : public GrGLGradientEffect { | 183 class GrGLSweepGradient : public GrGLGradientEffect { |
| 185 public: | 184 public: |
| 186 | 185 |
| 187 GrGLSweepGradient(const GrBackendProcessorFactory& factory, | 186 GrGLSweepGradient(const GrProcessor&) {} |
| 188 const GrProcessor&) : INHERITED (factory) { } | |
| 189 virtual ~GrGLSweepGradient() { } | 187 virtual ~GrGLSweepGradient() { } |
| 190 | 188 |
| 191 virtual void emitCode(GrGLFPBuilder*, | 189 virtual void emitCode(GrGLFPBuilder*, |
| 192 const GrFragmentProcessor&, | 190 const GrFragmentProcessor&, |
| 193 const char* outputColor, | 191 const char* outputColor, |
| 194 const char* inputColor, | 192 const char* inputColor, |
| 195 const TransformedCoordsArray&, | 193 const TransformedCoordsArray&, |
| 196 const TextureSamplerArray&) SK_OVERRIDE; | 194 const TextureSamplerArray&) SK_OVERRIDE; |
| 197 | 195 |
| 198 static void GenKey(const GrProcessor& processor, const GrGLCaps&, GrProcesso
rKeyBuilder* b) { | 196 static void GenKey(const GrProcessor& processor, const GrGLCaps&, GrProcesso
rKeyBuilder* b) { |
| 199 b->add32(GenBaseGradientKey(processor)); | 197 b->add32(GenBaseGradientKey(processor)); |
| 200 } | 198 } |
| 201 | 199 |
| 202 private: | 200 private: |
| 203 | 201 |
| 204 typedef GrGLGradientEffect INHERITED; | 202 typedef GrGLGradientEffect INHERITED; |
| 205 | 203 |
| 206 }; | 204 }; |
| 207 | 205 |
| 208 ///////////////////////////////////////////////////////////////////// | 206 ///////////////////////////////////////////////////////////////////// |
| 209 | 207 |
| 210 class GrSweepGradient : public GrGradientEffect { | 208 class GrSweepGradient : public GrGradientEffect { |
| 211 public: | 209 public: |
| 212 static GrFragmentProcessor* Create(GrContext* ctx, const SkSweepGradient& sh
ader, | 210 static GrFragmentProcessor* Create(GrContext* ctx, const SkSweepGradient& sh
ader, |
| 213 const SkMatrix& m) { | 211 const SkMatrix& m) { |
| 214 return SkNEW_ARGS(GrSweepGradient, (ctx, shader, m)); | 212 return SkNEW_ARGS(GrSweepGradient, (ctx, shader, m)); |
| 215 } | 213 } |
| 216 virtual ~GrSweepGradient() { } | 214 virtual ~GrSweepGradient() { } |
| 217 | 215 |
| 218 static const char* Name() { return "Sweep Gradient"; } | 216 virtual const char* name() const SK_OVERRIDE { return "Sweep Gradient"; } |
| 219 virtual const GrBackendFragmentProcessorFactory& getFactory() const SK_OVERR
IDE { | 217 |
| 220 return GrTBackendFragmentProcessorFactory<GrSweepGradient>::getInstance(
); | 218 virtual void getGLProcessorKey(const GrGLCaps& caps, |
| 219 GrProcessorKeyBuilder* b) const SK_OVERRIDE { |
| 220 GrGLSweepGradient::GenKey(*this, caps, b); |
| 221 } | 221 } |
| 222 | 222 |
| 223 typedef GrGLSweepGradient GLProcessor; | 223 virtual GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE { |
| 224 return SkNEW_ARGS(GrGLSweepGradient, (*this)); |
| 225 } |
| 224 | 226 |
| 225 private: | 227 private: |
| 226 GrSweepGradient(GrContext* ctx, | 228 GrSweepGradient(GrContext* ctx, |
| 227 const SkSweepGradient& shader, | 229 const SkSweepGradient& shader, |
| 228 const SkMatrix& matrix) | 230 const SkMatrix& matrix) |
| 229 : INHERITED(ctx, shader, matrix, SkShader::kClamp_TileMode) { } | 231 : INHERITED(ctx, shader, matrix, SkShader::kClamp_TileMode) { |
| 232 this->initClassID<GrSweepGradient>(); |
| 233 } |
| 230 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; | 234 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; |
| 231 | 235 |
| 232 typedef GrGradientEffect INHERITED; | 236 typedef GrGradientEffect INHERITED; |
| 233 }; | 237 }; |
| 234 | 238 |
| 235 ///////////////////////////////////////////////////////////////////// | 239 ///////////////////////////////////////////////////////////////////// |
| 236 | 240 |
| 237 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrSweepGradient); | 241 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrSweepGradient); |
| 238 | 242 |
| 239 GrFragmentProcessor* GrSweepGradient::TestCreate(SkRandom* random, | 243 GrFragmentProcessor* GrSweepGradient::TestCreate(SkRandom* random, |
| (...skipping 17 matching lines...) Expand all Loading... |
| 257 } | 261 } |
| 258 | 262 |
| 259 ///////////////////////////////////////////////////////////////////// | 263 ///////////////////////////////////////////////////////////////////// |
| 260 | 264 |
| 261 void GrGLSweepGradient::emitCode(GrGLFPBuilder* builder, | 265 void GrGLSweepGradient::emitCode(GrGLFPBuilder* builder, |
| 262 const GrFragmentProcessor& fp, | 266 const GrFragmentProcessor& fp, |
| 263 const char* outputColor, | 267 const char* outputColor, |
| 264 const char* inputColor, | 268 const char* inputColor, |
| 265 const TransformedCoordsArray& coords, | 269 const TransformedCoordsArray& coords, |
| 266 const TextureSamplerArray& samplers) { | 270 const TextureSamplerArray& samplers) { |
| 267 const GrGradientEffect& ge = fp.cast<GrGradientEffect>(); | 271 const GrSweepGradient& ge = fp.cast<GrSweepGradient>(); |
| 268 this->emitUniforms(builder, ge); | 272 this->emitUniforms(builder, ge); |
| 269 SkString coords2D = builder->getFragmentShaderBuilder()->ensureFSCoords2D(co
ords, 0); | 273 SkString coords2D = builder->getFragmentShaderBuilder()->ensureFSCoords2D(co
ords, 0); |
| 270 const GrGLContextInfo ctxInfo = builder->ctxInfo(); | 274 const GrGLContextInfo ctxInfo = builder->ctxInfo(); |
| 271 SkString t; | 275 SkString t; |
| 272 // 0.1591549430918 is 1/(2*pi), used since atan returns values [-pi, pi] | 276 // 0.1591549430918 is 1/(2*pi), used since atan returns values [-pi, pi] |
| 273 // On Intel GPU there is an issue where it reads the second arguement to ata
n "- %s.x" as an int | 277 // On Intel GPU there is an issue where it reads the second arguement to ata
n "- %s.x" as an int |
| 274 // thus must us -1.0 * %s.x to work correctly | 278 // thus must us -1.0 * %s.x to work correctly |
| 275 if (kIntel_GrGLVendor != ctxInfo.vendor()){ | 279 if (kIntel_GrGLVendor != ctxInfo.vendor()){ |
| 276 t.printf("atan(- %s.y, - %s.x) * 0.1591549430918 + 0.5", | 280 t.printf("atan(- %s.y, - %s.x) * 0.1591549430918 + 0.5", |
| 277 coords2D.c_str(), coords2D.c_str()); | 281 coords2D.c_str(), coords2D.c_str()); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 325 str->appendScalar(fCenter.fX); | 329 str->appendScalar(fCenter.fX); |
| 326 str->append(", "); | 330 str->append(", "); |
| 327 str->appendScalar(fCenter.fY); | 331 str->appendScalar(fCenter.fY); |
| 328 str->append(") "); | 332 str->append(") "); |
| 329 | 333 |
| 330 this->INHERITED::toString(str); | 334 this->INHERITED::toString(str); |
| 331 | 335 |
| 332 str->append(")"); | 336 str->append(")"); |
| 333 } | 337 } |
| 334 #endif | 338 #endif |
| OLD | NEW |