Index: remoting/client/display/gl_desktop.cc |
diff --git a/remoting/client/display/gl_desktop.cc b/remoting/client/display/gl_desktop.cc |
index e033d54b36a588e207ac45ed50060a0801e1f867..41cb463209dfc4f1dbf716008bfebbd14eebb21b 100644 |
--- a/remoting/client/display/gl_desktop.cc |
+++ b/remoting/client/display/gl_desktop.cc |
@@ -6,7 +6,7 @@ |
#include "base/logging.h" |
#include "base/memory/ptr_util.h" |
-#include "remoting/client/display/gl_canvas.h" |
+#include "remoting/client/display/canvas.h" |
#include "remoting/client/display/gl_math.h" |
#include "remoting/client/display/gl_render_layer.h" |
#include "remoting/client/display/gl_texture_ids.h" |
@@ -57,11 +57,11 @@ struct GlDesktop::GlDesktopTextureContainer { |
webrtc::DesktopRect rect; |
}; |
-GlDesktop::GlDesktop() {} |
+GlDesktop::GlDesktop() : weak_factory_(this) {} |
GlDesktop::~GlDesktop() {} |
-void GlDesktop::SetCanvas(GlCanvas* canvas) { |
+void GlDesktop::SetCanvas(base::WeakPtr<Canvas> canvas) { |
last_desktop_size_.set(0, 0); |
textures_.clear(); |
canvas_ = canvas; |
@@ -83,12 +83,18 @@ void GlDesktop::SetVideoFrame(const webrtc::DesktopFrame& frame) { |
} |
} |
-void GlDesktop::Draw() { |
+bool GlDesktop::Draw() { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
if (!textures_.empty() && !last_desktop_size_.is_empty()) { |
for (std::unique_ptr<GlDesktopTextureContainer>& texture : textures_) { |
texture->layer->Draw(1.0f); |
} |
} |
+ return false; |
+} |
+ |
+int GlDesktop::GetZIndex() { |
+ return Drawable::ZIndex::DESKTOP; |
} |
void GlDesktop::ReallocateTextures(const webrtc::DesktopSize& size) { |
@@ -112,9 +118,10 @@ void GlDesktop::ReallocateTextures(const webrtc::DesktopSize& size) { |
x * max_texture_size_, y * max_texture_size_, max_texture_size_, |
max_texture_size_); |
rect.IntersectWith(desktop_rect); |
- std::unique_ptr<GlDesktopTextureContainer> container = |
- base::WrapUnique(new GlDesktopTextureContainer{ |
- base::MakeUnique<GlRenderLayer>(texture_id, canvas_), rect}); |
+ std::unique_ptr<GlDesktopTextureContainer> container = base::WrapUnique( |
+ new GlDesktopTextureContainer{base::MakeUnique<GlRenderLayer>( |
+ texture_id, canvas_->GetWeakPtr()), |
+ rect}); |
FillRectangleVertexPositions(rect.left(), rect.top(), rect.width(), |
rect.height(), &positions); |
container->layer->SetVertexPositions(positions); |
@@ -124,4 +131,9 @@ void GlDesktop::ReallocateTextures(const webrtc::DesktopSize& size) { |
} |
} |
+base::WeakPtr<Drawable> GlDesktop::GetWeakPtr() { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ return weak_factory_.GetWeakPtr(); |
+} |
+ |
} // namespace remoting |