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 15namespace mojo { 16namespace examples { 17 18class ChildGLApp : public ApplicationDelegate, public InterfaceFactory<Child> { 19 public: 20 ChildGLApp() {} 21 virtual ~ChildGLApp() {} 22 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. 31 virtual bool ConfigureIncomingConnection( 32 ApplicationConnection* connection) OVERRIDE { 33 connection->AddService(this); 34 return true; 35 } 36 37 // InterfaceFactory<Child> implementation. 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 57MojoResult MojoMain(MojoHandle shell_handle) { 58 mojo::ApplicationRunnerChromium runner(new mojo::examples::ChildGLApp); 59 return runner.Run(shell_handle); 60} 61