Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(89)

Unified Diff: remoting/client/ios/display/gl_display_handler.mm

Issue 2848143002: [Remoting iOS] Fix screen tearing and screen dimensions (Closed)
Patch Set: Add comments about not inheriting GLKViewController Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/client/ios/display/gl_display_handler.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_;
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
+ 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 {
« no previous file with comments | « remoting/client/ios/display/gl_display_handler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698