Beispiel #1
0
    protected override void CreateDeviceDependentResources()
    {
        _dxgiFactory = CreateDxgiFactory();
        _dxgiAdapter = GetDxgiAdapter();
        _d3dDevice   = CreateD3DDevice(out _immediateContext);

        CreateAssets();

        ID3D11Device *CreateD3DDevice(out ID3D11DeviceContext *pImmediateContext)
        {
            ID3D11Device *       d3dDevice;
            ID3D11DeviceContext *immediateContext;

            var featureLevel = D3D_FEATURE_LEVEL_11_0;

            ThrowIfFailed(D3D11CreateDevice((IDXGIAdapter *)DxgiAdapter, D3D_DRIVER_TYPE_HARDWARE, Software: HMODULE.NULL, Flags: 0, &featureLevel, FeatureLevels: 1, D3D11_SDK_VERSION, &d3dDevice, pFeatureLevel: null, &immediateContext));

            pImmediateContext = immediateContext;
            return(d3dDevice);
        }

        IDXGIFactory1 *CreateDxgiFactory()
        {
            IDXGIFactory1 *dxgiFactory;

            ThrowIfFailed(CreateDXGIFactory1(__uuidof <IDXGIFactory1>(), (void **)&dxgiFactory));
            return(dxgiFactory);
        }

        IDXGIAdapter1 *GetDxgiAdapter()
        {
            return(UseWarpDevice ? throw new NotImplementedException("WARP Device not supported for D3D11.") : GetHardwareAdapter(_dxgiFactory));
        }
    }
Beispiel #2
0
        internal SamplerManager(ID3D11Device *device)
        {
            Logger.Trace <SamplerManager>($"Init with {MaxSamplers} slots");
            _device = device;

            _resourcePool.Init(MaxSamplers);
        }
Beispiel #3
0
        internal RasterizerManager(ID3D11Device *device)
        {
            Logger.Trace <RasterizerManager>($"Init with {MaxStates} slots");
            _device = device;

            _resourcePool.Init(MaxStates);
        }
Beispiel #4
0
 internal TextureManager(ID3D11Device *device, SwapChain swapChain)
 {
     Logger.Trace <TextureManager>($"Init with {MaxNumberOfTextures} slots");
     _device    = device;
     _swapChain = swapChain;
     _resourcePool.Init(MaxNumberOfTextures);
 }
Beispiel #5
0
 /// <summary>To be documented.</summary>
 public readonly unsafe void GetDevice(ref ID3D11Device* ppDevice)
 {
     var @this = (ID3D11Query1*) Unsafe.AsPointer(ref Unsafe.AsRef(in this));
     fixed (ID3D11Device** ppDevicePtr = &ppDevice)
     {
         ((delegate* unmanaged[Cdecl]<ID3D11Query1*, ID3D11Device**, void>)LpVtbl[3])(@this, ppDevicePtr);
     }
 }
Beispiel #6
0
    protected override void DestroyDeviceDependentResources()
    {
        DestroyAssets();

        DestroyImmediateContext();
        DestroyD3DDevice();
        DestroyDxgiAdapter();
        DestroyDxgiFactory();

        void DestroyD3DDevice()
        {
            var d3dDevice = _d3dDevice;

            if (d3dDevice != null)
            {
                _d3dDevice = null;
                _          = d3dDevice->Release();
            }
        }

        void DestroyDxgiAdapter()
        {
            var dxgiAdapter = _dxgiAdapter;

            if (dxgiAdapter != null)
            {
                _dxgiAdapter = null;
                _            = dxgiAdapter->Release();
            }
        }

        void DestroyDxgiFactory()
        {
            var dxgiFactory = _dxgiFactory;

            if (dxgiFactory != null)
            {
                _dxgiFactory = null;
                _            = dxgiFactory->Release();
            }
        }

        void DestroyImmediateContext()
        {
            var immediateContext = _immediateContext;

            if (immediateContext != null)
            {
                _immediateContext = null;
                _ = immediateContext->Release();
            }
        }
    }
Beispiel #7
0
        protected override void Dispose(bool isDisposing)
        {
            var swapChain = _swapChain;

            if (swapChain != null)
            {
                _swapChain = null;
                _          = swapChain->Release();
            }

            var immediateContext = _immediateContext;

            if (immediateContext != null)
            {
                _immediateContext = null;
                _ = immediateContext->Release();
            }

            var device = _device;

            if (device != null)
            {
                _device = null;
                _       = device->Release();
            }

            var renderTarget = _renderTarget;

            if (renderTarget != null)
            {
                _renderTarget = null;
                _             = renderTarget->Release();
            }

            base.Dispose(isDisposing);
        }
Beispiel #8
0
        protected override void Dispose(bool isDisposing)
        {
            var vertexBuffer = _vertexBuffer;

            if (vertexBuffer != null)
            {
                _vertexBuffer = null;
                _             = vertexBuffer->Release();
            }

            var inputLayout = _inputLayout;

            if (inputLayout != null)
            {
                _inputLayout = null;
                _            = inputLayout->Release();
            }

            var pixelShader = _pixelShader;

            if (pixelShader != null)
            {
                _pixelShader = null;
                _            = pixelShader->Release();
            }

            var vertexShader = _vertexShader;

            if (vertexShader != null)
            {
                _vertexShader = null;
                _             = vertexShader->Release();
            }

            var swapChain = _swapChain;

            if (swapChain != null)
            {
                _swapChain = null;
                _          = swapChain->Release();
            }

            var immediateContext = _immediateContext;

            if (immediateContext != null)
            {
                _immediateContext = null;
                _ = immediateContext->Release();
            }

            var device = _device;

            if (device != null)
            {
                _device = null;
                _       = device->Release();
            }

            var renderTarget = _renderTarget;

            if (renderTarget != null)
            {
                _renderTarget = null;
                _             = renderTarget->Release();
            }

            base.Dispose(isDisposing);
        }