Magpie/Runtime/DesktopDuplicationFrameSource.h
刘旭 6de6d1aee1 refactor: 将捕获模式分为两类:屏幕捕获和窗口捕获
尽量不直接使用 GetCaptureMode,而是将捕获模式的特性实现为公共方法
2021-12-29 14:15:07 +08:00

37 lines
732 B
C++

#pragma once
#include "FrameSourceBase.h"
class DesktopDuplicationFrameSource : public FrameSourceBase {
public:
DesktopDuplicationFrameSource() {};
virtual ~DesktopDuplicationFrameSource() {}
bool Initialize() override;
ComPtr<ID3D11Texture2D> GetOutput() override {
return _output;
}
UpdateState Update() override;
bool HasRoundCornerInWin11() override {
return true;
}
bool IsScreenCapture() override {
return true;
}
private:
// 消除刚进入全屏时短暂的黑屏
bool _firstFrame = true;
ComPtr<IDXGIResource> _dxgiRes;
ComPtr<ID3D11Texture2D> _output;
ComPtr<IDXGIOutputDuplication> _outputDup;
std::vector<BYTE> _dupMetaData;
RECT _srcClientInMonitor{};
D3D11_BOX _frameInMonitor{};
};