| 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/html/HTMLCanvasElement.h" | 8 #include "core/html/HTMLCanvasElement.h" |
| 9 #include "core/html/HTMLImageElement.h" | 9 #include "core/html/HTMLImageElement.h" |
| 10 #include "core/html/HTMLVideoElement.h" | 10 #include "core/html/HTMLVideoElement.h" |
| (...skipping 840 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 851 return; | 851 return; |
| 852 | 852 |
| 853 WebGLTexture* tex = validateTextureBinding("texStorage3D", target, false); | 853 WebGLTexture* tex = validateTextureBinding("texStorage3D", target, false); |
| 854 webContext()->texStorage3D(target, levels, internalformat, width, height, de
pth); | 854 webContext()->texStorage3D(target, levels, internalformat, width, height, de
pth); |
| 855 tex->setTexStorageInfo(target, levels, internalformat, width, height, depth)
; | 855 tex->setTexStorageInfo(target, levels, internalformat, width, height, depth)
; |
| 856 } | 856 } |
| 857 | 857 |
| 858 void WebGL2RenderingContextBase::texImage3D(GLenum target, GLint level, GLint in
ternalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum
format, GLenum type, DOMArrayBufferView* pixels) | 858 void WebGL2RenderingContextBase::texImage3D(GLenum target, GLint level, GLint in
ternalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum
format, GLenum type, DOMArrayBufferView* pixels) |
| 859 { | 859 { |
| 860 if (isContextLost() || !validateTexFunc3DTarget("texImage3D", target) | 860 if (isContextLost() || !validateTexFunc3DTarget("texImage3D", target) |
| 861 || !validateTexFunc("texImage3D", NotTexSubImage2D, SourceArrayBufferVie
w, target, level, internalformat, width, height, depth, border, format, type, 0,
0, 0) | 861 || !validateTexFunc("texImage3D", NotTexSubImage, SourceArrayBufferView,
target, level, internalformat, width, height, depth, border, format, type, 0, 0
, 0) |
| 862 || !validateTexFuncData("texImage3D", level, width, height, depth, forma
t, type, pixels, NullAllowed)) | 862 || !validateTexFuncData("texImage3D", level, width, height, depth, forma
t, type, pixels, NullAllowed)) |
| 863 return; | 863 return; |
| 864 | 864 |
| 865 void* data = pixels ? pixels->baseAddress() : 0; | 865 void* data = pixels ? pixels->baseAddress() : 0; |
| 866 Vector<uint8_t> tempData; | 866 Vector<uint8_t> tempData; |
| 867 if (data && (m_unpackFlipY || m_unpackPremultiplyAlpha)) { | 867 if (data && (m_unpackFlipY || m_unpackPremultiplyAlpha)) { |
| 868 // FIXME: WebGLImageConversion needs to be updated to accept image depth
. | 868 // FIXME: WebGLImageConversion needs to be updated to accept image depth
. |
| 869 notImplemented(); | 869 notImplemented(); |
| 870 return; | 870 return; |
| 871 } | 871 } |
| 872 | 872 |
| 873 WebGLTexture* tex = validateTextureBinding("texImage3D", target, true); | 873 WebGLTexture* tex = validateTextureBinding("texImage3D", target, true); |
| 874 ASSERT(tex); | 874 ASSERT(tex); |
| 875 webContext()->texImage3D(target, level, convertTexInternalFormat(internalfor
mat, type), width, height, depth, border, format, type, data); | 875 webContext()->texImage3D(target, level, convertTexInternalFormat(internalfor
mat, type), width, height, depth, border, format, type, data); |
| 876 tex->setLevelInfo(target, level, internalformat, width, height, depth, type)
; | 876 tex->setLevelInfo(target, level, internalformat, width, height, depth, type)
; |
| 877 } | 877 } |
| 878 | 878 |
| 879 bool WebGL2RenderingContextBase::validateTexSubImage3D(const char* functionName,
GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, | |
| 880 GLenum format, GLenum type, GLsizei width, GLsizei height, GLsizei depth) | |
| 881 { | |
| 882 if (!validateTexFunc3DTarget(functionName, target)) | |
| 883 return false; | |
| 884 | |
| 885 WebGLTexture* tex = validateTextureBinding(functionName, target, false); | |
| 886 if (!tex) | |
| 887 return false; | |
| 888 | |
| 889 if (!validateTexFuncLevel(functionName, target, level)) | |
| 890 return false; | |
| 891 | |
| 892 if (!tex->isValid(target, level)) { | |
| 893 synthesizeGLError(GL_INVALID_OPERATION, "texSubImage3D", "no previously
defined texture image"); | |
| 894 return false; | |
| 895 } | |
| 896 | |
| 897 // Before checking if it is in the range, check if overflow happens first. | |
| 898 CheckedInt<GLint> maxX = xoffset, maxY = yoffset, maxZ = zoffset; | |
| 899 maxX += width; | |
| 900 maxY += height; | |
| 901 maxZ += depth; | |
| 902 if (!maxX.isValid() || !maxY.isValid() || !maxZ.isValid() | |
| 903 || maxX.value() > tex->getWidth(target, level) | |
| 904 || maxY.value() > tex->getHeight(target, level) | |
| 905 || maxZ.value() > tex->getDepth(target, level)) { | |
| 906 synthesizeGLError(GL_INVALID_VALUE, functionName, "dimensions out of ran
ge"); | |
| 907 return false; | |
| 908 } | |
| 909 | |
| 910 GLenum internalformat = tex->getInternalFormat(target, level); | |
| 911 if (!validateTexFuncFormatAndType(functionName, internalformat, format, type
, level)) | |
| 912 return false; | |
| 913 | |
| 914 return true; | |
| 915 } | |
| 916 | |
| 917 void WebGL2RenderingContextBase::texSubImage3DImpl(GLenum target, GLint level, G
Lint xoffset, GLint yoffset, GLint zoffset, GLenum format, GLenum type, Image* i
mage, WebGLImageConversion::ImageHtmlDomSource domSource, bool flipY, bool premu
ltiplyAlpha) | 879 void WebGL2RenderingContextBase::texSubImage3DImpl(GLenum target, GLint level, G
Lint xoffset, GLint yoffset, GLint zoffset, GLenum format, GLenum type, Image* i
mage, WebGLImageConversion::ImageHtmlDomSource domSource, bool flipY, bool premu
ltiplyAlpha) |
| 918 { | 880 { |
| 919 if (!validateTexSubImage3D("texSubImage3D", target, level, xoffset, yoffset,
zoffset, format, type, image->width(), image->height(), 1)) | |
| 920 return; | |
| 921 | |
| 922 // All calling functions check isContextLost, so a duplicate check is not ne
eded here. | 881 // All calling functions check isContextLost, so a duplicate check is not ne
eded here. |
| 923 if (type == GL_UNSIGNED_INT_10F_11F_11F_REV) { | 882 if (type == GL_UNSIGNED_INT_10F_11F_11F_REV) { |
| 924 // The UNSIGNED_INT_10F_11F_11F_REV type pack/unpack isn't implemented. | 883 // The UNSIGNED_INT_10F_11F_11F_REV type pack/unpack isn't implemented. |
| 925 type = GL_FLOAT; | 884 type = GL_FLOAT; |
| 926 } | 885 } |
| 927 Vector<uint8_t> data; | 886 Vector<uint8_t> data; |
| 928 WebGLImageConversion::ImageExtractor imageExtractor(image, domSource, premul
tiplyAlpha, m_unpackColorspaceConversion == GL_NONE); | 887 WebGLImageConversion::ImageExtractor imageExtractor(image, domSource, premul
tiplyAlpha, m_unpackColorspaceConversion == GL_NONE); |
| 929 if (!imageExtractor.imagePixelData()) { | 888 if (!imageExtractor.imagePixelData()) { |
| 930 synthesizeGLError(GL_INVALID_VALUE, "texSubImage3D", "bad image"); | 889 synthesizeGLError(GL_INVALID_VALUE, "texSubImage3D", "bad image"); |
| 931 return; | 890 return; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 944 } | 903 } |
| 945 } | 904 } |
| 946 | 905 |
| 947 resetUnpackParameters(); | 906 resetUnpackParameters(); |
| 948 webContext()->texSubImage3D(target, level, xoffset, yoffset, zoffset, imageE
xtractor.imageWidth(), imageExtractor.imageHeight(), 1, format, type, needConver
sion ? data.data() : imagePixelData); | 907 webContext()->texSubImage3D(target, level, xoffset, yoffset, zoffset, imageE
xtractor.imageWidth(), imageExtractor.imageHeight(), 1, format, type, needConver
sion ? data.data() : imagePixelData); |
| 949 restoreUnpackParameters(); | 908 restoreUnpackParameters(); |
| 950 } | 909 } |
| 951 | 910 |
| 952 void WebGL2RenderingContextBase::texSubImage3D(GLenum target, GLint level, GLint
xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei d
epth, GLenum format, GLenum type, DOMArrayBufferView* pixels) | 911 void WebGL2RenderingContextBase::texSubImage3D(GLenum target, GLint level, GLint
xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei d
epth, GLenum format, GLenum type, DOMArrayBufferView* pixels) |
| 953 { | 912 { |
| 954 if (isContextLost() || !pixels || !validateTexSubImage3D("texSubImage3D", ta
rget, level, xoffset, yoffset, zoffset, format, type, width, height, depth) | 913 if (isContextLost() || !validateTexFunc3DTarget("texSubImage3D", target) |
| 955 || !validateTexFuncData("texSubImage3D", level, width, height, depth, fo
rmat, type, pixels, NullAllowed)) | 914 || !validateTexFunc("texSubImage3D", TexSubImage, SourceArrayBufferView,
target, level, 0, width, height, depth, 0, format, type, xoffset, yoffset, zoff
set) |
| 915 || !validateTexFuncData("texSubImage3D", level, width, height, depth, fo
rmat, type, pixels, NullNotAllowed)) |
| 956 return; | 916 return; |
| 957 | 917 |
| 958 // FIXME: Ensure pixels is large enough to contain the desired texture dimen
sions. | |
| 959 | |
| 960 void* data = pixels->baseAddress(); | 918 void* data = pixels->baseAddress(); |
| 961 Vector<uint8_t> tempData; | 919 Vector<uint8_t> tempData; |
| 962 bool changeUnpackParameters = false; | 920 bool changeUnpackParameters = false; |
| 963 if (data && (m_unpackFlipY || m_unpackPremultiplyAlpha)) { | 921 if (data && (m_unpackFlipY || m_unpackPremultiplyAlpha)) { |
| 964 // FIXME: WebGLImageConversion needs to be updated to accept image depth
. | 922 // FIXME: WebGLImageConversion needs to be updated to accept image depth
. |
| 965 notImplemented(); | 923 notImplemented(); |
| 966 changeUnpackParameters = true; | 924 changeUnpackParameters = true; |
| 967 } | 925 } |
| 968 if (changeUnpackParameters) | 926 if (changeUnpackParameters) |
| 969 resetUnpackParameters(); | 927 resetUnpackParameters(); |
| 970 webContext()->texSubImage3D(target, level, xoffset, yoffset, zoffset, width,
height, depth, format, type, data); | 928 webContext()->texSubImage3D(target, level, xoffset, yoffset, zoffset, width,
height, depth, format, type, data); |
| 971 if (changeUnpackParameters) | 929 if (changeUnpackParameters) |
| 972 restoreUnpackParameters(); | 930 restoreUnpackParameters(); |
| 973 } | 931 } |
| 974 | 932 |
| 975 void WebGL2RenderingContextBase::texSubImage3D(GLenum target, GLint level, GLint
xoffset, GLint yoffset, GLint zoffset, GLenum format, GLenum type, ImageData* p
ixels) | 933 void WebGL2RenderingContextBase::texSubImage3D(GLenum target, GLint level, GLint
xoffset, GLint yoffset, GLint zoffset, GLenum format, GLenum type, ImageData* p
ixels) |
| 976 { | 934 { |
| 977 if (isContextLost() || !pixels || !validateTexSubImage3D("texSubImage3D", ta
rget, level, xoffset, yoffset, zoffset, format, type, pixels->width(), pixels->h
eight(), 1)) | 935 if (!pixels) { |
| 936 synthesizeGLError(GL_INVALID_VALUE, "texSubImage3D", "no image data"); |
| 937 return; |
| 938 } |
| 939 if (pixels->data()->bufferBase()->isNeutered()) { |
| 940 synthesizeGLError(GL_INVALID_VALUE, "texSubImage3D", "The source data ha
s been neutered."); |
| 941 return; |
| 942 } |
| 943 if (isContextLost() || !validateTexFunc3DTarget("texSubImage3D", target) |
| 944 || !validateTexFunc("texSubImage3D", TexSubImage, SourceImageData, targe
t, level, 0, pixels->width(), pixels->height(), 1, 0, format, type, xoffset, yof
fset, zoffset)) |
| 978 return; | 945 return; |
| 979 | 946 |
| 980 if (type == GL_UNSIGNED_INT_10F_11F_11F_REV) { | 947 if (type == GL_UNSIGNED_INT_10F_11F_11F_REV) { |
| 981 // The UNSIGNED_INT_10F_11F_11F_REV type pack/unpack isn't implemented. | 948 // The UNSIGNED_INT_10F_11F_11F_REV type pack/unpack isn't implemented. |
| 982 type = GL_FLOAT; | 949 type = GL_FLOAT; |
| 983 } | 950 } |
| 984 Vector<uint8_t> data; | 951 Vector<uint8_t> data; |
| 985 bool needConversion = true; | 952 bool needConversion = true; |
| 986 // The data from ImageData is always of format RGBA8. | 953 // The data from ImageData is always of format RGBA8. |
| 987 // No conversion is needed if destination format is RGBA and type is USIGNED
_BYTE and no Flip or Premultiply operation is required. | 954 // No conversion is needed if destination format is RGBA and type is USIGNED
_BYTE and no Flip or Premultiply operation is required. |
| 988 if (format == GL_RGBA && type == GL_UNSIGNED_BYTE && !m_unpackFlipY && !m_un
packPremultiplyAlpha) { | 955 if (format == GL_RGBA && type == GL_UNSIGNED_BYTE && !m_unpackFlipY && !m_un
packPremultiplyAlpha) { |
| 989 needConversion = false; | 956 needConversion = false; |
| 990 } else { | 957 } else { |
| 991 if (!WebGLImageConversion::extractImageData(pixels->data()->data(), pixe
ls->size(), format, type, m_unpackFlipY, m_unpackPremultiplyAlpha, data)) { | 958 if (!WebGLImageConversion::extractImageData(pixels->data()->data(), pixe
ls->size(), format, type, m_unpackFlipY, m_unpackPremultiplyAlpha, data)) { |
| 992 synthesizeGLError(GL_INVALID_VALUE, "texSubImage3D", "bad image data
"); | 959 synthesizeGLError(GL_INVALID_VALUE, "texSubImage3D", "bad image data
"); |
| 993 return; | 960 return; |
| 994 } | 961 } |
| 995 } | 962 } |
| 996 resetUnpackParameters(); | 963 resetUnpackParameters(); |
| 997 webContext()->texSubImage3D(target, level, xoffset, yoffset, zoffset, pixels
->width(), pixels->height(), 1, format, type, needConversion ? data.data() : pix
els->data()->data()); | 964 webContext()->texSubImage3D(target, level, xoffset, yoffset, zoffset, pixels
->width(), pixels->height(), 1, format, type, needConversion ? data.data() : pix
els->data()->data()); |
| 998 restoreUnpackParameters(); | 965 restoreUnpackParameters(); |
| 999 } | 966 } |
| 1000 | 967 |
| 1001 void WebGL2RenderingContextBase::texSubImage3D(GLenum target, GLint level, GLint
xoffset, GLint yoffset, GLint zoffset, GLenum format, GLenum type, HTMLImageEle
ment* image, ExceptionState& exceptionState) | 968 void WebGL2RenderingContextBase::texSubImage3D(GLenum target, GLint level, GLint
xoffset, GLint yoffset, GLint zoffset, GLenum format, GLenum type, HTMLImageEle
ment* image, ExceptionState& exceptionState) |
| 1002 { | 969 { |
| 1003 if (isContextLost() || !image || !validateHTMLImageElement("texSubImage3D",
image, exceptionState)) | 970 if (isContextLost() || !validateHTMLImageElement("texSubImage3D", image, exc
eptionState) |
| 971 || !validateTexFunc3DTarget("texSubImage3D", target)) |
| 1004 return; | 972 return; |
| 1005 | 973 |
| 1006 RefPtr<Image> imageForRender = image->cachedImage()->image(); | 974 RefPtr<Image> imageForRender = image->cachedImage()->image(); |
| 1007 if (imageForRender->isSVGImage()) | 975 if (imageForRender->isSVGImage()) |
| 1008 imageForRender = drawImageIntoBuffer(imageForRender.get(), image->width(
), image->height(), "texSubImage3D"); | 976 imageForRender = drawImageIntoBuffer(imageForRender.get(), image->width(
), image->height(), "texSubImage3D"); |
| 1009 | 977 |
| 978 if (!imageForRender || !validateTexFunc("texSubImage3D", TexSubImage, Source
HTMLImageElement, target, level, 0, imageForRender->width(), imageForRender->hei
ght(), 1, 0, format, type, xoffset, yoffset, zoffset)) |
| 979 return; |
| 980 |
| 1010 texSubImage3DImpl(target, level, xoffset, yoffset, zoffset, format, type, im
ageForRender.get(), WebGLImageConversion::HtmlDomImage, m_unpackFlipY, m_unpackP
remultiplyAlpha); | 981 texSubImage3DImpl(target, level, xoffset, yoffset, zoffset, format, type, im
ageForRender.get(), WebGLImageConversion::HtmlDomImage, m_unpackFlipY, m_unpackP
remultiplyAlpha); |
| 1011 } | 982 } |
| 1012 | 983 |
| 1013 void WebGL2RenderingContextBase::texSubImage3D(GLenum target, GLint level, GLint
xoffset, GLint yoffset, GLint zoffset, GLenum format, GLenum type, HTMLCanvasEl
ement* canvas, ExceptionState& exceptionState) | 984 void WebGL2RenderingContextBase::texSubImage3D(GLenum target, GLint level, GLint
xoffset, GLint yoffset, GLint zoffset, GLenum format, GLenum type, HTMLCanvasEl
ement* canvas, ExceptionState& exceptionState) |
| 1014 { | 985 { |
| 1015 if (isContextLost() || !validateHTMLCanvasElement("texSubImage3D", canvas, e
xceptionState)) | 986 if (isContextLost() || !validateHTMLCanvasElement("texSubImage3D", canvas, e
xceptionState) |
| 987 || !validateTexFunc3DTarget("texSubImage3D", target) |
| 988 || !validateTexFunc("texSubImage3D", TexSubImage, SourceHTMLCanvasElemen
t, target, level, 0, canvas->width(), canvas->height(), 1, 0, format, type, xoff
set, yoffset, zoffset)) |
| 1016 return; | 989 return; |
| 1017 | 990 |
| 1018 WebGLTexture* texture = validateTextureBinding("texSubImage3D", target, fals
e); | 991 WebGLTexture* texture = validateTextureBinding("texSubImage3D", target, fals
e); |
| 1019 ASSERT(texture); | 992 ASSERT(texture); |
| 1020 GLenum internalformat = texture->getInternalFormat(target, level); | 993 GLenum internalformat = texture->getInternalFormat(target, level); |
| 1021 | 994 |
| 1022 if (!canvas->renderingContext() || !canvas->renderingContext()->isAccelerate
d() || !canUseTexImageCanvasByGPU(internalformat, type)) { | 995 if (!canvas->renderingContext() || !canvas->renderingContext()->isAccelerate
d() || !canUseTexImageCanvasByGPU(internalformat, type)) { |
| 1023 ASSERT(!canvas->renderingContext() || canvas->renderingContext()->is2d()
); | 996 ASSERT(!canvas->renderingContext() || canvas->renderingContext()->is2d()
); |
| 1024 // 2D canvas has only FrontBuffer. | 997 // 2D canvas has only FrontBuffer. |
| 1025 texSubImage3DImpl(target, level, xoffset, yoffset, zoffset, format, type
, canvas->copiedImage(FrontBuffer, PreferAcceleration).get(), | 998 texSubImage3DImpl(target, level, xoffset, yoffset, zoffset, format, type
, canvas->copiedImage(FrontBuffer, PreferAcceleration).get(), |
| 1026 WebGLImageConversion::HtmlDomCanvas, m_unpackFlipY, m_unpackPremulti
plyAlpha); | 999 WebGLImageConversion::HtmlDomCanvas, m_unpackFlipY, m_unpackPremulti
plyAlpha); |
| 1027 return; | 1000 return; |
| 1028 } | 1001 } |
| 1029 | 1002 |
| 1030 texImageCanvasByGPU(TexSubImage3DByGPU, texture, target, level, GL_RGBA, typ
e, xoffset, yoffset, zoffset, canvas); | 1003 texImageCanvasByGPU(TexSubImage3DByGPU, texture, target, level, GL_RGBA, typ
e, xoffset, yoffset, zoffset, canvas); |
| 1031 } | 1004 } |
| 1032 | 1005 |
| 1033 void WebGL2RenderingContextBase::texSubImage3D(GLenum target, GLint level, GLint
xoffset, GLint yoffset, GLint zoffset, GLenum format, GLenum type, HTMLVideoEle
ment* video, ExceptionState& exceptionState) | 1006 void WebGL2RenderingContextBase::texSubImage3D(GLenum target, GLint level, GLint
xoffset, GLint yoffset, GLint zoffset, GLenum format, GLenum type, HTMLVideoEle
ment* video, ExceptionState& exceptionState) |
| 1034 { | 1007 { |
| 1035 if (isContextLost() || !validateHTMLVideoElement("texSubImage3D", video, exc
eptionState)) | 1008 if (isContextLost() || !validateHTMLVideoElement("texSubImage3D", video, exc
eptionState) |
| 1009 || !validateTexFunc3DTarget("texSubImage3D", target) |
| 1010 || !validateTexFunc("texSubImage3D", TexSubImage, SourceHTMLVideoElement
, target, level, 0, video->videoWidth(), video->videoHeight(), 1, 0, format, typ
e, xoffset, yoffset, zoffset)) |
| 1036 return; | 1011 return; |
| 1037 | 1012 |
| 1038 RefPtr<Image> image = videoFrameToImage(video); | 1013 RefPtr<Image> image = videoFrameToImage(video); |
| 1039 if (!image) | 1014 if (!image) |
| 1040 return; | 1015 return; |
| 1041 texSubImage3DImpl(target, level, xoffset, yoffset, zoffset, format, type, im
age.get(), WebGLImageConversion::HtmlDomVideo, m_unpackFlipY, m_unpackPremultipl
yAlpha); | 1016 texSubImage3DImpl(target, level, xoffset, yoffset, zoffset, format, type, im
age.get(), WebGLImageConversion::HtmlDomVideo, m_unpackFlipY, m_unpackPremultipl
yAlpha); |
| 1042 } | 1017 } |
| 1043 | 1018 |
| 1044 void WebGL2RenderingContextBase::copyTexSubImage3D(GLenum target, GLint level, G
Lint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLs
izei height) | 1019 void WebGL2RenderingContextBase::copyTexSubImage3D(GLenum target, GLint level, G
Lint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLs
izei height) |
| 1045 { | 1020 { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1062 if (!validateTexFunc3DTarget("compressedTexImage3D", target)) | 1037 if (!validateTexFunc3DTarget("compressedTexImage3D", target)) |
| 1063 return; | 1038 return; |
| 1064 if (!validateTexFuncLevel("compressedTexImage3D", target, level)) | 1039 if (!validateTexFuncLevel("compressedTexImage3D", target, level)) |
| 1065 return; | 1040 return; |
| 1066 if (!validateCompressedTexFormat("compressedTexImage3D", internalformat)) | 1041 if (!validateCompressedTexFormat("compressedTexImage3D", internalformat)) |
| 1067 return; | 1042 return; |
| 1068 if (border) { | 1043 if (border) { |
| 1069 synthesizeGLError(GL_INVALID_VALUE, "compressedTexImage3D", "border not
0"); | 1044 synthesizeGLError(GL_INVALID_VALUE, "compressedTexImage3D", "border not
0"); |
| 1070 return; | 1045 return; |
| 1071 } | 1046 } |
| 1072 if (!validateCompressedTexDimensions("compressedTexImage3D", NotTexSubImage2
D, target, level, width, height, depth, internalformat)) | 1047 if (!validateCompressedTexDimensions("compressedTexImage3D", NotTexSubImage,
target, level, width, height, depth, internalformat)) |
| 1073 return; | 1048 return; |
| 1074 if (!validateCompressedTexFuncData("compressedTexImage3D", width, height, de
pth, internalformat, data)) | 1049 if (!validateCompressedTexFuncData("compressedTexImage3D", width, height, de
pth, internalformat, data)) |
| 1075 return; | 1050 return; |
| 1076 | 1051 |
| 1077 WebGLTexture* tex = validateTextureBinding("compressedTexImage3D", target, t
rue); | 1052 WebGLTexture* tex = validateTextureBinding("compressedTexImage3D", target, t
rue); |
| 1078 if (!tex) | 1053 if (!tex) |
| 1079 return; | 1054 return; |
| 1080 if (tex->isImmutable()) { | 1055 if (tex->isImmutable()) { |
| 1081 synthesizeGLError(GL_INVALID_OPERATION, "compressedTexImage3D", "attempt
ed to modify immutable texture"); | 1056 synthesizeGLError(GL_INVALID_OPERATION, "compressedTexImage3D", "attempt
ed to modify immutable texture"); |
| 1082 return; | 1057 return; |
| (...skipping 2389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3472 | 3447 |
| 3473 WebGLSampler* sampler = m_samplerUnits[unit]; | 3448 WebGLSampler* sampler = m_samplerUnits[unit]; |
| 3474 | 3449 |
| 3475 if (sampler) | 3450 if (sampler) |
| 3476 return sampler->getSamplerState(); | 3451 return sampler->getSamplerState(); |
| 3477 | 3452 |
| 3478 return WebGLRenderingContextBase::getTextureUnitSamplerState(target, unit); | 3453 return WebGLRenderingContextBase::getTextureUnitSamplerState(target, unit); |
| 3479 } | 3454 } |
| 3480 | 3455 |
| 3481 } // namespace blink | 3456 } // namespace blink |
| OLD | NEW |