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

Side by Side Diff: chrome/renderer/ggl/ggl.cc

Issue 6343006: Route IPC through browser when creating a viewable command buffer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix nit. Created 9 years, 10 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/renderer/ggl/ggl.h ('k') | chrome/renderer/gpu_channel_host.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "build/build_config.h" 5 #include "build/build_config.h"
6 6
7 #include "base/lazy_instance.h" 7 #include "base/lazy_instance.h"
8 #include "base/ref_counted.h" 8 #include "base/ref_counted.h"
9 #include "base/weak_ptr.h" 9 #include "base/weak_ptr.h"
10 #include "chrome/renderer/command_buffer_proxy.h" 10 #include "chrome/renderer/command_buffer_proxy.h"
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 } // namespace anonymous 55 } // namespace anonymous
56 56
57 // Manages a GL context. 57 // Manages a GL context.
58 class Context : public base::SupportsWeakPtr<Context> { 58 class Context : public base::SupportsWeakPtr<Context> {
59 public: 59 public:
60 Context(GpuChannelHost* channel, Context* parent); 60 Context(GpuChannelHost* channel, Context* parent);
61 ~Context(); 61 ~Context();
62 62
63 // Initialize a GGL context that can be used in association with a a GPU 63 // Initialize a GGL context that can be used in association with a a GPU
64 // channel acquired from a RenderWidget or RenderView. 64 // channel acquired from a RenderWidget or RenderView.
65 bool Initialize(gfx::NativeViewId view, 65 bool Initialize(bool onscreen,
66 int render_view_id, 66 int render_view_id,
67 const gfx::Size& size, 67 const gfx::Size& size,
68 const char* allowed_extensions, 68 const char* allowed_extensions,
69 const int32* attrib_list); 69 const int32* attrib_list);
70 70
71 #if defined(OS_MACOSX) 71 #if defined(OS_MACOSX)
72 // Asynchronously resizes an onscreen frame buffer. 72 // Asynchronously resizes an onscreen frame buffer.
73 void ResizeOnscreen(const gfx::Size& size); 73 void ResizeOnscreen(const gfx::Size& size);
74 #endif 74 #endif
75 75
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 transfer_buffer_id_(0), 149 transfer_buffer_id_(0),
150 gles2_implementation_(NULL), 150 gles2_implementation_(NULL),
151 last_error_(SUCCESS) { 151 last_error_(SUCCESS) {
152 DCHECK(channel); 152 DCHECK(channel);
153 } 153 }
154 154
155 Context::~Context() { 155 Context::~Context() {
156 Destroy(); 156 Destroy();
157 } 157 }
158 158
159 bool Context::Initialize(gfx::NativeViewId view, 159 bool Context::Initialize(bool onscreen,
160 int render_view_id, 160 int render_view_id,
161 const gfx::Size& size, 161 const gfx::Size& size,
162 const char* allowed_extensions, 162 const char* allowed_extensions,
163 const int32* attrib_list) { 163 const int32* attrib_list) {
164 DCHECK(size.width() >= 0 && size.height() >= 0); 164 DCHECK(size.width() >= 0 && size.height() >= 0);
165 165
166 if (channel_->state() != GpuChannelHost::kConnected) 166 if (channel_->state() != GpuChannelHost::kConnected)
167 return false; 167 return false;
168 168
169 // Ensure the gles2 library is initialized first in a thread safe way. 169 // Ensure the gles2 library is initialized first in a thread safe way.
(...skipping 30 matching lines...) Expand all
200 break; 200 break;
201 default: 201 default:
202 SetError(ggl::BAD_ATTRIBUTE); 202 SetError(ggl::BAD_ATTRIBUTE);
203 attribs.push_back(ggl::GGL_NONE); 203 attribs.push_back(ggl::GGL_NONE);
204 attrib_list = NULL; 204 attrib_list = NULL;
205 break; 205 break;
206 } 206 }
207 } 207 }
208 208
209 // Create a proxy to a command buffer in the GPU process. 209 // Create a proxy to a command buffer in the GPU process.
210 if (view) { 210 if (onscreen) {
211 command_buffer_ = channel_->CreateViewCommandBuffer( 211 command_buffer_ = channel_->CreateViewCommandBuffer(
212 view,
213 render_view_id, 212 render_view_id,
214 allowed_extensions, 213 allowed_extensions,
215 attribs); 214 attribs);
216 } else { 215 } else {
217 CommandBufferProxy* parent_command_buffer = 216 CommandBufferProxy* parent_command_buffer =
218 parent_.get() ? parent_->command_buffer_ : NULL; 217 parent_.get() ? parent_->command_buffer_ : NULL;
219 command_buffer_ = channel_->CreateOffscreenCommandBuffer( 218 command_buffer_ = channel_->CreateOffscreenCommandBuffer(
220 parent_command_buffer, 219 parent_command_buffer,
221 size, 220 size,
222 allowed_extensions, 221 allowed_extensions,
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 } 426 }
428 427
429 void Context::OnSwapBuffers() { 428 void Context::OnSwapBuffers() {
430 if (swap_buffers_callback_.get()) 429 if (swap_buffers_callback_.get())
431 swap_buffers_callback_->Run(); 430 swap_buffers_callback_->Run();
432 } 431 }
433 432
434 #endif // ENABLE_GPU 433 #endif // ENABLE_GPU
435 434
436 Context* CreateViewContext(GpuChannelHost* channel, 435 Context* CreateViewContext(GpuChannelHost* channel,
437 gfx::NativeViewId view,
438 int render_view_id, 436 int render_view_id,
439 const char* allowed_extensions, 437 const char* allowed_extensions,
440 const int32* attrib_list) { 438 const int32* attrib_list) {
441 #if defined(ENABLE_GPU) 439 #if defined(ENABLE_GPU)
442 scoped_ptr<Context> context(new Context(channel, NULL)); 440 scoped_ptr<Context> context(new Context(channel, NULL));
443 if (!context->Initialize( 441 if (!context->Initialize(
444 view, render_view_id, gfx::Size(), allowed_extensions, attrib_list)) 442 true, render_view_id, gfx::Size(), allowed_extensions, attrib_list))
445 return NULL; 443 return NULL;
446 444
447 return context.release(); 445 return context.release();
448 #else 446 #else
449 return NULL; 447 return NULL;
450 #endif 448 #endif
451 } 449 }
452 450
453 #if defined(OS_MACOSX) 451 #if defined(OS_MACOSX)
454 void ResizeOnscreenContext(Context* context, const gfx::Size& size) { 452 void ResizeOnscreenContext(Context* context, const gfx::Size& size) {
455 #if defined(ENABLE_GPU) 453 #if defined(ENABLE_GPU)
456 context->ResizeOnscreen(size); 454 context->ResizeOnscreen(size);
457 #endif 455 #endif
458 } 456 }
459 #endif 457 #endif
460 458
461 Context* CreateOffscreenContext(GpuChannelHost* channel, 459 Context* CreateOffscreenContext(GpuChannelHost* channel,
462 Context* parent, 460 Context* parent,
463 const gfx::Size& size, 461 const gfx::Size& size,
464 const char* allowed_extensions, 462 const char* allowed_extensions,
465 const int32* attrib_list) { 463 const int32* attrib_list) {
466 #if defined(ENABLE_GPU) 464 #if defined(ENABLE_GPU)
467 scoped_ptr<Context> context(new Context(channel, parent)); 465 scoped_ptr<Context> context(new Context(channel, parent));
468 if (!context->Initialize(0, 0, size, allowed_extensions, attrib_list)) 466 if (!context->Initialize(false, 0, size, allowed_extensions, attrib_list))
469 return NULL; 467 return NULL;
470 468
471 return context.release(); 469 return context.release();
472 #else 470 #else
473 return NULL; 471 return NULL;
474 #endif 472 #endif
475 } 473 }
476 474
477 void ResizeOffscreenContext(Context* context, const gfx::Size& size) { 475 void ResizeOffscreenContext(Context* context, const gfx::Size& size) {
478 #if defined(ENABLE_GPU) 476 #if defined(ENABLE_GPU)
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
571 } 569 }
572 570
573 gpu::gles2::GLES2Implementation* GetImplementation(Context* context) { 571 gpu::gles2::GLES2Implementation* GetImplementation(Context* context) {
574 if (!context) 572 if (!context)
575 return NULL; 573 return NULL;
576 574
577 return context->gles2_implementation(); 575 return context->gles2_implementation();
578 } 576 }
579 577
580 } // namespace ggl 578 } // namespace ggl
OLDNEW
« no previous file with comments | « chrome/renderer/ggl/ggl.h ('k') | chrome/renderer/gpu_channel_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698