OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2006 The Android Open Source Project | 3 * Copyright 2006 The Android Open Source Project |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 | 9 |
10 #include "SkBlitter.h" | 10 #include "SkBlitter.h" |
(...skipping 832 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
843 default: | 843 default: |
844 break; | 844 break; |
845 } | 845 } |
846 } | 846 } |
847 return kNormal_XferInterp; | 847 return kNormal_XferInterp; |
848 } | 848 } |
849 | 849 |
850 SkBlitter* SkBlitter::Choose(const SkBitmap& device, | 850 SkBlitter* SkBlitter::Choose(const SkBitmap& device, |
851 const SkMatrix& matrix, | 851 const SkMatrix& matrix, |
852 const SkPaint& origPaint, | 852 const SkPaint& origPaint, |
853 void* storage, size_t storageSize, | 853 void* storage, size_t storageSize) { |
854 bool drawCoverage) { | |
855 SkASSERT(storageSize == 0 || storage != NULL); | 854 SkASSERT(storageSize == 0 || storage != NULL); |
856 | 855 |
857 SkBlitter* blitter = NULL; | 856 SkBlitter* blitter = NULL; |
858 | 857 |
859 // which check, in case we're being called by a client with a dummy device | 858 // which check, in case we're being called by a client with a dummy device |
860 // (e.g. they have a bounder that always aborts the draw) | 859 // (e.g. they have a bounder that always aborts the draw) |
861 if (SkBitmap::kNo_Config == device.config() || | 860 if (SkBitmap::kNo_Config == device.config()) { |
862 (drawCoverage && (SkBitmap::kA8_Config != device.config()))) { | |
863 SK_PLACEMENT_NEW(blitter, SkNullBlitter, storage, storageSize); | 861 SK_PLACEMENT_NEW(blitter, SkNullBlitter, storage, storageSize); |
864 return blitter; | 862 return blitter; |
865 } | 863 } |
866 | 864 |
867 SkShader* shader = origPaint.getShader(); | 865 SkShader* shader = origPaint.getShader(); |
868 SkColorFilter* cf = origPaint.getColorFilter(); | 866 SkColorFilter* cf = origPaint.getColorFilter(); |
869 SkXfermode* mode = origPaint.getXfermode(); | 867 SkXfermode* mode = origPaint.getXfermode(); |
870 Sk3DShader* shader3D = NULL; | 868 Sk3DShader* shader3D = NULL; |
871 | 869 |
872 SkTCopyOnFirstWrite<SkPaint> paint(origPaint); | 870 SkTCopyOnFirstWrite<SkPaint> paint(origPaint); |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
935 * endContext | 933 * endContext |
936 * We make the first call here, in case it fails we can abort the draw. | 934 * We make the first call here, in case it fails we can abort the draw. |
937 * The endContext() call is made by the blitter (assuming setContext did | 935 * The endContext() call is made by the blitter (assuming setContext did |
938 * not fail) in its destructor. | 936 * not fail) in its destructor. |
939 */ | 937 */ |
940 if (shader && !shader->setContext(device, *paint, matrix)) { | 938 if (shader && !shader->setContext(device, *paint, matrix)) { |
941 SK_PLACEMENT_NEW(blitter, SkNullBlitter, storage, storageSize); | 939 SK_PLACEMENT_NEW(blitter, SkNullBlitter, storage, storageSize); |
942 return blitter; | 940 return blitter; |
943 } | 941 } |
944 | 942 |
945 | |
946 switch (device.config()) { | 943 switch (device.config()) { |
947 case SkBitmap::kA1_Config: | 944 case SkBitmap::kA1_Config: |
948 SK_PLACEMENT_NEW_ARGS(blitter, SkA1_Blitter, | 945 SK_PLACEMENT_NEW_ARGS(blitter, SkA1_Blitter, |
949 storage, storageSize, (device, *paint)); | 946 storage, storageSize, (device, *paint)); |
950 break; | 947 break; |
951 | 948 |
952 case SkBitmap::kA8_Config: | 949 case SkBitmap::kA8_Config: |
953 if (drawCoverage) { | 950 if (shader) { |
954 SkASSERT(NULL == shader); | |
955 SkASSERT(NULL == paint->getXfermode()); | |
956 SK_PLACEMENT_NEW_ARGS(blitter, SkA8_Coverage_Blitter, | |
957 storage, storageSize, (device, *paint)); | |
958 } else if (shader) { | |
959 SK_PLACEMENT_NEW_ARGS(blitter, SkA8_Shader_Blitter, | 951 SK_PLACEMENT_NEW_ARGS(blitter, SkA8_Shader_Blitter, |
960 storage, storageSize, (device, *paint)); | 952 storage, storageSize, (device, *paint)); |
961 } else { | 953 } else { |
962 SK_PLACEMENT_NEW_ARGS(blitter, SkA8_Blitter, | 954 SK_PLACEMENT_NEW_ARGS(blitter, SkA8_Blitter, |
963 storage, storageSize, (device, *paint)); | 955 storage, storageSize, (device, *paint)); |
964 } | 956 } |
965 break; | 957 break; |
966 | 958 |
967 case SkBitmap::kRGB_565_Config: | 959 case SkBitmap::kRGB_565_Config: |
968 blitter = SkBlitter_ChooseD565(device, *paint, storage, storageSize)
; | 960 blitter = SkBlitter_ChooseD565(device, *paint, storage, storageSize)
; |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1015 | 1007 |
1016 fShader->ref(); | 1008 fShader->ref(); |
1017 fShaderFlags = fShader->getFlags(); | 1009 fShaderFlags = fShader->getFlags(); |
1018 } | 1010 } |
1019 | 1011 |
1020 SkShaderBlitter::~SkShaderBlitter() { | 1012 SkShaderBlitter::~SkShaderBlitter() { |
1021 SkASSERT(fShader->setContextHasBeenCalled()); | 1013 SkASSERT(fShader->setContextHasBeenCalled()); |
1022 fShader->endContext(); | 1014 fShader->endContext(); |
1023 fShader->unref(); | 1015 fShader->unref(); |
1024 } | 1016 } |
OLD | NEW |