コード例 #1
0
ファイル: ShadowMap.cs プロジェクト: danbystrom/VisionQuest
        public ShadowMap(
            VisionContent vContent,
            int width,
            int height,
            int nearPlane = 1,
            int farPlane = 200)
        {
            _graphicsDevice = vContent.GraphicsDevice;

            ShadowDepthTarget = RenderTarget2D.New(_graphicsDevice, width, height, PixelFormat.R16G16.Float);
            DepthStencilTarget = DepthStencilBuffer.New(_graphicsDevice, width, height, DepthFormat.Depth16);

            _spriteBatch = new SpriteBatch(_graphicsDevice);
            _shadowBlurEffect = vContent.LoadEffect("Effects/Blur");
            _shadowBlurEffect.Parameters["dx"].SetValue(1f/width);
            _shadowBlurEffect.Parameters["dy"].SetValue(1f/height);
            _shadowBlurTarg = RenderTarget2D.New(_graphicsDevice, width, height, PixelFormat.R16G16.Float);

            ShadowNearPlane = nearPlane;
            ShadowFarPlane = farPlane;
            Camera = new Camera(
                new Vector2(width, height),
                Vector3.Zero,
                Vector3.Up,
                ShadowNearPlane,
                ShadowFarPlane);
            UpdateProjection(60, 60);
        }
コード例 #2
0
ファイル: ShadowMap.cs プロジェクト: danbystrom/VisionQuest
        public ShadowMap(
            VisionContent vContent,
            Camera camera,
            int width,
            int height,
            int nearPlane = 1,
            int farPlane = 200)
        {
            _graphicsDevice = vContent.GraphicsDevice;
            RealCamera = camera;

            ShadowDepthTarget = RenderTarget2D.New(_graphicsDevice, width, height, PixelFormat.R16G16.Float);

            _spriteBatch = new SpriteBatch(_graphicsDevice);
            _shadowBlurEffect = vContent.LoadPlainEffect("ShadowEffects/Blur");
            _shadowBlurTarg = RenderTarget2D.New(_graphicsDevice, width, height, PixelFormat.R16G16.Float);

            ShadowNearPlane = nearPlane;
            ShadowFarPlane = farPlane;
            Camera = new Camera(
                new Vector2(width, height),
                Vector3.Zero,
                Vector3.Up,
                ShadowNearPlane,
                ShadowFarPlane);
            UpdateProjection(50, 50);
        }
