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

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

Issue 8341128: Defer clearing textures and renderbuffers (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix one more unit test Created 9 years, 1 month 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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_RENDERBUFFER_MANAGER_H_ 5 #ifndef GPU_COMMAND_BUFFER_SERVICE_RENDERBUFFER_MANAGER_H_
6 #define GPU_COMMAND_BUFFER_SERVICE_RENDERBUFFER_MANAGER_H_ 6 #define GPU_COMMAND_BUFFER_SERVICE_RENDERBUFFER_MANAGER_H_
7 7
8 #include "base/basictypes.h" 8 #include "base/basictypes.h"
9 #include "base/hash_tables.h" 9 #include "base/hash_tables.h"
10 #include "base/memory/ref_counted.h" 10 #include "base/memory/ref_counted.h"
11 #include "base/memory/scoped_ptr.h" 11 #include "base/memory/scoped_ptr.h"
12 #include "gpu/command_buffer/service/gl_utils.h" 12 #include "gpu/command_buffer/service/gl_utils.h"
13 13
14 namespace gpu { 14 namespace gpu {
15 namespace gles2 { 15 namespace gles2 {
16 16
17 // This class keeps track of the renderbuffers and whether or not they have 17 // This class keeps track of the renderbuffers and whether or not they have
18 // been cleared. 18 // been cleared.
19 class RenderbufferManager { 19 class RenderbufferManager {
20 public: 20 public:
21 // Info about Renderbuffers currently in the system. 21 // Info about Renderbuffers currently in the system.
22 class RenderbufferInfo : public base::RefCounted<RenderbufferInfo> { 22 class RenderbufferInfo : public base::RefCounted<RenderbufferInfo> {
23 public: 23 public:
24 typedef scoped_refptr<RenderbufferInfo> Ref; 24 typedef scoped_refptr<RenderbufferInfo> Ref;
25 25
26 explicit RenderbufferInfo(GLuint service_id) 26 explicit RenderbufferInfo(GLuint service_id)
27 : service_id_(service_id), 27 : service_id_(service_id),
28 cleared_(false), 28 cleared_(true),
29 has_been_bound_(false), 29 has_been_bound_(false),
30 samples_(0), 30 samples_(0),
31 internal_format_(GL_RGBA4), 31 internal_format_(GL_RGBA4),
32 width_(0), 32 width_(0),
33 height_(0) { 33 height_(0) {
34 } 34 }
35 35
36 GLuint service_id() const { 36 GLuint service_id() const {
37 return service_id_; 37 return service_id_;
38 } 38 }
39 39
40 bool cleared() const { 40 bool cleared() const {
41 return cleared_; 41 return cleared_;
42 } 42 }
43 43
44 void set_cleared() {
45 cleared_ = true;
46 }
47
48 GLenum internal_format() const { 44 GLenum internal_format() const {
49 return internal_format_; 45 return internal_format_;
50 } 46 }
51 47
52 GLsizei samples() const { 48 GLsizei samples() const {
53 return samples_; 49 return samples_;
54 } 50 }
55 51
56 GLsizei width() const { 52 GLsizei width() const {
57 return width_; 53 return width_;
58 } 54 }
59 55
60 GLsizei height() const { 56 GLsizei height() const {
61 return height_; 57 return height_;
62 } 58 }
63 59
64 void SetInfo(
65 GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) {
66 samples_ = samples;
67 internal_format_ = internalformat;
68 width_ = width;
69 height_ = height;
70 cleared_ = false;
71 }
72
73 bool IsDeleted() const { 60 bool IsDeleted() const {
74 return service_id_ == 0; 61 return service_id_ == 0;
75 } 62 }
76 63
77 void MarkAsValid() { 64 void MarkAsValid() {
78 has_been_bound_ = true; 65 has_been_bound_ = true;
79 } 66 }
80 67
81 bool IsValid() const { 68 bool IsValid() const {
82 return has_been_bound_ && !IsDeleted(); 69 return has_been_bound_ && !IsDeleted();
83 } 70 }
84 71
85 private: 72 private:
86 friend class RenderbufferManager; 73 friend class RenderbufferManager;
87 friend class base::RefCounted<RenderbufferInfo>; 74 friend class base::RefCounted<RenderbufferInfo>;
88 75
89 ~RenderbufferInfo() { } 76 ~RenderbufferInfo() { }
90 77
78 void set_cleared() {
79 cleared_ = true;
80 }
81
82 void SetInfo(
83 GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) {
84 samples_ = samples;
85 internal_format_ = internalformat;
86 width_ = width;
87 height_ = height;
88 cleared_ = false;
89 }
90
91 void MarkAsDeleted() { 91 void MarkAsDeleted() {
92 service_id_ = 0; 92 service_id_ = 0;
93 } 93 }
94 94
95 // Service side renderbuffer id. 95 // Service side renderbuffer id.
96 GLuint service_id_; 96 GLuint service_id_;
97 97
98 // Whether this renderbuffer has been cleared 98 // Whether this renderbuffer has been cleared
99 bool cleared_; 99 bool cleared_;
100 100
(...skipping 15 matching lines...) Expand all
116 ~RenderbufferManager(); 116 ~RenderbufferManager();
117 117
118 GLint max_renderbuffer_size() const { 118 GLint max_renderbuffer_size() const {
119 return max_renderbuffer_size_; 119 return max_renderbuffer_size_;
120 } 120 }
121 121
122 GLint max_samples() const { 122 GLint max_samples() const {
123 return max_samples_; 123 return max_samples_;
124 } 124 }
125 125
126 bool HaveUnclearedRenderbuffers() const {
127 return num_uncleared_renderbuffers_ != 0;
128 }
129
130 void SetInfo(
131 RenderbufferInfo* renderbuffer,
132 GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
133
134 void SetCleared(RenderbufferInfo* renderbuffer);
135
126 // Must call before destruction. 136 // Must call before destruction.
127 void Destroy(bool have_context); 137 void Destroy(bool have_context);
128 138
129 // Creates a RenderbufferInfo for the given renderbuffer. 139 // Creates a RenderbufferInfo for the given renderbuffer.
130 void CreateRenderbufferInfo(GLuint client_id, GLuint service_id); 140 void CreateRenderbufferInfo(GLuint client_id, GLuint service_id);
131 141
132 // Gets the renderbuffer info for the given renderbuffer. 142 // Gets the renderbuffer info for the given renderbuffer.
133 RenderbufferInfo* GetRenderbufferInfo(GLuint client_id); 143 RenderbufferInfo* GetRenderbufferInfo(GLuint client_id);
134 144
135 // Removes a renderbuffer info for the given renderbuffer. 145 // Removes a renderbuffer info for the given renderbuffer.
136 void RemoveRenderbufferInfo(GLuint client_id); 146 void RemoveRenderbufferInfo(GLuint client_id);
137 147
138 // Gets a client id for a given service id. 148 // Gets a client id for a given service id.
139 bool GetClientId(GLuint service_id, GLuint* client_id) const; 149 bool GetClientId(GLuint service_id, GLuint* client_id) const;
140 150
141 private: 151 private:
142 GLint max_renderbuffer_size_; 152 GLint max_renderbuffer_size_;
143 GLint max_samples_; 153 GLint max_samples_;
144 154
155 int num_uncleared_renderbuffers_;
156
145 // Info for each renderbuffer in the system. 157 // Info for each renderbuffer in the system.
146 typedef base::hash_map<GLuint, RenderbufferInfo::Ref> RenderbufferInfoMap; 158 typedef base::hash_map<GLuint, RenderbufferInfo::Ref> RenderbufferInfoMap;
147 RenderbufferInfoMap renderbuffer_infos_; 159 RenderbufferInfoMap renderbuffer_infos_;
148 160
149 DISALLOW_COPY_AND_ASSIGN(RenderbufferManager); 161 DISALLOW_COPY_AND_ASSIGN(RenderbufferManager);
150 }; 162 };
151 163
152 } // namespace gles2 164 } // namespace gles2
153 } // namespace gpu 165 } // namespace gpu
154 166
155 #endif // GPU_COMMAND_BUFFER_SERVICE_RENDERBUFFER_MANAGER_H_ 167 #endif // GPU_COMMAND_BUFFER_SERVICE_RENDERBUFFER_MANAGER_H_
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc ('k') | gpu/command_buffer/service/renderbuffer_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698