OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "gpu/command_buffer/service/context_group.h" | 5 #include "gpu/command_buffer/service/context_group.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 28 matching lines...) Expand all Loading... |
39 enforce_gl_minimums_(CommandLine::ForCurrentProcess()->HasSwitch( | 39 enforce_gl_minimums_(CommandLine::ForCurrentProcess()->HasSwitch( |
40 switches::kEnforceGLMinimums)), | 40 switches::kEnforceGLMinimums)), |
41 bind_generates_resource_(bind_generates_resource), | 41 bind_generates_resource_(bind_generates_resource), |
42 max_vertex_attribs_(0u), | 42 max_vertex_attribs_(0u), |
43 max_texture_units_(0u), | 43 max_texture_units_(0u), |
44 max_texture_image_units_(0u), | 44 max_texture_image_units_(0u), |
45 max_vertex_texture_image_units_(0u), | 45 max_vertex_texture_image_units_(0u), |
46 max_fragment_uniform_vectors_(0u), | 46 max_fragment_uniform_vectors_(0u), |
47 max_varying_vectors_(0u), | 47 max_varying_vectors_(0u), |
48 max_vertex_uniform_vectors_(0u), | 48 max_vertex_uniform_vectors_(0u), |
| 49 max_color_attachments_(1u), |
| 50 max_draw_buffers_(1u), |
49 program_cache_(NULL), | 51 program_cache_(NULL), |
50 feature_info_(new FeatureInfo()) { | 52 feature_info_(new FeatureInfo()), |
| 53 draw_buffer_(GL_BACK) { |
51 { | 54 { |
52 TransferBufferManager* manager = new TransferBufferManager(); | 55 TransferBufferManager* manager = new TransferBufferManager(); |
53 transfer_buffer_manager_.reset(manager); | 56 transfer_buffer_manager_.reset(manager); |
54 manager->Initialize(); | 57 manager->Initialize(); |
55 } | 58 } |
56 | 59 |
57 id_namespaces_[id_namespaces::kBuffers].reset(new IdAllocator); | 60 id_namespaces_[id_namespaces::kBuffers].reset(new IdAllocator); |
58 id_namespaces_[id_namespaces::kFramebuffers].reset(new IdAllocator); | 61 id_namespaces_[id_namespaces::kFramebuffers].reset(new IdAllocator); |
59 id_namespaces_[id_namespaces::kProgramsAndShaders].reset( | 62 id_namespaces_[id_namespaces::kProgramsAndShaders].reset( |
60 new NonReusedIdAllocator); | 63 new NonReusedIdAllocator); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 &max_renderbuffer_size)) { | 96 &max_renderbuffer_size)) { |
94 LOG(ERROR) << "ContextGroup::Initialize failed because maximum " | 97 LOG(ERROR) << "ContextGroup::Initialize failed because maximum " |
95 << "renderbuffer size too small."; | 98 << "renderbuffer size too small."; |
96 return false; | 99 return false; |
97 } | 100 } |
98 GLint max_samples = 0; | 101 GLint max_samples = 0; |
99 if (feature_info_->feature_flags().chromium_framebuffer_multisample) { | 102 if (feature_info_->feature_flags().chromium_framebuffer_multisample) { |
100 glGetIntegerv(GL_MAX_SAMPLES, &max_samples); | 103 glGetIntegerv(GL_MAX_SAMPLES, &max_samples); |
101 } | 104 } |
102 | 105 |
| 106 if (feature_info_->feature_flags().ext_draw_buffers) { |
| 107 GetIntegerv(GL_MAX_COLOR_ATTACHMENTS_EXT, &max_color_attachments_); |
| 108 if (max_color_attachments_ < 1) |
| 109 max_color_attachments_ = 1; |
| 110 GetIntegerv(GL_MAX_DRAW_BUFFERS_ARB, &max_draw_buffers_); |
| 111 if (max_draw_buffers_ < 1) |
| 112 max_draw_buffers_ = 1; |
| 113 draw_buffer_ = GL_BACK; |
| 114 } |
| 115 |
103 buffer_manager_.reset(new BufferManager( | 116 buffer_manager_.reset(new BufferManager( |
104 memory_tracker_, feature_info_.get())); | 117 memory_tracker_, feature_info_.get())); |
105 framebuffer_manager_.reset(new FramebufferManager()); | 118 framebuffer_manager_.reset( |
| 119 new FramebufferManager(max_draw_buffers_, max_color_attachments_)); |
106 renderbuffer_manager_.reset(new RenderbufferManager(memory_tracker_, | 120 renderbuffer_manager_.reset(new RenderbufferManager(memory_tracker_, |
107 max_renderbuffer_size, | 121 max_renderbuffer_size, |
108 max_samples)); | 122 max_samples)); |
109 shader_manager_.reset(new ShaderManager()); | 123 shader_manager_.reset(new ShaderManager()); |
110 program_manager_.reset(new ProgramManager(program_cache_)); | 124 program_manager_.reset(new ProgramManager(program_cache_)); |
111 | 125 |
112 // Lookup GL things we need to know. | 126 // Lookup GL things we need to know. |
113 const GLint kGLES2RequiredMinimumVertexAttribs = 8u; | 127 const GLint kGLES2RequiredMinimumVertexAttribs = 8u; |
114 if (!QueryGLFeatureU( | 128 if (!QueryGLFeatureU( |
115 GL_MAX_VERTEX_ATTRIBS, kGLES2RequiredMinimumVertexAttribs, | 129 GL_MAX_VERTEX_ATTRIBS, kGLES2RequiredMinimumVertexAttribs, |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
325 GLenum pname, GLint min_required, uint32* v) { | 339 GLenum pname, GLint min_required, uint32* v) { |
326 uint32 value = 0; | 340 uint32 value = 0; |
327 GetIntegerv(pname, &value); | 341 GetIntegerv(pname, &value); |
328 bool result = CheckGLFeatureU(min_required, &value); | 342 bool result = CheckGLFeatureU(min_required, &value); |
329 *v = value; | 343 *v = value; |
330 return result; | 344 return result; |
331 } | 345 } |
332 | 346 |
333 } // namespace gles2 | 347 } // namespace gles2 |
334 } // namespace gpu | 348 } // namespace gpu |
OLD | NEW |