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

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

Issue 13602013: Allow single-pass filters (which use asNewEffect()) to participate in the image filter DAG. This w… (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Remove SkSinglePassImageFilter class; move impl into SkImageFilter::filterImageGPU(). Created 7 years, 8 months 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 | Annotate | Revision Log
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 "SkLightingImageFilter.h" 8 #include "SkLightingImageFilter.h"
9 #include "SkBitmap.h" 9 #include "SkBitmap.h"
10 #include "SkColorPriv.h" 10 #include "SkColorPriv.h"
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 buffer.writeScalar(point.fY); 257 buffer.writeScalar(point.fY);
258 buffer.writeScalar(point.fZ); 258 buffer.writeScalar(point.fZ);
259 }; 259 };
260 260
261 class SkDiffuseLightingImageFilter : public SkLightingImageFilter { 261 class SkDiffuseLightingImageFilter : public SkLightingImageFilter {
262 public: 262 public:
263 SkDiffuseLightingImageFilter(SkLight* light, SkScalar surfaceScale, 263 SkDiffuseLightingImageFilter(SkLight* light, SkScalar surfaceScale,
264 SkScalar kd, SkImageFilter* input); 264 SkScalar kd, SkImageFilter* input);
265 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDiffuseLightingImageFi lter) 265 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDiffuseLightingImageFi lter)
266 266
267 virtual bool asNewEffect(GrEffectRef** effect, GrTexture*) const SK_OVERRIDE ; 267 #if SK_SUPPORT_GPU
268 virtual bool canFilterImageGPU() const { return true; }
269 virtual GrEffectRef* asNewEffect(GrTexture*) const SK_OVERRIDE;
270 #endif
268 SkScalar kd() const { return fKD; } 271 SkScalar kd() const { return fKD; }
269 272
270 protected: 273 protected:
271 explicit SkDiffuseLightingImageFilter(SkFlattenableReadBuffer& buffer); 274 explicit SkDiffuseLightingImageFilter(SkFlattenableReadBuffer& buffer);
272 virtual void flatten(SkFlattenableWriteBuffer& buffer) const SK_OVERRIDE; 275 virtual void flatten(SkFlattenableWriteBuffer& buffer) const SK_OVERRIDE;
273 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&, 276 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
274 SkBitmap* result, SkIPoint* offset) SK_OVERRIDE; 277 SkBitmap* result, SkIPoint* offset) SK_OVERRIDE;
275 278
276 279
277 private: 280 private:
278 typedef SkLightingImageFilter INHERITED; 281 typedef SkLightingImageFilter INHERITED;
279 SkScalar fKD; 282 SkScalar fKD;
280 }; 283 };
281 284
282 class SkSpecularLightingImageFilter : public SkLightingImageFilter { 285 class SkSpecularLightingImageFilter : public SkLightingImageFilter {
283 public: 286 public:
284 SkSpecularLightingImageFilter(SkLight* light, SkScalar surfaceScale, SkScala r ks, SkScalar shininess, SkImageFilter* input); 287 SkSpecularLightingImageFilter(SkLight* light, SkScalar surfaceScale, SkScala r ks, SkScalar shininess, SkImageFilter* input);
285 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkSpecularLightingImageF ilter) 288 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkSpecularLightingImageF ilter)
286 289
287 virtual bool asNewEffect(GrEffectRef** effect, GrTexture*) const SK_OVERRIDE ; 290 #if SK_SUPPORT_GPU
291 virtual bool canFilterImageGPU() const { return true; }
292 virtual GrEffectRef* asNewEffect(GrTexture*) const SK_OVERRIDE;
293 #endif
294
288 SkScalar ks() const { return fKS; } 295 SkScalar ks() const { return fKS; }
289 SkScalar shininess() const { return fShininess; } 296 SkScalar shininess() const { return fShininess; }
290 297
291 protected: 298 protected:
292 explicit SkSpecularLightingImageFilter(SkFlattenableReadBuffer& buffer); 299 explicit SkSpecularLightingImageFilter(SkFlattenableReadBuffer& buffer);
293 virtual void flatten(SkFlattenableWriteBuffer& buffer) const SK_OVERRIDE; 300 virtual void flatten(SkFlattenableWriteBuffer& buffer) const SK_OVERRIDE;
294 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&, 301 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
295 SkBitmap* result, SkIPoint* offset) SK_OVERRIDE; 302 SkBitmap* result, SkIPoint* offset) SK_OVERRIDE;
296 303
297 private: 304 private:
(...skipping 554 matching lines...) Expand 10 before | Expand all | Expand 10 after
852 case SkLight::kPoint_LightType: 859 case SkLight::kPoint_LightType:
853 lightBitmap<DiffuseLightingType, SkPointLight>(lightingType, light() , src, dst, surfaceScale()); 860 lightBitmap<DiffuseLightingType, SkPointLight>(lightingType, light() , src, dst, surfaceScale());
854 break; 861 break;
855 case SkLight::kSpot_LightType: 862 case SkLight::kSpot_LightType:
856 lightBitmap<DiffuseLightingType, SkSpotLight>(lightingType, light(), src, dst, surfaceScale()); 863 lightBitmap<DiffuseLightingType, SkSpotLight>(lightingType, light(), src, dst, surfaceScale());
857 break; 864 break;
858 } 865 }
859 return true; 866 return true;
860 } 867 }
861 868
862 bool SkDiffuseLightingImageFilter::asNewEffect(GrEffectRef** effect,
863 GrTexture* texture) const {
864 #if SK_SUPPORT_GPU 869 #if SK_SUPPORT_GPU
865 if (effect) { 870 GrEffectRef* SkDiffuseLightingImageFilter::asNewEffect(GrTexture* texture) const {
866 SkScalar scale = SkScalarMul(surfaceScale(), SkIntToScalar(255)); 871 SkScalar scale = SkScalarMul(surfaceScale(), SkIntToScalar(255));
867 *effect = GrDiffuseLightingEffect::Create(texture, light(), scale, kd()) ; 872 return GrDiffuseLightingEffect::Create(texture, light(), scale, kd());
868 } 873 }
869 return true;
870 #else
871 SkDEBUGFAIL("Should not call in GPU-less build");
872 return false;
873 #endif 874 #endif
874 }
875 875
876 /////////////////////////////////////////////////////////////////////////////// 876 ///////////////////////////////////////////////////////////////////////////////
877 877
878 SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkLight* light, SkS calar surfaceScale, SkScalar ks, SkScalar shininess, SkImageFilter* input) 878 SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkLight* light, SkS calar surfaceScale, SkScalar ks, SkScalar shininess, SkImageFilter* input)
879 : SkLightingImageFilter(light, surfaceScale, input), 879 : SkLightingImageFilter(light, surfaceScale, input),
880 fKS(ks), 880 fKS(ks),
881 fShininess(shininess) 881 fShininess(shininess)
882 { 882 {
883 } 883 }
884 884
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
921 case SkLight::kPoint_LightType: 921 case SkLight::kPoint_LightType:
922 lightBitmap<SpecularLightingType, SkPointLight>(lightingType, light( ), src, dst, surfaceScale()); 922 lightBitmap<SpecularLightingType, SkPointLight>(lightingType, light( ), src, dst, surfaceScale());
923 break; 923 break;
924 case SkLight::kSpot_LightType: 924 case SkLight::kSpot_LightType:
925 lightBitmap<SpecularLightingType, SkSpotLight>(lightingType, light() , src, dst, surfaceScale()); 925 lightBitmap<SpecularLightingType, SkSpotLight>(lightingType, light() , src, dst, surfaceScale());
926 break; 926 break;
927 } 927 }
928 return true; 928 return true;
929 } 929 }
930 930
931 bool SkSpecularLightingImageFilter::asNewEffect(GrEffectRef** effect,
932 GrTexture* texture) const {
933 #if SK_SUPPORT_GPU 931 #if SK_SUPPORT_GPU
934 if (effect) { 932 GrEffectRef* SkSpecularLightingImageFilter::asNewEffect(GrTexture* texture) cons t {
935 SkScalar scale = SkScalarMul(surfaceScale(), SkIntToScalar(255)); 933 SkScalar scale = SkScalarMul(surfaceScale(), SkIntToScalar(255));
936 *effect = GrSpecularLightingEffect::Create(texture, light(), scale, ks() , shininess()); 934 return GrSpecularLightingEffect::Create(texture, light(), scale, ks(), shini ness());
937 } 935 }
938 return true;
939 #else
940 SkDEBUGFAIL("Should not call in GPU-less build");
941 return false;
942 #endif 936 #endif
943 }
944 937
945 /////////////////////////////////////////////////////////////////////////////// 938 ///////////////////////////////////////////////////////////////////////////////
946 939
947 #if SK_SUPPORT_GPU 940 #if SK_SUPPORT_GPU
948 941
949 namespace { 942 namespace {
950 SkPoint3 random_point3(SkMWCRandom* random) { 943 SkPoint3 random_point3(SkMWCRandom* random) {
951 return SkPoint3(SkScalarToFloat(random->nextSScalar1()), 944 return SkPoint3(SkScalarToFloat(random->nextSScalar1()),
952 SkScalarToFloat(random->nextSScalar1()), 945 SkScalarToFloat(random->nextSScalar1()),
953 SkScalarToFloat(random->nextSScalar1())); 946 SkScalarToFloat(random->nextSScalar1()));
(...skipping 515 matching lines...) Expand 10 before | Expand all | Expand 10 after
1469 1462
1470 #endif 1463 #endif
1471 1464
1472 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter) 1465 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter)
1473 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter) 1466 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter)
1474 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter) 1467 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter)
1475 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDistantLight) 1468 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDistantLight)
1476 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkPointLight) 1469 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkPointLight)
1477 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpotLight) 1470 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpotLight)
1478 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END 1471 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698