Index: remoting/ios/display/gl_display_handler.mm |
diff --git a/remoting/ios/display/gl_display_handler.mm b/remoting/ios/display/gl_display_handler.mm |
index c83d8b521be57a57a5306eb64da0645f32daaab5..45fda3159f725adec0fe4f215bdc94877be66863 100644 |
--- a/remoting/ios/display/gl_display_handler.mm |
+++ b/remoting/ios/display/gl_display_handler.mm |
@@ -66,7 +66,6 @@ class Core : public protocol::CursorShapeStub, public GlRendererDelegate { |
base::WeakPtr<DualBufferFrameConsumer> frame_consumer_; |
// TODO(yuweih): Release references once the surface is destroyed. |
- GLKView* gl_view_; |
EAGLContext* eagl_context_; |
std::unique_ptr<GlRenderer> renderer_; |
// GlDemoScreen *demo_screen_; |
@@ -133,7 +132,8 @@ void Core::SetCursorShape(const protocol::CursorShapeInfo& cursor_shape) { |
bool Core::CanRenderFrame() { |
DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread()); |
- return gl_view_ != NULL && eagl_context_ != NULL; |
+ |
+ return eagl_context_ != nil; |
} |
std::unique_ptr<protocol::FrameConsumer> Core::GrabFrameConsumer() { |
@@ -148,7 +148,7 @@ void Core::OnFrameReceived(std::unique_ptr<webrtc::DesktopFrame> frame, |
} |
void Core::OnFrameRendered() { |
- [gl_view_ display]; |
+ [eagl_context_ presentRenderbuffer:GL_RENDERBUFFER]; |
} |
void Core::OnSizeChanged(int width, int height) { |
@@ -168,7 +168,9 @@ void Core::Stop() { |
void Core::SurfaceCreated(GLKView* view) { |
DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread()); |
- gl_view_ = view; |
+ |
+ // Bind the view's framebuffer object to OpenGL. |
+ [view bindDrawable]; |
renderer_->OnSurfaceCreated( |
base::MakeUnique<GlCanvas>(static_cast<int>([eagl_context_ API]))); |
@@ -202,7 +204,7 @@ base::WeakPtr<remoting::GlDisplayHandler::Core> Core::GetWeakPtr() { |
} // namespace remoting |
@interface GlDisplayHandler () { |
- remoting::GlDisplayHandler::Core* _core; |
+ std::unique_ptr<remoting::GlDisplayHandler::Core> _core; |
remoting::ChromotingClientRuntime* _runtime; |
std::unique_ptr<remoting::QueuedTaskPoster> _uiTaskPoster; |
} |
@@ -214,13 +216,17 @@ base::WeakPtr<remoting::GlDisplayHandler::Core> Core::GetWeakPtr() { |
self = [super init]; |
if (self) { |
_runtime = remoting::ChromotingClientRuntime::GetInstance(); |
- _core = new remoting::GlDisplayHandler::Core(); |
+ _core.reset(new remoting::GlDisplayHandler::Core()); |
_uiTaskPoster.reset( |
new remoting::QueuedTaskPoster(_runtime->display_task_runner())); |
} |
return self; |
} |
+- (void)dealloc { |
+ _runtime->display_task_runner()->DeleteSoon(FROM_HERE, _core.release()); |
+} |
+ |
#pragma mark - Public |
- (void)stop { |