Changeset 62396 in webkit
- Timestamp:
- Jul 2, 2010 12:06:12 PM (14 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r62394 r62396 1 2010-07-02 Zhenyao Mo <zmo@google.com> 2 3 Reviewed by Dimitri Glazkov. 4 5 linkProgram should fail when vertex/fragment shaders are not both present 6 https://bugs.webkit.org/show_bug.cgi?id=41380 7 8 * fast/canvas/webgl/program-test-expected.txt: Added. 9 * fast/canvas/webgl/program-test.html: Added. 10 1 11 2010-07-02 Qi Zhang <qi.2.zhang@nokia.com> 2 12 -
trunk/WebCore/ChangeLog
r62394 r62396 1 2010-07-02 Zhenyao Mo <zmo@google.com> 2 3 Reviewed by Dimitri Glazkov. 4 5 linkProgram should fail when vertex/fragment shaders are not both present 6 https://bugs.webkit.org/show_bug.cgi?id=41380 7 8 Test: fast/canvas/webgl/program-test.html 9 10 * html/canvas/WebGLProgram.cpp: Add flag for link failure due to missing shaders. 11 (WebCore::WebGLProgram::WebGLProgram): 12 * html/canvas/WebGLProgram.h: Add interface for linkFailure flag. 13 (WebCore::WebGLProgram::isLinkFailureFlagSet): 14 (WebCore::WebGLProgram::setLinkFailureFlag): 15 * html/canvas/WebGLRenderingContext.cpp: 16 (WebCore::WebGLRenderingContext::getProgramParameter): Intercept when linkFailureFlag is set. 17 (WebCore::WebGLRenderingContext::linkProgram): Check if there are missing shaders and don't link if yes. 18 * html/canvas/WebGLShader.cpp: Cache shader type. 19 (WebCore::WebGLShader::WebGLShader): 20 * html/canvas/WebGLShader.h: Ditto. 21 (WebCore::WebGLShader::getType): 22 1 23 2010-07-02 Qi Zhang <qi.2.zhang@nokia.com> 2 24 -
trunk/WebCore/html/canvas/WebGLProgram.cpp
r62385 r62396 40 40 WebGLProgram::WebGLProgram(WebGLRenderingContext* ctx) 41 41 : CanvasObject(ctx) 42 , m_linkFailure(false) 42 43 { 43 44 setObject(context()->graphicsContext3D()->createProgram()); -
trunk/WebCore/html/canvas/WebGLProgram.h
r62385 r62396 49 49 bool isUsingVertexAttrib0() const; 50 50 51 // Return true means getProgramParameter(LINK_STATUS) should return 52 // false; return false means we should actually call 53 // getProgramParameter(LINK_STATUS) to find out. 54 bool isLinkFailureFlagSet() const { return m_linkFailure; } 55 void setLinkFailureFlag(bool failed) { m_linkFailure = failed; } 56 51 57 protected: 52 58 WebGLProgram(WebGLRenderingContext*); … … 58 64 59 65 Vector<int> m_activeAttribLocations; 66 67 bool m_linkFailure; 60 68 }; 61 69 -
trunk/WebCore/html/canvas/WebGLRenderingContext.cpp
r62385 r62396 1411 1411 switch (pname) { 1412 1412 case GraphicsContext3D::DELETE_STATUS: 1413 case GraphicsContext3D::VALIDATE_STATUS: 1414 m_context->getProgramiv(program, pname, &value); 1415 return WebGLGetInfo(static_cast<bool>(value)); 1413 1416 case GraphicsContext3D::LINK_STATUS: 1414 case GraphicsContext3D::VALIDATE_STATUS: 1417 if (program->isLinkFailureFlagSet()) 1418 return WebGLGetInfo(false); 1415 1419 m_context->getProgramiv(program, pname, &value); 1416 1420 return WebGLGetInfo(static_cast<bool>(value)); … … 1830 1834 if (!validateWebGLObject(program)) 1831 1835 return; 1836 if (!isGLES2Compliant()) { 1837 Vector<WebGLShader*> shaders; 1838 bool succeed = getAttachedShaders(program, shaders, ec); 1839 if (succeed) { 1840 bool vShader = false; 1841 bool fShader = false; 1842 for (size_t ii = 0; ii < shaders.size() && (!vShader || !fShader); ++ii) { 1843 if (shaders[ii]->getType() == GraphicsContext3D::VERTEX_SHADER) 1844 vShader = true; 1845 else if (shaders[ii]->getType() == GraphicsContext3D::FRAGMENT_SHADER) 1846 fShader = true; 1847 } 1848 if (!vShader || !fShader) 1849 succeed = false; 1850 } 1851 if (!succeed) { 1852 program->setLinkFailureFlag(true); 1853 return; 1854 } 1855 program->setLinkFailureFlag(false); 1856 } 1857 1832 1858 m_context->linkProgram(program); 1833 1859 program->cacheActiveAttribLocations(); -
trunk/WebCore/html/canvas/WebGLShader.cpp
r51327 r62396 40 40 WebGLShader::WebGLShader(WebGLRenderingContext* ctx, GraphicsContext3D::WebGLEnumType type) 41 41 : CanvasObject(ctx) 42 , m_type(type) 42 43 { 43 44 setObject(context()->graphicsContext3D()->createShader(type)); -
trunk/WebCore/html/canvas/WebGLShader.h
r58790 r62396 40 40 static PassRefPtr<WebGLShader> create(WebGLRenderingContext*, GraphicsContext3D::WebGLEnumType); 41 41 42 GraphicsContext3D::WebGLEnumType getType() const { return m_type; } 43 42 44 private: 43 45 WebGLShader(WebGLRenderingContext*, GraphicsContext3D::WebGLEnumType); … … 46 48 47 49 virtual bool isShader() const { return true; } 50 51 GraphicsContext3D::WebGLEnumType m_type; 48 52 }; 49 53
Note: See TracChangeset
for help on using the changeset viewer.