| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "config.h" | 5 #include "config.h" |
| 6 #include "platform/graphics/gpu/WebGLImageConversion.h" | 6 #include "platform/graphics/gpu/WebGLImageConversion.h" |
| 7 | 7 |
| 8 #include "platform/CheckedInt.h" | 8 #include "platform/CheckedInt.h" |
| 9 #include "platform/graphics/ImageObserver.h" | 9 #include "platform/graphics/ImageObserver.h" |
| 10 #include "platform/graphics/cpu/arm/WebGLImageConversionNEON.h" | 10 #include "platform/graphics/cpu/arm/WebGLImageConversionNEON.h" |
| 11 #include "platform/image-decoders/ImageDecoder.h" | 11 #include "platform/image-decoders/ImageDecoder.h" |
| 12 #include "wtf/OwnPtr.h" | 12 #include "wtf/OwnPtr.h" |
| 13 #include "wtf/PassOwnPtr.h" | 13 #include "wtf/PassOwnPtr.h" |
| 14 | 14 |
| 15 namespace blink { | 15 namespace blink { |
| 16 | 16 |
| 17 namespace { | 17 namespace { |
| 18 | 18 |
| 19 WebGLImageConversion::DataFormat getDataFormat(GLenum destinationFormat, GLenum
destinationType) | 19 WebGLImageConversion::DataFormat getDataFormat(GLenum destinationFormat, GLenum
destinationType) |
| 20 { | 20 { |
| 21 WebGLImageConversion::DataFormat dstFormat = WebGLImageConversion::DataForma
tRGBA8; | 21 WebGLImageConversion::DataFormat dstFormat = WebGLImageConversion::DataForma
tRGBA8; |
| 22 switch (destinationType) { | 22 switch (destinationType) { |
| 23 case GL_BYTE: |
| 24 switch (destinationFormat) { |
| 25 case GL_RED: |
| 26 case GL_RED_INTEGER: |
| 27 dstFormat = WebGLImageConversion::DataFormatR8_S; |
| 28 break; |
| 29 case GL_RG: |
| 30 case GL_RG_INTEGER: |
| 31 dstFormat = WebGLImageConversion::DataFormatRG8_S; |
| 32 break; |
| 33 case GL_RGB: |
| 34 case GL_RGB_INTEGER: |
| 35 dstFormat = WebGLImageConversion::DataFormatRGB8_S; |
| 36 break; |
| 37 case GL_RGBA: |
| 38 case GL_RGBA_INTEGER: |
| 39 dstFormat = WebGLImageConversion::DataFormatRGBA8_S; |
| 40 break; |
| 41 default: |
| 42 ASSERT_NOT_REACHED(); |
| 43 } |
| 44 break; |
| 23 case GL_UNSIGNED_BYTE: | 45 case GL_UNSIGNED_BYTE: |
| 24 switch (destinationFormat) { | 46 switch (destinationFormat) { |
| 25 case GL_RGB: | 47 case GL_RGB: |
| 48 case GL_RGB_INTEGER: |
| 26 case GL_SRGB_EXT: | 49 case GL_SRGB_EXT: |
| 27 dstFormat = WebGLImageConversion::DataFormatRGB8; | 50 dstFormat = WebGLImageConversion::DataFormatRGB8; |
| 28 break; | 51 break; |
| 29 case GL_RGBA: | 52 case GL_RGBA: |
| 53 case GL_RGBA_INTEGER: |
| 30 case GL_SRGB_ALPHA_EXT: | 54 case GL_SRGB_ALPHA_EXT: |
| 31 dstFormat = WebGLImageConversion::DataFormatRGBA8; | 55 dstFormat = WebGLImageConversion::DataFormatRGBA8; |
| 32 break; | 56 break; |
| 33 case GL_ALPHA: | 57 case GL_ALPHA: |
| 34 dstFormat = WebGLImageConversion::DataFormatA8; | 58 dstFormat = WebGLImageConversion::DataFormatA8; |
| 35 break; | 59 break; |
| 36 case GL_LUMINANCE: | 60 case GL_LUMINANCE: |
| 61 case GL_RED: |
| 62 case GL_RED_INTEGER: |
| 37 dstFormat = WebGLImageConversion::DataFormatR8; | 63 dstFormat = WebGLImageConversion::DataFormatR8; |
| 38 break; | 64 break; |
| 65 case GL_RG: |
| 66 case GL_RG_INTEGER: |
| 67 dstFormat = WebGLImageConversion::DataFormatRG8; |
| 68 break; |
| 39 case GL_LUMINANCE_ALPHA: | 69 case GL_LUMINANCE_ALPHA: |
| 40 dstFormat = WebGLImageConversion::DataFormatRA8; | 70 dstFormat = WebGLImageConversion::DataFormatRA8; |
| 41 break; | 71 break; |
| 42 default: | 72 default: |
| 43 ASSERT_NOT_REACHED(); | 73 ASSERT_NOT_REACHED(); |
| 44 } | 74 } |
| 45 break; | 75 break; |
| 46 case GL_UNSIGNED_SHORT_4_4_4_4: | 76 case GL_SHORT: |
| 47 dstFormat = WebGLImageConversion::DataFormatRGBA4444; | 77 switch (destinationFormat) { |
| 78 case GL_RED_INTEGER: |
| 79 dstFormat = WebGLImageConversion::DataFormatR16_S; |
| 80 break; |
| 81 case GL_RG_INTEGER: |
| 82 dstFormat = WebGLImageConversion::DataFormatRG16_S; |
| 83 break; |
| 84 case GL_RGB_INTEGER: |
| 85 dstFormat = WebGLImageConversion::DataFormatRGB16_S; |
| 86 case GL_RGBA_INTEGER: |
| 87 dstFormat = WebGLImageConversion::DataFormatRGBA16_S; |
| 88 default: |
| 89 ASSERT_NOT_REACHED(); |
| 90 } |
| 48 break; | 91 break; |
| 49 case GL_UNSIGNED_SHORT_5_5_5_1: | 92 case GL_UNSIGNED_SHORT: |
| 50 dstFormat = WebGLImageConversion::DataFormatRGBA5551; | 93 switch (destinationFormat) { |
| 94 case GL_RED_INTEGER: |
| 95 dstFormat = WebGLImageConversion::DataFormatR16; |
| 96 break; |
| 97 case GL_DEPTH_COMPONENT: |
| 98 dstFormat = WebGLImageConversion::DataFormatD16; |
| 99 break; |
| 100 case GL_RG_INTEGER: |
| 101 dstFormat = WebGLImageConversion::DataFormatRG16; |
| 102 break; |
| 103 case GL_RGB_INTEGER: |
| 104 dstFormat = WebGLImageConversion::DataFormatRGB16; |
| 105 break; |
| 106 case GL_RGBA_INTEGER: |
| 107 dstFormat = WebGLImageConversion::DataFormatRGBA16; |
| 108 break; |
| 109 default: |
| 110 ASSERT_NOT_REACHED(); |
| 111 } |
| 51 break; | 112 break; |
| 52 case GL_UNSIGNED_SHORT_5_6_5: | 113 case GL_INT: |
| 53 dstFormat = WebGLImageConversion::DataFormatRGB565; | 114 switch (destinationFormat) { |
| 115 case GL_RED_INTEGER: |
| 116 dstFormat = WebGLImageConversion::DataFormatR32_S; |
| 117 break; |
| 118 case GL_RG_INTEGER: |
| 119 dstFormat = WebGLImageConversion::DataFormatRG32_S; |
| 120 break; |
| 121 case GL_RGB_INTEGER: |
| 122 dstFormat = WebGLImageConversion::DataFormatRGB32_S; |
| 123 break; |
| 124 case GL_RGBA_INTEGER: |
| 125 dstFormat = WebGLImageConversion::DataFormatRGBA32_S; |
| 126 break; |
| 127 default: |
| 128 ASSERT_NOT_REACHED(); |
| 129 } |
| 130 break; |
| 131 case GL_UNSIGNED_INT: |
| 132 switch (destinationFormat) { |
| 133 case GL_RED_INTEGER: |
| 134 dstFormat = WebGLImageConversion::DataFormatR32; |
| 135 break; |
| 136 case GL_DEPTH_COMPONENT: |
| 137 dstFormat = WebGLImageConversion::DataFormatD32; |
| 138 break; |
| 139 case GL_RG_INTEGER: |
| 140 dstFormat = WebGLImageConversion::DataFormatRG32; |
| 141 break; |
| 142 case GL_RGB_INTEGER: |
| 143 dstFormat = WebGLImageConversion::DataFormatRGB32; |
| 144 break; |
| 145 case GL_RGBA_INTEGER: |
| 146 dstFormat = WebGLImageConversion::DataFormatRGBA32; |
| 147 break; |
| 148 default: |
| 149 ASSERT_NOT_REACHED(); |
| 150 } |
| 54 break; | 151 break; |
| 55 case GL_HALF_FLOAT_OES: // OES_texture_half_float | 152 case GL_HALF_FLOAT_OES: // OES_texture_half_float |
| 153 case GL_HALF_FLOAT: |
| 56 switch (destinationFormat) { | 154 switch (destinationFormat) { |
| 155 case GL_RGBA: |
| 156 dstFormat = WebGLImageConversion::DataFormatRGBA16F; |
| 157 break; |
| 57 case GL_RGB: | 158 case GL_RGB: |
| 58 dstFormat = WebGLImageConversion::DataFormatRGB16F; | 159 dstFormat = WebGLImageConversion::DataFormatRGB16F; |
| 59 break; | 160 break; |
| 60 case GL_RGBA: | 161 case GL_RG: |
| 61 dstFormat = WebGLImageConversion::DataFormatRGBA16F; | 162 dstFormat = WebGLImageConversion::DataFormatRG16F; |
| 62 break; | 163 break; |
| 63 case GL_ALPHA: | 164 case GL_ALPHA: |
| 64 dstFormat = WebGLImageConversion::DataFormatA16F; | 165 dstFormat = WebGLImageConversion::DataFormatA16F; |
| 65 break; | 166 break; |
| 66 case GL_LUMINANCE: | 167 case GL_LUMINANCE: |
| 168 case GL_RED: |
| 67 dstFormat = WebGLImageConversion::DataFormatR16F; | 169 dstFormat = WebGLImageConversion::DataFormatR16F; |
| 68 break; | 170 break; |
| 69 case GL_LUMINANCE_ALPHA: | 171 case GL_LUMINANCE_ALPHA: |
| 70 dstFormat = WebGLImageConversion::DataFormatRA16F; | 172 dstFormat = WebGLImageConversion::DataFormatRA16F; |
| 71 break; | 173 break; |
| 72 default: | 174 default: |
| 73 ASSERT_NOT_REACHED(); | 175 ASSERT_NOT_REACHED(); |
| 74 } | 176 } |
| 75 break; | 177 break; |
| 76 case GL_FLOAT: // OES_texture_float | 178 case GL_FLOAT: // OES_texture_float |
| 77 switch (destinationFormat) { | 179 switch (destinationFormat) { |
| 180 case GL_RGBA: |
| 181 dstFormat = WebGLImageConversion::DataFormatRGBA32F; |
| 182 break; |
| 78 case GL_RGB: | 183 case GL_RGB: |
| 79 dstFormat = WebGLImageConversion::DataFormatRGB32F; | 184 dstFormat = WebGLImageConversion::DataFormatRGB32F; |
| 80 break; | 185 break; |
| 81 case GL_RGBA: | 186 case GL_RG: |
| 82 dstFormat = WebGLImageConversion::DataFormatRGBA32F; | 187 dstFormat = WebGLImageConversion::DataFormatRG32F; |
| 83 break; | 188 break; |
| 84 case GL_ALPHA: | 189 case GL_ALPHA: |
| 85 dstFormat = WebGLImageConversion::DataFormatA32F; | 190 dstFormat = WebGLImageConversion::DataFormatA32F; |
| 86 break; | 191 break; |
| 87 case GL_LUMINANCE: | 192 case GL_LUMINANCE: |
| 193 case GL_RED: |
| 88 dstFormat = WebGLImageConversion::DataFormatR32F; | 194 dstFormat = WebGLImageConversion::DataFormatR32F; |
| 89 break; | 195 break; |
| 196 case GL_DEPTH_COMPONENT: |
| 197 dstFormat = WebGLImageConversion::DataFormatD32F; |
| 198 break; |
| 90 case GL_LUMINANCE_ALPHA: | 199 case GL_LUMINANCE_ALPHA: |
| 91 dstFormat = WebGLImageConversion::DataFormatRA32F; | 200 dstFormat = WebGLImageConversion::DataFormatRA32F; |
| 92 break; | 201 break; |
| 93 default: | 202 default: |
| 94 ASSERT_NOT_REACHED(); | 203 ASSERT_NOT_REACHED(); |
| 95 } | 204 } |
| 96 break; | 205 break; |
| 206 case GL_UNSIGNED_SHORT_4_4_4_4: |
| 207 dstFormat = WebGLImageConversion::DataFormatRGBA4444; |
| 208 break; |
| 209 case GL_UNSIGNED_SHORT_5_5_5_1: |
| 210 dstFormat = WebGLImageConversion::DataFormatRGBA5551; |
| 211 break; |
| 212 case GL_UNSIGNED_SHORT_5_6_5: |
| 213 dstFormat = WebGLImageConversion::DataFormatRGB565; |
| 214 break; |
| 215 case GL_UNSIGNED_INT_24_8: |
| 216 dstFormat = WebGLImageConversion::DataFormatDS24_8; |
| 217 break; |
| 218 case GL_UNSIGNED_INT_10F_11F_11F_REV: |
| 219 dstFormat = WebGLImageConversion::DataFormatRGB10F11F11F; |
| 220 break; |
| 221 case GL_UNSIGNED_INT_2_10_10_10_REV: |
| 222 dstFormat = WebGLImageConversion::DataFormatRGBA2_10_10_10; |
| 223 break; |
| 97 default: | 224 default: |
| 98 ASSERT_NOT_REACHED(); | 225 ASSERT_NOT_REACHED(); |
| 99 } | 226 } |
| 100 return dstFormat; | 227 return dstFormat; |
| 101 } | 228 } |
| 102 | 229 |
| 103 // Following Float to Half-Float converion code is from the implementation of ft
p://www.fox-toolkit.org/pub/fasthalffloatconversion.pdf, | 230 // Following Float to Half-Float converion code is from the implementation of ft
p://www.fox-toolkit.org/pub/fasthalffloatconversion.pdf, |
| 104 // "Fast Half Float Conversions" by Jeroen van der Zijp, November 2008 (Revised
September 2010). | 231 // "Fast Half Float Conversions" by Jeroen van der Zijp, November 2008 (Revised
September 2010). |
| 105 // Specially, the basetable[512] and shifttable[512] are generated as follows: | 232 // Specially, the basetable[512] and shifttable[512] are generated as follows: |
| 106 /* | 233 /* |
| (...skipping 1109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1216 | 1343 |
| 1217 template<int Format> | 1344 template<int Format> |
| 1218 struct IntermediateFormat { | 1345 struct IntermediateFormat { |
| 1219 static const int Value = (IsFloatFormat<Format>::Value || IsHalfFloatFormat<
Format>::Value) ? WebGLImageConversion::DataFormatRGBA32F : WebGLImageConversion
::DataFormatRGBA8; | 1346 static const int Value = (IsFloatFormat<Format>::Value || IsHalfFloatFormat<
Format>::Value) ? WebGLImageConversion::DataFormatRGBA32F : WebGLImageConversion
::DataFormatRGBA8; |
| 1220 }; | 1347 }; |
| 1221 | 1348 |
| 1222 unsigned TexelBytesForFormat(WebGLImageConversion::DataFormat format) | 1349 unsigned TexelBytesForFormat(WebGLImageConversion::DataFormat format) |
| 1223 { | 1350 { |
| 1224 switch (format) { | 1351 switch (format) { |
| 1225 case WebGLImageConversion::DataFormatR8: | 1352 case WebGLImageConversion::DataFormatR8: |
| 1353 case WebGLImageConversion::DataFormatR8_S: |
| 1226 case WebGLImageConversion::DataFormatA8: | 1354 case WebGLImageConversion::DataFormatA8: |
| 1227 return 1; | 1355 return 1; |
| 1356 case WebGLImageConversion::DataFormatRG8: |
| 1357 case WebGLImageConversion::DataFormatRG8_S: |
| 1228 case WebGLImageConversion::DataFormatRA8: | 1358 case WebGLImageConversion::DataFormatRA8: |
| 1229 case WebGLImageConversion::DataFormatAR8: | 1359 case WebGLImageConversion::DataFormatAR8: |
| 1230 case WebGLImageConversion::DataFormatRGBA5551: | 1360 case WebGLImageConversion::DataFormatRGBA5551: |
| 1231 case WebGLImageConversion::DataFormatRGBA4444: | 1361 case WebGLImageConversion::DataFormatRGBA4444: |
| 1232 case WebGLImageConversion::DataFormatRGB565: | 1362 case WebGLImageConversion::DataFormatRGB565: |
| 1233 case WebGLImageConversion::DataFormatA16F: | 1363 case WebGLImageConversion::DataFormatA16F: |
| 1364 case WebGLImageConversion::DataFormatR16: |
| 1365 case WebGLImageConversion::DataFormatR16_S: |
| 1234 case WebGLImageConversion::DataFormatR16F: | 1366 case WebGLImageConversion::DataFormatR16F: |
| 1367 case WebGLImageConversion::DataFormatD16: |
| 1235 return 2; | 1368 return 2; |
| 1236 case WebGLImageConversion::DataFormatRGB8: | 1369 case WebGLImageConversion::DataFormatRGB8: |
| 1370 case WebGLImageConversion::DataFormatRGB8_S: |
| 1237 case WebGLImageConversion::DataFormatBGR8: | 1371 case WebGLImageConversion::DataFormatBGR8: |
| 1238 return 3; | 1372 return 3; |
| 1239 case WebGLImageConversion::DataFormatRGBA8: | 1373 case WebGLImageConversion::DataFormatRGBA8: |
| 1374 case WebGLImageConversion::DataFormatRGBA8_S: |
| 1240 case WebGLImageConversion::DataFormatARGB8: | 1375 case WebGLImageConversion::DataFormatARGB8: |
| 1241 case WebGLImageConversion::DataFormatABGR8: | 1376 case WebGLImageConversion::DataFormatABGR8: |
| 1242 case WebGLImageConversion::DataFormatBGRA8: | 1377 case WebGLImageConversion::DataFormatBGRA8: |
| 1378 case WebGLImageConversion::DataFormatR32: |
| 1379 case WebGLImageConversion::DataFormatR32_S: |
| 1243 case WebGLImageConversion::DataFormatR32F: | 1380 case WebGLImageConversion::DataFormatR32F: |
| 1244 case WebGLImageConversion::DataFormatA32F: | 1381 case WebGLImageConversion::DataFormatA32F: |
| 1245 case WebGLImageConversion::DataFormatRA16F: | 1382 case WebGLImageConversion::DataFormatRA16F: |
| 1383 case WebGLImageConversion::DataFormatRGBA2_10_10_10: |
| 1384 case WebGLImageConversion::DataFormatRGB10F11F11F: |
| 1385 case WebGLImageConversion::DataFormatRG16: |
| 1386 case WebGLImageConversion::DataFormatRG16_S: |
| 1387 case WebGLImageConversion::DataFormatRG16F: |
| 1388 case WebGLImageConversion::DataFormatD32: |
| 1389 case WebGLImageConversion::DataFormatD32F: |
| 1390 case WebGLImageConversion::DataFormatDS24_8: |
| 1246 return 4; | 1391 return 4; |
| 1392 case WebGLImageConversion::DataFormatRGB16: |
| 1393 case WebGLImageConversion::DataFormatRGB16_S: |
| 1247 case WebGLImageConversion::DataFormatRGB16F: | 1394 case WebGLImageConversion::DataFormatRGB16F: |
| 1248 return 6; | 1395 return 6; |
| 1396 case WebGLImageConversion::DataFormatRGBA16: |
| 1397 case WebGLImageConversion::DataFormatRGBA16_S: |
| 1249 case WebGLImageConversion::DataFormatRA32F: | 1398 case WebGLImageConversion::DataFormatRA32F: |
| 1250 case WebGLImageConversion::DataFormatRGBA16F: | 1399 case WebGLImageConversion::DataFormatRGBA16F: |
| 1400 case WebGLImageConversion::DataFormatRG32: |
| 1401 case WebGLImageConversion::DataFormatRG32_S: |
| 1402 case WebGLImageConversion::DataFormatRG32F: |
| 1251 return 8; | 1403 return 8; |
| 1404 case WebGLImageConversion::DataFormatRGB32: |
| 1405 case WebGLImageConversion::DataFormatRGB32_S: |
| 1252 case WebGLImageConversion::DataFormatRGB32F: | 1406 case WebGLImageConversion::DataFormatRGB32F: |
| 1253 return 12; | 1407 return 12; |
| 1408 case WebGLImageConversion::DataFormatRGBA32: |
| 1409 case WebGLImageConversion::DataFormatRGBA32_S: |
| 1254 case WebGLImageConversion::DataFormatRGBA32F: | 1410 case WebGLImageConversion::DataFormatRGBA32F: |
| 1255 return 16; | 1411 return 16; |
| 1256 default: | 1412 default: |
| 1257 return 0; | 1413 return 0; |
| 1258 } | 1414 } |
| 1259 } | 1415 } |
| 1260 | 1416 |
| 1261 /* END CODE SHARED WITH MOZILLA FIREFOX */ | 1417 /* END CODE SHARED WITH MOZILLA FIREFOX */ |
| 1262 | 1418 |
| 1263 class FormatConverter { | 1419 class FormatConverter { |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1440 return; | 1596 return; |
| 1441 } | 1597 } |
| 1442 | 1598 |
| 1443 } // anonymous namespace | 1599 } // anonymous namespace |
| 1444 | 1600 |
| 1445 bool WebGLImageConversion::computeFormatAndTypeParameters(GLenum format, GLenum
type, unsigned* componentsPerPixel, unsigned* bytesPerComponent) | 1601 bool WebGLImageConversion::computeFormatAndTypeParameters(GLenum format, GLenum
type, unsigned* componentsPerPixel, unsigned* bytesPerComponent) |
| 1446 { | 1602 { |
| 1447 switch (format) { | 1603 switch (format) { |
| 1448 case GL_ALPHA: | 1604 case GL_ALPHA: |
| 1449 case GL_LUMINANCE: | 1605 case GL_LUMINANCE: |
| 1606 case GL_RED: |
| 1607 case GL_RED_INTEGER: |
| 1450 case GL_DEPTH_COMPONENT: | 1608 case GL_DEPTH_COMPONENT: |
| 1451 case GL_DEPTH_STENCIL_OES: | 1609 case GL_DEPTH_STENCIL: // Treat it as one component. |
| 1452 *componentsPerPixel = 1; | 1610 *componentsPerPixel = 1; |
| 1453 break; | 1611 break; |
| 1454 case GL_LUMINANCE_ALPHA: | 1612 case GL_LUMINANCE_ALPHA: |
| 1613 case GL_RG: |
| 1614 case GL_RG_INTEGER: |
| 1455 *componentsPerPixel = 2; | 1615 *componentsPerPixel = 2; |
| 1456 break; | 1616 break; |
| 1457 case GL_RGB: | 1617 case GL_RGB: |
| 1618 case GL_RGB_INTEGER: |
| 1458 case GL_SRGB_EXT: // GL_EXT_sRGB | 1619 case GL_SRGB_EXT: // GL_EXT_sRGB |
| 1459 *componentsPerPixel = 3; | 1620 *componentsPerPixel = 3; |
| 1460 break; | 1621 break; |
| 1461 case GL_RGBA: | 1622 case GL_RGBA: |
| 1623 case GL_RGBA_INTEGER: |
| 1462 case GL_BGRA_EXT: // GL_EXT_texture_format_BGRA8888 | 1624 case GL_BGRA_EXT: // GL_EXT_texture_format_BGRA8888 |
| 1463 case GL_SRGB_ALPHA_EXT: // GL_EXT_sRGB | 1625 case GL_SRGB_ALPHA_EXT: // GL_EXT_sRGB |
| 1464 *componentsPerPixel = 4; | 1626 *componentsPerPixel = 4; |
| 1465 break; | 1627 break; |
| 1466 default: | 1628 default: |
| 1467 return false; | 1629 return false; |
| 1468 } | 1630 } |
| 1469 switch (type) { | 1631 switch (type) { |
| 1632 case GL_BYTE: |
| 1633 *bytesPerComponent = sizeof(GLbyte); |
| 1634 break; |
| 1470 case GL_UNSIGNED_BYTE: | 1635 case GL_UNSIGNED_BYTE: |
| 1471 *bytesPerComponent = sizeof(GLubyte); | 1636 *bytesPerComponent = sizeof(GLubyte); |
| 1472 break; | 1637 break; |
| 1638 case GL_SHORT: |
| 1639 *bytesPerComponent = sizeof(GLshort); |
| 1640 break; |
| 1473 case GL_UNSIGNED_SHORT: | 1641 case GL_UNSIGNED_SHORT: |
| 1474 *bytesPerComponent = sizeof(GLushort); | 1642 *bytesPerComponent = sizeof(GLushort); |
| 1475 break; | 1643 break; |
| 1476 case GL_UNSIGNED_SHORT_5_6_5: | 1644 case GL_UNSIGNED_SHORT_5_6_5: |
| 1477 case GL_UNSIGNED_SHORT_4_4_4_4: | 1645 case GL_UNSIGNED_SHORT_4_4_4_4: |
| 1478 case GL_UNSIGNED_SHORT_5_5_5_1: | 1646 case GL_UNSIGNED_SHORT_5_5_5_1: |
| 1479 *componentsPerPixel = 1; | 1647 *componentsPerPixel = 1; |
| 1480 *bytesPerComponent = sizeof(GLushort); | 1648 *bytesPerComponent = sizeof(GLushort); |
| 1481 break; | 1649 break; |
| 1650 case GL_INT: |
| 1651 *bytesPerComponent = sizeof(GLint); |
| 1652 break; |
| 1653 case GL_UNSIGNED_INT: |
| 1654 *bytesPerComponent = sizeof(GLuint); |
| 1655 break; |
| 1482 case GL_UNSIGNED_INT_24_8_OES: | 1656 case GL_UNSIGNED_INT_24_8_OES: |
| 1483 case GL_UNSIGNED_INT: | 1657 case GL_UNSIGNED_INT_10F_11F_11F_REV: |
| 1658 case GL_UNSIGNED_INT_5_9_9_9_REV: |
| 1659 case GL_UNSIGNED_INT_2_10_10_10_REV: |
| 1660 *componentsPerPixel = 1; |
| 1484 *bytesPerComponent = sizeof(GLuint); | 1661 *bytesPerComponent = sizeof(GLuint); |
| 1485 break; | 1662 break; |
| 1486 case GL_FLOAT: // OES_texture_float | 1663 case GL_FLOAT: // OES_texture_float |
| 1487 *bytesPerComponent = sizeof(GLfloat); | 1664 *bytesPerComponent = sizeof(GLfloat); |
| 1488 break; | 1665 break; |
| 1666 case GL_HALF_FLOAT: |
| 1489 case GL_HALF_FLOAT_OES: // OES_texture_half_float | 1667 case GL_HALF_FLOAT_OES: // OES_texture_half_float |
| 1490 *bytesPerComponent = sizeof(GLushort); | 1668 *bytesPerComponent = sizeof(GLushort); |
| 1491 break; | 1669 break; |
| 1492 default: | 1670 default: |
| 1493 return false; | 1671 return false; |
| 1494 } | 1672 } |
| 1495 return true; | 1673 return true; |
| 1496 } | 1674 } |
| 1497 | 1675 |
| 1498 GLenum WebGLImageConversion::computeImageSizeInBytes(GLenum format, GLenum type,
GLsizei width, GLsizei height, GLint alignment, unsigned* imageSizeInBytes, uns
igned* paddingInBytes) | 1676 GLenum WebGLImageConversion::computeImageSizeInBytes(GLenum format, GLenum type,
GLsizei width, GLsizei height, GLint alignment, unsigned* imageSizeInBytes, uns
igned* paddingInBytes) |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1596 if (m_imageWidth != (unsigned)m_image->size().width() || m_imageHeight != (u
nsigned)m_image->size().height()) { | 1774 if (m_imageWidth != (unsigned)m_image->size().width() || m_imageHeight != (u
nsigned)m_image->size().height()) { |
| 1597 m_skiaBitmap.reset(); | 1775 m_skiaBitmap.reset(); |
| 1598 return false; | 1776 return false; |
| 1599 } | 1777 } |
| 1600 m_imageSourceUnpackAlignment = 0; | 1778 m_imageSourceUnpackAlignment = 0; |
| 1601 m_skiaBitmap.lockPixels(); | 1779 m_skiaBitmap.lockPixels(); |
| 1602 m_imagePixelData = m_skiaBitmap.getPixels(); | 1780 m_imagePixelData = m_skiaBitmap.getPixels(); |
| 1603 return true; | 1781 return true; |
| 1604 } | 1782 } |
| 1605 | 1783 |
| 1606 unsigned WebGLImageConversion::getClearBitsByFormat(GLenum format) | |
| 1607 { | |
| 1608 switch (format) { | |
| 1609 case GL_ALPHA: | |
| 1610 case GL_LUMINANCE: | |
| 1611 case GL_LUMINANCE_ALPHA: | |
| 1612 case GL_RGB: | |
| 1613 case GL_RGB565: | |
| 1614 case GL_RGBA: | |
| 1615 case GL_RGBA4: | |
| 1616 case GL_RGB5_A1: | |
| 1617 case GL_SRGB_EXT: | |
| 1618 case GL_SRGB_ALPHA_EXT: | |
| 1619 return GL_COLOR_BUFFER_BIT; | |
| 1620 case GL_DEPTH_COMPONENT16: | |
| 1621 case GL_DEPTH_COMPONENT: | |
| 1622 return GL_DEPTH_BUFFER_BIT; | |
| 1623 case GL_STENCIL_INDEX8: | |
| 1624 return GL_STENCIL_BUFFER_BIT; | |
| 1625 case GL_DEPTH_STENCIL_OES: | |
| 1626 return GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT; | |
| 1627 default: | |
| 1628 return 0; | |
| 1629 } | |
| 1630 } | |
| 1631 | |
| 1632 unsigned WebGLImageConversion::getChannelBitsByFormat(GLenum format) | 1784 unsigned WebGLImageConversion::getChannelBitsByFormat(GLenum format) |
| 1633 { | 1785 { |
| 1634 switch (format) { | 1786 switch (format) { |
| 1635 case GL_ALPHA: | 1787 case GL_ALPHA: |
| 1636 return ChannelAlpha; | 1788 return ChannelAlpha; |
| 1789 case GL_RED: |
| 1790 case GL_RED_INTEGER: |
| 1791 case GL_R8: |
| 1792 case GL_R8_SNORM: |
| 1793 case GL_R8UI: |
| 1794 case GL_R8I: |
| 1795 case GL_R16UI: |
| 1796 case GL_R16I: |
| 1797 case GL_R32UI: |
| 1798 case GL_R32I: |
| 1799 case GL_R16F: |
| 1800 case GL_R32F: |
| 1801 return ChannelRed; |
| 1802 case GL_RG: |
| 1803 case GL_RG_INTEGER: |
| 1804 case GL_RG8: |
| 1805 case GL_RG8_SNORM: |
| 1806 case GL_RG8UI: |
| 1807 case GL_RG8I: |
| 1808 case GL_RG16UI: |
| 1809 case GL_RG16I: |
| 1810 case GL_RG32UI: |
| 1811 case GL_RG32I: |
| 1812 case GL_RG16F: |
| 1813 case GL_RG32F: |
| 1814 return ChannelRG; |
| 1637 case GL_LUMINANCE: | 1815 case GL_LUMINANCE: |
| 1638 return ChannelRGB; | 1816 return ChannelRGB; |
| 1639 case GL_LUMINANCE_ALPHA: | 1817 case GL_LUMINANCE_ALPHA: |
| 1640 return ChannelRGBA; | 1818 return ChannelRGBA; |
| 1641 case GL_RGB: | 1819 case GL_RGB: |
| 1820 case GL_RGB_INTEGER: |
| 1821 case GL_RGB8: |
| 1822 case GL_RGB8_SNORM: |
| 1823 case GL_RGB8UI: |
| 1824 case GL_RGB8I: |
| 1825 case GL_RGB16UI: |
| 1826 case GL_RGB16I: |
| 1827 case GL_RGB32UI: |
| 1828 case GL_RGB32I: |
| 1829 case GL_RGB16F: |
| 1830 case GL_RGB32F: |
| 1642 case GL_RGB565: | 1831 case GL_RGB565: |
| 1832 case GL_R11F_G11F_B10F: |
| 1833 case GL_RGB9_E5: |
| 1643 case GL_SRGB_EXT: | 1834 case GL_SRGB_EXT: |
| 1835 case GL_SRGB8: |
| 1644 return ChannelRGB; | 1836 return ChannelRGB; |
| 1645 case GL_RGBA: | 1837 case GL_RGBA: |
| 1838 case GL_RGBA_INTEGER: |
| 1839 case GL_RGBA8: |
| 1840 case GL_RGBA8_SNORM: |
| 1841 case GL_RGBA8UI: |
| 1842 case GL_RGBA8I: |
| 1843 case GL_RGBA16UI: |
| 1844 case GL_RGBA16I: |
| 1845 case GL_RGBA32UI: |
| 1846 case GL_RGBA32I: |
| 1847 case GL_RGBA16F: |
| 1848 case GL_RGBA32F: |
| 1646 case GL_RGBA4: | 1849 case GL_RGBA4: |
| 1647 case GL_RGB5_A1: | 1850 case GL_RGB5_A1: |
| 1851 case GL_RGB10_A2: |
| 1852 case GL_RGB10_A2UI: |
| 1648 case GL_SRGB_ALPHA_EXT: | 1853 case GL_SRGB_ALPHA_EXT: |
| 1854 case GL_SRGB8_ALPHA8: |
| 1649 return ChannelRGBA; | 1855 return ChannelRGBA; |
| 1856 case GL_DEPTH_COMPONENT: |
| 1650 case GL_DEPTH_COMPONENT16: | 1857 case GL_DEPTH_COMPONENT16: |
| 1651 case GL_DEPTH_COMPONENT: | 1858 case GL_DEPTH_COMPONENT24: |
| 1859 case GL_DEPTH_COMPONENT32F: |
| 1652 return ChannelDepth; | 1860 return ChannelDepth; |
| 1861 case GL_STENCIL: |
| 1653 case GL_STENCIL_INDEX8: | 1862 case GL_STENCIL_INDEX8: |
| 1654 return ChannelStencil; | 1863 return ChannelStencil; |
| 1655 case GL_DEPTH_STENCIL_OES: | 1864 case GL_DEPTH_STENCIL: |
| 1656 return ChannelDepth | ChannelStencil; | 1865 case GL_DEPTH24_STENCIL8: |
| 1866 case GL_DEPTH32F_STENCIL8: |
| 1867 return ChannelDepthStencil; |
| 1657 default: | 1868 default: |
| 1658 return 0; | 1869 return 0; |
| 1659 } | 1870 } |
| 1660 } | 1871 } |
| 1661 | 1872 |
| 1662 bool WebGLImageConversion::packImageData( | 1873 bool WebGLImageConversion::packImageData( |
| 1663 Image* image, | 1874 Image* image, |
| 1664 const void* pixels, | 1875 const void* pixels, |
| 1665 GLenum format, | 1876 GLenum format, |
| 1666 GLenum type, | 1877 GLenum type, |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1778 } | 1989 } |
| 1779 | 1990 |
| 1780 FormatConverter converter(width, height, sourceData, destinationData, srcStr
ide, dstStride); | 1991 FormatConverter converter(width, height, sourceData, destinationData, srcStr
ide, dstStride); |
| 1781 converter.convert(sourceDataFormat, dstDataFormat, alphaOp); | 1992 converter.convert(sourceDataFormat, dstDataFormat, alphaOp); |
| 1782 if (!converter.Success()) | 1993 if (!converter.Success()) |
| 1783 return false; | 1994 return false; |
| 1784 return true; | 1995 return true; |
| 1785 } | 1996 } |
| 1786 | 1997 |
| 1787 } // namespace blink | 1998 } // namespace blink |
| OLD | NEW |