| 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 |