summaryrefslogtreecommitdiffstats
path: root/cc/scoped_texture.cc
diff options
context:
space:
mode:
Diffstat (limited to 'cc/scoped_texture.cc')
-rw-r--r--cc/scoped_texture.cc51
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);
+}
+
+}