Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(331)

Side by Side Diff: gpu/command_buffer/service/vertex_attrib_manager.h

Issue 12326146: Refactor/Rename a bunch of GPU stuff (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 VertexArrayManager; 20 class VertexArrayManager;
21 21
22 // Info about a Vertex Attribute. This is used to track what the user currently
23 // has bound on each Vertex Attribute so that checking can be done at
24 // glDrawXXX time.
25 class GPU_EXPORT VertexAttrib {
26 public:
27 typedef std::list<VertexAttrib*> VertexAttribInfoList;
28
29 VertexAttrib();
30 ~VertexAttrib();
31
32 // Returns true if this VertexAttrib can access index.
33 bool CanAccess(GLuint index) const;
34
35 BufferManager::Buffer* buffer() const {
36 return buffer_;
37 }
38
39 GLsizei offset() const {
40 return offset_;
41 }
42
43 GLuint index() const {
44 return index_;
45 }
46
47 GLint size() const {
48 return size_;
49 }
50
51 GLenum type() const {
52 return type_;
53 }
54
55 GLboolean normalized() const {
56 return normalized_;
57 }
58
59 GLsizei gl_stride() const {
60 return gl_stride_;
61 }
62
63 GLuint divisor() const {
64 return divisor_;
65 }
66
67 bool enabled() const {
68 return enabled_;
69 }
70
71 // Find the maximum vertex accessed, accounting for instancing.
72 GLuint MaxVertexAccessed(GLsizei primcount,
73 GLuint max_vertex_accessed) const {
74 return (primcount && divisor_) ? ((primcount - 1) / divisor_) :
75 max_vertex_accessed;
76 }
77
78 private:
79 friend class VertexAttribManager;
80
81 void set_enabled(bool enabled) {
82 enabled_ = enabled;
83 }
84
85 void set_index(GLuint index) {
86 index_ = index;
87 }
88
89 void SetList(VertexAttribInfoList* new_list) {
90 DCHECK(new_list);
91
92 if (list_) {
93 list_->erase(it_);
94 }
95
96 it_ = new_list->insert(new_list->end(), this);
97 list_ = new_list;
98 }
99
100 void SetInfo(
101 BufferManager::Buffer* buffer,
102 GLint size,
103 GLenum type,
104 GLboolean normalized,
105 GLsizei gl_stride,
106 GLsizei real_stride,
107 GLsizei offset) {
108 DCHECK_GT(real_stride, 0);
109 buffer_ = buffer;
110 size_ = size;
111 type_ = type;
112 normalized_ = normalized;
113 gl_stride_ = gl_stride;
114 real_stride_ = real_stride;
115 offset_ = offset;
116 }
117
118 void SetDivisor(GLsizei divisor) {
119 divisor_ = divisor;
120 }
121
122 void Unbind(BufferManager::Buffer* buffer) {
123 if (buffer_ == buffer) {
124 buffer_ = NULL;
125 }
126 }
127
128 // The index of this attrib.
129 GLuint index_;
130
131 // Whether or not this attribute is enabled.
132 bool enabled_;
133
134 // number of components (1, 2, 3, 4)
135 GLint size_;
136
137 // GL_BYTE, GL_FLOAT, etc. See glVertexAttribPointer.
138 GLenum type_;
139
140 // The offset into the buffer.
141 GLsizei offset_;
142
143 GLboolean normalized_;
144
145 // The stride passed to glVertexAttribPointer.
146 GLsizei gl_stride_;
147
148 // The stride that will be used to access the buffer. This is the actual
149 // stide, NOT the GL bogus stride. In other words there is never a stride
150 // of 0.
151 GLsizei real_stride_;
152
153 GLsizei divisor_;
154
155 // The buffer bound to this attribute.
156 scoped_refptr<BufferManager::Buffer> buffer_;
157
158 // List this info is on.
159 VertexAttribInfoList* list_;
160
161 // Iterator for list this info is on. Enabled/Disabled
162 VertexAttribInfoList::iterator it_;
163 };
164
22 // Manages vertex attributes. 165 // Manages vertex attributes.
23 // This class also acts as the service-side representation of a 166 // This class also acts as the service-side representation of a
24 // vertex array object and it's contained state. 167 // vertex array object and it's contained state.
25 class GPU_EXPORT VertexAttribManager : 168 class GPU_EXPORT VertexAttribManager :
26 public base::RefCounted<VertexAttribManager> { 169 public base::RefCounted<VertexAttribManager> {
27 public: 170 public:
28 typedef scoped_refptr<VertexAttribManager> Ref; 171 typedef std::list<VertexAttrib*> VertexAttribInfoList;
29
30 // Info about Vertex Attributes. This is used to track what the user currently
31 // has bound on each Vertex Attribute so that checking can be done at
32 // glDrawXXX time.
33 class GPU_EXPORT VertexAttribInfo {
34 public:
35 typedef std::list<VertexAttribInfo*> VertexAttribInfoList;
36
37 VertexAttribInfo();
38 ~VertexAttribInfo();
39
40 // Returns true if this VertexAttrib can access index.
41 bool CanAccess(GLuint index) const;
42
43 BufferManager::BufferInfo* buffer() const {
44 return buffer_;
45 }
46
47 GLsizei offset() const {
48 return offset_;
49 }
50
51 GLuint index() const {
52 return index_;
53 }
54
55 GLint size() const {
56 return size_;
57 }
58
59 GLenum type() const {
60 return type_;
61 }
62
63 GLboolean normalized() const {
64 return normalized_;
65 }
66
67 GLsizei gl_stride() const {
68 return gl_stride_;
69 }
70
71 GLuint divisor() const {
72 return divisor_;
73 }
74
75 bool enabled() const {
76 return enabled_;
77 }
78
79 // Find the maximum vertex accessed, accounting for instancing.
80 GLuint MaxVertexAccessed(GLsizei primcount,
81 GLuint max_vertex_accessed) const {
82 return (primcount && divisor_) ? ((primcount - 1) / divisor_) :
83 max_vertex_accessed;
84 }
85
86 private:
87 friend class VertexAttribManager;
88
89 void set_enabled(bool enabled) {
90 enabled_ = enabled;
91 }
92
93 void set_index(GLuint index) {
94 index_ = index;
95 }
96
97 void SetList(VertexAttribInfoList* new_list) {
98 DCHECK(new_list);
99
100 if (list_) {
101 list_->erase(it_);
102 }
103
104 it_ = new_list->insert(new_list->end(), this);
105 list_ = new_list;
106 }
107
108 void SetInfo(
109 BufferManager::BufferInfo* buffer,
110 GLint size,
111 GLenum type,
112 GLboolean normalized,
113 GLsizei gl_stride,
114 GLsizei real_stride,
115 GLsizei offset) {
116 DCHECK_GT(real_stride, 0);
117 buffer_ = buffer;
118 size_ = size;
119 type_ = type;
120 normalized_ = normalized;
121 gl_stride_ = gl_stride;
122 real_stride_ = real_stride;
123 offset_ = offset;
124 }
125
126 void SetDivisor(GLsizei divisor) {
127 divisor_ = divisor;
128 }
129
130 void Unbind(BufferManager::BufferInfo* buffer) {
131 if (buffer_ == buffer) {
132 buffer_ = NULL;
133 }
134 }
135
136 // The index of this attrib.
137 GLuint index_;
138
139 // Whether or not this attribute is enabled.
140 bool enabled_;
141
142 // number of components (1, 2, 3, 4)
143 GLint size_;
144
145 // GL_BYTE, GL_FLOAT, etc. See glVertexAttribPointer.
146 GLenum type_;
147
148 // The offset into the buffer.
149 GLsizei offset_;
150
151 GLboolean normalized_;
152
153 // The stride passed to glVertexAttribPointer.
154 GLsizei gl_stride_;
155
156 // The stride that will be used to access the buffer. This is the actual
157 // stide, NOT the GL bogus stride. In other words there is never a stride
158 // of 0.
159 GLsizei real_stride_;
160
161 GLsizei divisor_;
162
163 // The buffer bound to this attribute.
164 BufferManager::BufferInfo::Ref buffer_;
165
166 // List this info is on.
167 VertexAttribInfoList* list_;
168
169 // Iterator for list this info is on. Enabled/Disabled
170 VertexAttribInfoList::iterator it_;
171 };
172
173 typedef std::list<VertexAttribInfo*> VertexAttribInfoList;
174 172
175 VertexAttribManager(); 173 VertexAttribManager();
176 174
177 void Initialize(uint32 num_vertex_attribs, bool init_attribs = true); 175 void Initialize(uint32 num_vertex_attribs, bool init_attribs = true);
178 176
179 bool Enable(GLuint index, bool enable); 177 bool Enable(GLuint index, bool enable);
180 178
181 bool HaveFixedAttribs() const { 179 bool HaveFixedAttribs() const {
182 return num_fixed_attribs_ != 0; 180 return num_fixed_attribs_ != 0;
183 } 181 }
184 182
185 const VertexAttribInfoList& GetEnabledVertexAttribInfos() const { 183 const VertexAttribInfoList& GetEnabledVertexAttribInfos() const {
186 return enabled_vertex_attribs_; 184 return enabled_vertex_attribs_;
187 } 185 }
188 186
189 VertexAttribInfo* GetVertexAttribInfo(GLuint index) { 187 VertexAttrib* GetVertexAttrib(GLuint index) {
190 if (index < vertex_attrib_infos_.size()) { 188 if (index < vertex_attrib_infos_.size()) {
191 return &vertex_attrib_infos_[index]; 189 return &vertex_attrib_infos_[index];
192 } 190 }
193 return NULL; 191 return NULL;
194 } 192 }
195 193
196 void SetAttribInfo( 194 void SetAttribInfo(
197 GLuint index, 195 GLuint index,
198 BufferManager::BufferInfo* buffer, 196 BufferManager::Buffer* buffer,
199 GLint size, 197 GLint size,
200 GLenum type, 198 GLenum type,
201 GLboolean normalized, 199 GLboolean normalized,
202 GLsizei gl_stride, 200 GLsizei gl_stride,
203 GLsizei real_stride, 201 GLsizei real_stride,
204 GLsizei offset) { 202 GLsizei offset) {
205 VertexAttribInfo* info = GetVertexAttribInfo(index); 203 VertexAttrib* info = GetVertexAttrib(index);
206 if (info) { 204 if (info) {
207 if (info->type() == GL_FIXED) { 205 if (info->type() == GL_FIXED) {
208 --num_fixed_attribs_; 206 --num_fixed_attribs_;
209 } 207 }
210 if (type == GL_FIXED) { 208 if (type == GL_FIXED) {
211 ++num_fixed_attribs_; 209 ++num_fixed_attribs_;
212 } 210 }
213 info->SetInfo( 211 info->SetInfo(
214 buffer, size, type, normalized, gl_stride, real_stride, offset); 212 buffer, size, type, normalized, gl_stride, real_stride, offset);
215 } 213 }
216 } 214 }
217 215
218 void SetDivisor(GLuint index, GLuint divisor) { 216 void SetDivisor(GLuint index, GLuint divisor) {
219 VertexAttribInfo* info = GetVertexAttribInfo(index); 217 VertexAttrib* info = GetVertexAttrib(index);
220 if (info) { 218 if (info) {
221 info->SetDivisor(divisor); 219 info->SetDivisor(divisor);
222 } 220 }
223 } 221 }
224 222
225 void SetElementArrayBuffer(BufferManager::BufferInfo* buffer) { 223 void SetElementArrayBuffer(BufferManager::Buffer* buffer) {
226 element_array_buffer_ = buffer; 224 element_array_buffer_ = buffer;
227 } 225 }
228 226
229 BufferManager::BufferInfo* element_array_buffer() const { 227 BufferManager::Buffer* element_array_buffer() const {
230 return element_array_buffer_; 228 return element_array_buffer_;
231 } 229 }
232 230
233 GLuint service_id() const { 231 GLuint service_id() const {
234 return service_id_; 232 return service_id_;
235 } 233 }
236 234
237 void Unbind(BufferManager::BufferInfo* buffer); 235 void Unbind(BufferManager::Buffer* buffer);
238 236
239 bool IsDeleted() const { 237 bool IsDeleted() const {
240 return deleted_; 238 return deleted_;
241 } 239 }
242 240
243 bool IsValid() const { 241 bool IsValid() const {
244 return !IsDeleted(); 242 return !IsDeleted();
245 } 243 }
246 244
247 size_t num_attribs() const { 245 size_t num_attribs() const {
(...skipping 13 matching lines...) Expand all
261 259
262 void MarkAsDeleted() { 260 void MarkAsDeleted() {
263 deleted_ = true; 261 deleted_ = true;
264 } 262 }
265 263
266 // number of attribs using type GL_FIXED. 264 // number of attribs using type GL_FIXED.
267 int num_fixed_attribs_; 265 int num_fixed_attribs_;
268 266
269 // Info for each vertex attribute saved so we can check at glDrawXXX time 267 // Info for each vertex attribute saved so we can check at glDrawXXX time
270 // if it is safe to draw. 268 // if it is safe to draw.
271 std::vector<VertexAttribInfo> vertex_attrib_infos_; 269 std::vector<VertexAttrib> vertex_attrib_infos_;
272 270
273 // The currently bound element array buffer. If this is 0 it is illegal 271 // The currently bound element array buffer. If this is 0 it is illegal
274 // to call glDrawElements. 272 // to call glDrawElements.
275 BufferManager::BufferInfo::Ref element_array_buffer_; 273 scoped_refptr<BufferManager::Buffer> element_array_buffer_;
276 274
277 // Lists for which vertex attribs are enabled, disabled. 275 // Lists for which vertex attribs are enabled, disabled.
278 VertexAttribInfoList enabled_vertex_attribs_; 276 VertexAttribInfoList enabled_vertex_attribs_;
279 VertexAttribInfoList disabled_vertex_attribs_; 277 VertexAttribInfoList disabled_vertex_attribs_;
280 278
281 // The VertexArrayManager that owns this VertexAttribManager 279 // The VertexArrayManager that owns this VertexAttribManager
282 VertexArrayManager* manager_; 280 VertexArrayManager* manager_;
283 281
284 // True if deleted. 282 // True if deleted.
285 bool deleted_; 283 bool deleted_;
286 284
287 // Service side vertex array object id. 285 // Service side vertex array object id.
288 GLuint service_id_; 286 GLuint service_id_;
289 }; 287 };
290 288
291 } // namespace gles2 289 } // namespace gles2
292 } // namespace gpu 290 } // namespace gpu
293 291
294 #endif // GPU_COMMAND_BUFFER_SERVICE_VERTEX_ATTRIB_MANAGER_H_ 292 #endif // GPU_COMMAND_BUFFER_SERVICE_VERTEX_ATTRIB_MANAGER_H_
295 293
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/vertex_array_manager.cc ('k') | gpu/command_buffer/service/vertex_attrib_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698