diff options
author | bajones@google.com <bajones@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-27 02:20:46 +0000 |
---|---|---|
committer | bajones@google.com <bajones@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-27 02:20:46 +0000 |
commit | 944b62f3edd69cee4fd31e21fb80ca0eafe9b217 (patch) | |
tree | 8ae5c82188ae1100fb60eb1e6ede8af2efdc73ee /gpu/command_buffer/service/vertex_array_manager.h | |
parent | 01719f74ea916ef20b5df705a314c6b6fd659524 (diff) | |
download | chromium_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.h | 67 |
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_ |