OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
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 #include "SkAnnotation.h" | 9 #include "SkAnnotation.h" |
10 #include "SkBitmapDevice.h" | 10 #include "SkBitmapDevice.h" |
(...skipping 910 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
921 } | 921 } |
922 } | 922 } |
923 } | 923 } |
924 } | 924 } |
925 | 925 |
926 void SkGPipeCanvas::drawPicture(SkPicture& picture) { | 926 void SkGPipeCanvas::drawPicture(SkPicture& picture) { |
927 // we want to playback the picture into individual draw calls | 927 // we want to playback the picture into individual draw calls |
928 this->INHERITED::drawPicture(picture); | 928 this->INHERITED::drawPicture(picture); |
929 } | 929 } |
930 | 930 |
931 void SkGPipeCanvas::drawVertices(VertexMode mode, int vertexCount, | 931 void SkGPipeCanvas::drawVertices(VertexMode vmode, int vertexCount, |
932 const SkPoint vertices[], const SkPoint texs[], | 932 const SkPoint vertices[], const SkPoint texs[], |
933 const SkColor colors[], SkXfermode*, | 933 const SkColor colors[], SkXfermode* xfer, |
934 const uint16_t indices[], int indexCount, | 934 const uint16_t indices[], int indexCount, |
935 const SkPaint& paint) { | 935 const SkPaint& paint) { |
936 if (0 == vertexCount) { | 936 if (0 == vertexCount) { |
937 return; | 937 return; |
938 } | 938 } |
939 | 939 |
940 NOTIFY_SETUP(this); | 940 NOTIFY_SETUP(this); |
941 size_t size = 4 + vertexCount * sizeof(SkPoint); | 941 size_t size = 4 + vertexCount * sizeof(SkPoint); |
942 this->writePaint(paint); | 942 this->writePaint(paint); |
943 unsigned flags = 0; | 943 unsigned flags = 0; |
944 if (texs) { | 944 if (texs) { |
945 flags |= kDrawVertices_HasTexs_DrawOpFlag; | 945 flags |= kDrawVertices_HasTexs_DrawOpFlag; |
946 size += vertexCount * sizeof(SkPoint); | 946 size += vertexCount * sizeof(SkPoint); |
947 } | 947 } |
948 if (colors) { | 948 if (colors) { |
949 flags |= kDrawVertices_HasColors_DrawOpFlag; | 949 flags |= kDrawVertices_HasColors_DrawOpFlag; |
950 size += vertexCount * sizeof(SkColor); | 950 size += vertexCount * sizeof(SkColor); |
951 } | 951 } |
952 if (indices && indexCount > 0) { | 952 if (indices && indexCount > 0) { |
953 flags |= kDrawVertices_HasIndices_DrawOpFlag; | 953 flags |= kDrawVertices_HasIndices_DrawOpFlag; |
954 size += 4 + SkAlign4(indexCount * sizeof(uint16_t)); | 954 size += 4 + SkAlign4(indexCount * sizeof(uint16_t)); |
955 } | 955 } |
| 956 if (xfer && !SkXfermode::IsMode(xfer, SkXfermode::kModulate_Mode)) { |
| 957 flags |= kDrawVertices_HasXfermode_DrawOpFlag; |
| 958 size += sizeof(int32_t); // mode enum |
| 959 } |
956 | 960 |
957 if (this->needOpBytes(size)) { | 961 if (this->needOpBytes(size)) { |
958 this->writeOp(kDrawVertices_DrawOp, flags, 0); | 962 this->writeOp(kDrawVertices_DrawOp, flags, 0); |
959 fWriter.write32(mode); | 963 fWriter.write32(vmode); |
960 fWriter.write32(vertexCount); | 964 fWriter.write32(vertexCount); |
961 fWriter.write(vertices, vertexCount * sizeof(SkPoint)); | 965 fWriter.write(vertices, vertexCount * sizeof(SkPoint)); |
962 if (texs) { | 966 if (texs) { |
963 fWriter.write(texs, vertexCount * sizeof(SkPoint)); | 967 fWriter.write(texs, vertexCount * sizeof(SkPoint)); |
964 } | 968 } |
965 if (colors) { | 969 if (colors) { |
966 fWriter.write(colors, vertexCount * sizeof(SkColor)); | 970 fWriter.write(colors, vertexCount * sizeof(SkColor)); |
967 } | 971 } |
968 | 972 if (flags & kDrawVertices_HasXfermode_DrawOpFlag) { |
969 // TODO: flatten xfermode | 973 SkXfermode::Mode mode = SkXfermode::kModulate_Mode; |
970 | 974 (void)xfer->asMode(&mode); |
| 975 fWriter.write32(mode); |
| 976 } |
971 if (indices && indexCount > 0) { | 977 if (indices && indexCount > 0) { |
972 fWriter.write32(indexCount); | 978 fWriter.write32(indexCount); |
973 fWriter.writePad(indices, indexCount * sizeof(uint16_t)); | 979 fWriter.writePad(indices, indexCount * sizeof(uint16_t)); |
974 } | 980 } |
975 } | 981 } |
976 } | 982 } |
977 | 983 |
978 void SkGPipeCanvas::drawData(const void* ptr, size_t size) { | 984 void SkGPipeCanvas::drawData(const void* ptr, size_t size) { |
979 if (size && ptr) { | 985 if (size && ptr) { |
980 NOTIFY_SETUP(this); | 986 NOTIFY_SETUP(this); |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1234 return fCanvas->shuttleBitmap(bitmap, slot); | 1240 return fCanvas->shuttleBitmap(bitmap, slot); |
1235 } | 1241 } |
1236 | 1242 |
1237 void BitmapShuttle::removeCanvas() { | 1243 void BitmapShuttle::removeCanvas() { |
1238 if (NULL == fCanvas) { | 1244 if (NULL == fCanvas) { |
1239 return; | 1245 return; |
1240 } | 1246 } |
1241 fCanvas->unref(); | 1247 fCanvas->unref(); |
1242 fCanvas = NULL; | 1248 fCanvas = NULL; |
1243 } | 1249 } |
OLD | NEW |