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 #if SK_SUPPORT_GPU |
267 virtual bool asNewEffect(GrEffectRef** effect, GrTexture*) const SK_OVERRIDE
; | 268 virtual bool asNewEffect(GrEffectRef** effect, GrTexture*) const SK_OVERRIDE
; |
| 269 #endif |
268 SkScalar kd() const { return fKD; } | 270 SkScalar kd() const { return fKD; } |
269 | 271 |
270 protected: | 272 protected: |
271 explicit SkDiffuseLightingImageFilter(SkFlattenableReadBuffer& buffer); | 273 explicit SkDiffuseLightingImageFilter(SkFlattenableReadBuffer& buffer); |
272 virtual void flatten(SkFlattenableWriteBuffer& buffer) const SK_OVERRIDE; | 274 virtual void flatten(SkFlattenableWriteBuffer& buffer) const SK_OVERRIDE; |
273 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&, | 275 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&, |
274 SkBitmap* result, SkIPoint* offset) SK_OVERRIDE; | 276 SkBitmap* result, SkIPoint* offset) SK_OVERRIDE; |
275 | 277 |
276 | 278 |
277 private: | 279 private: |
278 typedef SkLightingImageFilter INHERITED; | 280 typedef SkLightingImageFilter INHERITED; |
279 SkScalar fKD; | 281 SkScalar fKD; |
280 }; | 282 }; |
281 | 283 |
282 class SkSpecularLightingImageFilter : public SkLightingImageFilter { | 284 class SkSpecularLightingImageFilter : public SkLightingImageFilter { |
283 public: | 285 public: |
284 SkSpecularLightingImageFilter(SkLight* light, SkScalar surfaceScale, SkScala
r ks, SkScalar shininess, SkImageFilter* input); | 286 SkSpecularLightingImageFilter(SkLight* light, SkScalar surfaceScale, SkScala
r ks, SkScalar shininess, SkImageFilter* input); |
285 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkSpecularLightingImageF
ilter) | 287 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkSpecularLightingImageF
ilter) |
286 | 288 |
| 289 #if SK_SUPPORT_GPU |
287 virtual bool asNewEffect(GrEffectRef** effect, GrTexture*) const SK_OVERRIDE
; | 290 virtual bool asNewEffect(GrEffectRef** effect, GrTexture*) const SK_OVERRIDE
; |
| 291 #endif |
| 292 |
288 SkScalar ks() const { return fKS; } | 293 SkScalar ks() const { return fKS; } |
289 SkScalar shininess() const { return fShininess; } | 294 SkScalar shininess() const { return fShininess; } |
290 | 295 |
291 protected: | 296 protected: |
292 explicit SkSpecularLightingImageFilter(SkFlattenableReadBuffer& buffer); | 297 explicit SkSpecularLightingImageFilter(SkFlattenableReadBuffer& buffer); |
293 virtual void flatten(SkFlattenableWriteBuffer& buffer) const SK_OVERRIDE; | 298 virtual void flatten(SkFlattenableWriteBuffer& buffer) const SK_OVERRIDE; |
294 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&, | 299 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&, |
295 SkBitmap* result, SkIPoint* offset) SK_OVERRIDE; | 300 SkBitmap* result, SkIPoint* offset) SK_OVERRIDE; |
296 | 301 |
297 private: | 302 private: |
(...skipping 554 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
852 case SkLight::kPoint_LightType: | 857 case SkLight::kPoint_LightType: |
853 lightBitmap<DiffuseLightingType, SkPointLight>(lightingType, light()
, src, dst, surfaceScale()); | 858 lightBitmap<DiffuseLightingType, SkPointLight>(lightingType, light()
, src, dst, surfaceScale()); |
854 break; | 859 break; |
855 case SkLight::kSpot_LightType: | 860 case SkLight::kSpot_LightType: |
856 lightBitmap<DiffuseLightingType, SkSpotLight>(lightingType, light(),
src, dst, surfaceScale()); | 861 lightBitmap<DiffuseLightingType, SkSpotLight>(lightingType, light(),
src, dst, surfaceScale()); |
857 break; | 862 break; |
858 } | 863 } |
859 return true; | 864 return true; |
860 } | 865 } |
861 | 866 |
862 bool SkDiffuseLightingImageFilter::asNewEffect(GrEffectRef** effect, | |
863 GrTexture* texture) const { | |
864 #if SK_SUPPORT_GPU | 867 #if SK_SUPPORT_GPU |
| 868 bool SkDiffuseLightingImageFilter::asNewEffect(GrEffectRef** effect, GrTexture*
texture) const { |
865 if (effect) { | 869 if (effect) { |
866 SkScalar scale = SkScalarMul(surfaceScale(), SkIntToScalar(255)); | 870 SkScalar scale = SkScalarMul(surfaceScale(), SkIntToScalar(255)); |
867 *effect = GrDiffuseLightingEffect::Create(texture, light(), scale, kd())
; | 871 *effect = GrDiffuseLightingEffect::Create(texture, light(), scale, kd())
; |
868 } | 872 } |
869 return true; | 873 return true; |
870 #else | 874 } |
871 SkDEBUGFAIL("Should not call in GPU-less build"); | |
872 return false; | |
873 #endif | 875 #endif |
874 } | |
875 | 876 |
876 /////////////////////////////////////////////////////////////////////////////// | 877 /////////////////////////////////////////////////////////////////////////////// |
877 | 878 |
878 SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkLight* light, SkS
calar surfaceScale, SkScalar ks, SkScalar shininess, SkImageFilter* input) | 879 SkSpecularLightingImageFilter::SkSpecularLightingImageFilter(SkLight* light, SkS
calar surfaceScale, SkScalar ks, SkScalar shininess, SkImageFilter* input) |
879 : SkLightingImageFilter(light, surfaceScale, input), | 880 : SkLightingImageFilter(light, surfaceScale, input), |
880 fKS(ks), | 881 fKS(ks), |
881 fShininess(shininess) | 882 fShininess(shininess) |
882 { | 883 { |
883 } | 884 } |
884 | 885 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
921 case SkLight::kPoint_LightType: | 922 case SkLight::kPoint_LightType: |
922 lightBitmap<SpecularLightingType, SkPointLight>(lightingType, light(
), src, dst, surfaceScale()); | 923 lightBitmap<SpecularLightingType, SkPointLight>(lightingType, light(
), src, dst, surfaceScale()); |
923 break; | 924 break; |
924 case SkLight::kSpot_LightType: | 925 case SkLight::kSpot_LightType: |
925 lightBitmap<SpecularLightingType, SkSpotLight>(lightingType, light()
, src, dst, surfaceScale()); | 926 lightBitmap<SpecularLightingType, SkSpotLight>(lightingType, light()
, src, dst, surfaceScale()); |
926 break; | 927 break; |
927 } | 928 } |
928 return true; | 929 return true; |
929 } | 930 } |
930 | 931 |
931 bool SkSpecularLightingImageFilter::asNewEffect(GrEffectRef** effect, | |
932 GrTexture* texture) const { | |
933 #if SK_SUPPORT_GPU | 932 #if SK_SUPPORT_GPU |
| 933 bool SkSpecularLightingImageFilter::asNewEffect(GrEffectRef** effect, GrTexture*
texture) const { |
934 if (effect) { | 934 if (effect) { |
935 SkScalar scale = SkScalarMul(surfaceScale(), SkIntToScalar(255)); | 935 SkScalar scale = SkScalarMul(surfaceScale(), SkIntToScalar(255)); |
936 *effect = GrSpecularLightingEffect::Create(texture, light(), scale, ks()
, shininess()); | 936 *effect = GrSpecularLightingEffect::Create(texture, light(), scale, ks()
, shininess()); |
937 } | 937 } |
938 return true; | 938 return true; |
939 #else | 939 } |
940 SkDEBUGFAIL("Should not call in GPU-less build"); | |
941 return false; | |
942 #endif | 940 #endif |
943 } | |
944 | 941 |
945 /////////////////////////////////////////////////////////////////////////////// | 942 /////////////////////////////////////////////////////////////////////////////// |
946 | 943 |
947 #if SK_SUPPORT_GPU | 944 #if SK_SUPPORT_GPU |
948 | 945 |
949 namespace { | 946 namespace { |
950 SkPoint3 random_point3(SkMWCRandom* random) { | 947 SkPoint3 random_point3(SkMWCRandom* random) { |
951 return SkPoint3(SkScalarToFloat(random->nextSScalar1()), | 948 return SkPoint3(SkScalarToFloat(random->nextSScalar1()), |
952 SkScalarToFloat(random->nextSScalar1()), | 949 SkScalarToFloat(random->nextSScalar1()), |
953 SkScalarToFloat(random->nextSScalar1())); | 950 SkScalarToFloat(random->nextSScalar1())); |
(...skipping 515 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1469 | 1466 |
1470 #endif | 1467 #endif |
1471 | 1468 |
1472 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter) | 1469 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter) |
1473 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter) | 1470 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter) |
1474 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter) | 1471 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter) |
1475 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDistantLight) | 1472 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDistantLight) |
1476 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkPointLight) | 1473 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkPointLight) |
1477 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpotLight) | 1474 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpotLight) |
1478 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 1475 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
OLD | NEW |