a450a8942f
Add Gamepad input state as struct (so we can use different APIs Add functions to convert gamepad from Xinput to generic version Add DynamicUploadTexture Add VideoCaptureThread Add VideoFrame Add first part for Gamepad new operator
87 lines
2.8 KiB
C#
87 lines
2.8 KiB
C#
using SharpDX;
|
|
using SharpDX.Direct3D11;
|
|
using SharpDX.DXGI;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace T3.Core.Rendering.UploadPipeline
|
|
{
|
|
public sealed class DynamicUploadTexture : IDisposable
|
|
{
|
|
private readonly SharpDX.Direct3D11.Device device;
|
|
private Texture2D texture;
|
|
private ShaderResourceView readView;
|
|
|
|
public Texture2D Texture => this.texture;
|
|
public ShaderResourceView ReadView => this.readView;
|
|
|
|
public DynamicUploadTexture(SharpDX.Direct3D11.Device device, Size2 size, Format format)
|
|
{
|
|
if (device == null)
|
|
throw new ArgumentNullException(nameof(device));
|
|
|
|
this.device = device;
|
|
this.CreateTexture(size, format);
|
|
}
|
|
|
|
public void Update(Size2 size, Format format)
|
|
{
|
|
if (texture != null)
|
|
{
|
|
if (texture.Description.Width != size.Width
|
|
|| texture.Description.Height != size.Height
|
|
|| texture.Description.Format != format)
|
|
{
|
|
Dispose();
|
|
}
|
|
}
|
|
|
|
if (texture == null)
|
|
{
|
|
this.CreateTexture(size, format);
|
|
}
|
|
}
|
|
|
|
private void CreateTexture(Size2 size, Format format)
|
|
{
|
|
var imageDesc = new Texture2DDescription
|
|
{
|
|
BindFlags = BindFlags.ShaderResource,
|
|
Format = format,
|
|
Width = size.Width,
|
|
Height = size.Height,
|
|
MipLevels = 1,
|
|
SampleDescription = new SampleDescription(1, 0),
|
|
Usage = ResourceUsage.Dynamic,
|
|
OptionFlags = ResourceOptionFlags.None,
|
|
CpuAccessFlags = CpuAccessFlags.Write,
|
|
ArraySize = 1
|
|
};
|
|
|
|
this.texture = new Texture2D(this.device, imageDesc);
|
|
this.readView = new ShaderResourceView(this.device, this.texture);
|
|
}
|
|
|
|
public void WriteData(DeviceContext deviceContext, IntPtr data, int size, int srcStride)
|
|
{
|
|
var dataBox = deviceContext.MapSubresource(this.texture, 0, 0, MapMode.WriteDiscard,
|
|
SharpDX.Direct3D11.MapFlags.None, out int _);
|
|
|
|
T3.Core.Utils.Utilities.CopyImageMemory(data, dataBox.DataPointer, this.texture.Description.Height,
|
|
srcStride, dataBox.RowPitch);
|
|
|
|
// release our resources
|
|
deviceContext.UnmapSubresource(this.texture, 0);
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
Utilities.Dispose(ref texture);
|
|
Utilities.Dispose(ref readView);
|
|
}
|
|
}
|
|
}
|