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

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: handle neutered image data 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 }
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698