| 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 |