diff options
author | apatrick@chromium.org <apatrick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-12 00:25:46 +0000 |
---|---|---|
committer | apatrick@chromium.org <apatrick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-12 00:25:46 +0000 |
commit | e134cf21752f90003a17fe0a0d38a05fe2728edb (patch) | |
tree | 2f9a59be1e117bb1d14660bc94f7d884e03e169c /gpu/command_buffer | |
parent | e4d9a972ed8350b5e45f5da90b2a1b5ab47c1ca7 (diff) | |
download | chromium_src-e134cf21752f90003a17fe0a0d38a05fe2728edb.zip chromium_src-e134cf21752f90003a17fe0a0d38a05fe2728edb.tar.gz chromium_src-e134cf21752f90003a17fe0a0d38a05fe2728edb.tar.bz2 |
Reland 85013 - Split GLContext::Create*GLContext into GLSurface::Create*GLSurface plus a surface type independent GLContext::CreateGLContext.
TEST=webgl on windows and mac, trybots
BUG=none
Review URL: http://codereview.chromium.org/6997003
Review URL: http://codereview.chromium.org/7015016
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@85081 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu/command_buffer')
6 files changed, 53 insertions, 20 deletions
diff --git a/gpu/command_buffer/client/gles2_demo.cc b/gpu/command_buffer/client/gles2_demo.cc index 54a3b89..78768dd 100644 --- a/gpu/command_buffer/client/gles2_demo.cc +++ b/gpu/command_buffer/client/gles2_demo.cc @@ -25,7 +25,7 @@ #include "gpu/command_buffer/client/gles2_lib.h" #include "gpu/command_buffer/client/gles2_demo_c.h" #include "gpu/command_buffer/client/gles2_demo_cc.h" -#include "ui/gfx/gl/gl_context.h" +#include "ui/gfx/gl/gl_surface.h" using base::SharedMemory; using gpu::Buffer; @@ -212,7 +212,7 @@ int main(int argc, char** argv) { base::AtExitManager at_exit_manager; MessageLoopForUI message_loop; - gfx::GLContext::InitializeOneOff(); + gfx::GLSurface::InitializeOneOff(); GLES2Demo* demo = new GLES2Demo(); diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc index f302aa3..40cb373 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc @@ -126,7 +126,7 @@ void GLES2DecoderTestBase::InitDecoder( shared_memory_id_ = kSharedMemoryId; shared_memory_base_ = buffer.ptr; - context_ = new gfx::StubGLContext; + context_ = new gfx::GLContextStub; context_->SetSize(gfx::Size(kBackBufferWidth, kBackBufferHeight)); decoder_.reset(GLES2Decoder::Create(group_.get())); diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h index 2d027f7..72a5e71 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h @@ -255,7 +255,7 @@ class GLES2DecoderTestBase : public testing::Test { // Use StrictMock to make 100% sure we know how GL will be called. scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_; - gfx::StubGLContext* context_; + gfx::GLContextStub* context_; scoped_ptr<GLES2Decoder> decoder_; GLuint client_buffer_id_; diff --git a/gpu/command_buffer/service/gpu_scheduler_linux.cc b/gpu/command_buffer/service/gpu_scheduler_linux.cc index 48ed470..265c976 100644 --- a/gpu/command_buffer/service/gpu_scheduler_linux.cc +++ b/gpu/command_buffer/service/gpu_scheduler_linux.cc @@ -4,6 +4,7 @@ #include "gpu/command_buffer/service/gpu_scheduler.h" #include "ui/gfx/gl/gl_context.h" +#include "ui/gfx/gl/gl_surface.h" using ::base::SharedMemory; @@ -29,19 +30,28 @@ bool GpuScheduler::Initialize( DCHECK(parent_context); } - // Create either a view or pbuffer based GLContext. - scoped_ptr<gfx::GLContext> context; + // Create either a view or pbuffer based GLSurface. + scoped_ptr<gfx::GLSurface> surface; if (window) { DCHECK(!parent_handle); - // TODO(apatrick): support multisampling. - context.reset(gfx::GLContext::CreateViewGLContext(window, false)); + surface.reset(gfx::GLSurface::CreateViewGLSurface(window)); } else { - context.reset(gfx::GLContext::CreateOffscreenGLContext(parent_context)); + surface.reset(gfx::GLSurface::CreateOffscreenGLSurface(gfx::Size(1, 1))); } + if (!surface.get()) { + LOG(ERROR) << "GpuScheduler::Initialize failed.\n"; + Destroy(); + return false; + } + + // Create a GLContext and attach the surface. + scoped_ptr<gfx::GLContext> context( + gfx::GLContext::CreateGLContext(surface.release(), parent_context)); if (!context.get()) { - LOG(ERROR) << "GpuScheduler::Initialize failed"; + LOG(ERROR) << "CreateGLContext failed.\n"; + Destroy(); return false; } diff --git a/gpu/command_buffer/service/gpu_scheduler_mac.cc b/gpu/command_buffer/service/gpu_scheduler_mac.cc index f89bfb5..717230c 100644 --- a/gpu/command_buffer/service/gpu_scheduler_mac.cc +++ b/gpu/command_buffer/service/gpu_scheduler_mac.cc @@ -4,6 +4,7 @@ #include "gpu/command_buffer/service/gpu_scheduler.h" #include "ui/gfx/gl/gl_context.h" +#include "ui/gfx/gl/gl_surface.h" using ::base::SharedMemory; @@ -28,10 +29,22 @@ bool GpuScheduler::Initialize( DCHECK(parent_context); } + scoped_ptr<gfx::GLSurface> surface( + gfx::GLSurface::CreateOffscreenGLSurface(gfx::Size(1, 1))); + if (!surface.get()) { + LOG(ERROR) << "CreateOffscreenGLSurface failed.\n"; + Destroy(); + return false; + } + + // Create a GLContext and attach the surface. scoped_ptr<gfx::GLContext> context( - gfx::GLContext::CreateOffscreenGLContext(parent_context)); - if (!context.get()) + gfx::GLContext::CreateGLContext(surface.release(), parent_context)); + if (!context.get()) { + LOG(ERROR) << "CreateGLContext failed.\n"; + Destroy(); return false; + } // On Mac OS X since we can not render on-screen we don't even // attempt to create a view based GLContext. The only difference diff --git a/gpu/command_buffer/service/gpu_scheduler_win.cc b/gpu/command_buffer/service/gpu_scheduler_win.cc index 23c8782..7a874a2 100644 --- a/gpu/command_buffer/service/gpu_scheduler_win.cc +++ b/gpu/command_buffer/service/gpu_scheduler_win.cc @@ -6,6 +6,7 @@ #include "gpu/command_buffer/service/gpu_scheduler.h" #include "ui/gfx/gl/gl_context.h" +#include "ui/gfx/gl/gl_surface.h" using ::base::SharedMemory; @@ -30,19 +31,28 @@ bool GpuScheduler::Initialize( DCHECK(parent_context); } - // Create either a view or pbuffer based GLContext. - scoped_ptr<gfx::GLContext> context; + // Create either a view or pbuffer based GLSurface. + scoped_ptr<gfx::GLSurface> surface; if (window) { - DCHECK(!parent_context); - - // TODO(apatrick): support multisampling. - context.reset(gfx::GLContext::CreateViewGLContext(window, false)); + surface.reset(gfx::GLSurface::CreateViewGLSurface(window)); } else { - context.reset(gfx::GLContext::CreateOffscreenGLContext(parent_context)); + surface.reset(gfx::GLSurface::CreateOffscreenGLSurface(gfx::Size(1, 1))); } - if (!context.get()) + if (!surface.get()) { + LOG(ERROR) << "GpuScheduler::Initialize failed.\n"; + Destroy(); return false; + } + + // Create a GLContext and attach the surface. + scoped_ptr<gfx::GLContext> context( + gfx::GLContext::CreateGLContext(surface.release(), parent_context)); + if (!context.get()) { + LOG(ERROR) << "CreateGLContext failed.\n"; + Destroy(); + return false; + } return InitializeCommon(context.release(), size, |