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

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

Issue 1557603002: Unify validation for TexSubImage{2D|3D} (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 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/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
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
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 }
Zhenyao Mo 2015/12/30 20:17:05 if (pixels->data()->bufferBase()->isNeutered()) {
qiankun 2015/12/30 23:15:07 Done.
939 if (isContextLost() || !validateTexFunc3DTarget("texSubImage3D", target)
940 || !validateTexFunc("texSubImage3D", TexSubImage, SourceImageData, targe t, level, 0, pixels->width(), pixels->height(), 1, 0, format, type, xoffset, yof fset, zoffset))
978 return; 941 return;
979 942
980 if (type == GL_UNSIGNED_INT_10F_11F_11F_REV) { 943 if (type == GL_UNSIGNED_INT_10F_11F_11F_REV) {
981 // The UNSIGNED_INT_10F_11F_11F_REV type pack/unpack isn't implemented. 944 // The UNSIGNED_INT_10F_11F_11F_REV type pack/unpack isn't implemented.
982 type = GL_FLOAT; 945 type = GL_FLOAT;
983 } 946 }
984 Vector<uint8_t> data; 947 Vector<uint8_t> data;
985 bool needConversion = true; 948 bool needConversion = true;
986 // The data from ImageData is always of format RGBA8. 949 // 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. 950 // 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) { 951 if (format == GL_RGBA && type == GL_UNSIGNED_BYTE && !m_unpackFlipY && !m_un packPremultiplyAlpha) {
989 needConversion = false; 952 needConversion = false;
990 } else { 953 } else {
991 if (!WebGLImageConversion::extractImageData(pixels->data()->data(), pixe ls->size(), format, type, m_unpackFlipY, m_unpackPremultiplyAlpha, data)) { 954 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 "); 955 synthesizeGLError(GL_INVALID_VALUE, "texSubImage3D", "bad image data ");
993 return; 956 return;
994 } 957 }
995 } 958 }
996 resetUnpackParameters(); 959 resetUnpackParameters();
997 webContext()->texSubImage3D(target, level, xoffset, yoffset, zoffset, pixels ->width(), pixels->height(), 1, format, type, needConversion ? data.data() : pix els->data()->data()); 960 webContext()->texSubImage3D(target, level, xoffset, yoffset, zoffset, pixels ->width(), pixels->height(), 1, format, type, needConversion ? data.data() : pix els->data()->data());
998 restoreUnpackParameters(); 961 restoreUnpackParameters();
999 } 962 }
1000 963
1001 void WebGL2RenderingContextBase::texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLenum format, GLenum type, HTMLImageEle ment* image, ExceptionState& exceptionState) 964 void WebGL2RenderingContextBase::texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLenum format, GLenum type, HTMLImageEle ment* image, ExceptionState& exceptionState)
1002 { 965 {
1003 if (isContextLost() || !image || !validateHTMLImageElement("texSubImage3D", image, exceptionState)) 966 if (isContextLost() || !image || !validateHTMLImageElement("texSubImage3D", image, exceptionState)
Zhenyao Mo 2015/12/30 20:17:05 Get rid of !image
qiankun 2015/12/30 23:15:07 Done.
967 || !validateTexFunc3DTarget("texSubImage3D", target))
1004 return; 968 return;
1005 969
1006 RefPtr<Image> imageForRender = image->cachedImage()->image(); 970 RefPtr<Image> imageForRender = image->cachedImage()->image();
1007 if (imageForRender->isSVGImage()) 971 if (imageForRender->isSVGImage())
1008 imageForRender = drawImageIntoBuffer(imageForRender.get(), image->width( ), image->height(), "texSubImage3D"); 972 imageForRender = drawImageIntoBuffer(imageForRender.get(), image->width( ), image->height(), "texSubImage3D");
1009 973
974 if (!imageForRender || !validateTexFunc("texSubImage3D", TexSubImage, Source HTMLImageElement, target, level, 0, imageForRender->width(), imageForRender->hei ght(), 1, 0, format, type, xoffset, yoffset, zoffset))
975 return;
976
1010 texSubImage3DImpl(target, level, xoffset, yoffset, zoffset, format, type, im ageForRender.get(), WebGLImageConversion::HtmlDomImage, m_unpackFlipY, m_unpackP remultiplyAlpha); 977 texSubImage3DImpl(target, level, xoffset, yoffset, zoffset, format, type, im ageForRender.get(), WebGLImageConversion::HtmlDomImage, m_unpackFlipY, m_unpackP remultiplyAlpha);
1011 } 978 }
1012 979
1013 void WebGL2RenderingContextBase::texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLenum format, GLenum type, HTMLCanvasEl ement* canvas, ExceptionState& exceptionState) 980 void WebGL2RenderingContextBase::texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLenum format, GLenum type, HTMLCanvasEl ement* canvas, ExceptionState& exceptionState)
1014 { 981 {
1015 if (isContextLost() || !validateHTMLCanvasElement("texSubImage3D", canvas, e xceptionState)) 982 if (isContextLost() || !validateHTMLCanvasElement("texSubImage3D", canvas, e xceptionState)
983 || !validateTexFunc3DTarget("texSubImage3D", target)
984 || !validateTexFunc("texSubImage3D", TexSubImage, SourceHTMLCanvasElemen t, target, level, 0, canvas->width(), canvas->height(), 1, 0, format, type, xoff set, yoffset, zoffset))
1016 return; 985 return;
1017 986
1018 WebGLTexture* texture = validateTextureBinding("texSubImage3D", target, fals e); 987 WebGLTexture* texture = validateTextureBinding("texSubImage3D", target, fals e);
1019 ASSERT(texture); 988 ASSERT(texture);
1020 GLenum internalformat = texture->getInternalFormat(target, level); 989 GLenum internalformat = texture->getInternalFormat(target, level);
1021 990
1022 if (!canvas->renderingContext() || !canvas->renderingContext()->isAccelerate d() || !canUseTexImageCanvasByGPU(internalformat, type)) { 991 if (!canvas->renderingContext() || !canvas->renderingContext()->isAccelerate d() || !canUseTexImageCanvasByGPU(internalformat, type)) {
1023 ASSERT(!canvas->renderingContext() || canvas->renderingContext()->is2d() ); 992 ASSERT(!canvas->renderingContext() || canvas->renderingContext()->is2d() );
1024 // 2D canvas has only FrontBuffer. 993 // 2D canvas has only FrontBuffer.
1025 texSubImage3DImpl(target, level, xoffset, yoffset, zoffset, format, type , canvas->copiedImage(FrontBuffer, PreferAcceleration).get(), 994 texSubImage3DImpl(target, level, xoffset, yoffset, zoffset, format, type , canvas->copiedImage(FrontBuffer, PreferAcceleration).get(),
1026 WebGLImageConversion::HtmlDomCanvas, m_unpackFlipY, m_unpackPremulti plyAlpha); 995 WebGLImageConversion::HtmlDomCanvas, m_unpackFlipY, m_unpackPremulti plyAlpha);
1027 return; 996 return;
1028 } 997 }
1029 998
1030 texImageCanvasByGPU(TexSubImage3DByGPU, texture, target, level, GL_RGBA, typ e, xoffset, yoffset, zoffset, canvas); 999 texImageCanvasByGPU(TexSubImage3DByGPU, texture, target, level, GL_RGBA, typ e, xoffset, yoffset, zoffset, canvas);
1031 } 1000 }
1032 1001
1033 void WebGL2RenderingContextBase::texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLenum format, GLenum type, HTMLVideoEle ment* video, ExceptionState& exceptionState) 1002 void WebGL2RenderingContextBase::texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLenum format, GLenum type, HTMLVideoEle ment* video, ExceptionState& exceptionState)
1034 { 1003 {
1035 if (isContextLost() || !validateHTMLVideoElement("texSubImage3D", video, exc eptionState)) 1004 if (isContextLost() || !validateHTMLVideoElement("texSubImage3D", video, exc eptionState)
1005 || !validateTexFunc3DTarget("texSubImage3D", target)
1006 || !validateTexFunc("texSubImage3D", TexSubImage, SourceHTMLVideoElement , target, level, 0, video->videoWidth(), video->videoHeight(), 1, 0, format, typ e, xoffset, yoffset, zoffset))
1036 return; 1007 return;
1037 1008
1038 RefPtr<Image> image = videoFrameToImage(video); 1009 RefPtr<Image> image = videoFrameToImage(video);
1039 if (!image) 1010 if (!image)
1040 return; 1011 return;
1041 texSubImage3DImpl(target, level, xoffset, yoffset, zoffset, format, type, im age.get(), WebGLImageConversion::HtmlDomVideo, m_unpackFlipY, m_unpackPremultipl yAlpha); 1012 texSubImage3DImpl(target, level, xoffset, yoffset, zoffset, format, type, im age.get(), WebGLImageConversion::HtmlDomVideo, m_unpackFlipY, m_unpackPremultipl yAlpha);
1042 } 1013 }
1043 1014
1044 void WebGL2RenderingContextBase::copyTexSubImage3D(GLenum target, GLint level, G Lint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLs izei height) 1015 void WebGL2RenderingContextBase::copyTexSubImage3D(GLenum target, GLint level, G Lint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLs izei height)
1045 { 1016 {
(...skipping 16 matching lines...) Expand all
1062 if (!validateTexFunc3DTarget("compressedTexImage3D", target)) 1033 if (!validateTexFunc3DTarget("compressedTexImage3D", target))
1063 return; 1034 return;
1064 if (!validateTexFuncLevel("compressedTexImage3D", target, level)) 1035 if (!validateTexFuncLevel("compressedTexImage3D", target, level))
1065 return; 1036 return;
1066 if (!validateCompressedTexFormat("compressedTexImage3D", internalformat)) 1037 if (!validateCompressedTexFormat("compressedTexImage3D", internalformat))
1067 return; 1038 return;
1068 if (border) { 1039 if (border) {
1069 synthesizeGLError(GL_INVALID_VALUE, "compressedTexImage3D", "border not 0"); 1040 synthesizeGLError(GL_INVALID_VALUE, "compressedTexImage3D", "border not 0");
1070 return; 1041 return;
1071 } 1042 }
1072 if (!validateCompressedTexDimensions("compressedTexImage3D", NotTexSubImage2 D, target, level, width, height, depth, internalformat)) 1043 if (!validateCompressedTexDimensions("compressedTexImage3D", NotTexSubImage, target, level, width, height, depth, internalformat))
1073 return; 1044 return;
1074 if (!validateCompressedTexFuncData("compressedTexImage3D", width, height, de pth, internalformat, data)) 1045 if (!validateCompressedTexFuncData("compressedTexImage3D", width, height, de pth, internalformat, data))
1075 return; 1046 return;
1076 1047
1077 WebGLTexture* tex = validateTextureBinding("compressedTexImage3D", target, t rue); 1048 WebGLTexture* tex = validateTextureBinding("compressedTexImage3D", target, t rue);
1078 if (!tex) 1049 if (!tex)
1079 return; 1050 return;
1080 if (tex->isImmutable()) { 1051 if (tex->isImmutable()) {
1081 synthesizeGLError(GL_INVALID_OPERATION, "compressedTexImage3D", "attempt ed to modify immutable texture"); 1052 synthesizeGLError(GL_INVALID_OPERATION, "compressedTexImage3D", "attempt ed to modify immutable texture");
1082 return; 1053 return;
(...skipping 2389 matching lines...) Expand 10 before | Expand all | Expand 10 after
3472 3443
3473 WebGLSampler* sampler = m_samplerUnits[unit]; 3444 WebGLSampler* sampler = m_samplerUnits[unit];
3474 3445
3475 if (sampler) 3446 if (sampler)
3476 return sampler->getSamplerState(); 3447 return sampler->getSamplerState();
3477 3448
3478 return WebGLRenderingContextBase::getTextureUnitSamplerState(target, unit); 3449 return WebGLRenderingContextBase::getTextureUnitSamplerState(target, unit);
3479 } 3450 }
3480 3451
3481 } // namespace blink 3452 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698