コード例 #3
0
        public GraphicsDeviceService()
        {
            System.Windows.Forms.Control control = new System.Windows.Forms.Panel();

            deviceInformation = new GraphicsDeviceInformation()
            {
                GraphicsProfile = FeatureLevel.Level_11_0,
                DeviceCreationFlags = SharpDX.Direct3D11.DeviceCreationFlags.Debug,
                PresentationParameters = new PresentationParameters()
                {
                    BackBufferFormat = SharpDX.DXGI.Format.R8G8B8A8_UNorm,
                    DepthStencilFormat = DepthFormat.Depth32,
                    DepthBufferShaderResource = true,
                    BackBufferWidth = 1920,
                    BackBufferHeight = 1080,
                    IsFullScreen = false,
                    RenderTargetUsage = SharpDX.DXGI.Usage.RenderTargetOutput,
                    MultiSampleCount = MSAALevel.None,
                    DeviceWindowHandle = control
                }
            };

            FindAdapter();

            graphicsDevice = GraphicsDevice.New(deviceInformation.Adapter, deviceInformation.DeviceCreationFlags);

            renderTarget = RenderTarget2D.New(graphicsDevice, 1920, 1080, PixelFormat.B8G8R8A8.UNorm);
            graphicsDevice.Presenter = new RenderTargetGraphicsPresenter(graphicsDevice, renderTarget, DepthFormat.Depth32, false);

            dxDevice = (Device)typeof(GraphicsDevice).GetField("Device", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(GraphicsDevice);
            dxContext = (DeviceContext)typeof(GraphicsDevice).GetField("Context", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(GraphicsDevice);

            if (DeviceCreated != null)
                DeviceCreated(this, EventArgs.Empty);
        }
コード例 #4
0
        public RenderTargetGraphicsPresenter(GraphicsDevice device, RenderTarget2D renderTarget, DepthFormat depthFormat = DepthFormat.None)
            : base(device, CreatePresentationParameters(renderTarget, depthFormat))
        {
            PresentInterval = Description.PresentationInterval;

            // Initialize the swap chain
            backBuffer = renderTarget;
        }
コード例 #5
0
        public RenderTargetGraphicsPresenter(GraphicsDevice device, RenderTarget2D backBuffer, DepthFormat depthFormat = DepthFormat.None, bool disposeRenderTarget = false, bool depthAsShaderResource = false)
            : base(device, CreatePresentationParameters(backBuffer, depthFormat, depthAsShaderResource))
        {
            PresentInterval = Description.PresentationInterval;

            this.backBuffer = backBuffer;

            if (disposeRenderTarget)
                ToDispose(this.backBuffer);
        }
コード例 #6
0
        public SwapChainGraphicsPresenter(GraphicsDevice device, PresentationParameters presentationParameters)
            : base(device, presentationParameters)
        {
            PresentInterval = presentationParameters.PresentationInterval;

            // Initialize the swap chain
            swapChain = ToDispose(CreateSwapChain());

            backBuffer = ToDispose(RenderTarget2D.New(device, swapChain.GetBackBuffer<Direct3D11.Texture2D>(0)));
        }
コード例 #7
0
        public RenderTargetGraphicsPresenter(GraphicsDevice device, Texture2DDescription renderTargetDescription, DepthFormat depthFormat = DepthFormat.None, bool allowFormatChange = true, bool disposeRenderTarget = false, bool depthAsShaderResource = false)
            : base(device, CreatePresentationParameters(renderTargetDescription, depthFormat, depthAsShaderResource))
        {
            PresentInterval = Description.PresentationInterval;

            this.renderTargetDescription = renderTargetDescription;
            this.allowFormatChange = allowFormatChange;

            allowRecreateBackBuffer = true;

            backBuffer = RenderTarget2D.New(device, renderTargetDescription);

            if (disposeRenderTarget)
                ToDispose(backBuffer);
        }
コード例 #8
0
 private static PresentationParameters CreatePresentationParameters(RenderTarget2D renderTarget2D)
 {
     return new PresentationParameters()
         {
             BackBufferWidth = renderTarget2D.Width,
             BackBufferHeight = renderTarget2D.Height,
             BackBufferFormat = renderTarget2D.Description.Format,
             DeviceWindowHandle = renderTarget2D,
             Flags = SwapChainFlags.None,
             IsFullScreen = true,
             MultiSampleCount = MSAALevel.None,
             PresentationInterval = PresentInterval.One,
             RefreshRate = new Rational(60, 1),
             RenderTargetUsage = Usage.RenderTargetOutput
         };
 }
コード例 #9
0
ファイル: DXImageSource.cs プロジェクト: ukitake/Stratum
        public DXImageSource(GraphicsDevice graphics, int width, int height)
        {
            if (width < 10) width = 10;
            if (height < 10) height = 10;

            _renderTarget = RenderTarget2D.New(graphics, width, height, SharpDX.Toolkit.Graphics.PixelFormat.B8G8R8A8.UNorm);
            _renderTargetView = new RenderTargetView(graphics, (SharpDX.Toolkit.Graphics.GraphicsResource)_renderTarget);

            SharpDX.Direct3D11.Texture2D depthBuffer = new SharpDX.Direct3D11.Texture2D(graphics, new Texture2DDescription()
            {
                Format = SharpDX.DXGI.Format.D24_UNorm_S8_UInt,
                ArraySize=1,
                MipLevels=0,
                Width = width,
                Height = height,
                SampleDescription = new SharpDX.DXGI.SampleDescription(1,0),
                BindFlags = SharpDX.Direct3D11.BindFlags.DepthStencil
            });

            //_depthStencilBuffer = DepthStencilBuffer.New(graphics,width,height,DepthFormat.Depth24Stencil8);
            _depthStencilView = new DepthStencilView(graphics, depthBuffer);

            Texture2DDescription description = new Texture2DDescription()
            {
                Width = width,
                Height = height,
                MipLevels = 1,
                ArraySize = 1,
                Format = SharpDX.DXGI.Format.B8G8R8A8_UNorm,
                BindFlags = BindFlags.None,
                CpuAccessFlags = CpuAccessFlags.Read,
                SampleDescription = new SharpDX.DXGI.SampleDescription()
                {
                    Count = 1,
                    Quality = 0
                },
                Usage = ResourceUsage.Staging,
                OptionFlags = ResourceOptionFlags.None
            };
            _stagingTexture = SharpDX.Toolkit.Graphics.Texture2D.New(graphics, description);

            _buffer = new byte[width * height * 4];
            _writeableBitmap = new WriteableBitmap(
                width, height, 96, 96, PixelFormats.Bgr32, null);
        }
コード例 #10
0
		public WarpSceneRenderer(Scene scene, int width, int height)
		{
			_scene = scene;
			_width = width;
			_height = height;
			_aspectRatio = width / (float)height;

			_device = GraphicsDevice.New(DriverType.Warp, DeviceCreationFlags.None, FeatureLevel.Level_10_1);

			var serviceProvider = new ServiceProvider();
			serviceProvider.AddService<IGraphicsDeviceService>(new GraphicsDeviceService(_device));

			_contentManager = new ContentManager(serviceProvider);
			_contentManager.Resolvers.Add(new ContentResolver());

			var viewport = new Viewport(0, 0, _width, _height);
			_device.SetViewports(viewport);

			const MSAALevel msaaLevel = MSAALevel.None;
			_depthStencilTexture = DepthStencilBuffer.New(_device, _width, _height, msaaLevel, DepthFormat.Depth24Stencil8);
			_renderTexture = RenderTarget2D.New(_device, _width, _height, msaaLevel, PixelFormat.R8G8B8A8.UNorm);

			Options = new RenderOptions();

			_effect = new BasicEffect(_device);
			_effect.EnableDefaultLighting();

			_inputLayout = VertexInputLayout.New(0, typeof(VertexPositionNormalTexture));
			_device.SetVertexInputLayout(_inputLayout);

			_meshes = new List<WarpMesh>();
			foreach (Mesh mesh in _scene.Meshes)
			{
				if (!mesh.Positions.Any())
					continue;

				var warpMesh = new WarpMesh(_device, mesh);
				_meshes.Add(warpMesh);

				warpMesh.Initialize(_contentManager);
			}
		}
コード例 #11
0
ファイル: DXImageSourceLite.cs プロジェクト: ukitake/Stratum
        public unsafe void Commit(RenderTarget2D renderTarget)
        {
            if (resizing)
                return;

            recreateStagingResourcesIfNeeded(renderTarget);

            renderTarget.GetData(_stagingTexture, _buffer);
            Application.Current.Dispatcher.Invoke(new Action(delegate
            {
                _writeableBitmap.Lock();

                fixed (byte* buffer = _buffer)
                {
                    SharpDX.Utilities.CopyMemory(_writeableBitmap.BackBuffer, new IntPtr(buffer), _buffer.Length);
                }

                _writeableBitmap.AddDirtyRect(new Int32Rect(0, 0, _stagingTexture.Width, _stagingTexture.Height));
                _writeableBitmap.Unlock();
            }));
        }
コード例 #12
0
        public void Render(VideoBuffer videoBuffer)
        {
            if(GraphicsDevice == null)
            {
                return;
            }

            if (RenderTarget2D == null)
            {
                RenderTarget2D = RenderTarget2D.New(GraphicsDevice, videoBuffer.Width, videoBuffer.Height, PixelFormat.B8G8R8A8.UNorm);
            }
            else if (RenderTarget2D != null && (RenderTarget2D.Width != videoBuffer.Width || RenderTarget2D.Height != videoBuffer.Height))
            {
                RenderTarget2D.Dispose();
                RenderTarget2D = null;
                RenderTarget2D = RenderTarget2D.New(GraphicsDevice, videoBuffer.Width, videoBuffer.Height, PixelFormat.B8G8R8A8.UNorm);
            }

            if (RenderTarget2D != null)
            {
                var x = 0;
                var data = videoBuffer.Plane.Data;
                var argb = new int[videoBuffer.Width * videoBuffer.Height];
                for (var i = 0; i < argb.Length; i++)
                {
                    var r = data[x++];
                    var g = data[x++];
                    var b = data[x++];
                    var a = data[x++];
                    argb[i] = ((a & 0xFF) << 24) |
                              ((r & 0xFF) << 16) |
                              ((g & 0xFF) << 8) |
                              ((b & 0xFF) << 0);
                }
                
                RenderTarget2D.SetData<int>(argb);
            }
        }
コード例 #13
0
 public void SetBackBuffer(RenderTarget2D backBuffer)
 {
     this.backBuffer = backBuffer;
 }
コード例 #14
0
ファイル: RiftGame.cs プロジェクト: john-guo/hodgepodge
        protected override void Initialize()
        {
            keyMgr.Initialize();

            // Modify the title of the window
            Window.Title = "RiftGame";

            // Attach HMD to window
            var control = (RenderForm)Window.NativeWindow;
            control.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            control.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
            control.DesktopLocation = new System.Drawing.Point(0, 0);
            hmd.AttachToWindow(control.Handle);

            // Create our render target
            //var renderTargetSize = hmd.GetDefaultRenderTargetSize(1.5f);
            var renderTargetSize = hmd.GetDefaultRenderTargetSize();
            renderTarget = RenderTarget2D.New(GraphicsDevice, renderTargetSize.Width, renderTargetSize.Height, new MipMapCount(1), PixelFormat.R8G8B8A8.UNorm, TextureFlags.RenderTarget | TextureFlags.ShaderResource);
            renderTargetView = (RenderTargetView)renderTarget;
            renderTargetSRView = (ShaderResourceView)renderTarget;

            // Create a depth stencil buffer for our render target
            depthStencilBuffer = DepthStencilBuffer.New(GraphicsDevice, renderTargetSize.Width, renderTargetSize.Height, DepthFormat.Depth32, true);

            // Adjust render target size if there were any hardware limitations
            renderTargetSize.Width = renderTarget.Width;
            renderTargetSize.Height = renderTarget.Height;

            // The viewport sizes are re-computed in case renderTargetSize changed
            eyeRenderViewport = new Rect[2];
            eyeRenderViewport[0] = new Rect(0, 0, renderTargetSize.Width / 2, renderTargetSize.Height);
            eyeRenderViewport[1] = new Rect((renderTargetSize.Width + 1) / 2, 0, eyeRenderViewport[0].Width, eyeRenderViewport[0].Height);

            // Create our eye texture data
            eyeTexture = new D3D11TextureData[2];
            eyeTexture[0].Header.API = RenderAPIType.D3D11;
            eyeTexture[0].Header.TextureSize = renderTargetSize;
            eyeTexture[0].Header.RenderViewport = eyeRenderViewport[0];
            eyeTexture[0].pTexture = ((SharpDX.Direct3D11.Texture2D)renderTarget).NativePointer;
            eyeTexture[0].pSRView = renderTargetSRView.NativePointer;

            // Right eye uses the same texture, but different rendering viewport
            eyeTexture[1] = eyeTexture[0];
            eyeTexture[1].Header.RenderViewport = eyeRenderViewport[1];

            // Configure d3d11
            var device = (SharpDX.Direct3D11.Device)GraphicsDevice;
            D3D11ConfigData d3d11cfg = new D3D11ConfigData();
            d3d11cfg.Header.API = RenderAPIType.D3D11;
            d3d11cfg.Header.BackBufferSize = hmd.Resolution;
            d3d11cfg.Header.Multisample = 1;
            d3d11cfg.pDevice = device.NativePointer;
            d3d11cfg.pDeviceContext = device.ImmediateContext.NativePointer;
            d3d11cfg.pBackBufferRT = ((RenderTargetView)GraphicsDevice.BackBuffer).NativePointer;
            d3d11cfg.pSwapChain = ((SharpDX.DXGI.SwapChain)GraphicsDevice.Presenter.NativePresenter).NativePointer;

            // Configure rendering
            eyeRenderDesc = new EyeRenderDesc[2];
            if (!hmd.ConfigureRendering(d3d11cfg, DistortionCapabilities.Chromatic | DistortionCapabilities.TimeWarp, hmd.DefaultEyeFov, eyeRenderDesc))
            {
                throw new Exception("Failed to configure rendering");
            }

            // Set enabled capabilities
            hmd.EnabledCaps = HMDCapabilities.LowPersistence | HMDCapabilities.DynamicPrediction;

            // Configure tracking
            hmd.ConfigureTracking(TrackingCapabilities.Orientation | TrackingCapabilities.Position | TrackingCapabilities.MagYawCorrection, TrackingCapabilities.None);


            // Dismiss the Heatlh and Safety Window
            hmd.EnableHSWDisplaySDKRender(false);
            hmd.DismissHSWDisplay();

            // Get HMD output
            var adapter = (Adapter)GraphicsDevice.Adapter;
            var hmdOutput = adapter.Outputs.FirstOrDefault(o => hmd.DeviceName.StartsWith(o.Description.DeviceName, StringComparison.OrdinalIgnoreCase));
            if (hmdOutput != null)
            {
                control.DesktopLocation = new System.Drawing.Point(hmdOutput.Description.DesktopBounds.Left, hmdOutput.Description.DesktopBounds.Top);

                //Window.BeginScreenDeviceChange(true);
                // Set game to fullscreen on rift
                //var swapChain = (SwapChain)GraphicsDevice.Presenter.NativePresenter;
                //var description = swapChain.Description.ModeDescription;
                //swapChain.ResizeTarget(ref description);
                //swapChain.SetFullscreenState(true, hmdOutput);
                //Window.EndScreenDeviceChange();
            }

            sprite = new SpriteBatch(this.GraphicsDevice);
            position = new Vector2(hmd.Resolution.Width / 2, hmd.Resolution.Height / 2);
            capture = OpenCV.Net.Capture.CreateCameraCapture(0);


            _form = new RenderForm("Normal");
            // SwapChain description
            var desc = new SwapChainDescription()
            {
                BufferCount = 1,
                ModeDescription =
                    new ModeDescription(_form.ClientSize.Width, _form.ClientSize.Height,
                                        new Rational(60, 1), Format.R8G8B8A8_UNorm),
                IsWindowed = true,
                OutputHandle = _form.Handle,
                SampleDescription = new SampleDescription(1, 0),
                SwapEffect = SwapEffect.Discard,
                Usage = Usage.RenderTargetOutput | Usage.ShaderInput | Usage.BackBuffer
            };

            // Used for debugging dispose object references
            // Configuration.EnableObjectTracking = true;

            // Disable throws on shader compilation errors
            //Configuration.ThrowOnShaderCompileError = false;

            // Create Device and SwapChain

            SharpDX.Direct3D11.Device.CreateWithSwapChain(SharpDX.Direct3D.DriverType.Hardware, DeviceCreationFlags.None, desc, out _device, out _swapChain);
            _context = _device.ImmediateContext;
            _gdevice = GraphicsDevice.New(_device);
            _renderTarget = RenderTarget2D.New(_gdevice, renderTargetSize.Width, renderTargetSize.Height, new MipMapCount(1), PixelFormat.R8G8B8A8.UNorm, TextureFlags.RenderTarget | TextureFlags.ShaderResource);
            _depthStencilBuffer = DepthStencilBuffer.New(_gdevice, renderTargetSize.Width, renderTargetSize.Height, DepthFormat.Depth32, true);
            _sprite = new SpriteBatch(_gdevice);

            _swapChain.GetParent<Factory>().MakeWindowAssociation(_form.Handle, WindowAssociationFlags.IgnoreAll);

            var backBuffer = SharpDX.Direct3D11.Texture2D.FromSwapChain<SharpDX.Direct3D11.Texture2D>(_swapChain, 0);

            // Renderview on the backbuffer
            _renderView = new RenderTargetView(_device, backBuffer);

            // Create the depth buffer
            var depthBuffer = new SharpDX.Direct3D11.Texture2D(_device, new Texture2DDescription()
            {
                Format = Format.D32_Float_S8X24_UInt,
                ArraySize = 1,
                MipLevels = 1,
                Width = _form.ClientSize.Width,
                Height = _form.ClientSize.Height,
                SampleDescription = new SampleDescription(1, 0),
                Usage = ResourceUsage.Default,
                BindFlags = BindFlags.DepthStencil,
                CpuAccessFlags = CpuAccessFlags.None,
                OptionFlags = ResourceOptionFlags.None
            });

            // Create the depth buffer view
            _depthView = new DepthStencilView(_device, depthBuffer);

            model = null;
            _model = null;

            base.Initialize();
        }
コード例 #15
0
ファイル: DXImageSource.cs プロジェクト: ukitake/Stratum
 public void Build(RenderTarget2D renderTarget)
 {
     renderTarget.GetData(_stagingTexture, _buffer);
     _writeableBitmap.Lock();
     Marshal.Copy(_buffer, 0, _writeableBitmap.BackBuffer, _buffer.Length);
     _writeableBitmap.AddDirtyRect(new Int32Rect(0, 0, _renderTarget.Width, _renderTarget.Height));
     _writeableBitmap.Unlock();
 }
コード例 #16
0
        void IDrawingSurfaceContentProviderNative.GetTexture(DrawingSizeF surfaceSize, out DrawingSurfaceSynchronizedTexture synchronizedTexture, out RectangleF textureSubRectangle)
        {
            try
            {
                if (!Exiting)
                {
                    if (GraphicsDevice == null)
                    {
                        GraphicsDevice = GraphicsDevice.New();

                        var renderTargetDesc = new Texture2DDescription
                                               {
                                                   Format = DXGI.Format.B8G8R8A8_UNorm,
                                                   Width = (int)surfaceSize.Width,
                                                   Height = (int)surfaceSize.Height,
                                                   ArraySize = 1,
                                                   MipLevels = 1,
                                                   BindFlags = BindFlags.RenderTarget | BindFlags.ShaderResource,
                                                   Usage = ResourceUsage.Default,
                                                   CpuAccessFlags = CpuAccessFlags.None,
                                                   OptionFlags = ResourceOptionFlags.SharedKeyedmutex | ResourceOptionFlags.SharedNthandle,
                                                   SampleDescription = new DXGI.SampleDescription(1, 0)
                                               };

                        renderTarget = ToDispose(Graphics.Texture2D.New(GraphicsDevice, renderTargetDesc));
                        BackBuffer = ToDispose(RenderTarget2D.New(GraphicsDevice, new RenderTargetView(GraphicsDevice, renderTarget)));

                        graphicsPresenter = new RenderTargetGraphicsPresenter(GraphicsDevice, BackBuffer);
                        GraphicsDevice.Presenter = graphicsPresenter;
                        InitCallback();
                    }

                    if(this.synchronizedTexture == null)
                        this.synchronizedTexture = host.CreateSynchronizedTexture((Texture2D)renderTarget);

                    this.synchronizedTexture.BeginDraw();

                    RunCallback();

                    host.RequestAdditionalFrame();

                    this.synchronizedTexture.EndDraw();
                }
            }
            catch (Exception ex)
            {
                // TODO: As we are in a callback from a native code, we cannot pass back this exception,
                // so how to pass back this exception to the user at an appropriate time?
                drawException = ex;
                Debug.WriteLine(drawException);
            }

            // Set output parameters.
            textureSubRectangle = new RectangleF(0f, 0f, surfaceSize.Width, surfaceSize.Height);
            synchronizedTexture = this.synchronizedTexture;
        }
コード例 #17
0
        private void GenerateMaxMap(RenderTarget2D texture, GraphicsDevice graphicsDevice)
        {
            // Save old render setup to restore later.
            SharpDX.Direct3D11.DepthStencilView depthStencilBefore;
            var renderTargetsBefore = graphicsDevice.GetRenderTargets(out depthStencilBefore);
            ViewportF oldViewport = graphicsDevice.GetViewport(0);

            numHeightmapMipLevels = 0;
            var currentWidth = texture.Width / 2;
            var currentHeight = texture.Height / 2;
            for (var mipLevel = 1; currentWidth > 0 && currentHeight > 0; ++mipLevel, currentWidth /= 2, currentHeight /= 2)
            {
                // Generate sampler on-the-fly.
                var samplerStateDesc = SharpDX.Direct3D11.SamplerStateDescription.Default();
                samplerStateDesc.AddressV = SharpDX.Direct3D11.TextureAddressMode.Clamp;
                samplerStateDesc.AddressU = SharpDX.Direct3D11.TextureAddressMode.Clamp;
                samplerStateDesc.Filter = SharpDX.Direct3D11.Filter.MinMagMipPoint;
                samplerStateDesc.MinimumLod = mipLevel-1;
                samplerStateDesc.MaximumLod = mipLevel-1;
                samplerStateDesc.MipLodBias = mipLevel-1;
                var mipLevelSamplerState = SamplerState.New(graphicsDevice, "MipLevelSampler_" + mipLevel, samplerStateDesc);

                // Draw.
                maxmapGenShader.Effect.Parameters["NearestSampler"].SetResource(mipLevelSamplerState);
                maxmapGenShader.Effect.Parameters["InputTexture"].SetResource(texture.ShaderResourceView[ViewType.Single, 0, mipLevel-1]);
                graphicsDevice.SetRenderTargets(texture.RenderTargetView[ViewType.Single, 0, mipLevel]);
                graphicsDevice.SetViewport(0, 0, currentWidth, currentHeight);
                maxmapGenShader.Effect.CurrentTechnique.Passes[0].Apply();
                graphicsDevice.Draw(PrimitiveType.PointList, 1);
                maxmapGenShader.Effect.CurrentTechnique.Passes[0].UnApply();

                ++numHeightmapMipLevels;
            }
            graphicsDevice.SetRenderTargets(depthStencilBefore, renderTargetsBefore);
            graphicsDevice.SetViewport(oldViewport);
        }
コード例 #18
0
        public void Resize(int width, int height)
        {
            renderTarget.Dispose();
            graphicsDevice.Presenter.Dispose();

            renderTarget = RenderTarget2D.New(graphicsDevice, width, height, PixelFormat.B8G8R8A8.UNorm);
            graphicsDevice.Presenter = new RenderTargetGraphicsPresenter(graphicsDevice, renderTarget, DepthFormat.Depth24Stencil8, false);
        }
コード例 #19
0
        public override bool Resize(int width, int height, Format format)
        {
            if (!base.Resize(width, height, format)) return false;

            RemoveAndDispose(ref backBuffer);

            swapChain.ResizeBuffers(bufferCount, width, height, format, Description.Flags);

            // Recreate the back buffer
            backBuffer = ToDispose(RenderTarget2D.New(GraphicsDevice, swapChain.GetBackBuffer<Direct3D11.Texture2D>(0)));

            // Reinit the Viewport
            DefaultViewport = new ViewportF(0, 0, backBuffer.Width, backBuffer.Height);

            return true;
        }
コード例 #20
0
        private void HandleDeviceChangeEnd(object sender, EventArgs e)
        {
            var device = _graphicsDeviceManager.GraphicsDevice;

            var swapChain = (SwapChain)device.Presenter.NativePresenter;
            var d = swapChain.Description;

            var d3DDevice = (SharpDX.Direct3D11.Device)device;
            using (var dxgiDevice = d3DDevice.QueryInterface<Device3>())
            {
                var adapter = dxgiDevice.Adapter;
                var factory = adapter.GetParent<Factory2>();

                var description = new SwapChainDescription1
                                  {
                                      Width = d.ModeDescription.Width,
                                      Height = d.ModeDescription.Height,
                                      Format = d.ModeDescription.Format,
                                      Stereo = false,
                                      SampleDescription = new SampleDescription(1, 0),
                                      Usage = Usage.RenderTargetOutput,
                                      BufferCount = 2,
                                      SwapEffect = SwapEffect.FlipSequential,
                                      Flags = SwapChainFlags.ForegroundLayer,
                                      Scaling = Scaling.None,
                                      AlphaMode = AlphaMode.Premultiplied
                                  };

                // create the foreground swap chain for the core window
                using (var comWindow = new ComObject(Window.NativeWindow))
                    _foregroundChain = new SwapChain1(factory, (SharpDX.Direct3D11.Device)device, comWindow, ref description);

                // recreate the foreground render target
                using (var backBuffer = _foregroundChain.GetBackBuffer<SharpDX.Direct3D11.Texture2D>(0))
                    _foregroundRenderTarget = RenderTarget2D.New(device, backBuffer);
            }
        }
コード例 #21
0
        void IDrawingSurfaceBackgroundContentProviderNative.Draw(Device device, DeviceContext context, RenderTargetView renderTargetView)
        {
            try
            {
                RenderTarget2D localBackBuffer = null;
                if (!Exiting)
                {
                    if (GraphicsDevice == null)
                    {
                        GraphicsDevice = GraphicsDevice.New(device);

                        renderTargets[0].NativePointer = renderTargetView.NativePointer;
                        renderTargets[0].RenderTarget = RenderTarget2D.New(GraphicsDevice, renderTargetView, true);
                        BackBuffer = renderTargets[0].RenderTarget;
                        nextRenderTarget++;

                        graphicsPresenter = new RenderTargetGraphicsPresenter(GraphicsDevice, BackBuffer);
                        GraphicsDevice.Presenter = graphicsPresenter;
                        initCallback();
                    }
                    else
                    {
                        if (((Direct3D11.Device)GraphicsDevice).NativePointer != device.NativePointer || ((Direct3D11.DeviceContext)GraphicsDevice).NativePointer != context.NativePointer)
                        {
                            System.Diagnostics.Debugger.Break();
                        }

                        // Find any previous render target that was already alocated.
                        bool foundRenderTarget = false;
                        foreach (var renderTargetLocal in renderTargets)
                        {
                            if (renderTargetLocal.NativePointer == renderTargetView.NativePointer)
                            {
                                BackBuffer = renderTargetLocal.RenderTarget;
                                graphicsPresenter.SetBackBuffer(BackBuffer);
                                foundRenderTarget = true;
                                break;
                            }
                        }

                        if (!foundRenderTarget)
                        {
                            // Dispose any previous render target.
                            renderTargets[nextRenderTarget].Dispose();

                            // Creates the new BackBuffer and associated it to the GraphicsPresenter
                            BackBuffer = RenderTarget2D.New(GraphicsDevice, renderTargetView, true);
                            graphicsPresenter.SetBackBuffer(BackBuffer);

                            renderTargets[nextRenderTarget].NativePointer = renderTargetView.NativePointer;
                            renderTargets[nextRenderTarget].RenderTarget = BackBuffer;
                            nextRenderTarget++;
                        }

                        // TODO: Check that new device/devicecontext/renderTargetView are the same
                        // else we need to handle DeviceReset/Remove...etc.
                    }

                    tickCallback();

                    // Aks the host for additional frame
                    host.RequestAdditionalFrame();
                }
            } catch (Exception ex)
            {
                // System.Diagnostics.Debugger.Break();
            }
        }
コード例 #22
0
        protected override void LoadContent()
        {
            // Instantiate a SpriteBatch
            spriteBatch = ToDisposeContent(new SpriteBatch(GraphicsDevice));

            // Loads a sprite font
            // The [Arial16.xml] file is defined with the build action [ToolkitFont] in the project
            arial16Font = Content.Load<SpriteFont>("Arial16");

            // Creates a basic effect
            basicEffect = ToDisposeContent(new BasicEffect(GraphicsDevice));
            basicEffect.DiffuseColor = Color.OrangeRed.ToVector4();
            basicEffect.PreferPerPixelLighting = true;
            basicEffect.EnableDefaultLighting();

            // Creates torus primitive
            sphere = ToDisposeContent(GeometricPrimitive.Sphere.New(GraphicsDevice, 1.75f));

            pixelTexture = Texture2D.New(GraphicsDevice, 1, 1, GraphicsDevice.BackBuffer.Format);
            pixelTexture.SetData<Color>(new Color[] { Color.Green });

            occlusionQuery = new OcclusionQuery(GraphicsDevice);

            offscreenBuffer = RenderTarget2D.New(GraphicsDevice, 128, 128, GraphicsDevice.BackBuffer.Format);

            base.LoadContent();
        }
コード例 #23
0
ファイル: ShadowMap.cs プロジェクト: danbystrom/VisionQuest
 private void blurShadow(RenderTarget2D to, RenderTarget2D from)
 {
     _graphicsDevice.SetRenderTargets(to);
     _graphicsDevice.Clear(Color.Black);
     _shadowBlurEffect.Apply();
     _spriteBatch.Begin(SpriteSortMode.Deferred,  _shadowBlurEffect.Effect);
     _spriteBatch.Draw(from, Vector2.Zero, Color.White);
     _spriteBatch.End();
     _shadowBlurEffect.Texture = null;
 }
コード例 #24
0
        public override bool Resize(int width, int height, Format format, Rational? refreshRate = null)
        {
            if (!base.Resize(width, height, format, refreshRate)) return false;

            RemoveAndDispose(ref backBuffer);

#if DIRECTX11_2 && WIN8METRO
            var swapChainPanel = Description.DeviceWindowHandle as SwapChainPanel;
            if (swapChainPanel != null && swapChain2 != null)
            {

                swapChain2.MatrixTransform = Matrix3x2.Scaling(1f / swapChainPanel.CompositionScaleX, 1f / swapChainPanel.CompositionScaleY);
            }
#endif

            swapChain.ResizeBuffers(bufferCount, width, height, format, Description.Flags);

            // Recreate the back buffer
            backBuffer = ToDispose(RenderTarget2D.New(GraphicsDevice, swapChain.GetBackBuffer<Direct3D11.Texture2D>(0)));

            // Reinit the Viewport
            DefaultViewport = new ViewportF(0, 0, backBuffer.Width, backBuffer.Height);

            return true;
        }
コード例 #25
0
        public override bool Resize(int width, int height, Format format)
        {
            if (!base.Resize(width, height, format)) return false;

            // backbuffer was set externally, do not touch it
            if (!allowRecreateBackBuffer) return false;
            
            renderTargetDescription.Width = width;
            renderTargetDescription.Height = height;

            if (allowFormatChange)
                renderTargetDescription.Format = format;

            if (backBuffer != null)
            {
                RemoveAndDispose(ref backBuffer);
                backBuffer = RenderTarget2D.New(GraphicsDevice, renderTargetDescription);
            }
            return true;
        }
コード例 #26
0
        /// <summary>
        /// Creates a <see cref="RenderTargetGraphicsPresenter" /> if not already created based from latest internal device.
        /// </summary>
        /// <param name="resetPresenter">if set to <c>true</c> [reset presenter].</param>
        internal void EnsurePresenter(bool resetPresenter)
        {
            // Find any previous render target that was already allocated.
            if (!resetPresenter)
            {
                foreach (RenderTargetLocal renderTargetLocal in renderTargets)
                {
                    if (renderTargetLocal.NativePointer == currentRenderTargetView.NativePointer)
                    {
                        backBuffer = renderTargetLocal.RenderTarget;
                        graphicsPresenter.SetBackBuffer(backBuffer);
                        return;
                    }
                }
            }

            // Creates the backbuffer
            backBuffer = RenderTarget2D.New(graphicsDevice, currentRenderTargetView, true);
            currentRenderTargetView.Tag = backBuffer;

            // Dispose any previous render target.
            renderTargets[nextRenderTarget].Dispose();
            renderTargets[nextRenderTarget].NativePointer = currentRenderTargetView.NativePointer;
            renderTargets[nextRenderTarget].RenderTarget = backBuffer;
            nextRenderTarget = (nextRenderTarget + 1) % renderTargets.Length;

            if (resetPresenter)
            {
                graphicsPresenter = new RenderTargetGraphicsPresenter(graphicsDevice, backBuffer, RequestDepthFormat);
                graphicsDevice.Presenter = graphicsPresenter;
            }

            graphicsPresenter.SetBackBuffer(backBuffer);
        }
コード例 #27
0
ファイル: DXImageSourceLite.cs プロジェクト: ukitake/Stratum
 private void recreateStagingResourcesIfNeeded(RenderTarget2D renderTarget)
 {
     if (_stagingTexture.Width != renderTarget.Width || _stagingTexture.Height != renderTarget.Height)
     {
         _stagingTexture.Dispose();
         initResources(renderTarget.Width, renderTarget.Height);
     }
 }
コード例 #28
0
        public override void Resize(int width, int height, Format format)
        {
            base.Resize(width, height, format);

            RemoveAndDispose(ref backBuffer);

            swapChain.ResizeBuffers(bufferCount, width, height, format, Description.Flags);

            // Recreate the back buffer
            backBuffer = ToDispose(RenderTarget2D.New(GraphicsDevice, swapChain.GetBackBuffer<Direct3D11.Texture2D>(0)));
        }
コード例 #29
0
        public WaterSurface(
            GraphicsDevice graphicsDevice,
            InitInfo initInfo)
        {
            Effect = new VisionEffect(initInfo.Fx, graphicsDevice.SamplerStates.LinearClamp)
            {
                SunlightDirection = VisionContent.SunlightDirection - new Vector3(0, VisionContent.SunlightDirection.Y/2, 0)
            };

            _waveBumpMapVelocity0 = initInfo.waveBumpMapVelocity0;
            _waveBumpMapVelocity1 = initInfo.waveBumpMapVelocity1;
            _waveDispMapVelocity0 = initInfo.waveDispMapVelocity0;
            _waveDispMapVelocity1 = initInfo.waveDispMapVelocity1;

            _hiPolyPlane = generatePlane(graphicsDevice, initInfo.SquareSize, initInfo.dx, initInfo.dz,
                                         initInfo.texScale);

            _lakePlane = generatePlane(graphicsDevice, 1, initInfo.SquareSize*512, initInfo.SquareSize*512, initInfo.texScale*512);

            buildFx(initInfo);

            var targetWidth = graphicsDevice.BackBuffer.Width;
            var targetHeight = graphicsDevice.BackBuffer.Height;
            _reflectionTarget = RenderTarget2D.New(
                graphicsDevice,
                targetWidth,
                targetHeight*11/10, //compensate for displaced waves
                graphicsDevice.BackBuffer.Format);

            _reflectionCamera = new Camera(
                new Vector2(targetWidth, targetHeight),
                null,
                null,
                null,
                Vector3.Zero,
                Vector3.Up);

            Update(10);
        }
コード例 #30
0
ファイル: DrawingSurface.cs プロジェクト: 4ux-nbIx/gemini
        private void CreateAndBindTargets()
        {
	        if (_device == null)
		        return;

			_d3DSurface.SetRenderTargetDX10(null);

			Disposer.RemoveAndDispose(ref _backBuffer);

	        int width = Math.Max((int) ActualWidth, 100);
	        int height = Math.Max((int) ActualHeight, 100);

			_backBuffer = RenderTarget2D.New(_graphicsDevice, new Texture2DDescription
			{
				BindFlags = BindFlags.RenderTarget | BindFlags.ShaderResource,
				Format = Format.B8G8R8A8_UNorm,
				Width = width,
				Height = height,
				MipLevels = 1,
				SampleDescription = new SampleDescription(1, 0),
				Usage = ResourceUsage.Default,
				OptionFlags = ResourceOptionFlags.Shared,
				CpuAccessFlags = CpuAccessFlags.None,
				ArraySize = 1
			});

			_graphicsDevice.Presenter = new RenderTargetGraphicsPresenter(
				_graphicsDevice, _backBuffer, DepthFormat.Depth16);

            _d3DSurface.SetRenderTargetDX10(_backBuffer);
        }