dx11 createxture2d не удастся с ошибкой "значение не попадает в ожидаемый диапазон".
при добавлении < /p>
Код: Выделить всё
ResourceMiscFlag.SharedKeyedmutex
< /code>
как флаги Misc.
Удаление флага заставляет метод работает, но < /p>
_backBuffer.QueryInterface()
< /code>
Не удастся с «указанным листом недопустимы». < /p>
var tDesc = new Texture2DDesc
{
Format = Format.FormatR8G8B8A8Unorm,
Height = (uint)Size.Height,
Width = (uint)Size.Width,
MipLevels = 1,
ArraySize = 1,
SampleDesc = new SampleDesc(1, 0),
CPUAccessFlags = 0,
Usage = Usage.Default,
MiscFlags = (uint)(ResourceMiscFlag.SharedKeyedmutex),
BindFlags = (uint)(BindFlag.RenderTarget | BindFlag.ShaderResource),
};
ID3D11Texture2D* texture = null;
device.CreateTexture2D(tDesc, &texture);
_backBuffer = texture;
_mutex = _backBuffer.QueryInterface();
// device.CreateTexture2D
public unsafe void CreateTexture2D(
Texture2DDesc desc,
SubresourceData* pData,
ID3D11Texture2D** pTextureBuffer
)
{
//ID3D11Device5
//pData is null here
SilkMarshal.ThrowHResult(_device.CreateTexture2D(desc, pData, pTextureBuffer));
}
//Createingg the D3D11Device
private unsafe void CreateD3D11Device()
{
// Set the creation flags
var flags = CreateDeviceFlag.BgraSupport;
#if DEBUG
flags |= CreateDeviceFlag.Debug;
#endif
ComPtr adapter1 = default;
var driverType = D3DDriverType.Hardware;
if (_gpuPreference != GpuPreference.Unspecified)
{
GetHardwareAdapter(adapter1.GetAddressOf());
driverType = D3DDriverType.Unknown;
}
// Create the D3D11 device
D3DFeatureLevel pFl = default;
fixed (D3DFeatureLevel* pFeatureLevels = FeatureLevels)
{
SilkMarshal.ThrowHResult(
_d3d11.CreateDevice(
adapter1,
driverType,
default,
(uint)flags,
pFeatureLevels,
(uint)FeatureLevels.Length,
D3D11.SdkVersion,
ref _device,//ID3D11Device5
&pFl,
ref _deviceContext //ID3D11DeviceContext4
)
);
}
Debug.WriteLine($"{pFl.ToString()}");
_threadShield = _deviceContext.QueryInterface();
_threadShield.SetMultithreadProtected(true);
adapter1.Dispose();
adapter1 = null;
}
< /code>
ПРИМЕЧАНИЕ: Я могу сделать эту работу с Sharpdx, как это < /p>
_texture = new Texture2D(device,
new Texture2DDescription
{
Format = Format.R8G8B8A8_UNorm,
Width = size.Width,
Height = size.Height,
ArraySize = 1,
MipLevels = 1,
SampleDescription = new SampleDescription { Count = 1, Quality = 0 },
CpuAccessFlags = default,
OptionFlags = ResourceOptionFlags.SharedKeyedmutex,
BindFlags = BindFlags.RenderTarget | BindFlags.ShaderResource
});
_mutex = _texture.QueryInterface();
Подробнее здесь: https://stackoverflow.com/questions/796 ... mutex-flag