Tôi đang cố gắng sử dụng direct2d để hiển thị hình ảnh ngoài màn hình bằng WindowsAPICodePack . Điều này có thể dễ dàng đạt được bằng cách sử dụng WicBitmapRenderTarget nhưng đáng buồn là nó không được tăng tốc phần cứng.
Vì vậy, tôi đang thử tuyến đường này:
- Tạo thiết bị direct3d
- Tạo texture2d
- Sử dụng bề mặt kết cấu để tạo mục tiêu kết xuất bằng CreatDxgiSurfaceRenderTarget
- Vẽ một số hình
Mặc dù điều này thể hiện hình ảnh nhưng có vẻ như GPU không được sử dụng trong khi CPU được sử dụng rất nhiều.
Tôi có làm điều gì sai? Có cách nào để kiểm tra xem phần cứng hoặc phần mềm kết xuất được sử dụng không?
Mẫu mã:
var device = D3DDevice1.CreateDevice1(null,
DriverType.Hardware,
null,
CreateDeviceOptions.SupportBgra,
FeatureLevel.Ten
);
var txd = new Texture2DDescription();
txd.Width = 256;
txd.Height = 256;
txd.MipLevels = 1;
txd.ArraySize = 1;
txd.Format = Format.B8G8R8A8UNorm; //DXGI_FORMAT_R32G32B32A32_FLOAT;
txd.SampleDescription = new SampleDescription(1,0);
txd.Usage = Usage.Default;
txd.BindingOptions = BindingOptions.RenderTarget | BindingOptions.ShaderResource;
txd.MiscellaneousResourceOptions = MiscellaneousResourceOptions.None;
txd.CpuAccessOptions = CpuAccessOptions.None;
var tx = device.CreateTexture2D(txd);
var srfc = tx.GraphicsSurface;
var d2dFactory = D2DFactory.CreateFactory();
var renderTargetProperties = new RenderTargetProperties
{
PixelFormat = new PixelFormat(Format.Unknown, AlphaMode.Premultiplied),
DpiX = 96,
DpiY = 96,
RenderTargetType = RenderTargetType.Default,
};
using(var renderTarget = d2dFactory.CreateGraphicsSurfaceRenderTarget(srfc, renderTargetProperties))
{
renderTarget.BeginDraw();
var clearColor = new ColorF(1f,1f,1f,1f);
renderTarget.Clear(clearColor);
using (var strokeBrush = renderTarget.CreateSolidColorBrush(new ColorF(0.2f,0.2f,0.2f,1f)))
{
for (var i = 0; i < 100000; i++)
{
renderTarget.DrawEllipse(new Ellipse(new Point2F(i, i), 10, 10), strokeBrush, 2);
}
}
var hr = renderTarget.EndDraw();
}