Changeset 90180 in webkit


Ignore:
Timestamp:
Jun 30, 2011, 4:24:26 PM (14 years ago)
Author:
zmo@google.com
Message:

2011-06-30 Zhenyao Mo <zmo@google.com>

Reviewed by Kenneth Russell.

Improve WebGL object lifetime management in WebGLRenderingContext
https://bugs.webkit.org/show_bug.cgi?id=63635

  • fast/canvas/webgl/gl-object-get-calls-expected.txt:
  • fast/canvas/webgl/gl-object-get-calls.html: Fix a bug so getFramebufferAtatchmentParameter generates an error if nothing is attached and something other than TYPE is queried.
  • fast/canvas/webgl/object-deletion-behaviour-expected.txt:
  • fast/canvas/webgl/object-deletion-behaviour.html: Ditto.
  • fast/canvas/webgl/program-test.html: Fix the test so the order of shaders returned by getAttachedShaders doesn't matter.

2011-06-30 Zhenyao Mo <zmo@google.com>

Reviewed by Kenneth Russell.

Improve WebGL object lifetime management in WebGLRenderingContext
https://bugs.webkit.org/show_bug.cgi?id=63635

  • html/canvas/WebGLRenderingContext.cpp: (WebCore::WebGLRenderingContext::getAttachedShaders): Use cached objects instead of querying the underlying GL. (WebCore::WebGLRenderingContext::getFramebufferAttachmentParameter): Ditto. (WebCore::WebGLRenderingContext::detachAndRemoveAllObjects): Multiple loop because objects might be removed from the table within an iteration.
  • html/canvas/WebGLRenderingContext.h:
