1// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "gpu/command_buffer/client/gpu_memory_buffer_tracker.h" 6 7#include "base/memory/scoped_ptr.h" 8#include "gpu/command_buffer/client/gles2_implementation.h" 9#include "gpu/command_buffer/client/gpu_control.h" 10 11namespace gpu { 12namespace gles2 { 13 14GpuMemoryBufferTracker::GpuMemoryBufferTracker(GpuControl* gpu_control) 15 : gpu_control_(gpu_control) { 16} 17 18GpuMemoryBufferTracker::~GpuMemoryBufferTracker() { 19 while (!buffers_.empty()) { 20 RemoveBuffer(buffers_.begin()->first); 21 } 22} 23 24int32 GpuMemoryBufferTracker::CreateBuffer(size_t width, 25 size_t height, 26 int32 internalformat, 27 int32 usage) { 28 int32 image_id = 0; 29 DCHECK(gpu_control_); 30 gfx::GpuMemoryBuffer* buffer = gpu_control_->CreateGpuMemoryBuffer( 31 width, height, internalformat, usage, &image_id); 32 if (!buffer) 33 return 0; 34 35 std::pair<BufferMap::iterator, bool> result = 36 buffers_.insert(std::make_pair(image_id, buffer)); 37 DCHECK(result.second); 38 39 return image_id; 40} 41 42gfx::GpuMemoryBuffer* GpuMemoryBufferTracker::GetBuffer(int32 image_id) { 43 BufferMap::iterator it = buffers_.find(image_id); 44 return (it != buffers_.end()) ? it->second : NULL; 45} 46 47void GpuMemoryBufferTracker::RemoveBuffer(int32 image_id) { 48 BufferMap::iterator buffer_it = buffers_.find(image_id); 49 if (buffer_it != buffers_.end()) 50 buffers_.erase(buffer_it); 51 DCHECK(gpu_control_); 52 gpu_control_->DestroyGpuMemoryBuffer(image_id); 53} 54 55} // namespace gles2 56} // namespace gpu 57