1 #include "precompiled.h"
3 // Copyright (c) 2013 The ANGLE Project Authors. All rights reserved.
4 // Use of this source code is governed by a BSD-style license that can be
5 // found in the LICENSE file.
8 // RenderbufferProxySet.cpp: Implements the gl::RenderbufferProxySet, a class for
9 // maintaining a Texture's weak references to the Renderbuffers that represent it.
11 #include "libGLESv2/RenderbufferProxySet.h"
12 #include "common/debug.h"
17 void RenderbufferProxySet::addRef(const FramebufferAttachment *proxy)
19 RefCountMap::iterator i = mRefCountMap.find(proxy);
20 if (i != mRefCountMap.end())
26 void RenderbufferProxySet::release(const FramebufferAttachment *proxy)
28 RefCountMap::iterator i = mRefCountMap.find(proxy);
29 if (i != mRefCountMap.end())
38 // Clear the buffer map of references to this FramebufferAttachment
39 BufferMap::iterator j = mBufferMap.begin();
40 while (j != mBufferMap.end())
42 if (j->second == proxy)
44 j = mBufferMap.erase(j);
52 mRefCountMap.erase(i);
57 void RenderbufferProxySet::add(unsigned int mipLevel, unsigned int layer, FramebufferAttachment *renderBuffer)
59 if (mRefCountMap.find(renderBuffer) == mRefCountMap.end())
61 mRefCountMap.insert(std::make_pair(renderBuffer, 0));
65 key.mipLevel = mipLevel;
67 if (mBufferMap.find(key) == mBufferMap.end())
69 mBufferMap.insert(std::make_pair(key, renderBuffer));
73 FramebufferAttachment *RenderbufferProxySet::get(unsigned int mipLevel, unsigned int layer) const
76 key.mipLevel = mipLevel;
78 BufferMap::const_iterator i = mBufferMap.find(key);
79 return (i != mBufferMap.end()) ? i->second : NULL;
82 bool RenderbufferProxySet::RenderbufferKey::operator<(const RenderbufferKey &other) const
84 return (mipLevel != other.mipLevel) ? mipLevel < other.mipLevel : layer < other.layer;