| OLD | NEW |
| 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 Loading... |
| 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_ |
| OLD | NEW |