Index: gpu/command_buffer/service/context_group.cc |
=================================================================== |
--- gpu/command_buffer/service/context_group.cc (revision 187725) |
+++ gpu/command_buffer/service/context_group.cc (working copy) |
@@ -46,6 +46,8 @@ |
max_fragment_uniform_vectors_(0u), |
max_varying_vectors_(0u), |
max_vertex_uniform_vectors_(0u), |
+ max_color_attachments_(1u), |
+ max_draw_buffers_(1u), |
program_cache_(NULL), |
feature_info_(new FeatureInfo()) { |
{ |
@@ -100,9 +102,18 @@ |
glGetIntegerv(GL_MAX_SAMPLES, &max_samples); |
} |
+ if (feature_info_->feature_flags().ext_draw_buffers) { |
+ GetIntegerv(GL_MAX_COLOR_ATTACHMENTS_EXT, &max_color_attachments_); |
+ if (max_color_attachments_ < 1) |
+ max_color_attachments_ = 1; |
+ GetIntegerv(GL_MAX_DRAW_BUFFERS_ARB, &max_draw_buffers_); |
+ if (max_draw_buffers_ < 1) |
+ max_draw_buffers_ = 1; |
+ } |
+ |
buffer_manager_.reset(new BufferManager( |
memory_tracker_, feature_info_.get())); |
- framebuffer_manager_.reset(new FramebufferManager()); |
+ framebuffer_manager_.reset(new FramebufferManager(max_draw_buffers_)); |
renderbuffer_manager_.reset(new RenderbufferManager(memory_tracker_, |
max_renderbuffer_size, |
max_samples)); |
@@ -205,6 +216,13 @@ |
} |
decoders_.push_back(base::AsWeakPtr<GLES2Decoder>(decoder)); |
+ |
+ DCHECK_GT(max_draw_buffers_, 0u); |
+ draw_buffers_.reset(new GLenum[max_draw_buffers_]); |
+ draw_buffers_[0] = GL_BACK; |
+ for (uint32 i = 1; i < max_draw_buffers_; ++i) |
+ draw_buffers_[i] = GL_NONE; |
+ |
return true; |
} |
@@ -330,5 +348,18 @@ |
return result; |
} |
+GLenum ContextGroup::GetDrawBuffer(GLenum draw_buffer) const { |
+ GLsizei index = static_cast<GLsizei>( |
+ draw_buffer - GL_DRAW_BUFFER0_ARB); |
+ DCHECK(index >= 0 && index < static_cast<GLsizei>(max_draw_buffers_)); |
+ return draw_buffers_[index]; |
+} |
+ |
+void ContextGroup::SetDrawBuffers(GLsizei n, const GLenum* bufs) { |
+ DCHECK(n <= static_cast<GLsizei>(max_draw_buffers_)); |
+ for (GLsizei i = 0; i < n; ++i) |
+ draw_buffers_[i] = bufs[i]; |
+} |
+ |
} // namespace gles2 |
} // namespace gpu |