Chromium Code Reviews| Index: remoting/client/ios/display/gl_display_handler.mm |
| diff --git a/remoting/client/ios/display/gl_display_handler.mm b/remoting/client/ios/display/gl_display_handler.mm |
| index 9c53e019c9866651aa66c69ff955b2e646b53c64..5b0b324df6125316638a190c0099193717591612 100644 |
| --- a/remoting/client/ios/display/gl_display_handler.mm |
| +++ b/remoting/client/ios/display/gl_display_handler.mm |
| @@ -48,6 +48,7 @@ class Core : public protocol::CursorShapeStub, public GlRendererDelegate { |
| void OnFrameReceived(std::unique_ptr<webrtc::DesktopFrame> frame, |
| const base::Closure& done); |
| void Stop(); |
| + void SurfaceCreated(GLKView* view); |
| void SurfaceChanged(int width, int height); |
| std::unique_ptr<protocol::FrameConsumer> GrabFrameConsumer(); |
| EAGLContext* GetEAGLContext(); |
| @@ -60,6 +61,7 @@ class Core : public protocol::CursorShapeStub, public GlRendererDelegate { |
| std::unique_ptr<DualBufferFrameConsumer> owned_frame_consumer_; |
| base::WeakPtr<DualBufferFrameConsumer> frame_consumer_; |
| + GLKView* gl_view_; |
|
nicholss
2017/05/01 16:20:14
Note, gl_view_ here is correct because this is Obj
Yuwei
2017/05/01 20:58:08
Acknowledged.
I've also noticed that ARC will sti
|
| EAGLContext* eagl_context_; |
| std::unique_ptr<GlRenderer> renderer_; |
| // GlDemoScreen *demo_screen_; |
| @@ -108,19 +110,6 @@ void Core::Initialize() { |
| // renderer_.RequestCanvasSize(); |
| - renderer_->OnSurfaceCreated( |
| - base::MakeUnique<GlCanvas>(static_cast<int>([eagl_context_ API]))); |
| - |
| - SurfaceChanged(1024, 640); // TODO(nicholss): Where does this data comefrom? |
| - |
| - // TODO(nicholss): This are wrong values but it lets us get something on the |
| - // screen. |
| - std::array<float, 9> matrix = {{1, 0, 0, |
| - 0, 1, 0, |
| - 0, 0, 1}}; |
| - |
| - renderer_->OnPixelTransformationChanged(matrix); |
| - |
| // demo_screen_ = new GlDemoScreen(); |
| // renderer_->AddDrawable(demo_screen_->GetWeakPtr()); |
| renderer_->SetDelegate(weak_ptr_); |
| @@ -133,7 +122,7 @@ void Core::SetCursorShape(const protocol::CursorShapeInfo& cursor_shape) { |
| bool Core::CanRenderFrame() { |
| DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread()); |
| - return eagl_context_ != NULL; |
| + return gl_view_ != NULL && eagl_context_ != NULL; |
| } |
| std::unique_ptr<protocol::FrameConsumer> Core::GrabFrameConsumer() { |
| @@ -148,7 +137,7 @@ void Core::OnFrameReceived(std::unique_ptr<webrtc::DesktopFrame> frame, |
| } |
| void Core::OnFrameRendered() { |
| - // Nothing to do. |
| + [gl_view_ setNeedsDisplay]; |
| } |
| void Core::OnSizeChanged(int width, int height) { |
| @@ -162,9 +151,29 @@ void Core::Stop() { |
| // demo_screen_ = nil; |
| } |
| +void Core::SurfaceCreated(GLKView* view) { |
| + DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread()); |
| + gl_view_ = view; |
| + |
| + renderer_->OnSurfaceCreated( |
| + base::MakeUnique<GlCanvas>(static_cast<int>([eagl_context_ API]))); |
| + |
| + runtime_->network_task_runner()->PostTask( |
| + FROM_HERE, base::Bind(&DualBufferFrameConsumer::RequestFullDesktopFrame, |
| + frame_consumer_)); |
| +} |
| + |
| void Core::SurfaceChanged(int width, int height) { |
| DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread()); |
| renderer_->OnSurfaceChanged(width, height); |
| + |
| + // TODO(nicholss): This are wrong values but it lets us get something on the |
| + // screen. |
| + std::array<float, 9> matrix = {{1, 0, 0, // Row 1 |
|
Yuwei
2017/04/30 01:18:06
BTW this is a trick to stop git cl format by addin
nicholss
2017/05/01 16:20:14
nice!
|
| + 0, 1, 0, // Row 2 |
| + 0, 0, 1}}; |
| + |
| + renderer_->OnPixelTransformationChanged(matrix); |
| } |
| EAGLContext* Core::GetEAGLContext() { |
| @@ -217,6 +226,19 @@ base::WeakPtr<remoting::GlDisplayHandler::Core> Core::GetWeakPtr() { |
| return _core->GetEAGLContext(); |
| } |
| +- (void)onSurfaceCreated:(GLKView*)view { |
| + _runtime->display_task_runner()->PostTask( |
| + FROM_HERE, base::Bind(&remoting::GlDisplayHandler::Core::SurfaceCreated, |
| + _core->GetWeakPtr(), view)); |
| +} |
| + |
| +- (void)onSurfaceChanged:(const CGRect&)frame { |
| + _runtime->display_task_runner()->PostTask( |
| + FROM_HERE, |
| + base::Bind(&remoting::GlDisplayHandler::Core::SurfaceChanged, |
| + _core->GetWeakPtr(), frame.size.width, frame.size.height)); |
| +} |
| + |
| // TODO(nicholss): Remove this function, it is not used in the final impl, |
| // or it should call RequestRender. |
| - (void)glkView:(GLKView*)view drawInRect:(CGRect)rect { |