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

Unified Diff: gpu/command_buffer/service/context_group.cc

Issue 12545014: Implement EXT_draw_buffers WebGL extention support in command buffer. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years, 9 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/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

Powered by Google App Engine
This is Rietveld 408576698