vertex_array_manager.h revision 5821806d5e7f356e8fa4b058a389a808ea183019
1// Copyright (c) 2012 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_SERVICE_VERTEX_ARRAY_MANAGER_H_ 6#define GPU_COMMAND_BUFFER_SERVICE_VERTEX_ARRAY_MANAGER_H_ 7 8#include "base/basictypes.h" 9#include "base/hash_tables.h" 10#include "base/logging.h" 11#include "base/memory/ref_counted.h" 12#include "base/memory/scoped_ptr.h" 13#include "gpu/command_buffer/service/gl_utils.h" 14#include "gpu/gpu_export.h" 15 16namespace gpu { 17namespace gles2 { 18 19class VertexAttribManager; 20 21// This class keeps track of the vertex arrays and their sizes so we can do 22// bounds checking. 23class GPU_EXPORT VertexArrayManager { 24 public: 25 VertexArrayManager(); 26 ~VertexArrayManager(); 27 28 // Must call before destruction. 29 void Destroy(bool have_context); 30 31 // Creates a VertexArrayInfo for the given vertex array. 32 void CreateVertexAttribManager(GLuint client_id, GLuint service_id, 33 uint32 num_vertex_attribs); 34 35 // Gets the vertex attrib manager for the given vertex array. 36 VertexAttribManager* GetVertexAttribManager(GLuint client_id); 37 38 // Removes the vertex attrib manager for the given vertex array. 39 void RemoveVertexAttribManager(GLuint client_id); 40 41 // Gets a client id for a given service id. 42 bool GetClientId(GLuint service_id, GLuint* client_id) const; 43 44 private: 45 friend class VertexAttribManager; 46 47 void StartTracking(VertexAttribManager* vertex_attrib_manager); 48 void StopTracking(VertexAttribManager* vertex_attrib_manager); 49 50 // Info for each vertex array in the system. 51 typedef base::hash_map<GLuint, scoped_refptr<VertexAttribManager> > 52 VertexAttribManagerMap; 53 VertexAttribManagerMap vertex_attrib_managers_; 54 55 // Counts the number of VertexArrayInfo allocated with 'this' as its manager. 56 // Allows to check no VertexArrayInfo will outlive this. 57 unsigned int vertex_attrib_manager_count_; 58 59 bool have_context_; 60 61 DISALLOW_COPY_AND_ASSIGN(VertexArrayManager); 62}; 63 64} // namespace gles2 65} // namespace gpu 66 67#endif // GPU_COMMAND_BUFFER_SERVICE_VERTEX_ARRAY_MANAGER_H_ 68