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

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

Issue 1543233002: Unify validation for TexImage{2D|3D} (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix comments#3 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 837 matching lines...) Expand 10 before | Expand all | Expand 10 after
848 void WebGL2RenderingContextBase::texStorage3D(GLenum target, GLsizei levels, GLe num internalformat, GLsizei width, GLsizei height, GLsizei depth) 848 void WebGL2RenderingContextBase::texStorage3D(GLenum target, GLsizei levels, GLe num internalformat, GLsizei width, GLsizei height, GLsizei depth)
849 { 849 {
850 if (isContextLost() || !validateTexStorage("texStorage3D", target, levels, i nternalformat, width, height, depth, TexStorageType3D)) 850 if (isContextLost() || !validateTexStorage("texStorage3D", target, levels, i nternalformat, width, height, depth, TexStorageType3D))
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 bool WebGL2RenderingContextBase::validateTexImage3D(const char* functionName, GL enum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type)
859 {
860 if (!validateTexFunc3DTarget(functionName, target))
861 return false;
862
863 if (!validateTexFuncLevel(functionName, target, level))
864 return false;
865
866 if (!validateTexFuncParameters(functionName, NotTexSubImage2D, target, level , internalformat, width, height, depth, border, format, type))
867 return false;
868
869 return true;
870 }
871
872 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)
873 { 859 {
874 if (isContextLost() || !validateTexImage3D("texImage3D", target, level, inte rnalformat, width, height, depth, border, format, type) 860 if (isContextLost() || !validateTexFunc3DTarget("texImage3D", target)
861 || !validateTexFunc("texImage3D", NotTexSubImage2D, SourceArrayBufferVie w, target, level, internalformat, width, height, depth, border, format, type, 0, 0, 0)
875 || !validateTexFuncData("texImage3D", level, width, height, depth, forma t, type, pixels, NullAllowed)) 862 || !validateTexFuncData("texImage3D", level, width, height, depth, forma t, type, pixels, NullAllowed))
876 return; 863 return;
877 864
878 void* data = pixels ? pixels->baseAddress() : 0; 865 void* data = pixels ? pixels->baseAddress() : 0;
879 Vector<uint8_t> tempData; 866 Vector<uint8_t> tempData;
880 if (data && (m_unpackFlipY || m_unpackPremultiplyAlpha)) { 867 if (data && (m_unpackFlipY || m_unpackPremultiplyAlpha)) {
881 // FIXME: WebGLImageConversion needs to be updated to accept image depth . 868 // FIXME: WebGLImageConversion needs to be updated to accept image depth .
882 notImplemented(); 869 notImplemented();
883 return; 870 return;
884 } 871 }
885 872
886 WebGLTexture* tex = validateTextureBinding("texImage3D", target, true); 873 WebGLTexture* tex = validateTextureBinding("texImage3D", target, true);
887 if (!tex) 874 ASSERT(tex);
888 return;
889
890 if (tex->isImmutable()) {
891 synthesizeGLError(GL_INVALID_OPERATION, "texImage3D", "attempted to modi fy immutable texture");
892 return;
893 }
894
895 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);
896 tex->setLevelInfo(target, level, internalformat, width, height, depth, type) ; 876 tex->setLevelInfo(target, level, internalformat, width, height, depth, type) ;
897 } 877 }
898 878
899 bool WebGL2RenderingContextBase::validateTexSubImage3D(const char* functionName, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, 879 bool WebGL2RenderingContextBase::validateTexSubImage3D(const char* functionName, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
900 GLenum format, GLenum type, GLsizei width, GLsizei height, GLsizei depth) 880 GLenum format, GLenum type, GLsizei width, GLsizei height, GLsizei depth)
901 { 881 {
902 if (!validateTexFunc3DTarget(functionName, target)) 882 if (!validateTexFunc3DTarget(functionName, target))
903 return false; 883 return false;
904 884
(...skipping 2587 matching lines...) Expand 10 before | Expand all | Expand 10 after
3492 3472
3493 WebGLSampler* sampler = m_samplerUnits[unit]; 3473 WebGLSampler* sampler = m_samplerUnits[unit];
3494 3474
3495 if (sampler) 3475 if (sampler)
3496 return sampler->getSamplerState(); 3476 return sampler->getSamplerState();
3497 3477
3498 return WebGLRenderingContextBase::getTextureUnitSamplerState(target, unit); 3478 return WebGLRenderingContextBase::getTextureUnitSamplerState(target, unit);
3499 } 3479 }
3500 3480
3501 } // namespace blink 3481 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698