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 |