OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef GPU_COMMAND_BUFFER_SERVICE_VERTEX_ATTRIB_MANAGER_H_ | 5 #ifndef GPU_COMMAND_BUFFER_SERVICE_VERTEX_ATTRIB_MANAGER_H_ |
6 #define GPU_COMMAND_BUFFER_SERVICE_VERTEX_ATTRIB_MANAGER_H_ | 6 #define GPU_COMMAND_BUFFER_SERVICE_VERTEX_ATTRIB_MANAGER_H_ |
7 | 7 |
8 #include <list> | 8 #include <list> |
9 #include <vector> | 9 #include <vector> |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
11 #include "base/memory/ref_counted.h" | 11 #include "base/memory/ref_counted.h" |
12 #include "build/build_config.h" | 12 #include "build/build_config.h" |
13 #include "gpu/command_buffer/service/buffer_manager.h" | 13 #include "gpu/command_buffer/service/buffer_manager.h" |
14 #include "gpu/command_buffer/service/gl_utils.h" | 14 #include "gpu/command_buffer/service/gl_utils.h" |
15 #include "gpu/gpu_export.h" | 15 #include "gpu/gpu_export.h" |
16 | 16 |
17 namespace gpu { | 17 namespace gpu { |
18 namespace gles2 { | 18 namespace gles2 { |
19 | 19 |
20 class FeatureInfo; | |
21 class GLES2Decoder; | |
22 class Program; | |
23 class VertexArrayManager; | 20 class VertexArrayManager; |
24 | 21 |
25 // Info about a Vertex Attribute. This is used to track what the user currently | 22 // Info about a Vertex Attribute. This is used to track what the user currently |
26 // has bound on each Vertex Attribute so that checking can be done at | 23 // has bound on each Vertex Attribute so that checking can be done at |
27 // glDrawXXX time. | 24 // glDrawXXX time. |
28 class GPU_EXPORT VertexAttrib { | 25 class GPU_EXPORT VertexAttrib { |
29 public: | 26 public: |
30 typedef std::list<VertexAttrib*> VertexAttribInfoList; | 27 typedef std::list<VertexAttrib*> VertexAttribInfoList; |
31 | 28 |
32 VertexAttrib(); | 29 VertexAttrib(); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
71 return enabled_; | 68 return enabled_; |
72 } | 69 } |
73 | 70 |
74 // Find the maximum vertex accessed, accounting for instancing. | 71 // Find the maximum vertex accessed, accounting for instancing. |
75 GLuint MaxVertexAccessed(GLsizei primcount, | 72 GLuint MaxVertexAccessed(GLsizei primcount, |
76 GLuint max_vertex_accessed) const { | 73 GLuint max_vertex_accessed) const { |
77 return (primcount && divisor_) ? ((primcount - 1) / divisor_) : | 74 return (primcount && divisor_) ? ((primcount - 1) / divisor_) : |
78 max_vertex_accessed; | 75 max_vertex_accessed; |
79 } | 76 } |
80 | 77 |
81 bool is_client_side_array() const { | |
82 return is_client_side_array_; | |
83 } | |
84 | |
85 void set_is_client_side_array(bool value) { | |
86 is_client_side_array_ = value; | |
87 } | |
88 | |
89 private: | 78 private: |
90 friend class VertexAttribManager; | 79 friend class VertexAttribManager; |
91 | 80 |
92 void set_enabled(bool enabled) { | 81 void set_enabled(bool enabled) { |
93 enabled_ = enabled; | 82 enabled_ = enabled; |
94 } | 83 } |
95 | 84 |
96 void set_index(GLuint index) { | 85 void set_index(GLuint index) { |
97 index_ = index; | 86 index_ = index; |
98 } | 87 } |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
143 // The stride passed to glVertexAttribPointer. | 132 // The stride passed to glVertexAttribPointer. |
144 GLsizei gl_stride_; | 133 GLsizei gl_stride_; |
145 | 134 |
146 // The stride that will be used to access the buffer. This is the actual | 135 // The stride that will be used to access the buffer. This is the actual |
147 // stide, NOT the GL bogus stride. In other words there is never a stride | 136 // stide, NOT the GL bogus stride. In other words there is never a stride |
148 // of 0. | 137 // of 0. |
149 GLsizei real_stride_; | 138 GLsizei real_stride_; |
150 | 139 |
151 GLsizei divisor_; | 140 GLsizei divisor_; |
152 | 141 |
153 // Will be true if this was assigned to a client side array. | |
154 bool is_client_side_array_; | |
155 | |
156 // The buffer bound to this attribute. | 142 // The buffer bound to this attribute. |
157 scoped_refptr<Buffer> buffer_; | 143 scoped_refptr<Buffer> buffer_; |
158 | 144 |
159 // List this info is on. | 145 // List this info is on. |
160 VertexAttribInfoList* list_; | 146 VertexAttribInfoList* list_; |
161 | 147 |
162 // Iterator for list this info is on. Enabled/Disabled | 148 // Iterator for list this info is on. Enabled/Disabled |
163 VertexAttribInfoList::iterator it_; | 149 VertexAttribInfoList::iterator it_; |
164 }; | 150 }; |
165 | 151 |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
238 } | 224 } |
239 | 225 |
240 bool IsValid() const { | 226 bool IsValid() const { |
241 return !IsDeleted(); | 227 return !IsDeleted(); |
242 } | 228 } |
243 | 229 |
244 size_t num_attribs() const { | 230 size_t num_attribs() const { |
245 return vertex_attrib_infos_.size(); | 231 return vertex_attrib_infos_.size(); |
246 } | 232 } |
247 | 233 |
248 bool ValidateBindings( | |
249 const char* function_name, | |
250 GLES2Decoder* decoder, | |
251 FeatureInfo* feature_info, | |
252 Program* current_program, | |
253 GLuint max_vertex_accessed, | |
254 GLsizei primcount); | |
255 | |
256 private: | 234 private: |
257 friend class VertexArrayManager; | 235 friend class VertexArrayManager; |
258 friend class VertexArrayManagerTest; | 236 friend class VertexArrayManagerTest; |
259 friend class base::RefCounted<VertexAttribManager>; | 237 friend class base::RefCounted<VertexAttribManager>; |
260 | 238 |
261 // Used when creating from a VertexArrayManager | 239 // Used when creating from a VertexArrayManager |
262 VertexAttribManager(VertexArrayManager* manager, GLuint service_id, | 240 VertexAttribManager(VertexArrayManager* manager, GLuint service_id, |
263 uint32 num_vertex_attribs); | 241 uint32 num_vertex_attribs); |
264 | 242 |
265 ~VertexAttribManager(); | 243 ~VertexAttribManager(); |
(...skipping 25 matching lines...) Expand all Loading... |
291 | 269 |
292 // Service side vertex array object id. | 270 // Service side vertex array object id. |
293 GLuint service_id_; | 271 GLuint service_id_; |
294 }; | 272 }; |
295 | 273 |
296 } // namespace gles2 | 274 } // namespace gles2 |
297 } // namespace gpu | 275 } // namespace gpu |
298 | 276 |
299 #endif // GPU_COMMAND_BUFFER_SERVICE_VERTEX_ATTRIB_MANAGER_H_ | 277 #endif // GPU_COMMAND_BUFFER_SERVICE_VERTEX_ATTRIB_MANAGER_H_ |
300 | 278 |
OLD | NEW |