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#ifndef GPU_COMMAND_BUFFER_CLIENT_GPU_MEMORY_BUFFER_TRACKER_H_
6#define GPU_COMMAND_BUFFER_CLIENT_GPU_MEMORY_BUFFER_TRACKER_H_
7
8#include "base/basictypes.h"
9#include "base/containers/hash_tables.h"
10#include "gles2_impl_export.h"
11
12namespace gfx {
13class GpuMemoryBuffer;
14}
15
16namespace gpu {
17class GpuControl;
18
19namespace gles2 {
20
21// Tracks GPU memory buffer objects on the client side.
22class GLES2_IMPL_EXPORT GpuMemoryBufferTracker {
23 public:
24  explicit GpuMemoryBufferTracker(GpuControl* gpu_control);
25  virtual ~GpuMemoryBufferTracker();
26
27  int32 CreateBuffer(size_t width,
28                     size_t height,
29                     int32 internalformat,
30                     int32 usage);
31  gfx::GpuMemoryBuffer* GetBuffer(int32 image_id);
32  void RemoveBuffer(int32 image_id);
33
34 private:
35  typedef base::hash_map<int32, gfx::GpuMemoryBuffer*> BufferMap;
36  BufferMap buffers_;
37  GpuControl* gpu_control_;
38
39  DISALLOW_COPY_AND_ASSIGN(GpuMemoryBufferTracker);
40};
41
42}  // namespace gles2
43}  // namespace gpu
44
45#endif  // GPU_COMMAND_BUFFER_CLIENT_GPU_MEMORY_BUFFER_TRACKER_H_
46