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_FRAMEBUFFER_MANAGER_H_ | 5 #ifndef GPU_COMMAND_BUFFER_SERVICE_FRAMEBUFFER_MANAGER_H_ |
6 #define GPU_COMMAND_BUFFER_SERVICE_FRAMEBUFFER_MANAGER_H_ | 6 #define GPU_COMMAND_BUFFER_SERVICE_FRAMEBUFFER_MANAGER_H_ |
7 | 7 |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 virtual ~Attachment() {} | 57 virtual ~Attachment() {} |
58 }; | 58 }; |
59 | 59 |
60 Framebuffer(FramebufferManager* manager, GLuint service_id); | 60 Framebuffer(FramebufferManager* manager, GLuint service_id); |
61 | 61 |
62 GLuint service_id() const { | 62 GLuint service_id() const { |
63 return service_id_; | 63 return service_id_; |
64 } | 64 } |
65 | 65 |
66 bool HasUnclearedAttachment(GLenum attachment) const; | 66 bool HasUnclearedAttachment(GLenum attachment) const; |
| 67 bool HasUnclearedColorAttachments() const; |
67 | 68 |
68 void MarkAttachmentAsCleared( | 69 void MarkAttachmentAsCleared( |
69 RenderbufferManager* renderbuffer_manager, | 70 RenderbufferManager* renderbuffer_manager, |
70 TextureManager* texture_manager, | 71 TextureManager* texture_manager, |
71 GLenum attachment, | 72 GLenum attachment, |
72 bool cleared); | 73 bool cleared); |
73 | 74 |
74 // Attaches a renderbuffer to a particlar attachment. | 75 // Attaches a renderbuffer to a particlar attachment. |
75 // Pass null to detach. | 76 // Pass null to detach. |
76 void AttachRenderbuffer( | 77 void AttachRenderbuffer( |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
122 // Implements optimized glGetFramebufferStatus. | 123 // Implements optimized glGetFramebufferStatus. |
123 GLenum GetStatus(TextureManager* texture_manager, GLenum target) const; | 124 GLenum GetStatus(TextureManager* texture_manager, GLenum target) const; |
124 | 125 |
125 // Check all attachments are cleared | 126 // Check all attachments are cleared |
126 bool IsCleared() const; | 127 bool IsCleared() const; |
127 | 128 |
128 GLenum GetDrawBuffer(GLenum draw_buffer) const; | 129 GLenum GetDrawBuffer(GLenum draw_buffer) const; |
129 | 130 |
130 void SetDrawBuffers(GLsizei n, const GLenum* bufs); | 131 void SetDrawBuffers(GLsizei n, const GLenum* bufs); |
131 | 132 |
| 133 // If a color buffer is attached to GL_COLOR_ATTACHMENTi, enable that |
| 134 // draw buffer for glClear(). |
| 135 void PrepareDrawBuffersForClear() const; |
| 136 |
| 137 // Restore draw buffers states that have been changed in |
| 138 // PrepareDrawBuffersForClear(). |
| 139 void RestoreDrawBuffersAfterClear() const; |
| 140 |
132 // Return true if any draw buffers has an alpha channel. | 141 // Return true if any draw buffers has an alpha channel. |
133 bool HasAlphaMRT() const; | 142 bool HasAlphaMRT() const; |
134 | 143 |
135 static void ClearFramebufferCompleteComboMap(); | 144 static void ClearFramebufferCompleteComboMap(); |
136 | 145 |
137 static bool AllowFramebufferComboCompleteMapForTesting() { | 146 static bool AllowFramebufferComboCompleteMapForTesting() { |
138 return allow_framebuffer_combo_complete_map_; | 147 return allow_framebuffer_combo_complete_map_; |
139 } | 148 } |
140 | 149 |
141 void OnTextureRefDetached(TextureRef* texture); | 150 void OnTextureRefDetached(TextureRef* texture); |
(...skipping 14 matching lines...) Expand all Loading... |
156 bool cleared); | 165 bool cleared); |
157 | 166 |
158 void MarkAsComplete(unsigned state_id) { | 167 void MarkAsComplete(unsigned state_id) { |
159 framebuffer_complete_state_count_id_ = state_id; | 168 framebuffer_complete_state_count_id_ = state_id; |
160 } | 169 } |
161 | 170 |
162 unsigned framebuffer_complete_state_count_id() const { | 171 unsigned framebuffer_complete_state_count_id() const { |
163 return framebuffer_complete_state_count_id_; | 172 return framebuffer_complete_state_count_id_; |
164 } | 173 } |
165 | 174 |
| 175 // Helper function for PrepareDrawBuffersForClear() and |
| 176 // RestoreDrawBuffersAfterClear(). |
| 177 void ChangeDrawBuffersHelper(bool recover) const; |
| 178 |
166 // The managers that owns this. | 179 // The managers that owns this. |
167 FramebufferManager* manager_; | 180 FramebufferManager* manager_; |
168 | 181 |
169 bool deleted_; | 182 bool deleted_; |
170 | 183 |
171 // Service side framebuffer id. | 184 // Service side framebuffer id. |
172 GLuint service_id_; | 185 GLuint service_id_; |
173 | 186 |
174 // Whether this framebuffer has ever been bound. | 187 // Whether this framebuffer has ever been bound. |
175 bool has_been_bound_; | 188 bool has_been_bound_; |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
294 typedef std::vector<TextureDetachObserver*> TextureDetachObserverVector; | 307 typedef std::vector<TextureDetachObserver*> TextureDetachObserverVector; |
295 TextureDetachObserverVector texture_detach_observers_; | 308 TextureDetachObserverVector texture_detach_observers_; |
296 | 309 |
297 DISALLOW_COPY_AND_ASSIGN(FramebufferManager); | 310 DISALLOW_COPY_AND_ASSIGN(FramebufferManager); |
298 }; | 311 }; |
299 | 312 |
300 } // namespace gles2 | 313 } // namespace gles2 |
301 } // namespace gpu | 314 } // namespace gpu |
302 | 315 |
303 #endif // GPU_COMMAND_BUFFER_SERVICE_FRAMEBUFFER_MANAGER_H_ | 316 #endif // GPU_COMMAND_BUFFER_SERVICE_FRAMEBUFFER_MANAGER_H_ |
OLD | NEW |