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

Unified Diff: gpu/command_buffer/service/framebuffer_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, 10 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 side-by-side diff with in-line comments
Download patch
Index: gpu/command_buffer/service/framebuffer_manager.h
diff --git a/gpu/command_buffer/service/framebuffer_manager.h b/gpu/command_buffer/service/framebuffer_manager.h
index ccc24b19e307ef1fea2d9f07be475ff000c634c2..b285cc72ee6ed28d92db99b5d11c43a29cc4ed5d 100644
--- a/gpu/command_buffer/service/framebuffer_manager.h
+++ b/gpu/command_buffer/service/framebuffer_manager.h
@@ -17,182 +17,180 @@
namespace gpu {
namespace gles2 {
-// This class keeps track of the frambebuffers and their attached renderbuffers
-// so we can correctly clear them.
-class GPU_EXPORT FramebufferManager {
+class FramebufferManager;
+
+// Info about a particular Framebuffer.
+class GPU_EXPORT Framebuffer : public base::RefCounted<Framebuffer> {
public:
- // Info about Framebuffers currently in the system.
- class GPU_EXPORT FramebufferInfo : public base::RefCounted<FramebufferInfo> {
+ class Attachment : public base::RefCounted<Attachment> {
public:
- typedef scoped_refptr<FramebufferInfo> Ref;
-
- class Attachment : public base::RefCounted<Attachment> {
- public:
- typedef scoped_refptr<Attachment> Ref;
-
- virtual GLsizei width() const = 0;
- virtual GLsizei height() const = 0;
- virtual GLenum internal_format() const = 0;
- virtual GLsizei samples() const = 0;
- virtual bool cleared() const = 0;
- virtual void SetCleared(
- RenderbufferManager* renderbuffer_manager,
- TextureManager* texture_manager,
- bool cleared) = 0;
- virtual bool IsTexture(TextureManager::TextureInfo* texture) const = 0;
- virtual bool IsRenderbuffer(
- RenderbufferManager::RenderbufferInfo* renderbuffer) const = 0;
- virtual bool CanRenderTo() const = 0;
- virtual void DetachFromFramebuffer() const = 0;
- virtual bool ValidForAttachmentType(GLenum attachment_type) = 0;
- virtual void AddToSignature(
- TextureManager* texture_manager, std::string* signature) const = 0;
-
- protected:
- friend class base::RefCounted<Attachment>;
- virtual ~Attachment() {}
- };
-
- FramebufferInfo(FramebufferManager* manager, GLuint service_id);
+ virtual GLsizei width() const = 0;
+ virtual GLsizei height() const = 0;
+ virtual GLenum internal_format() const = 0;
+ virtual GLsizei samples() const = 0;
+ virtual bool cleared() const = 0;
+ virtual void SetCleared(
+ RenderbufferManager* renderbuffer_manager,
+ TextureManager* texture_manager,
+ bool cleared) = 0;
+ virtual bool IsTexture(Texture* texture) const = 0;
+ virtual bool IsRenderbuffer(
+ Renderbuffer* renderbuffer) const = 0;
+ virtual bool CanRenderTo() const = 0;
+ virtual void DetachFromFramebuffer() const = 0;
+ virtual bool ValidForAttachmentType(GLenum attachment_type) = 0;
+ virtual void AddToSignature(
+ TextureManager* texture_manager, std::string* signature) const = 0;
+
+ protected:
+ friend class base::RefCounted<Attachment>;
+ virtual ~Attachment() {}
+ };
- GLuint service_id() const {
- return service_id_;
- }
+ Framebuffer(FramebufferManager* manager, GLuint service_id);
- bool HasUnclearedAttachment(GLenum attachment) const;
-
- void MarkAttachmentAsCleared(
- RenderbufferManager* renderbuffer_manager,
- TextureManager* texture_manager,
- GLenum attachment,
- bool cleared);
-
- // Attaches a renderbuffer to a particlar attachment.
- // Pass null to detach.
- void AttachRenderbuffer(
- GLenum attachment, RenderbufferManager::RenderbufferInfo* renderbuffer);
-
- // Attaches a texture to a particlar attachment. Pass null to detach.
- void AttachTexture(
- GLenum attachment, TextureManager::TextureInfo* texture, GLenum target,
- GLint level);
-
- // Unbinds the given renderbuffer if it is bound.
- void UnbindRenderbuffer(
- GLenum target, RenderbufferManager::RenderbufferInfo* renderbuffer);
-
- // Unbinds the given texture if it is bound.
- void UnbindTexture(
- GLenum target, TextureManager::TextureInfo* texture);
-
- const Attachment* GetAttachment(GLenum attachment) const;
-
- bool IsDeleted() const {
- return deleted_;
- }
-
- void MarkAsValid() {
- has_been_bound_ = true;
- }
-
- bool IsValid() const {
- return has_been_bound_ && !IsDeleted();
- }
-
- bool HasDepthAttachment() const;
- bool HasStencilAttachment() const;
- GLenum GetColorAttachmentFormat() const;
-
- // Verify all the rules in OpenGL ES 2.0.25 4.4.5 are followed.
- // Returns GL_FRAMEBUFFER_COMPLETE if there are no reasons we know we can't
- // use this combination of attachments. Otherwise returns the value
- // that glCheckFramebufferStatus should return for this set of attachments.
- // Note that receiving GL_FRAMEBUFFER_COMPLETE from this function does
- // not mean the real OpenGL will consider it framebuffer complete. It just
- // means it passed our tests.
- GLenum IsPossiblyComplete() const;
-
- // Implements optimized glGetFramebufferStatus.
- GLenum GetStatus(TextureManager* texture_manager, GLenum target) const;
-
- // Check all attachments are cleared
- bool IsCleared() const;
-
- static void ClearFramebufferCompleteComboMap();
-
- private:
- friend class FramebufferManager;
- friend class base::RefCounted<FramebufferInfo>;
-
- ~FramebufferInfo();
-
- void MarkAsDeleted();
-
- void MarkAttachmentsAsCleared(
- RenderbufferManager* renderbuffer_manager,
- TextureManager* texture_manager,
- bool cleared);
-
- void MarkAsComplete(unsigned state_id) {
- framebuffer_complete_state_count_id_ = state_id;
- }
+ GLuint service_id() const {
+ return service_id_;
+ }
- unsigned framebuffer_complete_state_count_id() const {
- return framebuffer_complete_state_count_id_;
- }
+ bool HasUnclearedAttachment(GLenum attachment) const;
- // The managers that owns this.
- FramebufferManager* manager_;
+ void MarkAttachmentAsCleared(
+ RenderbufferManager* renderbuffer_manager,
+ TextureManager* texture_manager,
+ GLenum attachment,
+ bool cleared);
- bool deleted_;
+ // Attaches a renderbuffer to a particlar attachment.
+ // Pass null to detach.
+ void AttachRenderbuffer(
+ GLenum attachment, Renderbuffer* renderbuffer);
- // Service side framebuffer id.
- GLuint service_id_;
+ // Attaches a texture to a particlar attachment. Pass null to detach.
+ void AttachTexture(
+ GLenum attachment, Texture* texture, GLenum target,
+ GLint level);
- // Whether this framebuffer has ever been bound.
- bool has_been_bound_;
+ // Unbinds the given renderbuffer if it is bound.
+ void UnbindRenderbuffer(
+ GLenum target, Renderbuffer* renderbuffer);
- // state count when this framebuffer was last checked for completeness.
- unsigned framebuffer_complete_state_count_id_;
+ // Unbinds the given texture if it is bound.
+ void UnbindTexture(
+ GLenum target, Texture* texture);
- // A map of attachments.
- typedef base::hash_map<GLenum, Attachment::Ref> AttachmentMap;
- AttachmentMap attachments_;
+ const Attachment* GetAttachment(GLenum attachment) const;
- // A map of successful frame buffer combos. If it's in the map
- // it should be FRAMEBUFFER_COMPLETE.
- typedef base::hash_map<std::string, bool> FramebufferComboCompleteMap;
- static FramebufferComboCompleteMap* framebuffer_combo_complete_map_;
+ bool IsDeleted() const {
+ return deleted_;
+ }
- DISALLOW_COPY_AND_ASSIGN(FramebufferInfo);
- };
+ void MarkAsValid() {
+ has_been_bound_ = true;
+ }
+
+ bool IsValid() const {
+ return has_been_bound_ && !IsDeleted();
+ }
+
+ bool HasDepthAttachment() const;
+ bool HasStencilAttachment() const;
+ GLenum GetColorAttachmentFormat() const;
+
+ // Verify all the rules in OpenGL ES 2.0.25 4.4.5 are followed.
+ // Returns GL_FRAMEBUFFER_COMPLETE if there are no reasons we know we can't
+ // use this combination of attachments. Otherwise returns the value
+ // that glCheckFramebufferStatus should return for this set of attachments.
+ // Note that receiving GL_FRAMEBUFFER_COMPLETE from this function does
+ // not mean the real OpenGL will consider it framebuffer complete. It just
+ // means it passed our tests.
+ GLenum IsPossiblyComplete() const;
+
+ // Implements optimized glGetFramebufferStatus.
+ GLenum GetStatus(TextureManager* texture_manager, GLenum target) const;
+
+ // Check all attachments are cleared
+ bool IsCleared() const;
+
+ static void ClearFramebufferCompleteComboMap();
+
+ private:
+ friend class FramebufferManager;
+ friend class base::RefCounted<Framebuffer>;
+
+ ~Framebuffer();
+
+ void MarkAsDeleted();
+ void MarkAttachmentsAsCleared(
+ RenderbufferManager* renderbuffer_manager,
+ TextureManager* texture_manager,
+ bool cleared);
+
+ void MarkAsComplete(unsigned state_id) {
+ framebuffer_complete_state_count_id_ = state_id;
+ }
+
+ unsigned framebuffer_complete_state_count_id() const {
+ return framebuffer_complete_state_count_id_;
+ }
+
+ // The managers that owns this.
+ FramebufferManager* manager_;
+
+ bool deleted_;
+
+ // Service side framebuffer id.
+ GLuint service_id_;
+
+ // Whether this framebuffer has ever been bound.
+ bool has_been_bound_;
+
+ // state count when this framebuffer was last checked for completeness.
+ unsigned framebuffer_complete_state_count_id_;
+
+ // A map of attachments.
+ typedef base::hash_map<GLenum, scoped_refptr<Attachment> > AttachmentMap;
+ AttachmentMap attachments_;
+
+ // A map of successful frame buffer combos. If it's in the map
+ // it should be FRAMEBUFFER_COMPLETE.
+ typedef base::hash_map<std::string, bool> FramebufferComboCompleteMap;
+ static FramebufferComboCompleteMap* framebuffer_combo_complete_map_;
+
+ DISALLOW_COPY_AND_ASSIGN(Framebuffer);
+};
+
+// This class keeps track of the frambebuffers and their attached renderbuffers
+// so we can correctly clear them.
+class GPU_EXPORT FramebufferManager {
+ public:
FramebufferManager();
~FramebufferManager();
// Must call before destruction.
void Destroy(bool have_context);
- // Creates a FramebufferInfo for the given framebuffer.
- void CreateFramebufferInfo(GLuint client_id, GLuint service_id);
+ // Creates a Framebuffer for the given framebuffer.
+ void CreateFramebuffer(GLuint client_id, GLuint service_id);
// Gets the framebuffer info for the given framebuffer.
- FramebufferInfo* GetFramebufferInfo(GLuint client_id);
+ Framebuffer* GetFramebuffer(GLuint client_id);
// Removes a framebuffer info for the given framebuffer.
- void RemoveFramebufferInfo(GLuint client_id);
+ void RemoveFramebuffer(GLuint client_id);
// Gets a client id for a given service id.
bool GetClientId(GLuint service_id, GLuint* client_id) const;
void MarkAttachmentsAsCleared(
- FramebufferInfo* framebuffer,
+ Framebuffer* framebuffer,
RenderbufferManager* renderbuffer_manager,
TextureManager* texture_manager);
- void MarkAsComplete(FramebufferInfo* framebuffer);
+ void MarkAsComplete(Framebuffer* framebuffer);
- bool IsComplete(FramebufferInfo* framebuffer);
+ bool IsComplete(Framebuffer* framebuffer);
void IncFramebufferStateChangeCount() {
// make sure this is never 0.
@@ -201,19 +199,22 @@ class GPU_EXPORT FramebufferManager {
}
private:
- void StartTracking(FramebufferInfo* info);
- void StopTracking(FramebufferInfo* info);
+ friend class Framebuffer;
+
+ void StartTracking(Framebuffer* info);
+ void StopTracking(Framebuffer* info);
// Info for each framebuffer in the system.
- typedef base::hash_map<GLuint, FramebufferInfo::Ref> FramebufferInfoMap;
+ typedef base::hash_map<GLuint, scoped_refptr<Framebuffer> >
+ FramebufferInfoMap;
FramebufferInfoMap framebuffer_infos_;
// Incremented anytime anything changes that might effect framebuffer
// state.
unsigned framebuffer_state_change_count_;
- // Counts the number of FramebufferInfo allocated with 'this' as its manager.
- // Allows to check no FramebufferInfo will outlive this.
+ // Counts the number of Framebuffer allocated with 'this' as its manager.
+ // Allows to check no Framebuffer will outlive this.
unsigned int framebuffer_info_count_;
bool have_context_;
« no previous file with comments | « gpu/command_buffer/service/feature_info_unittest.cc ('k') | gpu/command_buffer/service/framebuffer_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698