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

Side by Side Diff: third_party/WebKit/Source/modules/webgl/WebGL2RenderingContextBase.cpp

Issue 2277603005: Implement tex{Sub}Image{2|3}D with ArrayBufferView sub source. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 3 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
OLDNEW
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698