| 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 "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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |