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 |