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

Side by Side Diff: Source/modules/webgl/WebGLRenderingContextBase.cpp

Issue 1326653002: Remove duplicate validateTexFuncLevel (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 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
« no previous file with comments | « Source/modules/webgl/WebGLRenderingContextBase.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Apple Inc. All rights reserved. 2 * Copyright (C) 2009 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 1812 matching lines...) Expand 10 before | Expand all | Expand 10 after
1823 synthesizeGLError(GL_INVALID_OPERATION, functionName, "format can not be set, only rendered to"); 1823 synthesizeGLError(GL_INVALID_OPERATION, functionName, "format can not be set, only rendered to");
1824 return false; 1824 return false;
1825 } 1825 }
1826 return true; 1826 return true;
1827 } 1827 }
1828 1828
1829 void WebGLRenderingContextBase::copyTexImage2D(GLenum target, GLint level, GLenu m internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) 1829 void WebGLRenderingContextBase::copyTexImage2D(GLenum target, GLint level, GLenu m internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
1830 { 1830 {
1831 if (isContextLost()) 1831 if (isContextLost())
1832 return; 1832 return;
1833 if (!validateTexFuncLevel("copyTexImage2D", target, level))
1834 return;
1833 if (!validateTexFuncParameters("copyTexImage2D", NotTexSubImage2D, target, l evel, internalformat, width, height, border, internalformat, GL_UNSIGNED_BYTE)) 1835 if (!validateTexFuncParameters("copyTexImage2D", NotTexSubImage2D, target, l evel, internalformat, width, height, border, internalformat, GL_UNSIGNED_BYTE))
1834 return; 1836 return;
1835 if (!validateSettableTexFormat("copyTexImage2D", internalformat)) 1837 if (!validateSettableTexFormat("copyTexImage2D", internalformat))
1836 return; 1838 return;
1837 WebGLTexture* tex = validateTextureBinding("copyTexImage2D", target, true); 1839 WebGLTexture* tex = validateTextureBinding("copyTexImage2D", target, true);
1838 if (!tex) 1840 if (!tex)
1839 return; 1841 return;
1840 if (tex->isImmutable()) { 1842 if (tex->isImmutable()) {
1841 synthesizeGLError(GL_INVALID_OPERATION, "copyTexImage2D", "attempted to modify immutable texture"); 1843 synthesizeGLError(GL_INVALID_OPERATION, "copyTexImage2D", "attempted to modify immutable texture");
1842 return; 1844 return;
(...skipping 2132 matching lines...) Expand 10 before | Expand all | Expand 10 after
3975 && extensionsUtil()->isExtensionEnabled("GL_CHROMIUM_color_buffer_float_ rgb")) 3977 && extensionsUtil()->isExtensionEnabled("GL_CHROMIUM_color_buffer_float_ rgb"))
3976 return GL_RGB32F_EXT; 3978 return GL_RGB32F_EXT;
3977 return internalformat; 3979 return internalformat;
3978 } 3980 }
3979 3981
3980 void WebGLRenderingContextBase::texImage2DBase(GLenum target, GLint level, GLenu m internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GL enum type, const void* pixels) 3982 void WebGLRenderingContextBase::texImage2DBase(GLenum target, GLint level, GLenu m internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GL enum type, const void* pixels)
3981 { 3983 {
3982 // All calling functions check isContextLost, so a duplicate check is not ne eded here. 3984 // All calling functions check isContextLost, so a duplicate check is not ne eded here.
3983 // FIXME: Handle errors. 3985 // FIXME: Handle errors.
3984 WebGLTexture* tex = validateTextureBinding("texImage2D", target, true); 3986 WebGLTexture* tex = validateTextureBinding("texImage2D", target, true);
3987 ASSERT(validateTexFuncLevel("texImage2D", target, level));
3985 ASSERT(validateTexFuncParameters("texImage2D", NotTexSubImage2D, target, lev el, internalformat, width, height, border, format, type)); 3988 ASSERT(validateTexFuncParameters("texImage2D", NotTexSubImage2D, target, lev el, internalformat, width, height, border, format, type));
3986 ASSERT(tex); 3989 ASSERT(tex);
3987 ASSERT(!isNPOTStrict() || !level || !WebGLTexture::isNPOT(width, height)); 3990 ASSERT(!isNPOTStrict() || !level || !WebGLTexture::isNPOT(width, height));
3988 ASSERT(!pixels || validateSettableTexFormat("texImage2D", internalformat)); 3991 ASSERT(!pixels || validateSettableTexFormat("texImage2D", internalformat));
3989 webContext()->texImage2D(target, level, convertTexInternalFormat(internalfor mat, type), width, height, border, format, type, pixels); 3992 webContext()->texImage2D(target, level, convertTexInternalFormat(internalfor mat, type), width, height, border, format, type, pixels);
3990 tex->setLevelInfo(target, level, internalformat, width, height, 1, type); 3993 tex->setLevelInfo(target, level, internalformat, width, height, 1, type);
3991 } 3994 }
3992 3995
3993 void WebGLRenderingContextBase::texImage2DImpl(GLenum target, GLint level, GLenu m internalformat, GLenum format, GLenum type, Image* image, WebGLImageConversion ::ImageHtmlDomSource domSource, bool flipY, bool premultiplyAlpha) 3996 void WebGLRenderingContextBase::texImage2DImpl(GLenum target, GLint level, GLenu m internalformat, GLenum format, GLenum type, Image* image, WebGLImageConversion ::ImageHtmlDomSource domSource, bool flipY, bool premultiplyAlpha)
3994 { 3997 {
(...skipping 20 matching lines...) Expand all
4015 4018
4016 if (m_unpackAlignment != 1) 4019 if (m_unpackAlignment != 1)
4017 webContext()->pixelStorei(GL_UNPACK_ALIGNMENT, 1); 4020 webContext()->pixelStorei(GL_UNPACK_ALIGNMENT, 1);
4018 texImage2DBase(target, level, internalformat, imageExtractor.imageWidth(), i mageExtractor.imageHeight(), 0, format, type, needConversion ? data.data() : ima gePixelData); 4021 texImage2DBase(target, level, internalformat, imageExtractor.imageWidth(), i mageExtractor.imageHeight(), 0, format, type, needConversion ? data.data() : ima gePixelData);
4019 if (m_unpackAlignment != 1) 4022 if (m_unpackAlignment != 1)
4020 webContext()->pixelStorei(GL_UNPACK_ALIGNMENT, m_unpackAlignment); 4023 webContext()->pixelStorei(GL_UNPACK_ALIGNMENT, m_unpackAlignment);
4021 } 4024 }
4022 4025
4023 bool WebGLRenderingContextBase::validateTexFunc(const char* functionName, TexIma geFunctionType functionType, TexFuncValidationSourceType sourceType, GLenum targ et, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint bor der, GLenum format, GLenum type, GLint xoffset, GLint yoffset) 4026 bool WebGLRenderingContextBase::validateTexFunc(const char* functionName, TexIma geFunctionType functionType, TexFuncValidationSourceType sourceType, GLenum targ et, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint bor der, GLenum format, GLenum type, GLint xoffset, GLint yoffset)
4024 { 4027 {
4028 if (!validateTexFuncLevel(functionName, target, level))
4029 return false;
4025 WebGLTexture* texture = validateTextureBinding(functionName, target, true); 4030 WebGLTexture* texture = validateTextureBinding(functionName, target, true);
4026 if (!texture) 4031 if (!texture)
4027 return false; 4032 return false;
4028 4033
4029 if (functionType == TexSubImage2D) { 4034 if (functionType == TexSubImage2D) {
4030 if (!validateTexFuncLevel(functionName, target, level))
4031 return false;
4032 if (!texture->isValid(target, level)) { 4035 if (!texture->isValid(target, level)) {
4033 synthesizeGLError(GL_INVALID_OPERATION, "texSubImage2D", "no previou sly defined texture image"); 4036 synthesizeGLError(GL_INVALID_OPERATION, "texSubImage2D", "no previou sly defined texture image");
4034 return false; 4037 return false;
4035 } 4038 }
4036 } 4039 }
4037 4040
4038 if (internalformat == 0) 4041 if (internalformat == 0)
4039 internalformat = texture->getInternalFormat(target, level); 4042 internalformat = texture->getInternalFormat(target, level);
4040 if (!validateTexFuncParameters(functionName, functionType, target, level, in ternalformat, width, height, border, format, type)) 4043 if (!validateTexFuncParameters(functionName, functionType, target, level, in ternalformat, width, height, border, format, type))
4041 return false; 4044 return false;
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
4109 SkPaint paint; 4112 SkPaint paint;
4110 image->draw(buf->canvas(), paint, destRect, srcRect, DoNotRespectImageOrient ation, Image::DoNotClampImageToSourceRect); 4113 image->draw(buf->canvas(), paint, destRect, srcRect, DoNotRespectImageOrient ation, Image::DoNotClampImageToSourceRect);
4111 return buf->newImageSnapshot(); 4114 return buf->newImageSnapshot();
4112 } 4115 }
4113 4116
4114 void WebGLRenderingContextBase::texImage2D(GLenum target, GLint level, GLenum in ternalformat, 4117 void WebGLRenderingContextBase::texImage2D(GLenum target, GLint level, GLenum in ternalformat,
4115 GLsizei width, GLsizei height, GLint border, 4118 GLsizei width, GLsizei height, GLint border,
4116 GLenum format, GLenum type, DOMArrayBufferView* pixels) 4119 GLenum format, GLenum type, DOMArrayBufferView* pixels)
4117 { 4120 {
4118 if (isContextLost() || !validateTexFunc("texImage2D", NotTexSubImage2D, Sour ceArrayBufferView, target, level, internalformat, width, height, border, format, type, 0, 0) 4121 if (isContextLost() || !validateTexFunc("texImage2D", NotTexSubImage2D, Sour ceArrayBufferView, target, level, internalformat, width, height, border, format, type, 0, 0)
4119 || !validateTexFuncData("texImage2D", level, width, height, internalform at, format, type, pixels, NullAllowed)) 4122 || !validateTexFuncData("texImage2D", level, width, height, format, type , pixels, NullAllowed))
4120 return; 4123 return;
4121 void* data = pixels ? pixels->baseAddress() : 0; 4124 void* data = pixels ? pixels->baseAddress() : 0;
4122 Vector<uint8_t> tempData; 4125 Vector<uint8_t> tempData;
4123 bool changeUnpackAlignment = false; 4126 bool changeUnpackAlignment = false;
4124 if (data && (m_unpackFlipY || m_unpackPremultiplyAlpha)) { 4127 if (data && (m_unpackFlipY || m_unpackPremultiplyAlpha)) {
4125 if (!WebGLImageConversion::extractTextureData(width, height, format, typ e, m_unpackAlignment, m_unpackFlipY, m_unpackPremultiplyAlpha, data, tempData)) 4128 if (!WebGLImageConversion::extractTextureData(width, height, format, typ e, m_unpackAlignment, m_unpackFlipY, m_unpackPremultiplyAlpha, data, tempData))
4126 return; 4129 return;
4127 data = tempData.data(); 4130 data = tempData.data();
4128 changeUnpackAlignment = true; 4131 changeUnpackAlignment = true;
4129 } 4132 }
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
4384 4387
4385 void WebGLRenderingContextBase::texSubImage2DBase(GLenum target, GLint level, GL int xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels) 4388 void WebGLRenderingContextBase::texSubImage2DBase(GLenum target, GLint level, GL int xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels)
4386 { 4389 {
4387 // FIXME: Handle errors. 4390 // FIXME: Handle errors.
4388 ASSERT(!isContextLost()); 4391 ASSERT(!isContextLost());
4389 WebGLTexture* tex = validateTextureBinding("texSubImage2D", target, true); 4392 WebGLTexture* tex = validateTextureBinding("texSubImage2D", target, true);
4390 if (!tex) { 4393 if (!tex) {
4391 ASSERT_NOT_REACHED(); 4394 ASSERT_NOT_REACHED();
4392 return; 4395 return;
4393 } 4396 }
4397 ASSERT(validateTexFuncLevel("texSubImage2D", target, level));
4394 ASSERT(validateTexFuncParameters("texSubImage2D", TexSubImage2D, target, lev el, tex->getInternalFormat(target, level), width, height, 0, format, type)); 4398 ASSERT(validateTexFuncParameters("texSubImage2D", TexSubImage2D, target, lev el, tex->getInternalFormat(target, level), width, height, 0, format, type));
4395 ASSERT(validateSize("texSubImage2D", xoffset, yoffset)); 4399 ASSERT(validateSize("texSubImage2D", xoffset, yoffset));
4396 ASSERT(validateSettableTexFormat("texSubImage2D", format)); 4400 ASSERT(validateSettableTexFormat("texSubImage2D", format));
4397 ASSERT((xoffset + width) >= 0); 4401 ASSERT((xoffset + width) >= 0);
4398 ASSERT((yoffset + height) >= 0); 4402 ASSERT((yoffset + height) >= 0);
4399 ASSERT(tex->getWidth(target, level) >= (xoffset + width)); 4403 ASSERT(tex->getWidth(target, level) >= (xoffset + width));
4400 ASSERT(tex->getHeight(target, level) >= (yoffset + height)); 4404 ASSERT(tex->getHeight(target, level) >= (yoffset + height));
4401 ASSERT(tex->getType(target, level) == type); 4405 ASSERT(tex->getType(target, level) == type);
4402 webContext()->texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels); 4406 webContext()->texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
4403 } 4407 }
(...skipping 29 matching lines...) Expand all
4433 } 4437 }
4434 4438
4435 void WebGLRenderingContextBase::texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, 4439 void WebGLRenderingContextBase::texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
4436 GLsizei width, GLsizei height, 4440 GLsizei width, GLsizei height,
4437 GLenum format, GLenum type, DOMArrayBufferView* pixels) 4441 GLenum format, GLenum type, DOMArrayBufferView* pixels)
4438 { 4442 {
4439 WebGLTexture* texture = validateTextureBinding("texSubImage2D", target, true ); 4443 WebGLTexture* texture = validateTextureBinding("texSubImage2D", target, true );
4440 if (!texture) 4444 if (!texture)
4441 return; 4445 return;
4442 4446
4443 GLenum internalformat = texture->getInternalFormat(target, level);
4444 if (isContextLost() || !validateTexFunc("texSubImage2D", TexSubImage2D, Sour ceArrayBufferView, target, level, 0, width, height, 0, format, type, xoffset, yo ffset) 4447 if (isContextLost() || !validateTexFunc("texSubImage2D", TexSubImage2D, Sour ceArrayBufferView, target, level, 0, width, height, 0, format, type, xoffset, yo ffset)
4445 || !validateTexFuncData("texSubImage2D", level, width, height, internalf ormat, format, type, pixels, NullNotAllowed)) 4448 || !validateTexFuncData("texSubImage2D", level, width, height, format, t ype, pixels, NullNotAllowed))
4446 return; 4449 return;
4447 void* data = pixels->baseAddress(); 4450 void* data = pixels->baseAddress();
4448 Vector<uint8_t> tempData; 4451 Vector<uint8_t> tempData;
4449 bool changeUnpackAlignment = false; 4452 bool changeUnpackAlignment = false;
4450 if (data && (m_unpackFlipY || m_unpackPremultiplyAlpha)) { 4453 if (data && (m_unpackFlipY || m_unpackPremultiplyAlpha)) {
4451 if (!WebGLImageConversion::extractTextureData(width, height, format, typ e, 4454 if (!WebGLImageConversion::extractTextureData(width, height, format, typ e,
4452 m_unpackAlignment, 4455 m_unpackAlignment,
4453 m_unpackFlipY, m_unpackPremultiplyAlp ha, 4456 m_unpackFlipY, m_unpackPremultiplyAlp ha,
4454 data, 4457 data,
4455 tempData)) 4458 tempData))
(...skipping 1031 matching lines...) Expand 10 before | Expand all | Expand 10 after
5487 default: 5490 default:
5488 synthesizeGLError(GL_INVALID_ENUM, functionName, "invalid target"); 5491 synthesizeGLError(GL_INVALID_ENUM, functionName, "invalid target");
5489 return false; 5492 return false;
5490 } 5493 }
5491 return true; 5494 return true;
5492 } 5495 }
5493 5496
5494 bool WebGLRenderingContextBase::validateTexFuncParameters(const char* functionNa me, TexImageFunctionType functionType, GLenum target, 5497 bool WebGLRenderingContextBase::validateTexFuncParameters(const char* functionNa me, TexImageFunctionType functionType, GLenum target,
5495 GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint bor der, GLenum format, GLenum type) 5498 GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint bor der, GLenum format, GLenum type)
5496 { 5499 {
5497 if (!validateTexFuncLevel(functionName, target, level))
5498 return false;
5499
5500 // We absolutely have to validate the format and type combination. 5500 // We absolutely have to validate the format and type combination.
5501 // The texImage2D entry points taking HTMLImage, etc. will produce 5501 // The texImage2D entry points taking HTMLImage, etc. will produce
5502 // temporary data based on this combination, so it must be legal. 5502 // temporary data based on this combination, so it must be legal.
5503 if (!validateTexFuncFormatAndType(functionName, internalformat, format, type , level)) 5503 if (!validateTexFuncFormatAndType(functionName, internalformat, format, type , level))
5504 return false; 5504 return false;
5505 5505
5506 if (!validateTexFuncDimensions(functionName, functionType, target, level, wi dth, height)) 5506 if (!validateTexFuncDimensions(functionName, functionType, target, level, wi dth, height))
5507 return false; 5507 return false;
5508 5508
5509 if (border) { 5509 if (border) {
5510 synthesizeGLError(GL_INVALID_VALUE, functionName, "border != 0"); 5510 synthesizeGLError(GL_INVALID_VALUE, functionName, "border != 0");
5511 return false; 5511 return false;
5512 } 5512 }
5513 5513
5514 return true; 5514 return true;
5515 } 5515 }
5516 5516
5517 bool WebGLRenderingContextBase::validateTexFuncData(const char* functionName, GL int level, GLsizei width, GLsizei height, GLenum internalformat, GLenum format, GLenum type, DOMArrayBufferView* pixels, NullDisposition disposition) 5517 bool WebGLRenderingContextBase::validateTexFuncData(const char* functionName, GL int level, GLsizei width, GLsizei height, GLenum format, GLenum type, DOMArrayBu fferView* pixels, NullDisposition disposition)
Ken Russell (switch to Gerrit) 2015/09/01 22:52:49 It's surprising that this argument was unused. I w
qiankun 2015/09/02 09:49:07 I move formats and types validation out of validat
5518 { 5518 {
5519 // All calling functions check isContextLost, so a duplicate check is not ne eded here. 5519 // All calling functions check isContextLost, so a duplicate check is not ne eded here.
5520 if (!pixels) { 5520 if (!pixels) {
5521 if (disposition == NullAllowed) 5521 if (disposition == NullAllowed)
5522 return true; 5522 return true;
5523 synthesizeGLError(GL_INVALID_VALUE, functionName, "no pixels"); 5523 synthesizeGLError(GL_INVALID_VALUE, functionName, "no pixels");
5524 return false; 5524 return false;
5525 } 5525 }
5526 5526
5527 if (!validateSettableTexFormat(functionName, format)) 5527 if (!validateSettableTexFormat(functionName, format))
(...skipping 1159 matching lines...) Expand 10 before | Expand all | Expand 10 after
6687 6687
6688 return totalBytesPerPixel; 6688 return totalBytesPerPixel;
6689 } 6689 }
6690 6690
6691 DrawingBuffer* WebGLRenderingContextBase::drawingBuffer() const 6691 DrawingBuffer* WebGLRenderingContextBase::drawingBuffer() const
6692 { 6692 {
6693 return m_drawingBuffer.get(); 6693 return m_drawingBuffer.get();
6694 } 6694 }
6695 6695
6696 } // namespace blink 6696 } // namespace blink
OLDNEW
« no previous file with comments | « Source/modules/webgl/WebGLRenderingContextBase.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698