OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "modules/webgl/WebGL2RenderingContextBase.h" | 5 #include "modules/webgl/WebGL2RenderingContextBase.h" |
6 | 6 |
7 #include "bindings/modules/v8/WebGLAny.h" | 7 #include "bindings/modules/v8/WebGLAny.h" |
8 #include "core/frame/ImageBitmap.h" | 8 #include "core/frame/ImageBitmap.h" |
9 #include "core/html/HTMLCanvasElement.h" | 9 #include "core/html/HTMLCanvasElement.h" |
10 #include "core/html/HTMLImageElement.h" | 10 #include "core/html/HTMLImageElement.h" |
(...skipping 23 matching lines...) Expand all Loading... |
34 | 34 |
35 namespace blink { | 35 namespace blink { |
36 | 36 |
37 namespace { | 37 namespace { |
38 | 38 |
39 GLsync syncObjectOrZero(const WebGLSync* object) | 39 GLsync syncObjectOrZero(const WebGLSync* object) |
40 { | 40 { |
41 return object ? object->object() : nullptr; | 41 return object ? object->object() : nullptr; |
42 } | 42 } |
43 | 43 |
44 size_t getViewTypeSize(WTF::ArrayBufferView::ViewType viewType) | |
45 { | |
46 switch (viewType) { | |
47 case WTF::ArrayBufferView::TypeInt8: | |
48 case WTF::ArrayBufferView::TypeUint8: | |
49 case WTF::ArrayBufferView::TypeUint8Clamped: | |
50 return 1; | |
51 case WTF::ArrayBufferView::TypeInt16: | |
52 case WTF::ArrayBufferView::TypeUint16: | |
53 return 2; | |
54 case WTF::ArrayBufferView::TypeInt32: | |
55 case WTF::ArrayBufferView::TypeUint32: | |
56 case WTF::ArrayBufferView::TypeFloat32: | |
57 return 4; | |
58 case WTF::ArrayBufferView::TypeFloat64: | |
59 return 8; | |
60 case WTF::ArrayBufferView::TypeDataView: | |
61 return 1; | |
62 default: | |
63 NOTREACHED(); | |
64 return 0; | |
65 } | |
66 } | |
67 | |
68 bool validateSubSourceAndGetData(DOMArrayBufferView* view, GLuint subOffset, GLu
int subLength, void** outBaseAddress, long long* outByteLength) | 44 bool validateSubSourceAndGetData(DOMArrayBufferView* view, GLuint subOffset, GLu
int subLength, void** outBaseAddress, long long* outByteLength) |
69 { | 45 { |
70 // This is guaranteed to be non-null by DOM. | 46 // This is guaranteed to be non-null by DOM. |
71 DCHECK(view); | 47 DCHECK(view); |
72 | 48 |
73 size_t typeSize = getViewTypeSize(view->type()); | 49 size_t typeSize = view->typeSize(); |
74 DCHECK_GE(8u, typeSize); | 50 DCHECK_GE(8u, typeSize); |
75 long long byteLength = 0; | 51 long long byteLength = 0; |
76 if (subLength) { | 52 if (subLength) { |
77 // type size is at most 8, so no overflow. | 53 // type size is at most 8, so no overflow. |
78 byteLength = subLength * typeSize; | 54 byteLength = subLength * typeSize; |
79 } | 55 } |
80 long long byteOffset = 0; | 56 long long byteOffset = 0; |
81 if (subOffset) { | 57 if (subOffset) { |
82 // type size is at most 8, so no overflow. | 58 // type size is at most 8, so no overflow. |
83 byteOffset = subOffset * typeSize; | 59 byteOffset = subOffset * typeSize; |
(...skipping 902 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
986 | 962 |
987 void WebGL2RenderingContextBase::texImage2D(GLenum target, GLint level, GLint in
ternalformat, GLsizei width, GLsizei height, | 963 void WebGL2RenderingContextBase::texImage2D(GLenum target, GLint level, GLint in
ternalformat, GLsizei width, GLsizei height, |
988 GLint border, GLenum format, GLenum type, DOMArrayBufferView* data) | 964 GLint border, GLenum format, GLenum type, DOMArrayBufferView* data) |
989 { | 965 { |
990 WebGLRenderingContextBase::texImage2D(target, level, internalformat, width,
height, border, format, type, data); | 966 WebGLRenderingContextBase::texImage2D(target, level, internalformat, width,
height, border, format, type, data); |
991 } | 967 } |
992 | 968 |
993 void WebGL2RenderingContextBase::texImage2D(GLenum target, GLint level, GLint in
ternalformat, GLsizei width, GLsizei height, | 969 void WebGL2RenderingContextBase::texImage2D(GLenum target, GLint level, GLint in
ternalformat, GLsizei width, GLsizei height, |
994 GLint border, GLenum format, GLenum type, DOMArrayBufferView* data, GLuint s
rcOffset) | 970 GLint border, GLenum format, GLenum type, DOMArrayBufferView* data, GLuint s
rcOffset) |
995 { | 971 { |
996 // TODO(zmo): To be implemented. | 972 texImageHelperDOMArrayBufferView(TexImage2D, target, level, internalformat,
width, height, 1, border, |
| 973 format, type, 0, 0, 0, data, NullNotReachable, srcOffset); |
997 } | 974 } |
998 | 975 |
999 void WebGL2RenderingContextBase::texImage2D(GLenum target, GLint level, GLint in
ternalformat, GLsizei width, GLsizei height, | 976 void WebGL2RenderingContextBase::texImage2D(GLenum target, GLint level, GLint in
ternalformat, GLsizei width, GLsizei height, |
1000 GLint border, GLenum format, GLenum type, ImageData* imageData) | 977 GLint border, GLenum format, GLenum type, ImageData* imageData) |
1001 { | 978 { |
1002 // TODO(zmo): To be implemented. | 979 // TODO(zmo): To be implemented. |
1003 } | 980 } |
1004 | 981 |
1005 void WebGL2RenderingContextBase::texImage2D(GLenum target, GLint level, GLint in
ternalformat, GLsizei width, GLsizei height, | 982 void WebGL2RenderingContextBase::texImage2D(GLenum target, GLint level, GLint in
ternalformat, GLsizei width, GLsizei height, |
1006 GLint border, GLenum format, GLenum type, HTMLImageElement* image, Exception
State& exceptionState) | 983 GLint border, GLenum format, GLenum type, HTMLImageElement* image, Exception
State& exceptionState) |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1053 | 1030 |
1054 void WebGL2RenderingContextBase::texSubImage2D(GLenum target, GLint level, GLint
xoffset, GLint yoffset, | 1031 void WebGL2RenderingContextBase::texSubImage2D(GLenum target, GLint level, GLint
xoffset, GLint yoffset, |
1055 GLsizei width, GLsizei height, GLenum format, GLenum type, DOMArrayBufferVie
w* pixels) | 1032 GLsizei width, GLsizei height, GLenum format, GLenum type, DOMArrayBufferVie
w* pixels) |
1056 { | 1033 { |
1057 WebGLRenderingContextBase::texSubImage2D(target, level, xoffset, yoffset, wi
dth, height, format, type, pixels); | 1034 WebGLRenderingContextBase::texSubImage2D(target, level, xoffset, yoffset, wi
dth, height, format, type, pixels); |
1058 } | 1035 } |
1059 | 1036 |
1060 void WebGL2RenderingContextBase::texSubImage2D(GLenum target, GLint level, GLint
xoffset, GLint yoffset, | 1037 void WebGL2RenderingContextBase::texSubImage2D(GLenum target, GLint level, GLint
xoffset, GLint yoffset, |
1061 GLsizei width, GLsizei height, GLenum format, GLenum type, DOMArrayBufferVie
w* pixels, GLuint srcOffset) | 1038 GLsizei width, GLsizei height, GLenum format, GLenum type, DOMArrayBufferVie
w* pixels, GLuint srcOffset) |
1062 { | 1039 { |
1063 // TODO(zmo): To be implemented. | 1040 texImageHelperDOMArrayBufferView(TexSubImage2D, target, level, 0, width, hei
ght, 1, 0, format, type, |
| 1041 xoffset, yoffset, 0, pixels, NullNotReachable, srcOffset); |
1064 } | 1042 } |
1065 | 1043 |
1066 void WebGL2RenderingContextBase::texSubImage2D(GLenum target, GLint level, GLint
xoffset, GLint yoffset, | 1044 void WebGL2RenderingContextBase::texSubImage2D(GLenum target, GLint level, GLint
xoffset, GLint yoffset, |
1067 GLsizei width, GLsizei height, GLenum format, GLenum type, ImageData* pixels
) | 1045 GLsizei width, GLsizei height, GLenum format, GLenum type, ImageData* pixels
) |
1068 { | 1046 { |
1069 // TODO(zmo): To be implemented. | 1047 // TODO(zmo): To be implemented. |
1070 } | 1048 } |
1071 | 1049 |
1072 void WebGL2RenderingContextBase::texSubImage2D(GLenum target, GLint level, GLint
xoffset, GLint yoffset, | 1050 void WebGL2RenderingContextBase::texSubImage2D(GLenum target, GLint level, GLint
xoffset, GLint yoffset, |
1073 GLsizei width, GLsizei height, GLenum format, GLenum type, HTMLImageElement*
image, ExceptionState& exceptionState) | 1051 GLsizei width, GLsizei height, GLenum format, GLenum type, HTMLImageElement*
image, ExceptionState& exceptionState) |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1135 { | 1113 { |
1136 if (isContextLost() || !validateTexStorage("texStorage3D", target, levels, i
nternalformat, width, height, depth, TexStorageType3D)) | 1114 if (isContextLost() || !validateTexStorage("texStorage3D", target, levels, i
nternalformat, width, height, depth, TexStorageType3D)) |
1137 return; | 1115 return; |
1138 | 1116 |
1139 contextGL()->TexStorage3D(target, levels, internalformat, width, height, dep
th); | 1117 contextGL()->TexStorage3D(target, levels, internalformat, width, height, dep
th); |
1140 } | 1118 } |
1141 | 1119 |
1142 void WebGL2RenderingContextBase::texImage3D(GLenum target, GLint level, GLint in
ternalformat, GLsizei width, GLsizei height, GLsizei depth, | 1120 void WebGL2RenderingContextBase::texImage3D(GLenum target, GLint level, GLint in
ternalformat, GLsizei width, GLsizei height, GLsizei depth, |
1143 GLint border, GLenum format, GLenum type, DOMArrayBufferView* pixels) | 1121 GLint border, GLenum format, GLenum type, DOMArrayBufferView* pixels) |
1144 { | 1122 { |
1145 texImageHelperDOMArrayBufferView(TexImage3D, target, level, internalformat,
width, height, border, format, type, depth, 0, 0, 0, pixels); | 1123 texImageHelperDOMArrayBufferView(TexImage3D, target, level, internalformat,
width, height, depth, border, |
| 1124 format, type, 0, 0, 0, pixels, NullAllowed, 0); |
1146 } | 1125 } |
1147 | 1126 |
1148 void WebGL2RenderingContextBase::texImage3D(GLenum target, GLint level, GLint in
ternalformat, GLsizei width, GLsizei height, GLsizei depth, | 1127 void WebGL2RenderingContextBase::texImage3D(GLenum target, GLint level, GLint in
ternalformat, GLsizei width, GLsizei height, GLsizei depth, |
1149 GLint border, GLenum format, GLenum type, DOMArrayBufferView* pixels, GLuint
srcOffset) | 1128 GLint border, GLenum format, GLenum type, DOMArrayBufferView* pixels, GLuint
srcOffset) |
1150 { | 1129 { |
1151 // TODO(zmo): To be implemented. | 1130 texImageHelperDOMArrayBufferView(TexImage3D, target, level, internalformat,
width, height, depth, border, |
| 1131 format, type, 0, 0, 0, pixels, NullNotReachable, srcOffset); |
1152 } | 1132 } |
1153 | 1133 |
1154 void WebGL2RenderingContextBase::texImage3D(GLenum target, GLint level, GLint in
ternalformat, GLsizei width, GLsizei height, GLsizei depth, | 1134 void WebGL2RenderingContextBase::texImage3D(GLenum target, GLint level, GLint in
ternalformat, GLsizei width, GLsizei height, GLsizei depth, |
1155 GLint border, GLenum format, GLenum type, GLintptr offset) | 1135 GLint border, GLenum format, GLenum type, GLintptr offset) |
1156 { | 1136 { |
1157 if (isContextLost()) | 1137 if (isContextLost()) |
1158 return; | 1138 return; |
1159 if (!validateTexture3DBinding("texImage3D", target)) | 1139 if (!validateTexture3DBinding("texImage3D", target)) |
1160 return; | 1140 return; |
1161 if (!m_boundPixelUnpackBuffer) { | 1141 if (!m_boundPixelUnpackBuffer) { |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1196 | 1176 |
1197 void WebGL2RenderingContextBase::texImage3D(GLenum target, GLint level, GLint in
ternalformat, GLsizei width, GLsizei height, GLsizei depth, | 1177 void WebGL2RenderingContextBase::texImage3D(GLenum target, GLint level, GLint in
ternalformat, GLsizei width, GLsizei height, GLsizei depth, |
1198 GLint border, GLenum format, GLenum type, ImageBitmap* imageBitMap, Exceptio
nState& exceptionState) | 1178 GLint border, GLenum format, GLenum type, ImageBitmap* imageBitMap, Exceptio
nState& exceptionState) |
1199 { | 1179 { |
1200 // TODO(zmo): To be implemented. | 1180 // TODO(zmo): To be implemented. |
1201 } | 1181 } |
1202 | 1182 |
1203 void WebGL2RenderingContextBase::texSubImage3D(GLenum target, GLint level, GLint
xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei d
epth, | 1183 void WebGL2RenderingContextBase::texSubImage3D(GLenum target, GLint level, GLint
xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei d
epth, |
1204 GLenum format, GLenum type, DOMArrayBufferView* pixels, GLuint srcOffset) | 1184 GLenum format, GLenum type, DOMArrayBufferView* pixels, GLuint srcOffset) |
1205 { | 1185 { |
1206 // TODO(zmo): To be implemented. | 1186 texImageHelperDOMArrayBufferView(TexSubImage3D, target, level, 0, width, hei
ght, depth, 0, format, type, |
1207 texImageHelperDOMArrayBufferView(TexSubImage3D, target, level, 0, width, hei
ght, 0, format, type, depth, xoffset, yoffset, zoffset, pixels); | 1187 xoffset, yoffset, zoffset, pixels, NullNotReachable, srcOffset); |
1208 } | 1188 } |
1209 | 1189 |
1210 void WebGL2RenderingContextBase::texSubImage3D(GLenum target, GLint level, GLint
xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei d
epth, | 1190 void WebGL2RenderingContextBase::texSubImage3D(GLenum target, GLint level, GLint
xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei d
epth, |
1211 GLenum format, GLenum type, GLintptr offset) | 1191 GLenum format, GLenum type, GLintptr offset) |
1212 { | 1192 { |
1213 if (isContextLost()) | 1193 if (isContextLost()) |
1214 return; | 1194 return; |
1215 if (!validateTexture3DBinding("texSubImage3D", target)) | 1195 if (!validateTexture3DBinding("texSubImage3D", target)) |
1216 return; | 1196 return; |
1217 if (!m_boundPixelUnpackBuffer) { | 1197 if (!m_boundPixelUnpackBuffer) { |
(...skipping 2422 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3640 params.skipPixels = m_unpackSkipPixels; | 3620 params.skipPixels = m_unpackSkipPixels; |
3641 params.skipRows = m_unpackSkipRows; | 3621 params.skipRows = m_unpackSkipRows; |
3642 if (dimension == Tex3D) { | 3622 if (dimension == Tex3D) { |
3643 params.imageHeight = m_unpackImageHeight; | 3623 params.imageHeight = m_unpackImageHeight; |
3644 params.skipImages = m_unpackSkipImages; | 3624 params.skipImages = m_unpackSkipImages; |
3645 } | 3625 } |
3646 return params; | 3626 return params; |
3647 } | 3627 } |
3648 | 3628 |
3649 } // namespace blink | 3629 } // namespace blink |
OLD | NEW |