| 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:
|
|
|