diff options
Diffstat (limited to 'cc/scoped_texture.cc')
-rw-r--r-- | cc/scoped_texture.cc | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/cc/scoped_texture.cc b/cc/scoped_texture.cc new file mode 100644 index 0000000..d43ebe3 --- /dev/null +++ b/cc/scoped_texture.cc @@ -0,0 +1,51 @@ +// Copyright 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "config.h" + +#include "CCScopedTexture.h" + +namespace cc { + +CCScopedTexture::CCScopedTexture(CCResourceProvider* resourceProvider) + : m_resourceProvider(resourceProvider) +{ + ASSERT(m_resourceProvider); +} + +CCScopedTexture::~CCScopedTexture() +{ + free(); +} + +bool CCScopedTexture::allocate(int pool, const IntSize& size, GC3Denum format, CCResourceProvider::TextureUsageHint hint) +{ + ASSERT(!id()); + ASSERT(!size.isEmpty()); + + setDimensions(size, format); + setId(m_resourceProvider->createResource(pool, size, format, hint)); + +#if !ASSERT_DISABLED + m_allocateThreadIdentifier = base::PlatformThread::CurrentId(); +#endif + + return id(); +} + +void CCScopedTexture::free() +{ + if (id()) { + ASSERT(m_allocateThreadIdentifier == base::PlatformThread::CurrentId()); + m_resourceProvider->deleteResource(id()); + } + setId(0); +} + +void CCScopedTexture::leak() +{ + setId(0); +} + +} |