Example #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="parameters"></param>
        public GenericDisplay(Game game, GraphicsDevice device, GraphicsParameters parameters) : base(game, device, parameters)
        {
            try {
                window = CreateForm(parameters, null, true);
            }
            catch (System.EntryPointNotFoundException) {
                Log.Warning("Looks like your system does't support touch gestures. You need Windows 8.1 or newer for this.");
                window = CreateForm(parameters, null, false);
            }

            try {
                NvApi.Initialize();
                NvApi.Stereo_Disable();
            }
            catch (NVException nvex) {
                Log.Debug(nvex.Message);
            }

            var deviceFlags = DeviceCreationFlags.BgraSupport;

            //deviceFlags			|=	DeviceCreationFlags.SingleThreaded;
            deviceFlags |= parameters.UseDebugDevice ? DeviceCreationFlags.Debug : DeviceCreationFlags.None;

            var driverType = DriverType.Hardware;

            var featureLevel = HardwareProfileChecker.GetFeatureLevel(parameters.GraphicsProfile);


            swapChainDesc = new SwapChainDescription()
            {
                BufferCount       = 1,                                          // UE4 use this.
                ModeDescription   = new ModeDescription(parameters.Width, parameters.Height, new Rational(60, 1), Format.R8G8B8A8_UNorm),
                IsWindowed        = true,
                OutputHandle      = window.Handle,
                SampleDescription = new SampleDescription(parameters.MsaaLevel, 0),
                SwapEffect        = SwapEffect.Discard,
                Usage             = Usage.RenderTargetOutput,
                Flags             = SwapChainFlags.None,
            };

            D3D.Device.CreateWithSwapChain(driverType, deviceFlags, new[] { featureLevel }, swapChainDesc, out d3dDevice, out swapChain);

            //Log.Message("   compute shaders : {0}", d3dDevice.CheckFeatureSupport(Feature.ComputeShaders) );
            //Log.Message("   shader doubles  : {0}", d3dDevice.CheckFeatureSupport(Feature.ShaderDoubles) );
            //Log.Message("   threading       : {0}", d3dDevice.CheckFeatureSupport(Feature.Threading) );
            bool driverConcurrentCreates;
            bool driverCommandLists;

            d3dDevice.CheckThreadingSupport(out driverConcurrentCreates, out driverCommandLists);
            //d3dDevice.GetCounterCapabilities();
            Log.Message("   Concurrent Creates : {0}", driverConcurrentCreates);
            Log.Message("   Command Lists      : {0}", driverCommandLists);


            var factory = swapChain.GetParent <Factory>();

            factory.MakeWindowAssociation(window.Handle, WindowAssociationFlags.IgnoreAll);


            clientWidth  = window.ClientSize.Width;
            clientHeight = window.ClientSize.Height;

            fullscr = parameters.FullScreen;
        }
Example #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="parameters"></param>
        public StereoDualHeadDisplay(Game game, GraphicsDevice device, GraphicsParameters parameters) : base(game, device, parameters)
        {
            try {
                NvApi.Initialize();
                NvApi.Stereo_Disable();
            }
            catch (NVException nvex) {
                Log.Debug(nvex.Message);
            }

            var featureLevel = HardwareProfileChecker.GetFeatureLevel(parameters.GraphicsProfile);

            Adapter adapter;
            Output  leftOut, rightOut;

            GetDualHeadAdapter(featureLevel, out adapter, out leftOut, out rightOut);



            window1     = CreateForm(parameters, leftOut, false);
            window2     = CreateForm(parameters, rightOut, false);
            window1.Tag = leftOut.Description;
            window2.Tag = rightOut.Description;

            window1.AddOwnedForm(window2);

            window2.Show();
            window1.Show();

            window1.Resize    += window_Resize;
            window2.Resize    += window_Resize;
            window1.Move      += window_Move;
            window2.Move      += window_Move;
            window1.Activated += window_Activated;
            window2.Activated += window_Activated;
            targetForm         = window1;



            var deviceFlags = DeviceCreationFlags.None;

            deviceFlags |= parameters.UseDebugDevice ? DeviceCreationFlags.Debug : DeviceCreationFlags.None;


            swapChainDesc1 = new SwapChainDescription()
            {
                BufferCount       = 1,
                ModeDescription   = new ModeDescription(parameters.Width, parameters.Height, new Rational(60, 1), Format.R8G8B8A8_UNorm),
                IsWindowed        = true,
                OutputHandle      = window1.Handle,
                SampleDescription = new SampleDescription(parameters.MsaaLevel, 0),
                SwapEffect        = SwapEffect.Discard,
                Usage             = Usage.RenderTargetOutput,
                Flags             = SwapChainFlags.None,
            };

            swapChainDesc2 = new SwapChainDescription()
            {
                BufferCount       = 1,
                ModeDescription   = new ModeDescription(parameters.Width, parameters.Height, new Rational(60, 1), Format.R8G8B8A8_UNorm),
                IsWindowed        = true,
                OutputHandle      = window2.Handle,
                SampleDescription = new SampleDescription(parameters.MsaaLevel, 0),
                SwapEffect        = SwapEffect.Discard,
                Usage             = Usage.RenderTargetOutput,
                Flags             = SwapChainFlags.None,
            };


            d3dDevice = new D3D.Device(adapter, deviceFlags, featureLevel);


            using (var factory = adapter.GetParent <Factory>()) {
                swapChain1 = new SwapChain(factory, d3dDevice, swapChainDesc1);
                swapChain2 = new SwapChain(factory, d3dDevice, swapChainDesc2);

                //factory.MakeWindowAssociation( new IntPtr(0), WindowAssociationFlags.None );
                factory.MakeWindowAssociation(window1.Handle, WindowAssociationFlags.IgnoreAll | WindowAssociationFlags.IgnoreAltEnter);
                factory.MakeWindowAssociation(window2.Handle, WindowAssociationFlags.IgnoreAll | WindowAssociationFlags.IgnoreAltEnter);
            }


            clientWidth  = window1.ClientSize.Width;
            clientHeight = window1.ClientSize.Height;

            fullscr = parameters.FullScreen;
        }