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

Unified Diff: remoting/client/gl_desktop.cc

Issue 2614443003: Moving the GL implementation details into a sub folder for client display. (Closed)
Patch Set: Adding deps restriction on r/c/display; Moving sys_opengl.h Created 3 years, 11 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/gl_desktop.h ('k') | remoting/client/gl_helpers.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « remoting/client/gl_desktop.h ('k') | remoting/client/gl_helpers.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698