예제 #1
0
        public ID3D11InfoQueue CreateInfoQueue()
        {
            var result = D3D11CommonBindings.QueryInterface_(_handle, D3D11Resources.D3D11InfoQueue, out var infoQueue);

            result.Check(nameof(D3D11Device));
            return(new D3D11InfoQueue(infoQueue));
        }
예제 #2
0
파일: D3DCommon.cs 프로젝트: Golle/GameDev
        public ID3DBlob ReadFileToBlob(string fileName)
        {
            var result = D3D11CommonBindings.D3DReadFileToBlob_(fileName, out var ppContents);

            if (result.Failed)
            {
                throw new Win32Exception($"ReadFileToBlob failed with code: 0x{result.Code.ToString("X")}");
            }
            return(new D3DBlob(ppContents));
        }
예제 #3
0
        public ID3D11Device Create(CreateDeviceArguments arguments)
        {
            DxgiSwapChainDesc desc = default;

            //desc.BufferCount = 2;   // how do I use this with depth stencil?
            desc.BufferCount       = 1;
            desc.BufferDesc.Width  = (uint)arguments.Window.Width;
            desc.BufferDesc.Height = (uint)arguments.Window.Height;
            desc.BufferDesc.Format = DxgiFormat.R8G8B8A8Unorm;
            desc.BufferDesc.RefreshRate.Denominator = arguments.RefreshRate;
            desc.BufferDesc.Scaling          = DxgiModeScaling.Unspecified;
            desc.BufferDesc.ScanlineOrdering = DxgiModeScanlineOrder.Unspecified;

            //desc.SampleDesc.Count = 4;  // AA
            desc.SampleDesc.Count   = 1;
            desc.SampleDesc.Quality = 0;

            desc.Flags        = 0;
            desc.BufferUsage  = DxgiUsage.RenderTargetOutput;
            desc.OutputWindow = arguments.Window.Handle;
            desc.Windowed     = arguments.Window.Windowed ? 1 : 0;
            desc.SwapEffect   = DxgiSwapEffect.Discard;
            //desc.SwapEffect = DxgiSwapEffect.FlipDiscard;    // how do I use this with depth stencil?
            desc.Flags = DxgiSwapChainFlag.AllowModeSwitch;

            HRESULT         result;
            IntPtr          swapChain;
            IntPtr          device;
            D3DFeatureLevel featureLevel;
            IntPtr          context;
            var             flags = arguments.Debug ? D3D11CreateDeviceFlag.Debug : D3D11CreateDeviceFlag.Default;

            unsafe
            {
                result = D3D11DeviceBindings.D3D11CreateDeviceAndSwapChain_(
                    arguments.Adapter,
                    D3DDriverType.Hardware,
                    IntPtr.Zero,
                    flags,
                    null,
                    0,
                    D3D11CommonBindings.D3D11SdkVersion(),
                    in desc,
                    out swapChain,
                    out device,
                    out featureLevel,
                    out context);
            }
            if (result.Failed)
            {
                throw new Win32Exception($"D3D11CreateDeviceAndSwapChain failed with code : 0x{ result.Code.ToString("X")}");
            }

            return(new D3D11Device(device, featureLevel, new D3D11SwapChain(swapChain), new D3D11DeviceContext(context)));
        }