Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(407)

Side by Side Diff: Source/platform/graphics/gpu/WebGLImageConversion.cpp

Issue 1147123006: Upgrade WebGLImageConversion to support WebGL 2 formats and types. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: fix Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/platform/graphics/gpu/WebGLImageConversion.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
OLDNEW
« no previous file with comments | « Source/platform/graphics/gpu/WebGLImageConversion.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698