summaryrefslogtreecommitdiffstats
path: root/gpu/command_buffer/service/vertex_array_manager.h
diff options
context:
space:
mode:
authorbajones@google.com <bajones@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-27 02:20:46 +0000
committerbajones@google.com <bajones@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-27 02:20:46 +0000
commit944b62f3edd69cee4fd31e21fb80ca0eafe9b217 (patch)
tree8ae5c82188ae1100fb60eb1e6ede8af2efdc73ee /gpu/command_buffer/service/vertex_array_manager.h
parent01719f74ea916ef20b5df705a314c6b6fd659524 (diff)
downloadchromium_src-944b62f3edd69cee4fd31e21fb80ca0eafe9b217.zip
chromium_src-944b62f3edd69cee4fd31e21fb80ca0eafe9b217.tar.gz
chromium_src-944b62f3edd69cee4fd31e21fb80ca0eafe9b217.tar.bz2
Added support for OES_vertex_array_object to the command buffer
BUG=72612 Review URL: https://chromiumcodereview.appspot.com/10915244 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@158967 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu/command_buffer/service/vertex_array_manager.h')
-rw-r--r--gpu/command_buffer/service/vertex_array_manager.h67
1 files changed, 67 insertions, 0 deletions
diff --git a/gpu/command_buffer/service/vertex_array_manager.h b/gpu/command_buffer/service/vertex_array_manager.h
new file mode 100644
index 0000000..1a1fc4a
--- /dev/null
+++ b/gpu/command_buffer/service/vertex_array_manager.h
@@ -0,0 +1,67 @@
+// Copyright (c) 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.
+
+#ifndef GPU_COMMAND_BUFFER_SERVICE_VERTEX_ARRAY_MANAGER_H_
+#define GPU_COMMAND_BUFFER_SERVICE_VERTEX_ARRAY_MANAGER_H_
+
+#include "base/basictypes.h"
+#include "base/hash_tables.h"
+#include "base/logging.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_ptr.h"
+#include "gpu/command_buffer/service/gl_utils.h"
+#include "gpu/gpu_export.h"
+
+namespace gpu {
+namespace gles2 {
+
+class VertexAttribManager;
+
+// This class keeps track of the vertex arrays and their sizes so we can do
+// bounds checking.
+class GPU_EXPORT VertexArrayManager {
+ public:
+ VertexArrayManager();
+ ~VertexArrayManager();
+
+ // Must call before destruction.
+ void Destroy(bool have_context);
+
+ // Creates a VertexArrayInfo for the given vertex array.
+ void CreateVertexAttribManager(GLuint client_id, GLuint service_id,
+ uint32 num_vertex_attribs);
+
+ // Gets the vertex attrib manager for the given vertex array.
+ VertexAttribManager* GetVertexAttribManager(GLuint client_id);
+
+ // Removes the vertex attrib manager for the given vertex array.
+ void RemoveVertexAttribManager(GLuint client_id);
+
+ // Gets a client id for a given service id.
+ bool GetClientId(GLuint service_id, GLuint* client_id) const;
+
+ private:
+ friend class VertexAttribManager;
+
+ void StartTracking(VertexAttribManager* vertex_attrib_manager);
+ void StopTracking(VertexAttribManager* vertex_attrib_manager);
+
+ // Info for each vertex array in the system.
+ typedef base::hash_map<GLuint, scoped_refptr<VertexAttribManager> >
+ VertexAttribManagerMap;
+ VertexAttribManagerMap vertex_attrib_managers_;
+
+ // Counts the number of VertexArrayInfo allocated with 'this' as its manager.
+ // Allows to check no VertexArrayInfo will outlive this.
+ unsigned int vertex_attrib_manager_count_;
+
+ bool have_context_;
+
+ DISALLOW_COPY_AND_ASSIGN(VertexArrayManager);
+};
+
+} // namespace gles2
+} // namespace gpu
+
+#endif // GPU_COMMAND_BUFFER_SERVICE_VERTEX_ARRAY_MANAGER_H_