| 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 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 319 point.fX = buffer.readScalar(); | 319 point.fX = buffer.readScalar(); |
| 320 point.fY = buffer.readScalar(); | 320 point.fY = buffer.readScalar(); |
| 321 point.fZ = buffer.readScalar(); | 321 point.fZ = buffer.readScalar(); |
| 322 buffer.validate(SkScalarIsFinite(point.fX) && | 322 buffer.validate(SkScalarIsFinite(point.fX) && |
| 323 SkScalarIsFinite(point.fY) && | 323 SkScalarIsFinite(point.fY) && |
| 324 SkScalarIsFinite(point.fZ)); | 324 SkScalarIsFinite(point.fZ)); |
| 325 return point; | 325 return point; |
| 326 }; | 326 }; |
| 327 | 327 |
| 328 void writePoint3(const SkPoint3& point, SkWriteBuffer& buffer) { | 328 void writePoint3(const SkPoint3& point, SkWriteBuffer& buffer) { |
| 329 buffer.writeScalar(point.fX); | 329 buffer.writeScalar("fX", point.fX); |
| 330 buffer.writeScalar(point.fY); | 330 buffer.writeScalar("fY", point.fY); |
| 331 buffer.writeScalar(point.fZ); | 331 buffer.writeScalar("fZ", point.fZ); |
| 332 }; | 332 }; |
| 333 | 333 |
| 334 enum BoundaryMode { | 334 enum BoundaryMode { |
| 335 kTopLeft_BoundaryMode, | 335 kTopLeft_BoundaryMode, |
| 336 kTop_BoundaryMode, | 336 kTop_BoundaryMode, |
| 337 kTopRight_BoundaryMode, | 337 kTopRight_BoundaryMode, |
| 338 kLeft_BoundaryMode, | 338 kLeft_BoundaryMode, |
| 339 kInterior_BoundaryMode, | 339 kInterior_BoundaryMode, |
| 340 kRight_BoundaryMode, | 340 kRight_BoundaryMode, |
| 341 kBottomLeft_BoundaryMode, | 341 kBottomLeft_BoundaryMode, |
| (...skipping 680 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1022 fSpecularExponent(specularExponent), | 1022 fSpecularExponent(specularExponent), |
| 1023 fCosOuterConeAngle(cosOuterConeAngle), | 1023 fCosOuterConeAngle(cosOuterConeAngle), |
| 1024 fCosInnerConeAngle(cosInnerConeAngle), | 1024 fCosInnerConeAngle(cosInnerConeAngle), |
| 1025 fConeScale(coneScale), | 1025 fConeScale(coneScale), |
| 1026 fS(s) | 1026 fS(s) |
| 1027 { | 1027 { |
| 1028 } | 1028 } |
| 1029 void onFlattenLight(SkWriteBuffer& buffer) const override { | 1029 void onFlattenLight(SkWriteBuffer& buffer) const override { |
| 1030 writePoint3(fLocation, buffer); | 1030 writePoint3(fLocation, buffer); |
| 1031 writePoint3(fTarget, buffer); | 1031 writePoint3(fTarget, buffer); |
| 1032 buffer.writeScalar(fSpecularExponent); | 1032 buffer.writeScalar("fSpecularExponent", fSpecularExponent); |
| 1033 buffer.writeScalar(fCosOuterConeAngle); | 1033 buffer.writeScalar("fCosOuterConeAngle", fCosOuterConeAngle); |
| 1034 buffer.writeScalar(fCosInnerConeAngle); | 1034 buffer.writeScalar("fCosInnerConeAngle", fCosInnerConeAngle); |
| 1035 buffer.writeScalar(fConeScale); | 1035 buffer.writeScalar("fConeScale", fConeScale); |
| 1036 writePoint3(fS, buffer); | 1036 writePoint3(fS, buffer); |
| 1037 } | 1037 } |
| 1038 | 1038 |
| 1039 bool isEqual(const SkImageFilterLight& other) const override { | 1039 bool isEqual(const SkImageFilterLight& other) const override { |
| 1040 if (other.type() != kSpot_LightType) { | 1040 if (other.type() != kSpot_LightType) { |
| 1041 return false; | 1041 return false; |
| 1042 } | 1042 } |
| 1043 | 1043 |
| 1044 const SkSpotLight& o = static_cast<const SkSpotLight&>(other); | 1044 const SkSpotLight& o = static_cast<const SkSpotLight&>(other); |
| 1045 return INHERITED::isEqual(other) && | 1045 return INHERITED::isEqual(other) && |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1066 | 1066 |
| 1067 // According to the spec, the specular term should be in the range [1, 128] : | 1067 // According to the spec, the specular term should be in the range [1, 128] : |
| 1068 // http://www.w3.org/TR/SVG/filters.html#feSpecularLightingSpecularExponentAttri
bute | 1068 // http://www.w3.org/TR/SVG/filters.html#feSpecularLightingSpecularExponentAttri
bute |
| 1069 const SkScalar SkSpotLight::kSpecularExponentMin = 1.0f; | 1069 const SkScalar SkSpotLight::kSpecularExponentMin = 1.0f; |
| 1070 const SkScalar SkSpotLight::kSpecularExponentMax = 128.0f; | 1070 const SkScalar SkSpotLight::kSpecularExponentMax = 128.0f; |
| 1071 | 1071 |
| 1072 /////////////////////////////////////////////////////////////////////////////// | 1072 /////////////////////////////////////////////////////////////////////////////// |
| 1073 | 1073 |
| 1074 void SkImageFilterLight::flattenLight(SkWriteBuffer& buffer) const { | 1074 void SkImageFilterLight::flattenLight(SkWriteBuffer& buffer) const { |
| 1075 // Write type first, then baseclass, then subclass. | 1075 // Write type first, then baseclass, then subclass. |
| 1076 buffer.writeInt(this->type()); | 1076 buffer.writeInt("type", this->type()); |
| 1077 writePoint3(fColor, buffer); | 1077 writePoint3(fColor, buffer); |
| 1078 this->onFlattenLight(buffer); | 1078 this->onFlattenLight(buffer); |
| 1079 } | 1079 } |
| 1080 | 1080 |
| 1081 /*static*/ SkImageFilterLight* SkImageFilterLight::UnflattenLight(SkReadBuffer&
buffer) { | 1081 /*static*/ SkImageFilterLight* SkImageFilterLight::UnflattenLight(SkReadBuffer&
buffer) { |
| 1082 // Read type first. | 1082 // Read type first. |
| 1083 const SkImageFilterLight::LightType type = (SkImageFilterLight::LightType)bu
ffer.readInt(); | 1083 const SkImageFilterLight::LightType type = (SkImageFilterLight::LightType)bu
ffer.readInt(); |
| 1084 switch (type) { | 1084 switch (type) { |
| 1085 // Each of these constructors must first call SkLight's, so we'll read t
he baseclass | 1085 // Each of these constructors must first call SkLight's, so we'll read t
he baseclass |
| 1086 // then subclass, same order as flattenLight. | 1086 // then subclass, same order as flattenLight. |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1181 const CropRect*
cropRect) { | 1181 const CropRect*
cropRect) { |
| 1182 sk_sp<SkImageFilterLight> light( | 1182 sk_sp<SkImageFilterLight> light( |
| 1183 new SkSpotLight(location, target, specularExponent, cutoffAngle, lig
htColor)); | 1183 new SkSpotLight(location, target, specularExponent, cutoffAngle, lig
htColor)); |
| 1184 return SkSpecularLightingImageFilter::Make(std::move(light), surfaceScale, k
s, shine, | 1184 return SkSpecularLightingImageFilter::Make(std::move(light), surfaceScale, k
s, shine, |
| 1185 std::move(input), cropRect); | 1185 std::move(input), cropRect); |
| 1186 } | 1186 } |
| 1187 | 1187 |
| 1188 void SkLightingImageFilter::flatten(SkWriteBuffer& buffer) const { | 1188 void SkLightingImageFilter::flatten(SkWriteBuffer& buffer) const { |
| 1189 this->INHERITED::flatten(buffer); | 1189 this->INHERITED::flatten(buffer); |
| 1190 fLight->flattenLight(buffer); | 1190 fLight->flattenLight(buffer); |
| 1191 buffer.writeScalar(fSurfaceScale * 255); | 1191 buffer.writeScalar("fSurfaceScale", fSurfaceScale * 255); |
| 1192 } | 1192 } |
| 1193 | 1193 |
| 1194 /////////////////////////////////////////////////////////////////////////////// | 1194 /////////////////////////////////////////////////////////////////////////////// |
| 1195 | 1195 |
| 1196 sk_sp<SkImageFilter> SkDiffuseLightingImageFilter::Make(sk_sp<SkImageFilterLight
> light, | 1196 sk_sp<SkImageFilter> SkDiffuseLightingImageFilter::Make(sk_sp<SkImageFilterLight
> light, |
| 1197 SkScalar surfaceScale, | 1197 SkScalar surfaceScale, |
| 1198 SkScalar kd, | 1198 SkScalar kd, |
| 1199 sk_sp<SkImageFilter> inp
ut, | 1199 sk_sp<SkImageFilter> inp
ut, |
| 1200 const CropRect* cropRect
) { | 1200 const CropRect* cropRect
) { |
| 1201 if (!light) { | 1201 if (!light) { |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1225 sk_sp<SkFlattenable> SkDiffuseLightingImageFilter::CreateProc(SkReadBuffer& buff
er) { | 1225 sk_sp<SkFlattenable> SkDiffuseLightingImageFilter::CreateProc(SkReadBuffer& buff
er) { |
| 1226 SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1); | 1226 SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1); |
| 1227 sk_sp<SkImageFilterLight> light(SkImageFilterLight::UnflattenLight(buffer)); | 1227 sk_sp<SkImageFilterLight> light(SkImageFilterLight::UnflattenLight(buffer)); |
| 1228 SkScalar surfaceScale = buffer.readScalar(); | 1228 SkScalar surfaceScale = buffer.readScalar(); |
| 1229 SkScalar kd = buffer.readScalar(); | 1229 SkScalar kd = buffer.readScalar(); |
| 1230 return Make(std::move(light), surfaceScale, kd, common.getInput(0), &common.
cropRect()); | 1230 return Make(std::move(light), surfaceScale, kd, common.getInput(0), &common.
cropRect()); |
| 1231 } | 1231 } |
| 1232 | 1232 |
| 1233 void SkDiffuseLightingImageFilter::flatten(SkWriteBuffer& buffer) const { | 1233 void SkDiffuseLightingImageFilter::flatten(SkWriteBuffer& buffer) const { |
| 1234 this->INHERITED::flatten(buffer); | 1234 this->INHERITED::flatten(buffer); |
| 1235 buffer.writeScalar(fKD); | 1235 buffer.writeScalar("fKD", fKD); |
| 1236 } | 1236 } |
| 1237 | 1237 |
| 1238 sk_sp<SkSpecialImage> SkDiffuseLightingImageFilter::onFilterImage(SkSpecialImage
* source, | 1238 sk_sp<SkSpecialImage> SkDiffuseLightingImageFilter::onFilterImage(SkSpecialImage
* source, |
| 1239 const Context&
ctx, | 1239 const Context&
ctx, |
| 1240 SkIPoint* offs
et) const { | 1240 SkIPoint* offs
et) const { |
| 1241 SkIPoint inputOffset = SkIPoint::Make(0, 0); | 1241 SkIPoint inputOffset = SkIPoint::Make(0, 0); |
| 1242 sk_sp<SkSpecialImage> input(this->filterInput(0, source, ctx, &inputOffset))
; | 1242 sk_sp<SkSpecialImage> input(this->filterInput(0, source, ctx, &inputOffset))
; |
| 1243 if (!input) { | 1243 if (!input) { |
| 1244 return nullptr; | 1244 return nullptr; |
| 1245 } | 1245 } |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1389 sk_sp<SkImageFilterLight> light(SkImageFilterLight::UnflattenLight(buffer)); | 1389 sk_sp<SkImageFilterLight> light(SkImageFilterLight::UnflattenLight(buffer)); |
| 1390 SkScalar surfaceScale = buffer.readScalar(); | 1390 SkScalar surfaceScale = buffer.readScalar(); |
| 1391 SkScalar ks = buffer.readScalar(); | 1391 SkScalar ks = buffer.readScalar(); |
| 1392 SkScalar shine = buffer.readScalar(); | 1392 SkScalar shine = buffer.readScalar(); |
| 1393 return Make(std::move(light), surfaceScale, ks, shine, common.getInput(0), | 1393 return Make(std::move(light), surfaceScale, ks, shine, common.getInput(0), |
| 1394 &common.cropRect()); | 1394 &common.cropRect()); |
| 1395 } | 1395 } |
| 1396 | 1396 |
| 1397 void SkSpecularLightingImageFilter::flatten(SkWriteBuffer& buffer) const { | 1397 void SkSpecularLightingImageFilter::flatten(SkWriteBuffer& buffer) const { |
| 1398 this->INHERITED::flatten(buffer); | 1398 this->INHERITED::flatten(buffer); |
| 1399 buffer.writeScalar(fKS); | 1399 buffer.writeScalar("fKS", fKS); |
| 1400 buffer.writeScalar(fShininess); | 1400 buffer.writeScalar("fShininess", fShininess); |
| 1401 } | 1401 } |
| 1402 | 1402 |
| 1403 sk_sp<SkSpecialImage> SkSpecularLightingImageFilter::onFilterImage(SkSpecialImag
e* source, | 1403 sk_sp<SkSpecialImage> SkSpecularLightingImageFilter::onFilterImage(SkSpecialImag
e* source, |
| 1404 const Context
& ctx, | 1404 const Context
& ctx, |
| 1405 SkIPoint* off
set) const { | 1405 SkIPoint* off
set) const { |
| 1406 SkIPoint inputOffset = SkIPoint::Make(0, 0); | 1406 SkIPoint inputOffset = SkIPoint::Make(0, 0); |
| 1407 sk_sp<SkSpecialImage> input(this->filterInput(0, source, ctx, &inputOffset))
; | 1407 sk_sp<SkSpecialImage> input(this->filterInput(0, source, ctx, &inputOffset))
; |
| 1408 if (!input) { | 1408 if (!input) { |
| 1409 return nullptr; | 1409 return nullptr; |
| 1410 } | 1410 } |
| (...skipping 760 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2171 | 2171 |
| 2172 fragBuilder->codeAppendf("%s(%s)", fLightColorFunc.c_str(), surfaceToLight); | 2172 fragBuilder->codeAppendf("%s(%s)", fLightColorFunc.c_str(), surfaceToLight); |
| 2173 } | 2173 } |
| 2174 | 2174 |
| 2175 #endif | 2175 #endif |
| 2176 | 2176 |
| 2177 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter) | 2177 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter) |
| 2178 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter) | 2178 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter) |
| 2179 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter) | 2179 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter) |
| 2180 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 2180 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
| OLD | NEW |