Location:
trunk
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r90178 r90180  
     12011-06-30  Zhenyao Mo  <zmo@google.com>
     2
     3        Reviewed by Kenneth Russell.
     4
     5        Improve WebGL object lifetime management in WebGLRenderingContext
     6        https://bugs.webkit.org/show_bug.cgi?id=63635
     7
     8        * fast/canvas/webgl/gl-object-get-calls-expected.txt:
     9        * fast/canvas/webgl/gl-object-get-calls.html: Fix a bug so getFramebufferAtatchmentParameter generates an error if nothing is attached and something other than TYPE is queried.
     10        * fast/canvas/webgl/object-deletion-behaviour-expected.txt:
     11        * fast/canvas/webgl/object-deletion-behaviour.html: Ditto.
     12        * fast/canvas/webgl/program-test.html: Fix the test so the order of shaders returned by getAttachedShaders doesn't matter.
     13
    1142011-06-27  Diego Gonzalez  <diegohcg@webkit.org>
    215
  • trunk/LayoutTests/fast/canvas/webgl/gl-object-get-calls-expected.txt

    r77311 r90180  
    8383PASS gl.getVertexAttrib(1, gl.CURRENT_VERTEX_ATTRIB) is [5, 6, 7, 8]
    8484PASS getError was expected value: NO_ERROR :
    85 PASS gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME) is null
    86 PASS gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME) is null
     85PASS gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE) is gl.NONE
     86PASS gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE) is gl.NONE
    8787PASS gl.getVertexAttrib(1, gl.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING) is null
    8888PASS getError was expected value: NO_ERROR :
  • trunk/LayoutTests/fast/canvas/webgl/gl-object-get-calls.html

    r77311 r90180  
     1<!DOCTYPE html>
    12<html>
    23<head>
     4<meta charset="utf-8">
    35<link rel="stylesheet" href="../../js/resources/js-test-style.css"/>
    46<script src="../../js/resources/js-test-pre.js"></script>
     
    236238// Test cases where name == 0
    237239gl.deleteTexture(texture);
    238 shouldBeNull('gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME)');
     240shouldBe('gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE)', 'gl.NONE');
    239241gl.deleteRenderbuffer(renderbuffer);
    240 shouldBeNull('gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME)');
     242shouldBe('gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE)', 'gl.NONE');
    241243gl.deleteBuffer(buffer);
    242244shouldBeNull('gl.getVertexAttrib(1, gl.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING)');
  • trunk/LayoutTests/fast/canvas/webgl/object-deletion-behaviour-expected.txt

    r77417 r90180  
    3434PASS gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME) is tex
    3535PASS gl.deleteTexture(tex) was expected value: NO_ERROR.
    36 PASS gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME) is null
     36PASS gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE) is gl.NONE
     37PASS gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME) was expected value: INVALID_ENUM.
    3738PASS gl.isTexture(tex) is false
    3839PASS gl.getParameter(gl.TEXTURE_BINDING_2D) is null
     
    5354PASS gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME) is rbo
    5455PASS gl.deleteRenderbuffer(rbo) was expected value: NO_ERROR.
    55 PASS gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME) is null
     56PASS gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE) is gl.NONE
     57PASS gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME) was expected value: INVALID_ENUM.
    5658PASS gl.isRenderbuffer(rbo) is false
    5759PASS gl.getParameter(gl.RENDERBUFFER_BINDING) is null
  • trunk/LayoutTests/fast/canvas/webgl/object-deletion-behaviour.html

    r77417 r90180  
     1<!DOCTYPE html>
    12<html>
    23<head>
     4<meta charset="utf-8">
    35<link rel="stylesheet" href="../../js/resources/js-test-style.css"/>
    46<script src="../../js/resources/js-test-pre.js"></script>
     
    6062// Deleting a texture bound to the currently-bound fbo is the same as
    6163// detaching the textue from fbo first, then delete the texture.
    62 shouldBeNull("gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME)");
     64shouldBe("gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE)", "gl.NONE");
     65shouldGenerateGLError(gl, gl.INVALID_ENUM, "gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME)");
    6366shouldBeFalse("gl.isTexture(tex)");
    6467shouldBeNull("gl.getParameter(gl.TEXTURE_BINDING_2D)");
     
    8689// Deleting a renderbuffer bound to the currently-bound fbo is the same as
    8790// detaching the renderbuffer from fbo first, then delete the renderbuffer.
    88 shouldBeNull("gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME)");
     91shouldBe("gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE)", "gl.NONE");
     92shouldGenerateGLError(gl, gl.INVALID_ENUM, "gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME)");
    8993shouldBeFalse("gl.isRenderbuffer(rbo)");
    9094shouldBeNull("gl.getParameter(gl.RENDERBUFFER_BINDING)");
  • trunk/LayoutTests/fast/canvas/webgl/program-test.html

    r65330 r90180  
    1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    2   "http://www.w3.org/TR/html4/loose.dtd">
     1<!DOCTYPE html>
    32<html>
    43<head>
    5 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
     4<meta charset="utf-8">
    65<title>WebGL Program Compiling/Linking Conformance Test</title>
    76<link rel="stylesheet" href="../../js/resources/js-test-style.css"/>
     
    3130    gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
    3231
     32    function doArraysHaveSameContents(a, b) {
     33        var flags = [];
     34        function hasUnusedValue(a, value) {
     35            for (var ii = 0; ii < a.length; ++ii) {
     36                if (a[ii] === value && !flags[ii]) {
     37                    flags[ii] = true;
     38                    return true;
     39                }
     40            }
     41            return false;
     42        }
     43
     44        try {
     45            if (a.length !== b.length) {
     46                return false;
     47            }
     48            for (var ii = 0; ii < a.length; ii++) {
     49                if (!hasUnusedValue(b, a[ii])) {
     50                    return false;
     51                }
     52            }
     53        } catch (ex) {
     54            return false;
     55        }
     56        return true;
     57    }
    3358
    3459/////// Check compileShader() /////////////////////////////
     
    5681
    5782    var fs = gl.createShader(gl.FRAGMENT_SHADER);
    58     gl.shaderSource(fs, "#ifdef GL_ES\nprecision mediump float;\n#endif\n varying vec4 vColor; void main() { gl_FragColor = vColor; }");
     83    gl.shaderSource(fs, "precision mediump float; varying vec4 vColor; void main() { gl_FragColor = vColor; }");
    5984    gl.compileShader(fs);
    6085
     
    6388
    6489    var fs2 = gl.createShader(gl.FRAGMENT_SHADER);
    65     gl.shaderSource(fs2, "#ifdef GL_ES\nprecision mediump float;\n#endif\n varying vec4 vColor; void main() { gl_FragColor = vColor * 0.5; }");
     90    gl.shaderSource(fs2, "precision mediump float; varying vec4 vColor; void main() { gl_FragColor = vColor * 0.5; }");
    6691    gl.compileShader(fs2);
    6792
     
    132157        if(gl.getError() != gl.NO_ERROR)
    133158            assertMsg(false, "unexpected error in detachShader()");
    134         assertMsg(areArraysEqual(gl.getAttachedShaders(prog), expected_shaders), errmsg);
     159        assertMsg(doArraysHaveSameContents(gl.getAttachedShaders(prog), expected_shaders), errmsg);
    135160    }
    136161    checkGetAttachedShaders([], [], [], "getAttachedShaders should return an empty list by default");
     
    243268
    244269    var fs3 = gl.createShader(gl.FRAGMENT_SHADER);
    245     gl.shaderSource(fs3, "#ifdef GL_ES\nprecision mediump float;\n#endif\n varying vec4 vColor; void main() { gl_FragColor = vColor; }");
     270    gl.shaderSource(fs3, "precision mediump float; varying vec4 vColor; void main() { gl_FragColor = vColor; }");
    246271    gl.compileShader(fs3);
    247272
     
    254279
    255280    fs3 = gl.createShader(gl.FRAGMENT_SHADER);
    256     gl.shaderSource(fs3, "#ifdef GL_ES\nprecision mediump float;\n#endif\n varying vec4 vColor; void main() { gl_FragColor = vColor; }");
     281    gl.shaderSource(fs3, "precision mediump float; varying vec4 vColor; void main() { gl_FragColor = vColor; }");
    257282    gl.compileShader(fs3);
    258283
  • trunk/Source/WebCore/ChangeLog

    r90174 r90180  
     12011-06-30  Zhenyao Mo  <zmo@google.com>
     2
     3        Reviewed by Kenneth Russell.
     4
     5        Improve WebGL object lifetime management in WebGLRenderingContext
     6        https://bugs.webkit.org/show_bug.cgi?id=63635
     7
     8        * html/canvas/WebGLRenderingContext.cpp:
     9        (WebCore::WebGLRenderingContext::getAttachedShaders): Use cached objects instead of querying the underlying GL.
     10        (WebCore::WebGLRenderingContext::getFramebufferAttachmentParameter): Ditto.
     11        (WebCore::WebGLRenderingContext::detachAndRemoveAllObjects): Multiple loop because objects might be removed from the table within an iteration.
     12        * html/canvas/WebGLRenderingContext.h:
     13
    1142011-06-30  Rafael Brandao  <rafael.lobo@openbossa.org>
    215
  • trunk/Source/WebCore/html/canvas/WebGLObject.cpp

    r76603 r90180  
    6767}
    6868
     69void WebGLObject::detachContext()
     70{
     71    m_attachmentCount = 0; // Make sure OpenGL resource is deleted.
     72    if (m_context) {
     73        deleteObject();
     74        m_context->removeObject(this);
     75        m_context = 0;
     76    }
     77}
     78
    6979}
    7080
  • trunk/Source/WebCore/html/canvas/WebGLObject.h

    r73406 r90180  
    4747    void deleteObject();
    4848
    49     void detachContext()
    50     {
    51         m_attachmentCount = 0; // Make sure OpenGL resource is deleted.
    52         deleteObject();
    53         m_context = 0;
    54     }
     49    void detachContext();
    5550
    5651    WebGLRenderingContext* context() const { return m_context; }
  • trunk/Source/WebCore/html/canvas/WebGLRenderingContext.cpp

    r89650 r90180  
    19191919    if (isContextLost() || !validateWebGLObject(program))
    19201920        return false;
    1921     GC3Dint numShaders = 0;
    1922     m_context->getProgramiv(objectOrZero(program), GraphicsContext3D::ATTACHED_SHADERS, &numShaders);
    1923     if (numShaders) {
    1924         OwnArrayPtr<Platform3DObject> shaders = adoptArrayPtr(new Platform3DObject[numShaders]);
    1925         GC3Dsizei count = 0;
    1926         m_context->getAttachedShaders(objectOrZero(program), numShaders, &count, shaders.get());
    1927         if (count != numShaders)
    1928             return false;
    1929         shaderObjects.resize(numShaders);
    1930         for (GC3Dint ii = 0; ii < numShaders; ++ii) {
    1931             WebGLShader* shader = findShader(shaders[ii]);
    1932             if (!shader) {
    1933                 shaderObjects.clear();
    1934                 return false;
    1935             }
    1936             shaderObjects[ii] = shader;
    1937         }
     1921
     1922    const GC3Denum shaderType[] = {
     1923        GraphicsContext3D::VERTEX_SHADER,
     1924        GraphicsContext3D::FRAGMENT_SHADER
     1925    };
     1926    for (unsigned i = 0; i < sizeof(shaderType) / sizeof(GC3Denum); ++i) {
     1927        WebGLShader* shader = program->getAttachedShader(shaderType[i]);
     1928        if (shader)
     1929            shaderObjects.append(shader);
    19381930    }
    19391931    return true;
     
    20292021    if (isContextLost() || !validateFramebufferFuncParameters(target, attachment))
    20302022        return WebGLGetInfo();
    2031     switch (pname) {
    2032     case GraphicsContext3D::FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:
    2033     case GraphicsContext3D::FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:
    2034     case GraphicsContext3D::FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:
    2035     case GraphicsContext3D::FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE:
    2036         break;
    2037     default:
    2038         m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM);
    2039         return WebGLGetInfo();
    2040     }
    20412023
    20422024    if (!m_framebufferBinding || !m_framebufferBinding->object() || m_framebufferBinding->isIncomplete(false)) {
     
    20452027    }
    20462028
    2047     if (pname != GraphicsContext3D::FRAMEBUFFER_ATTACHMENT_OBJECT_NAME) {
    2048         WebGLStateRestorer(this, false);
    2049         GC3Dint value = 0;
    2050         m_context->getFramebufferAttachmentParameteriv(target, attachment, pname, &value);
     2029    WebGLObject* object = m_framebufferBinding->getAttachment(attachment);
     2030    if (!object) {
    20512031        if (pname == GraphicsContext3D::FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE)
    2052             return WebGLGetInfo(static_cast<unsigned int>(value));
    2053         return WebGLGetInfo(value);
    2054     }
    2055 
    2056     WebGLStateRestorer(this, false);
    2057     GC3Dint type = 0;
    2058     m_context->getFramebufferAttachmentParameteriv(target, attachment, GraphicsContext3D::FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &type);
    2059     if (!type)
     2032            return WebGLGetInfo(GraphicsContext3D::NONE);
     2033        // OpenGL ES 2.0 specifies INVALID_ENUM in this case, while desktop GL
     2034        // specifies INVALID_OPERATION.
     2035        m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM);
    20602036        return WebGLGetInfo();
    2061     GC3Dint value = 0;
    2062     m_context->getFramebufferAttachmentParameteriv(target, attachment, GraphicsContext3D::FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, &value);
    2063     switch (type) {
    2064     case GraphicsContext3D::RENDERBUFFER:
    2065         return WebGLGetInfo(PassRefPtr<WebGLRenderbuffer>(findRenderbuffer(static_cast<Platform3DObject>(value))));
    2066     case GraphicsContext3D::TEXTURE:
    2067         return WebGLGetInfo(PassRefPtr<WebGLTexture>(findTexture(static_cast<Platform3DObject>(value))));
    2068     default:
    2069         // FIXME: raise exception?
    2070         return WebGLGetInfo();
     2037    }
     2038
     2039    ASSERT(object->isTexture() || object->isRenderbuffer());
     2040    if (object->isTexture()) {
     2041        switch (pname) {
     2042        case GraphicsContext3D::FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:
     2043            return WebGLGetInfo(GraphicsContext3D::TEXTURE);
     2044        case GraphicsContext3D::FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:
     2045            return WebGLGetInfo(PassRefPtr<WebGLTexture>(reinterpret_cast<WebGLTexture*>(object)));
     2046        case GraphicsContext3D::FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:
     2047        case GraphicsContext3D::FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE:
     2048            {
     2049                WebGLStateRestorer(this, false);
     2050                GC3Dint value = 0;
     2051                m_context->getFramebufferAttachmentParameteriv(target, attachment, pname, &value);
     2052                return WebGLGetInfo(value);
     2053            }
     2054        default:
     2055            m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM);
     2056            return WebGLGetInfo();
     2057        }
     2058    } else {
     2059        switch (pname) {
     2060        case GraphicsContext3D::FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:
     2061            return WebGLGetInfo(GraphicsContext3D::RENDERBUFFER);
     2062        case GraphicsContext3D::FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:
     2063            return WebGLGetInfo(PassRefPtr<WebGLRenderbuffer>(reinterpret_cast<WebGLRenderbuffer*>(object)));
     2064        default:
     2065            m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM);
     2066            return WebGLGetInfo();
     2067        }
    20712068    }
    20722069}
     
    39923989void WebGLRenderingContext::detachAndRemoveAllObjects()
    39933990{
    3994     HashSet<RefPtr<WebGLObject> >::iterator pend = m_canvasObjects.end();
    3995     for (HashSet<RefPtr<WebGLObject> >::iterator it = m_canvasObjects.begin(); it != pend; ++it)
     3991    while (m_canvasObjects.size() > 0) {
     3992        HashSet<WebGLObject*>::iterator it = m_canvasObjects.begin();
    39963993        (*it)->detachContext();
    3997 
    3998     m_canvasObjects.clear();
    3999 }
    4000 
    4001 WebGLTexture* WebGLRenderingContext::findTexture(Platform3DObject obj)
    4002 {
    4003     if (!obj)
    4004         return 0;
    4005     HashSet<RefPtr<WebGLObject> >::iterator pend = m_canvasObjects.end();
    4006     for (HashSet<RefPtr<WebGLObject> >::iterator it = m_canvasObjects.begin(); it != pend; ++it) {
    4007         if ((*it)->isTexture() && (*it)->object() == obj)
    4008             return reinterpret_cast<WebGLTexture*>((*it).get());
    4009     }
    4010     return 0;
    4011 }
    4012 
    4013 WebGLRenderbuffer* WebGLRenderingContext::findRenderbuffer(Platform3DObject obj)
    4014 {
    4015     if (!obj)
    4016         return 0;
    4017     HashSet<RefPtr<WebGLObject> >::iterator pend = m_canvasObjects.end();
    4018     for (HashSet<RefPtr<WebGLObject> >::iterator it = m_canvasObjects.begin(); it != pend; ++it) {
    4019         if ((*it)->isRenderbuffer() && (*it)->object() == obj)
    4020             return reinterpret_cast<WebGLRenderbuffer*>((*it).get());
    4021     }
    4022     return 0;
    4023 }
    4024 
    4025 WebGLBuffer* WebGLRenderingContext::findBuffer(Platform3DObject obj)
    4026 {
    4027     if (!obj)
    4028         return 0;
    4029     HashSet<RefPtr<WebGLObject> >::iterator pend = m_canvasObjects.end();
    4030     for (HashSet<RefPtr<WebGLObject> >::iterator it = m_canvasObjects.begin(); it != pend; ++it) {
    4031         if ((*it)->isBuffer() && (*it)->object() == obj)
    4032             return reinterpret_cast<WebGLBuffer*>((*it).get());
    4033     }
    4034     return 0;
    4035 }
    4036 
    4037 WebGLShader* WebGLRenderingContext::findShader(Platform3DObject obj)
    4038 {
    4039     if (!obj)
    4040         return 0;
    4041     HashSet<RefPtr<WebGLObject> >::iterator pend = m_canvasObjects.end();
    4042     for (HashSet<RefPtr<WebGLObject> >::iterator it = m_canvasObjects.begin(); it != pend; ++it) {
    4043         if ((*it)->isShader() && (*it)->object() == obj)
    4044             return reinterpret_cast<WebGLShader*>((*it).get());
    4045     }
    4046     return 0;
     3994    }
    40473995}
    40483996
  • trunk/Source/WebCore/html/canvas/WebGLRenderingContext.h

    r89393 r90180  
    307307    void addObject(WebGLObject*);
    308308    void detachAndRemoveAllObjects();
    309     WebGLTexture* findTexture(Platform3DObject);
    310     WebGLRenderbuffer* findRenderbuffer(Platform3DObject);
    311     WebGLBuffer* findBuffer(Platform3DObject);
    312     WebGLShader* findShader(Platform3DObject);
    313309
    314310    void markContextChanged();
     
    365361    bool m_needsUpdate;
    366362    bool m_markedCanvasDirty;
    367     HashSet<RefPtr<WebGLObject> > m_canvasObjects;
     363    HashSet<WebGLObject*> m_canvasObjects;
    368364
    369365    // List of bound VBO's. Used to maintain info about sizes for ARRAY_BUFFER and stored values for ELEMENT_ARRAY_BUFFER
Note: See TracChangeset for help on using the changeset viewer.