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 |