Index: remoting/client/gl_desktop.cc |
diff --git a/remoting/client/gl_desktop.cc b/remoting/client/gl_desktop.cc |
deleted file mode 100644 |
index 72bd9ec15201e615fb2ab46b146e63ce180fe265..0000000000000000000000000000000000000000 |
--- a/remoting/client/gl_desktop.cc |
+++ /dev/null |
@@ -1,127 +0,0 @@ |
-// Copyright 2016 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "remoting/client/gl_desktop.h" |
- |
-#include "base/logging.h" |
-#include "base/memory/ptr_util.h" |
-#include "remoting/client/gl_canvas.h" |
-#include "remoting/client/gl_math.h" |
-#include "remoting/client/gl_render_layer.h" |
-#include "remoting/client/gl_texture_ids.h" |
-#include "third_party/webrtc/modules/desktop_capture/desktop_frame.h" |
-#include "third_party/webrtc/modules/desktop_capture/desktop_region.h" |
- |
-namespace remoting { |
- |
-namespace { |
- |
-void UpdateDesktopRegion(const webrtc::DesktopFrame& frame, |
- const webrtc::DesktopRegion& region, |
- const webrtc::DesktopRect& texture_rect, |
- GlRenderLayer* layer) { |
- for (webrtc::DesktopRegion::Iterator i(region); !i.IsAtEnd(); i.Advance()) { |
- const uint8_t* rect_start = frame.GetFrameDataAtPos(i.rect().top_left()); |
- webrtc::DesktopVector update_pos = |
- i.rect().top_left().subtract(texture_rect.top_left()); |
- layer->UpdateTexture(rect_start, update_pos.x(), update_pos.y(), |
- i.rect().width(), i.rect().height(), frame.stride()); |
- } |
-} |
- |
-void SetFrameForTexture(const webrtc::DesktopFrame& frame, |
- GlRenderLayer* layer, |
- const webrtc::DesktopRect& rect) { |
- if (!layer->is_texture_set()) { |
- // First frame received. |
- layer->SetTexture(frame.GetFrameDataAtPos(rect.top_left()), rect.width(), |
- rect.height(), frame.stride()); |
- return; |
- } |
- // Incremental update. |
- if (frame.size().equals(rect.size())) { |
- // Single texture. No intersection is needed. |
- UpdateDesktopRegion(frame, frame.updated_region(), rect, layer); |
- } else { |
- webrtc::DesktopRegion intersected_region = frame.updated_region(); |
- intersected_region.IntersectWith(rect); |
- UpdateDesktopRegion(frame, intersected_region, rect, layer); |
- } |
-} |
- |
-} // namespace |
- |
-struct GlDesktop::GlDesktopTextureContainer { |
- std::unique_ptr<GlRenderLayer> layer; |
- webrtc::DesktopRect rect; |
-}; |
- |
-GlDesktop::GlDesktop() {} |
- |
-GlDesktop::~GlDesktop() {} |
- |
-void GlDesktop::SetCanvas(GlCanvas* canvas) { |
- last_desktop_size_.set(0, 0); |
- textures_.clear(); |
- canvas_ = canvas; |
- if (canvas) { |
- max_texture_size_ = canvas->GetMaxTextureSize(); |
- } |
-} |
- |
-void GlDesktop::SetVideoFrame(const webrtc::DesktopFrame& frame) { |
- if (!canvas_) { |
- return; |
- } |
- if (!frame.size().equals(last_desktop_size_)) { |
- last_desktop_size_.set(frame.size().width(), frame.size().height()); |
- ReallocateTextures(last_desktop_size_); |
- } |
- for (std::unique_ptr<GlDesktopTextureContainer>& texture : textures_) { |
- SetFrameForTexture(frame, texture->layer.get(), texture->rect); |
- } |
-} |
- |
-void GlDesktop::Draw() { |
- if (!textures_.empty() && !last_desktop_size_.is_empty()) { |
- for (std::unique_ptr<GlDesktopTextureContainer>& texture : textures_) { |
- texture->layer->Draw(1.0f); |
- } |
- } |
-} |
- |
-void GlDesktop::ReallocateTextures(const webrtc::DesktopSize& size) { |
- DCHECK(max_texture_size_); |
- DCHECK(canvas_); |
- textures_.clear(); |
- |
- int textures_per_row = |
- (size.width() + max_texture_size_ - 1) / max_texture_size_; |
- |
- int textures_per_column = |
- (size.height() + max_texture_size_ - 1) / max_texture_size_; |
- |
- webrtc::DesktopRect desktop_rect = webrtc::DesktopRect::MakeSize(size); |
- |
- int texture_id = kGlDesktopFirstTextureId; |
- std::array<float, 8> positions; |
- for (int x = 0; x < textures_per_row; x++) { |
- for (int y = 0; y < textures_per_column; y++) { |
- webrtc::DesktopRect rect = webrtc::DesktopRect::MakeXYWH( |
- 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}); |
- FillRectangleVertexPositions(rect.left(), rect.top(), rect.width(), |
- rect.height(), &positions); |
- container->layer->SetVertexPositions(positions); |
- textures_.push_back(std::move(container)); |
- texture_id++; |
- } |
- } |
-} |
- |
-} // namespace remoting |