Chromium Code Reviews

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

Issue 1747013: Changes the code to use separate ids namspaces... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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_TEXTURE_MANAGER_H_ 5 #ifndef GPU_COMMAND_BUFFER_SERVICE_TEXTURE_MANAGER_H_
6 #define GPU_COMMAND_BUFFER_SERVICE_TEXTURE_MANAGER_H_ 6 #define GPU_COMMAND_BUFFER_SERVICE_TEXTURE_MANAGER_H_
7 7
8 #include <map> 8 #include <map>
9 #include <vector> 9 #include <vector>
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/ref_counted.h" 12 #include "base/ref_counted.h"
13 #include "gpu/command_buffer/service/gl_utils.h" 13 #include "gpu/command_buffer/service/gl_utils.h"
14 14
15 namespace gpu { 15 namespace gpu {
16 namespace gles2 { 16 namespace gles2 {
17 17
18 // This class keeps track of the textures and their sizes so we can do NPOT and 18 // This class keeps track of the textures and their sizes so we can do NPOT and
19 // texture complete checking. 19 // texture complete checking.
20 // 20 //
21 // NOTE: To support shared resources an instance of this class will need to be 21 // NOTE: To support shared resources an instance of this class will need to be
22 // shared by multiple GLES2Decoders. 22 // shared by multiple GLES2Decoders.
23 class TextureManager { 23 class TextureManager {
24 public: 24 public:
25 // Info about Textures currently in the system. 25 // Info about Textures currently in the system.
26 class TextureInfo : public base::RefCounted<TextureInfo> { 26 class TextureInfo : public base::RefCounted<TextureInfo> {
27 public: 27 public:
28 typedef scoped_refptr<TextureInfo> Ref; 28 typedef scoped_refptr<TextureInfo> Ref;
29 29
30 explicit TextureInfo(GLuint texture_id) 30 explicit TextureInfo(GLuint service_id)
31 : texture_id_(texture_id), 31 : service_id_(service_id),
32 deleted_(false), 32 deleted_(false),
33 target_(0), 33 target_(0),
34 min_filter_(GL_NEAREST_MIPMAP_LINEAR), 34 min_filter_(GL_NEAREST_MIPMAP_LINEAR),
35 mag_filter_(GL_LINEAR), 35 mag_filter_(GL_LINEAR),
36 wrap_s_(GL_REPEAT), 36 wrap_s_(GL_REPEAT),
37 wrap_t_(GL_REPEAT), 37 wrap_t_(GL_REPEAT),
38 max_level_set_(-1), 38 max_level_set_(-1),
39 texture_complete_(false), 39 texture_complete_(false),
40 cube_complete_(false), 40 cube_complete_(false),
41 npot_(false) { 41 npot_(false) {
42 } 42 }
43 43
44 // True if this texture meets all the GLES2 criteria for rendering. 44 // True if this texture meets all the GLES2 criteria for rendering.
45 // See section 3.8.2 of the GLES2 spec. 45 // See section 3.8.2 of the GLES2 spec.
46 bool CanRender() const; 46 bool CanRender() const;
47 47
48 // The service side OpenGL id of the texture. 48 // The service side OpenGL id of the texture.
49 GLuint texture_id() const { 49 GLuint service_id() const {
50 return texture_id_; 50 return service_id_;
51 } 51 }
52 52
53 // Returns the target this texure was first bound to or 0 if it has not 53 // Returns the target this texure was first bound to or 0 if it has not
54 // been bound. Once a texture is bound to a specific target it can never be 54 // been bound. Once a texture is bound to a specific target it can never be
55 // bound to a different target. 55 // bound to a different target.
56 GLenum target() const { 56 GLenum target() const {
57 return target_; 57 return target_;
58 } 58 }
59 59
60 // In GLES2 "texture complete" means it has all required mips for filtering 60 // In GLES2 "texture complete" means it has all required mips for filtering
(...skipping 67 matching lines...)
128 GLint internal_format; 128 GLint internal_format;
129 GLsizei width; 129 GLsizei width;
130 GLsizei height; 130 GLsizei height;
131 GLsizei depth; 131 GLsizei depth;
132 GLint border; 132 GLint border;
133 GLenum format; 133 GLenum format;
134 GLenum type; 134 GLenum type;
135 }; 135 };
136 136
137 void MarkAsDeleted() { 137 void MarkAsDeleted() {
138 texture_id_ = 0; 138 service_id_ = 0;
139 deleted_ = true; 139 deleted_ = true;
140 } 140 }
141 141
142 bool NeedsMips() const { 142 bool NeedsMips() const {
143 return min_filter_ != GL_NEAREST && min_filter_ != GL_LINEAR; 143 return min_filter_ != GL_NEAREST && min_filter_ != GL_LINEAR;
144 } 144 }
145 145
146 // Sets the TextureInfo's target 146 // Sets the TextureInfo's target
147 // Parameters: 147 // Parameters:
148 // target: GL_TEXTURE_2D or GL_TEXTURE_CUBE_MAP 148 // target: GL_TEXTURE_2D or GL_TEXTURE_CUBE_MAP
149 // max_levels: The maximum levels this type of target can have. 149 // max_levels: The maximum levels this type of target can have.
150 void SetTarget(GLenum target, GLint max_levels) { 150 void SetTarget(GLenum target, GLint max_levels) {
151 DCHECK_EQ(0u, target_); // you can only set this once. 151 DCHECK_EQ(0u, target_); // you can only set this once.
152 target_ = target; 152 target_ = target;
153 size_t num_faces = (target == GL_TEXTURE_2D) ? 1 : 6; 153 size_t num_faces = (target == GL_TEXTURE_2D) ? 1 : 6;
154 level_infos_.resize(num_faces); 154 level_infos_.resize(num_faces);
155 for (size_t ii = 0; ii < num_faces; ++ii) { 155 for (size_t ii = 0; ii < num_faces; ++ii) {
156 level_infos_[ii].resize(max_levels); 156 level_infos_[ii].resize(max_levels);
157 } 157 }
158 } 158 }
159 159
160 // Update info about this texture. 160 // Update info about this texture.
161 void Update(); 161 void Update();
162 162
163 // Info about each face and level of texture. 163 // Info about each face and level of texture.
164 std::vector<std::vector<LevelInfo> > level_infos_; 164 std::vector<std::vector<LevelInfo> > level_infos_;
165 165
166 // The id of the texure 166 // The id of the texure
167 GLuint texture_id_; 167 GLuint service_id_;
168 168
169 // Whether this texture has been deleted. 169 // Whether this texture has been deleted.
170 bool deleted_; 170 bool deleted_;
171 171
172 // The target. 0 if unset, otherwise GL_TEXTURE_2D or GL_TEXTURE_CUBE_MAP. 172 // The target. 0 if unset, otherwise GL_TEXTURE_2D or GL_TEXTURE_CUBE_MAP.
173 GLenum target_; 173 GLenum target_;
174 174
175 // Texture parameters. 175 // Texture parameters.
176 GLenum min_filter_; 176 GLenum min_filter_;
177 GLenum mag_filter_; 177 GLenum mag_filter_;
(...skipping 49 matching lines...)
227 // Sets the TextureInfo's target 227 // Sets the TextureInfo's target
228 // Parameters: 228 // Parameters:
229 // target: GL_TEXTURE_2D or GL_TEXTURE_CUBE_MAP 229 // target: GL_TEXTURE_2D or GL_TEXTURE_CUBE_MAP
230 // max_levels: The maximum levels this type of target can have. 230 // max_levels: The maximum levels this type of target can have.
231 void SetInfoTarget(TextureInfo* info, GLenum target) { 231 void SetInfoTarget(TextureInfo* info, GLenum target) {
232 DCHECK(info); 232 DCHECK(info);
233 info->SetTarget(target, MaxLevelsForTarget(target)); 233 info->SetTarget(target, MaxLevelsForTarget(target));
234 } 234 }
235 235
236 // Creates a new texture info. 236 // Creates a new texture info.
237 TextureInfo* CreateTextureInfo(GLuint texture_id); 237 TextureInfo* CreateTextureInfo(GLuint client_id, GLuint service_id);
238 238
239 // Gets the texture info for the given texture. 239 // Gets the texture info for the given texture.
240 TextureInfo* GetTextureInfo(GLuint texture_id); 240 TextureInfo* GetTextureInfo(GLuint client_id);
241 241
242 // Removes a texture info. 242 // Removes a texture info.
243 void RemoveTextureInfo(GLuint texture_id); 243 void RemoveTextureInfo(GLuint client_id);
244
245 // Gets a client id for a given service id.
246 bool GetClientId(GLuint service_id, GLuint* client_id) const;
244 247
245 TextureInfo* GetDefaultTextureInfo(GLenum target) { 248 TextureInfo* GetDefaultTextureInfo(GLenum target) {
246 return target == GL_TEXTURE_2D ? default_texture_2d_ : 249 return target == GL_TEXTURE_2D ? default_texture_2d_ :
247 default_texture_cube_map_; 250 default_texture_cube_map_;
248 } 251 }
249 252
250 private: 253 private:
251 // Info for each texture in the system. 254 // Info for each texture in the system.
252 // TODO(gman): Choose a faster container. 255 // TODO(gman): Choose a faster container.
253 typedef std::map<GLuint, TextureInfo::Ref> TextureInfoMap; 256 typedef std::map<GLuint, TextureInfo::Ref> TextureInfoMap;
254 TextureInfoMap texture_infos_; 257 TextureInfoMap texture_infos_;
255 258
256 GLsizei max_texture_size_; 259 GLsizei max_texture_size_;
257 GLsizei max_cube_map_texture_size_; 260 GLsizei max_cube_map_texture_size_;
258 GLint max_levels_; 261 GLint max_levels_;
259 GLint max_cube_map_levels_; 262 GLint max_cube_map_levels_;
260 263
261 // The default textures for each target (texture name = 0) 264 // The default textures for each target (texture name = 0)
262 TextureInfo::Ref default_texture_2d_; 265 TextureInfo::Ref default_texture_2d_;
263 TextureInfo::Ref default_texture_cube_map_; 266 TextureInfo::Ref default_texture_cube_map_;
264 267
265 DISALLOW_COPY_AND_ASSIGN(TextureManager); 268 DISALLOW_COPY_AND_ASSIGN(TextureManager);
266 }; 269 };
267 270
268 } // namespace gles2 271 } // namespace gles2
269 } // namespace gpu 272 } // namespace gpu
270 273
271 #endif // GPU_COMMAND_BUFFER_SERVICE_TEXTURE_MANAGER_H_ 274 #endif // GPU_COMMAND_BUFFER_SERVICE_TEXTURE_MANAGER_H_
272 275
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/shader_manager_unittest.cc ('k') | gpu/command_buffer/service/texture_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine