Chromium Code Reviews| 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); | |
|
Ken Russell (switch to Gerrit)
2015/06/05 22:42:10
I think this removal is wrong. The packed UNSIGNED
Zhenyao Mo
2015/06/05 22:48:49
Done.
| |
| 1475 break; | |
| 1476 case GL_UNSIGNED_SHORT_5_6_5: | 1642 case GL_UNSIGNED_SHORT_5_6_5: |
| 1477 case GL_UNSIGNED_SHORT_4_4_4_4: | 1643 case GL_UNSIGNED_SHORT_4_4_4_4: |
| 1478 case GL_UNSIGNED_SHORT_5_5_5_1: | 1644 case GL_UNSIGNED_SHORT_5_5_5_1: |
| 1479 *componentsPerPixel = 1; | 1645 *componentsPerPixel = 1; |
| 1480 *bytesPerComponent = sizeof(GLushort); | 1646 *bytesPerComponent = sizeof(GLushort); |
| 1481 break; | 1647 break; |
| 1648 case GL_INT: | |
| 1649 *bytesPerComponent = sizeof(GLint); | |
| 1650 break; | |
| 1651 case GL_UNSIGNED_INT: | |
| 1482 case GL_UNSIGNED_INT_24_8_OES: | 1652 case GL_UNSIGNED_INT_24_8_OES: |
| 1483 case GL_UNSIGNED_INT: | 1653 case GL_UNSIGNED_INT_10F_11F_11F_REV: |
| 1654 case GL_UNSIGNED_INT_5_9_9_9_REV: | |
| 1655 case GL_UNSIGNED_INT_2_10_10_10_REV: | |
|
Ken Russell (switch to Gerrit)
2015/06/05 22:42:10
I think these new packed integer types need to set
Zhenyao Mo
2015/06/05 22:48:49
Done.
| |
| 1484 *bytesPerComponent = sizeof(GLuint); | 1656 *bytesPerComponent = sizeof(GLuint); |
| 1485 break; | 1657 break; |
| 1486 case GL_FLOAT: // OES_texture_float | 1658 case GL_FLOAT: // OES_texture_float |
| 1487 *bytesPerComponent = sizeof(GLfloat); | 1659 *bytesPerComponent = sizeof(GLfloat); |
| 1488 break; | 1660 break; |
| 1661 case GL_HALF_FLOAT: | |
| 1489 case GL_HALF_FLOAT_OES: // OES_texture_half_float | 1662 case GL_HALF_FLOAT_OES: // OES_texture_half_float |
| 1490 *bytesPerComponent = sizeof(GLushort); | 1663 *bytesPerComponent = sizeof(GLushort); |
| 1491 break; | 1664 break; |
| 1492 default: | 1665 default: |
| 1493 return false; | 1666 return false; |
| 1494 } | 1667 } |
| 1495 return true; | 1668 return true; |
| 1496 } | 1669 } |
| 1497 | 1670 |
| 1498 GLenum WebGLImageConversion::computeImageSizeInBytes(GLenum format, GLenum type, GLsizei width, GLsizei height, GLint alignment, unsigned* imageSizeInBytes, uns igned* paddingInBytes) | 1671 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()) { | 1769 if (m_imageWidth != (unsigned)m_image->size().width() || m_imageHeight != (u nsigned)m_image->size().height()) { |
| 1597 m_skiaBitmap.reset(); | 1770 m_skiaBitmap.reset(); |
| 1598 return false; | 1771 return false; |
| 1599 } | 1772 } |
| 1600 m_imageSourceUnpackAlignment = 0; | 1773 m_imageSourceUnpackAlignment = 0; |
| 1601 m_skiaBitmap.lockPixels(); | 1774 m_skiaBitmap.lockPixels(); |
| 1602 m_imagePixelData = m_skiaBitmap.getPixels(); | 1775 m_imagePixelData = m_skiaBitmap.getPixels(); |
| 1603 return true; | 1776 return true; |
| 1604 } | 1777 } |
| 1605 | 1778 |
| 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) | 1779 unsigned WebGLImageConversion::getChannelBitsByFormat(GLenum format) |
| 1633 { | 1780 { |
| 1634 switch (format) { | 1781 switch (format) { |
| 1635 case GL_ALPHA: | 1782 case GL_ALPHA: |
| 1636 return ChannelAlpha; | 1783 return ChannelAlpha; |
| 1784 case GL_RED: | |
| 1785 case GL_RED_INTEGER: | |
| 1786 case GL_R8: | |
| 1787 case GL_R8_SNORM: | |
| 1788 case GL_R8UI: | |
| 1789 case GL_R8I: | |
| 1790 case GL_R16UI: | |
| 1791 case GL_R16I: | |
| 1792 case GL_R32UI: | |
| 1793 case GL_R32I: | |
| 1794 case GL_R16F: | |
| 1795 case GL_R32F: | |
| 1796 return ChannelRed; | |
| 1797 case GL_RG: | |
| 1798 case GL_RG_INTEGER: | |
| 1799 case GL_RG8: | |
| 1800 case GL_RG8_SNORM: | |
| 1801 case GL_RG8UI: | |
| 1802 case GL_RG8I: | |
| 1803 case GL_RG16UI: | |
| 1804 case GL_RG16I: | |
| 1805 case GL_RG32UI: | |
| 1806 case GL_RG32I: | |
| 1807 case GL_RG16F: | |
| 1808 case GL_RG32F: | |
| 1809 return ChannelRG; | |
| 1637 case GL_LUMINANCE: | 1810 case GL_LUMINANCE: |
| 1638 return ChannelRGB; | 1811 return ChannelRGB; |
| 1639 case GL_LUMINANCE_ALPHA: | 1812 case GL_LUMINANCE_ALPHA: |
| 1640 return ChannelRGBA; | 1813 return ChannelRGBA; |
| 1641 case GL_RGB: | 1814 case GL_RGB: |
| 1815 case GL_RGB_INTEGER: | |
| 1816 case GL_RGB8: | |
| 1817 case GL_RGB8_SNORM: | |
| 1818 case GL_RGB8UI: | |
| 1819 case GL_RGB8I: | |
| 1820 case GL_RGB16UI: | |
| 1821 case GL_RGB16I: | |
| 1822 case GL_RGB32UI: | |
| 1823 case GL_RGB32I: | |
| 1824 case GL_RGB16F: | |
| 1825 case GL_RGB32F: | |
| 1642 case GL_RGB565: | 1826 case GL_RGB565: |
| 1827 case GL_R11F_G11F_B10F: | |
| 1828 case GL_RGB9_E5: | |
| 1643 case GL_SRGB_EXT: | 1829 case GL_SRGB_EXT: |
| 1830 case GL_SRGB8: | |
| 1644 return ChannelRGB; | 1831 return ChannelRGB; |
| 1645 case GL_RGBA: | 1832 case GL_RGBA: |
| 1833 case GL_RGBA_INTEGER: | |
| 1834 case GL_RGBA8: | |
| 1835 case GL_RGBA8_SNORM: | |
| 1836 case GL_RGBA8UI: | |
| 1837 case GL_RGBA8I: | |
| 1838 case GL_RGBA16UI: | |
| 1839 case GL_RGBA16I: | |
| 1840 case GL_RGBA32UI: | |
| 1841 case GL_RGBA32I: | |
| 1842 case GL_RGBA16F: | |
| 1843 case GL_RGBA32F: | |
| 1646 case GL_RGBA4: | 1844 case GL_RGBA4: |
| 1647 case GL_RGB5_A1: | 1845 case GL_RGB5_A1: |
| 1846 case GL_RGB10_A2: | |
| 1847 case GL_RGB10_A2UI: | |
| 1648 case GL_SRGB_ALPHA_EXT: | 1848 case GL_SRGB_ALPHA_EXT: |
| 1849 case GL_SRGB8_ALPHA8: | |
| 1649 return ChannelRGBA; | 1850 return ChannelRGBA; |
| 1851 case GL_DEPTH_COMPONENT: | |
| 1650 case GL_DEPTH_COMPONENT16: | 1852 case GL_DEPTH_COMPONENT16: |
| 1651 case GL_DEPTH_COMPONENT: | 1853 case GL_DEPTH_COMPONENT24: |
| 1854 case GL_DEPTH_COMPONENT32F: | |
| 1652 return ChannelDepth; | 1855 return ChannelDepth; |
| 1856 case GL_STENCIL: | |
| 1653 case GL_STENCIL_INDEX8: | 1857 case GL_STENCIL_INDEX8: |
| 1654 return ChannelStencil; | 1858 return ChannelStencil; |
| 1655 case GL_DEPTH_STENCIL_OES: | 1859 case GL_DEPTH_STENCIL: |
| 1656 return ChannelDepth | ChannelStencil; | 1860 case GL_DEPTH24_STENCIL8: |
| 1861 case GL_DEPTH32F_STENCIL8: | |
| 1862 return ChannelDepthStencil; | |
| 1657 default: | 1863 default: |
| 1658 return 0; | 1864 return 0; |
| 1659 } | 1865 } |
| 1660 } | 1866 } |
| 1661 | 1867 |
| 1662 bool WebGLImageConversion::packImageData( | 1868 bool WebGLImageConversion::packImageData( |
| 1663 Image* image, | 1869 Image* image, |
| 1664 const void* pixels, | 1870 const void* pixels, |
| 1665 GLenum format, | 1871 GLenum format, |
| 1666 GLenum type, | 1872 GLenum type, |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1778 } | 1984 } |
| 1779 | 1985 |
| 1780 FormatConverter converter(width, height, sourceData, destinationData, srcStr ide, dstStride); | 1986 FormatConverter converter(width, height, sourceData, destinationData, srcStr ide, dstStride); |
| 1781 converter.convert(sourceDataFormat, dstDataFormat, alphaOp); | 1987 converter.convert(sourceDataFormat, dstDataFormat, alphaOp); |
| 1782 if (!converter.Success()) | 1988 if (!converter.Success()) |
| 1783 return false; | 1989 return false; |
| 1784 return true; | 1990 return true; |
| 1785 } | 1991 } |
| 1786 | 1992 |
| 1787 } // namespace blink | 1993 } // namespace blink |
| OLD | NEW |