Index: gpu/command_buffer/service/framebuffer_manager.cc |
diff --git a/gpu/command_buffer/service/framebuffer_manager.cc b/gpu/command_buffer/service/framebuffer_manager.cc |
index d64963534a345c6d92b47e65de94fff5b691253b..6b8fa8ca2b98c7b7efaabe6ed3658e29f4e3e898 100644 |
--- a/gpu/command_buffer/service/framebuffer_manager.cc |
+++ b/gpu/command_buffer/service/framebuffer_manager.cc |
@@ -36,14 +36,70 @@ bool DetectWebGL1DepthStencilAttachmentConflicts( |
} // namespace anonymous |
DecoderFramebufferState::DecoderFramebufferState() |
- : clear_state_dirty(false), |
- bound_read_framebuffer(NULL), |
- bound_draw_framebuffer(NULL) { |
-} |
+ : draw_binding_dirty_(true), |
+ read_binding_dirty_(true), |
+ draw_framebuffer_clear_state_dirty_(true) {} |
DecoderFramebufferState::~DecoderFramebufferState() { |
} |
+void DecoderFramebufferState::set_bound_draw_framebuffer( |
+ Framebuffer* framebuffer) { |
+ if (bound_draw_framebuffer_ == framebuffer) |
+ return; |
+ bound_draw_framebuffer_ = framebuffer; |
+ draw_binding_dirty_ = true; |
+ draw_framebuffer_clear_state_dirty_ = true; |
+} |
+ |
+void DecoderFramebufferState::set_bound_read_framebuffer( |
+ Framebuffer* framebuffer) { |
+ if (bound_read_framebuffer_ == framebuffer) |
+ return; |
+ bound_read_framebuffer_ = framebuffer; |
+ read_binding_dirty_ = true; |
+} |
+ |
+void DecoderFramebufferState::NotifyFramebufferChanged( |
+ Framebuffer* framebuffer) { |
+ if (framebuffer == bound_draw_framebuffer_.get()) |
+ draw_framebuffer_clear_state_dirty_ = true; |
+} |
+ |
+void DecoderFramebufferState::NotifyBoundFramebuffersChanged() { |
+ draw_framebuffer_clear_state_dirty_ = true; |
+} |
+ |
+void DecoderFramebufferState::SetBoundFramebuffer(GLenum target, |
+ Framebuffer* framebuffer) { |
+ if (target == GL_FRAMEBUFFER || target == GL_DRAW_FRAMEBUFFER_EXT) |
+ set_bound_draw_framebuffer(framebuffer); |
+ if (target == GL_FRAMEBUFFER || target == GL_READ_FRAMEBUFFER_EXT) |
+ set_bound_read_framebuffer(framebuffer); |
+} |
+ |
+bool DecoderFramebufferState::IsBindingDirty(GLenum target) const { |
+ if (target == GL_READ_FRAMEBUFFER_EXT) |
+ return read_binding_dirty_; |
+ if (target == GL_DRAW_FRAMEBUFFER_EXT) |
+ return draw_binding_dirty_; |
+ return read_binding_dirty_ || draw_binding_dirty_; |
+} |
+ |
+void DecoderFramebufferState::MarkBindingDirty(GLenum target) { |
+ if (target == GL_FRAMEBUFFER || target == GL_DRAW_FRAMEBUFFER_EXT) |
+ draw_binding_dirty_ = true; |
+ if (target == GL_FRAMEBUFFER || target == GL_READ_FRAMEBUFFER_EXT) |
+ read_binding_dirty_ = true; |
+} |
+ |
+void DecoderFramebufferState::MarkBindingClean(GLenum target) { |
+ if (target == GL_FRAMEBUFFER || target == GL_DRAW_FRAMEBUFFER_EXT) |
+ draw_binding_dirty_ = false; |
+ if (target == GL_FRAMEBUFFER || target == GL_READ_FRAMEBUFFER_EXT) |
+ read_binding_dirty_ = false; |
+} |
+ |
class RenderbufferAttachment |
: public Framebuffer::Attachment { |
public: |