1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "base/threading/platform_thread.h" 6 #include "mojo/application/application_runner_chromium.h" 7 #include "mojo/examples/surfaces_app/child_gl_impl.h" 8 #include "mojo/public/c/system/main.h" 9 #include "mojo/public/cpp/application/application_connection.h" 10 #include "mojo/public/cpp/application/application_delegate.h" 11 #include "mojo/public/cpp/application/application_impl.h" 12 #include "mojo/public/cpp/bindings/string.h" 13 #include "mojo/services/public/interfaces/gpu/gpu.mojom.h" 14 15 namespace mojo { 16 namespace examples { 17 18 class ChildGLApp : public ApplicationDelegate, public InterfaceFactory<Child> { 19 public: ChildGLApp()20 ChildGLApp() {} ~ChildGLApp()21 virtual ~ChildGLApp() {} 22 Initialize(ApplicationImpl * app)23 virtual void Initialize(ApplicationImpl* app) OVERRIDE { 24 surfaces_service_connection_ = 25 app->ConnectToApplication("mojo:mojo_surfaces_service"); 26 // TODO(jamesr): Should be mojo:mojo_gpu_service 27 app->ConnectToService("mojo:mojo_native_viewport_service", &gpu_service_); 28 } 29 30 // ApplicationDelegate implementation. ConfigureIncomingConnection(ApplicationConnection * connection)31 virtual bool ConfigureIncomingConnection( 32 ApplicationConnection* connection) OVERRIDE { 33 connection->AddService(this); 34 return true; 35 } 36 37 // InterfaceFactory<Child> implementation. Create(ApplicationConnection * connection,InterfaceRequest<Child> request)38 virtual void Create(ApplicationConnection* connection, 39 InterfaceRequest<Child> request) OVERRIDE { 40 CommandBufferPtr command_buffer; 41 gpu_service_->CreateOffscreenGLES2Context(Get(&command_buffer)); 42 BindToRequest( 43 new ChildGLImpl(surfaces_service_connection_, command_buffer.Pass()), 44 &request); 45 } 46 47 private: 48 ApplicationConnection* surfaces_service_connection_; 49 GpuPtr gpu_service_; 50 51 DISALLOW_COPY_AND_ASSIGN(ChildGLApp); 52 }; 53 54 } // namespace examples 55 } // namespace mojo 56 MojoMain(MojoHandle shell_handle)57MojoResult MojoMain(MojoHandle shell_handle) { 58 mojo::ApplicationRunnerChromium runner(new mojo::examples::ChildGLApp); 59 return runner.Run(shell_handle); 60 } 61