Edit

kc3-lang/angle/src/libGLESv2/RenderbufferProxySet.cpp

Branch :

  • Show log

    Commit

  • Author : Jamie Madill
    Date : 2014-06-05 13:08:51
    Hash : 3c7fa226
    Message : Rename Renderbuffer to FramebufferAttachment. Part of the refactoring effort to clean up our classes for FBO attachments and Renderbuffers. BUG=angle:660 Change-Id: Id23df904f56499568159611b66c8922b9dce6a3d Reviewed-on: https://chromium-review.googlesource.com/201832 Reviewed-by: Shannon Woods <shannonwoods@chromium.org> Tested-by: Jamie Madill <jmadill@chromium.org>

  • src/libGLESv2/RenderbufferProxySet.cpp
  • #include "precompiled.h"
    //
    // Copyright (c) 2013 The ANGLE Project Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    //
    
    // RenderbufferProxySet.cpp: Implements the gl::RenderbufferProxySet, a class for
    // maintaining a Texture's weak references to the Renderbuffers that represent it.
    
    #include "libGLESv2/RenderbufferProxySet.h"
    #include "common/debug.h"
    
    namespace gl
    {
    
    void RenderbufferProxySet::addRef(const FramebufferAttachment *proxy)
    {
        RefCountMap::iterator i = mRefCountMap.find(proxy);
        if (i != mRefCountMap.end())
        {
            i->second++;
        }
    }
    
    void RenderbufferProxySet::release(const FramebufferAttachment *proxy)
    {
        RefCountMap::iterator i = mRefCountMap.find(proxy);
        if (i != mRefCountMap.end())
        {
            if (i->second > 0)
            {
                i->second--;
            }
    
            if (i->second == 0)
            {
                // Clear the buffer map of references to this FramebufferAttachment
                BufferMap::iterator j = mBufferMap.begin();
                while (j != mBufferMap.end())
                {
                    if (j->second == proxy)
                    {
                        j = mBufferMap.erase(j);
                    }
                    else
                    {
                        ++j;
                    }
                }
    
                mRefCountMap.erase(i);
            }
        }
    }
    
    void RenderbufferProxySet::add(unsigned int mipLevel, unsigned int layer, FramebufferAttachment *renderBuffer)
    {
        if (mRefCountMap.find(renderBuffer) == mRefCountMap.end())
        {
            mRefCountMap.insert(std::make_pair(renderBuffer, 0));
        }
    
        RenderbufferKey key;
        key.mipLevel = mipLevel;
        key.layer = layer;
        if (mBufferMap.find(key) == mBufferMap.end())
        {
            mBufferMap.insert(std::make_pair(key, renderBuffer));
        }
    }
    
    FramebufferAttachment *RenderbufferProxySet::get(unsigned int mipLevel, unsigned int layer) const
    {
        RenderbufferKey key;
        key.mipLevel = mipLevel;
        key.layer = layer;
        BufferMap::const_iterator i = mBufferMap.find(key);
        return (i != mBufferMap.end()) ? i->second : NULL;
    }
    
    bool RenderbufferProxySet::RenderbufferKey::operator<(const RenderbufferKey &other) const
    {
        return (mipLevel != other.mipLevel) ? mipLevel < other.mipLevel : layer < other.layer;
    }
    
    }