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 928 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
939 SkImageFilter* input = getInput(0); | 939 SkImageFilter* input = getInput(0); |
940 SkBitmap src = source; | 940 SkBitmap src = source; |
941 SkIPoint srcOffset = SkIPoint::Make(0, 0); | 941 SkIPoint srcOffset = SkIPoint::Make(0, 0); |
942 if (input && !input->filterImage(proxy, source, ctx, &src, &srcOffset)) { | 942 if (input && !input->filterImage(proxy, source, ctx, &src, &srcOffset)) { |
943 return false; | 943 return false; |
944 } | 944 } |
945 | 945 |
946 if (src.colorType() != kPMColor_SkColorType) { | 946 if (src.colorType() != kPMColor_SkColorType) { |
947 return false; | 947 return false; |
948 } | 948 } |
| 949 SkAutoLockPixels alp(src); |
| 950 if (!src.getPixels()) { |
| 951 return false; |
| 952 } |
| 953 |
949 SkIRect bounds; | 954 SkIRect bounds; |
950 if (!this->applyCropRect(ctx, proxy, src, &srcOffset, &bounds, &src)) { | 955 src.getBounds(&bounds); |
| 956 bounds.offset(srcOffset); |
| 957 if (!this->applyCropRect(&bounds, ctx.ctm())) { |
951 return false; | 958 return false; |
952 } | 959 } |
953 | 960 |
954 if (bounds.width() < 2 || bounds.height() < 2) { | 961 if (bounds.width() < 2 || bounds.height() < 2) { |
955 return false; | 962 return false; |
956 } | 963 } |
957 | 964 |
958 SkAutoLockPixels alp(src); | |
959 if (!src.getPixels()) { | |
960 return false; | |
961 } | |
962 | |
963 dst->setConfig(src.config(), bounds.width(), bounds.height()); | 965 dst->setConfig(src.config(), bounds.width(), bounds.height()); |
964 if (!dst->allocPixels()) { | 966 if (!dst->allocPixels()) { |
965 return false; | 967 return false; |
966 } | 968 } |
967 | 969 |
968 SkAutoTUnref<SkLight> transformedLight(light()->transform(ctx.ctm())); | 970 SkAutoTUnref<SkLight> transformedLight(light()->transform(ctx.ctm())); |
969 | 971 |
970 DiffuseLightingType lightingType(fKD); | 972 DiffuseLightingType lightingType(fKD); |
971 offset->fX = bounds.left(); | 973 offset->fX = bounds.left(); |
972 offset->fY = bounds.top(); | 974 offset->fY = bounds.top(); |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1030 SkImageFilter* input = getInput(0); | 1032 SkImageFilter* input = getInput(0); |
1031 SkBitmap src = source; | 1033 SkBitmap src = source; |
1032 SkIPoint srcOffset = SkIPoint::Make(0, 0); | 1034 SkIPoint srcOffset = SkIPoint::Make(0, 0); |
1033 if (input && !input->filterImage(proxy, source, ctx, &src, &srcOffset)) { | 1035 if (input && !input->filterImage(proxy, source, ctx, &src, &srcOffset)) { |
1034 return false; | 1036 return false; |
1035 } | 1037 } |
1036 | 1038 |
1037 if (src.colorType() != kPMColor_SkColorType) { | 1039 if (src.colorType() != kPMColor_SkColorType) { |
1038 return false; | 1040 return false; |
1039 } | 1041 } |
| 1042 SkAutoLockPixels alp(src); |
| 1043 if (!src.getPixels()) { |
| 1044 return false; |
| 1045 } |
1040 | 1046 |
1041 SkIRect bounds; | 1047 SkIRect bounds; |
1042 if (!this->applyCropRect(ctx, proxy, src, &srcOffset, &bounds, &src)) { | 1048 src.getBounds(&bounds); |
| 1049 bounds.offset(srcOffset); |
| 1050 if (!this->applyCropRect(&bounds, ctx.ctm())) { |
1043 return false; | 1051 return false; |
1044 } | 1052 } |
1045 | 1053 |
1046 if (bounds.width() < 2 || bounds.height() < 2) { | 1054 if (bounds.width() < 2 || bounds.height() < 2) { |
1047 return false; | 1055 return false; |
1048 } | 1056 } |
1049 | 1057 |
1050 SkAutoLockPixels alp(src); | |
1051 if (!src.getPixels()) { | |
1052 return false; | |
1053 } | |
1054 | |
1055 dst->setConfig(src.config(), bounds.width(), bounds.height()); | 1058 dst->setConfig(src.config(), bounds.width(), bounds.height()); |
1056 dst->allocPixels(); | 1059 dst->allocPixels(); |
1057 if (!dst->getPixels()) { | 1060 if (!dst->getPixels()) { |
1058 return false; | 1061 return false; |
1059 } | 1062 } |
1060 | 1063 |
1061 SpecularLightingType lightingType(fKS, fShininess); | 1064 SpecularLightingType lightingType(fKS, fShininess); |
1062 offset->fX = bounds.left(); | 1065 offset->fX = bounds.left(); |
1063 offset->fY = bounds.top(); | 1066 offset->fY = bounds.top(); |
1064 bounds.offset(-srcOffset); | 1067 bounds.offset(-srcOffset); |
(...skipping 550 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1615 | 1618 |
1616 builder->fsCodeAppendf("%s(%s)", fLightColorFunc.c_str(), surfaceToLight); | 1619 builder->fsCodeAppendf("%s(%s)", fLightColorFunc.c_str(), surfaceToLight); |
1617 } | 1620 } |
1618 | 1621 |
1619 #endif | 1622 #endif |
1620 | 1623 |
1621 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter) | 1624 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter) |
1622 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter) | 1625 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter) |
1623 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter) | 1626 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter) |
1624 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 1627 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
OLD | NEW |