mirror of
https://github.com/babalae/better-genshin-impact.git
synced 2026-03-19 08:19:48 +08:00
* BitBlt 优化 * BitBlt恢复Top-down * 渲染时翻转图像 * CaptureSession引用计数 * 恢复成无拷贝Mat * 合法性检查 * 优化截图预览窗口 * 保存截图文件必要时需要克隆一份Mat * BitBlt内存池 * 返回拷贝就不用对Session做引用计数了 * 移除CaptureImageRes * 优化DirectX * 更好地处理padding * BitBlt去掉padding 1920*1080的游戏窗口是4字节对齐的,因此不会有性能影响。这里主要用于测试。 * 修复修改窗口大小 * 合并CreateStagingTexture * 修复设备丢失崩溃 * WGC截图支持HDR * fix typo * CodeQA * 去掉1px窗口边框 * DirectX截图去掉A通道 * HDR转换使用GPU加速 --------- Co-authored-by: 辉鸭蛋 <huiyadanli@gmail.com>
49 lines
1.4 KiB
C#
49 lines
1.4 KiB
C#
using SharpDX.Direct3D11;
|
|
using System.Diagnostics;
|
|
using OpenCvSharp;
|
|
|
|
namespace Fischless.GameCapture.Graphics.Helpers;
|
|
|
|
public static class Texture2DExtensions
|
|
{
|
|
public static Mat? CreateMat(this Texture2D staging, Device d3dDevice, Texture2D surfaceTexture, ResourceRegion? region = null)
|
|
{
|
|
try
|
|
{
|
|
// Copy data
|
|
if (region != null)
|
|
{
|
|
d3dDevice.ImmediateContext.CopySubresourceRegion(surfaceTexture, 0, region, staging, 0);
|
|
}
|
|
else
|
|
{
|
|
d3dDevice.ImmediateContext.CopyResource(surfaceTexture, staging);
|
|
}
|
|
|
|
// 映射纹理以便CPU读取
|
|
var dataBox = d3dDevice.ImmediateContext.MapSubresource(
|
|
staging,
|
|
0,
|
|
MapMode.Read,
|
|
MapFlags.None);
|
|
|
|
try
|
|
{
|
|
using var mat = Mat.FromPixelData(staging.Description.Height, staging.Description.Width,
|
|
MatType.CV_8UC4, dataBox.DataPointer, dataBox.RowPitch);
|
|
return mat.CvtColor(ColorConversionCodes.BGRA2BGR);
|
|
}
|
|
finally
|
|
{
|
|
d3dDevice.ImmediateContext.UnmapSubresource(staging, 0);
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Debug.WriteLine("Failed to copy texture to mat.");
|
|
Debug.WriteLine(e.StackTrace);
|
|
return null;
|
|
}
|
|
}
|
|
}
|