/// <summary>
        /// Constructor is private, because this is a singleton class:
        /// client controls should use the public AddRef method instead.
        /// </summary>
        SharpDXGraphicsDeviceService10()
        {
            // We need a a D3D9 device.
            sharpDXGraphicsDeviceService9 = SharpDXGraphicsDeviceService9.RefToNew(0, 0);

            factoryDXGI = new Factory();
            factory2D   = new SharpDX.Direct2D1.Factory();
            // Try to create a hardware device first and fall back to a
            // software (WARP doesn't let us share resources)
            var device1 = TryCreateDevice1(SharpDX.Direct3D10.DriverType.Hardware);

            if (device1 == null)
            {
                device1 = TryCreateDevice1(SharpDX.Direct3D10.DriverType.Software);
                if (device1 == null)
                {
                    throw new Exception("Unable to create a DirectX 10 device.");
                }
            }
            // Ratserizer not needed for Direct2D (retain for if mixing D2D and D3D).
            //RasterizerStateDescription rastDesc = new RasterizerStateDescription();
            //rastDesc.CullMode = CullMode.Back;
            //rastDesc.FillMode = FillMode.Solid;
            //rastDesc.IsMultisampleEnabled = false;
            //rastDesc.IsAntialiasedLineEnabled = false;
            //device1.Rasterizer.State = new RasterizerState(device1, rastDesc);
            this.device = device1;
        }
        public BitmapDrawingContext(int width, int height)
        {
            if (width < 0 || height < 0)
                throw new Exception("Negative BitmapDrawingContext's area");

            _width = width;
            _height = height;

            _device = new Device1(DriverType.Hardware, DeviceCreationFlags.BgraSupport, FeatureLevel.Level_10_0);
            var textureDesc = new Texture2DDescription
            {
                MipLevels = 1,
                ArraySize = 1,
                BindFlags = BindFlags.RenderTarget,
                CpuAccessFlags = CpuAccessFlags.None,
                Format = Format.B8G8R8A8_UNorm,
                OptionFlags = ResourceOptionFlags.None,
                Width = _width,
                Height = _height,
                Usage = ResourceUsage.Default,
                SampleDescription = new SampleDescription(1, 0)
            };

            _texture = new Texture2D(_device, textureDesc);
            _factory = new Factory(FactoryType.SingleThreaded, DebugLevel.None);
        }
        private SharpDX.Direct3D10.Device1 TryCreateDevice1(SharpDX.Direct3D10.DriverType type)
        {
            // We'll try to create the device that supports any of these feature levels
            SharpDX.Direct3D10.FeatureLevel[] levels =
            {
                SharpDX.Direct3D10.FeatureLevel.Level_10_1,
                SharpDX.Direct3D10.FeatureLevel.Level_10_0,
                SharpDX.Direct3D10.FeatureLevel.Level_9_3,
                SharpDX.Direct3D10.FeatureLevel.Level_9_2,
                SharpDX.Direct3D10.FeatureLevel.Level_9_1
            };

            foreach (var level in levels)
            {
                try
                {
                    //var device = new SharpDX.Direct3D10.Device1(factoryDXGI.GetAdapter(0), DeviceCreationFlags.BgraSupport, level);
                    var device = new SharpDX.Direct3D10.Device1(type, DeviceCreationFlags.BgraSupport, level);
                    return(device);
                }
                catch (ArgumentException)    // E_INVALIDARG
                {
                    continue;                // Try the next feature level
                }
                catch (OutOfMemoryException) // E_OUTOFMEMORY
                {
                    continue;                // Try the next feature level
                }
                catch (Exception)            // SharpDX.Direct3D10.Direct3D10Exception D3DERR_INVALIDCALL or E_FAIL
                {
                    continue;                // Try the next feature level
                }
            }
            return(null); // We failed to create a device at any required feature level
        }
Esempio n. 4
0
        protected override void Initialize(DemoConfiguration demoConfiguration)
        {
            // SwapChain description
            var desc = new SwapChainDescription()
            {
                BufferCount     = 1,
                ModeDescription =
                    new ModeDescription(demoConfiguration.Width, demoConfiguration.Height,
                                        new Rational(60, 1), Format.R8G8B8A8_UNorm),
                IsWindowed        = true,
                OutputHandle      = DisplayHandle,
                SampleDescription = new SampleDescription(1, 0),
                SwapEffect        = SwapEffect.Discard,
                Usage             = Usage.RenderTargetOutput
            };

            // Create Device and SwapChain
            Device1.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.BgraSupport, desc, FeatureLevel.Level_10_0, out _device, out _swapChain);

            // Ignore all windows events
            Factory factory = _swapChain.GetParent <Factory>();

            factory.MakeWindowAssociation(DisplayHandle, WindowAssociationFlags.IgnoreAll);

            // New RenderTargetView from the backbuffer
            _backBuffer = Texture2D.FromSwapChain <Texture2D>(_swapChain, 0);

            _backBufferView = new RenderTargetView(_device, _backBuffer);
        }
Esempio n. 5
0
        public override void Hook()
        {
            DebugMessage("Hook: Begin");

            // Determine method addresses in Direct3D10.Device, and DXGI.SwapChain
            if (_d3d10_1VTblAddresses == null)
            {
                _d3d10_1VTblAddresses       = new List <IntPtr>();
                _dxgiSwapChainVTblAddresses = new List <IntPtr>();
                DebugMessage("Hook: Before device creation");
                using (var factory = new Factory1())
                {
                    using (
                        var device = new Device1(factory.GetAdapter(0), DeviceCreationFlags.None,
                                                 FeatureLevel.Level_10_1))
                    {
                        DebugMessage("Hook: Device created");
                        _d3d10_1VTblAddresses.AddRange(GetVTblAddresses(device.NativePointer,
                                                                        D3D10_1_DEVICE_METHOD_COUNT));

                        using (var renderForm = new RenderForm())
                        {
                            using (
                                var sc = new SwapChain(factory, device,
                                                       DXGI.CreateSwapChainDescription(renderForm.Handle)))
                            {
                                _dxgiSwapChainVTblAddresses.AddRange(GetVTblAddresses(sc.NativePointer,
                                                                                      DXGI.DXGI_SWAPCHAIN_METHOD_COUNT));
                            }
                        }
                    }
                }
            }

            // We will capture the backbuffer here
            DXGISwapChain_PresentHook = new Hook <DXGISwapChain_PresentDelegate>(
                _dxgiSwapChainVTblAddresses[(int)DXGI.DXGISwapChainVTbl.Present],
                new DXGISwapChain_PresentDelegate(PresentHook),
                this);

            // We will capture target/window resizes here
            DXGISwapChain_ResizeTargetHook = new Hook <DXGISwapChain_ResizeTargetDelegate>(
                _dxgiSwapChainVTblAddresses[(int)DXGI.DXGISwapChainVTbl.ResizeTarget],
                new DXGISwapChain_ResizeTargetDelegate(ResizeTargetHook),
                this);

            /*
             * Don't forget that all hooks will start deactivated...
             * The following ensures that all threads are intercepted:
             * Note: you must do this for each hook.
             */
            DXGISwapChain_PresentHook.Activate();

            DXGISwapChain_ResizeTargetHook.Activate();

            Hooks.Add(DXGISwapChain_PresentHook);
            Hooks.Add(DXGISwapChain_ResizeTargetHook);
        }
Esempio n. 6
0
        public D3D10Renderer(Device1 device3D)
        {
            Contract.Requires(device3D != null);

            _Device3D = device3D;

            string shader = GetShaderText(Properties.Resources.RenderingEffects);

            using(var byteCode = ShaderBytecode.Compile(
                    shader, "fx_4_0", ShaderFlags.None, EffectFlags.None))
            {
                _Effect = new Effect(_Device3D, byteCode);
            }

            _EffectTechnique = _Effect.GetTechniqueByName("WithTexture");

            Contract.Assert(_EffectTechnique != null);

            _EffectPass = _EffectTechnique.GetPassByIndex(0);

            Contract.Assert(_EffectPass != null);

            _InputLayout = new InputLayout(
                _Device3D, _EffectPass.Description.Signature, _InputLayoutData);

            const int byteSize = _Stride * _VertexCount;

            using(DataStream stream = new DataStream(byteSize, true, true))
            {
                for(int i = 0; i < _QuadPrimitiveData.Length; i += 2)
                {
                    float fx = (2.0f * _QuadPrimitiveData[i + 0].X) - 1.0f;
                    float fy = (2.0f * _QuadPrimitiveData[i + 0].Y) - 1.0f;

                    stream.Write(new Vector3(fx, -fy, 0.5f));
                    stream.Write(_QuadPrimitiveData[i + 1]);
                }

                stream.Seek(0, SeekOrigin.Begin);

                BufferDescription description = new BufferDescription
                {
                    BindFlags = BindFlags.VertexBuffer,
                    CpuAccessFlags = CpuAccessFlags.None,
                    OptionFlags = ResourceOptionFlags.None,
                    Usage = ResourceUsage.Immutable,
                    SizeInBytes = byteSize
                };

                description.SizeInBytes = byteSize;

                _VertexBuffer = new Buffer(_Device3D, stream, description);

                _VertexBufferBinding = new VertexBufferBinding(
                    _VertexBuffer, _Stride, _Offset);
            }
        }
Esempio n. 7
0
        private void StartD3D()
        {
            this.Device = new Device(DriverType.Hardware, DeviceCreationFlags.BgraSupport, FeatureLevel.Level_10_0);

            this.D3DSurface = new DX10ImageSource();
            this.D3DSurface.IsFrontBufferAvailableChanged += OnIsFrontBufferAvailableChanged;

            this.CreateAndBindTargets();

            this.Source = this.D3DSurface;
        }
Esempio n. 8
0
        private void StartD3D()
        {
            this.Device = new Device(DriverType.Hardware, DeviceCreationFlags.BgraSupport, FeatureLevel.Level_10_0);

            this.D3DSurface = new DX10ImageSource();
            this.D3DSurface.IsFrontBufferAvailableChanged += OnIsFrontBufferAvailableChanged;

            this.CreateAndBindTargets();

            this.Source = this.D3DSurface;
        }
        public void Initialize(Device1 device)
        {
            if (IsInitialized) return;

            ObjectList = new ObservableCollection<GameObject>();

            SelectedShader = new PosNormColEffect();
            SelectedShader.Initialize(device);
            SelectedShader.Technique = SelectedShader.Effect.GetTechniqueByName("WireTech");

            IsInitialized = true;
        }
Esempio n. 10
0
        public static IDraw GetDrawer()
        {
            var dv  = new SharpDX.Direct3D10.Device1(DriverType.Hardware);
            var df  = new SharpDX.Direct2D1.Factory();
            var t2d = new SharpDX.Direct3D10.Texture2D(dv, new Texture2DDescription()
            {
                Height = 100, Width = 100, MipLevels = 1, Format = SharpDX.DXGI.Format.B8G8R8A8_UNorm
            });
            var rt = new RenderTarget(df, t2d.QueryInterface <SharpDX.DXGI.Surface1>(), new RenderTargetProperties(new SharpDX.Direct2D1.PixelFormat(SharpDX.DXGI.Format.B8G8R8A8_UNorm, AlphaMode.Premultiplied)));

            return(new GetSDXContext(new Renderers.SharpDX.SharpDX_RenderElements(rt)));
        }
Esempio n. 11
0
        //*******************************************************//
        //                      METHODS                          //
        //*******************************************************//
        public void Initialize(Device1 device, RenderTargetView renderTarget, DX10RenderCanvas canvasControl)
        {
            _Device = device;

            _RenderTargetView = renderTarget;
            _RenderControl = canvasControl;
            _Camera = new Camera();
            _Gizmo = new Gizmo(_Device);
            
            GameObjectManager.Instance().Initialize(device);
            InputManager.Initialize();

        }
        public void Initialize(Device1 device)
        {
            //Load Effect
            var shaderSource = File.ReadAllText("Resources\\PosColNorm3D.fx");
            var shaderByteCode = ShaderBytecode.Compile(shaderSource, "fx_4_0", ShaderFlags.None, EffectFlags.None);
            Effect = new Effect(device, shaderByteCode);
            Technique = Effect.GetTechniqueByIndex(0);

            //InputLayout
            var pass = Technique.GetPassByIndex(0);
            InputLayout = new InputLayout(device, pass.Description.Signature, InputLayouts.PosNormCol);

            _IsInitialized = true;
        }
        public void SetTexture(string path, Device1 device)
        {
            //Texture2D r = Resource.FromFile<Texture2D>(device, path);
            Texture2D fileTexture;

            fileTexture = Texture2D.FromFile <Texture2D>(device, path);



            ShaderResourceView srv = new ShaderResourceView1(device, fileTexture);

            //fileTexture.FilterTexture();

            Effect?.GetVariableByName("gDiffuseMap").AsShaderResource().SetResource(srv);
        }
Esempio n. 14
0
        public void Create(Device1 device)
        {
            //Set Primitive Topology
            PrimitiveTopology = PrimitiveTopology.TriangleList;

            //Set VertexStride
            VertexStride = Marshal.SizeOf(typeof(VertexPosColNorm));

            //Read file
            ParseFile(device, _path);

            //Create the bounding Sphere
            BoundingSphere = BoundingSphere.FromPoints(VertexList.ToArray());

        }
Esempio n. 15
0
        /// <summary>
        /// Borrows a D3D10 device. After the device has been used, it must be given back by calling <see cref="PassbackDevice(ref Device)"/>.
        /// </summary>
        /// <returns>A D3D10 device.</returns>
        public Device BorrowDevice()
        {
            Device dev;

            while (_devices.TryTake(out dev) && dev.IsDisposed)
            {
            }

            if (dev is null)
            {
                dev = new Device(DriverType.Hardware, DeviceCreationFlags.BgraSupport, FeatureLevel.Level_10_0);
            }

            return(dev);
        }
        private void Initialize()
        {
            // Create the form
            form = CreateForm();

            // SwapChain description
            var desc = new SwapChainDescription()
            {
                BufferCount     = 1,
                ModeDescription =
                    new ModeDescription((int)Config.SCREEN_WIDTH, (int)Config.SCREEN_HEIGHT,
                                        new Rational(60, 1), Format.R8G8B8A8_UNorm),
                IsWindowed        = true,
                OutputHandle      = form.Handle,
                SampleDescription = new SampleDescription(1, 0),
                SwapEffect        = SwapEffect.Discard,
                Usage             = Usage.RenderTargetOutput
            };

            //Create the device and swapchain
            try
            {
                Device1.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.BgraSupport, desc, out device, out swapChain);
            }
            catch (Exception e)
            {
                Device1.CreateWithSwapChain(DriverType.Warp, DeviceCreationFlags.BgraSupport, desc, out device, out swapChain);
                Console.WriteLine("Could not create Hardware drivertype, using Warp instead. \n" + e.ToString());
            }

            // Ignore all Windows events
            SharpDX.DXGI.Factory factory = swapChain.GetParent <SharpDX.DXGI.Factory>();
            factory.MakeWindowAssociation(form.Handle, WindowAssociationFlags.IgnoreAll);

            // New RenderTargetView from the backbuffer
            backBuffer     = Texture2D.FromSwapChain <Texture2D>(swapChain, 0);
            backBufferView = new RenderTargetView(device, backBuffer);

            // Create the rendertarget for the form
            factory2D = new SharpDX.Direct2D1.Factory();
            Surface surface = backBuffer.QueryInterface <Surface>();

            renderTarget = new RenderTarget(factory2D, surface, new RenderTargetProperties(new PixelFormat(Format.Unknown, AlphaMode.Premultiplied)));
            renderTarget.AntialiasMode = AntialiasMode.Aliased;
            // Initialize the global resources used for drawing and writing.
            Resources.Initialize(renderTarget);
            runnableComponent.InitBase();
        }
        public void Create(Device1 device)
        {
            var filepath = System.AppDomain.CurrentDomain.BaseDirectory;

            filepath += "\\Resources\\Shaders\\PosNormTex3D.fx";
            var shaderBytecode = ShaderBytecode.CompileFromFile(filepath, "fx_4_0", shaderFlags: ShaderFlags.None);

            Effect = new Effect(device, shaderBytecode);

            Technique = Effect.GetTechniqueByIndex(0);

            var pass = Technique.GetPassByIndex(0);

            // InputLayout = new InputLayout(device, pass.Description.Signature, InputLayouts.PosNormTex);
            InputLayout = new InputLayout(device, pass.Description.Signature, InputLayouts.PosNormColTex);
        }
Esempio n. 18
0
        public void Create(Device1 device)
        {
            //Set Primitive Topology
            PrimitiveTopology = PrimitiveTopology.TriangleList;

            //Set VertexStride
            VertexStride = Marshal.SizeOf(typeof(VertexPosColNorm));

            //Create VertexBuffer
            CreateVertexBuffer(device);

            //CreateIndexBuffer
            CreateIndexBuffer(device);

            //Create the bounding sphere
            BoundingSphere = BoundingSphere.FromPoints(VertexList.ToArray());
        }
        void Render(float deltaT)
        {
            if (_lastSizeChange.HasValue && _lastSizeChange.Value <= DateTime.Now)
            {
                _lastSizeChange = null;
                CreateAndBindTargets();
            }

            Device device = _device;

            if (device == null)
            {
                return;
            }

            Texture2D renderTarget = _renderTarget;

            if (renderTarget == null)
            {
                return;
            }

            int targetWidth  = renderTarget.Description.Width;
            int targetHeight = renderTarget.Description.Height;

            device.OutputMerger.SetTargets(_depthStencilView, _renderTargetView);
            device.Rasterizer.SetViewports(new Viewport(0, 0, targetWidth, targetHeight, 0.0f, 1.0f));

            device.ClearRenderTargetView(_renderTargetView, ClearColor);
            device.ClearDepthStencilView(_depthStencilView, DepthStencilClearFlags.Depth | DepthStencilClearFlags.Stencil, 1.0f, 0);

            if (Viewport != null)
            {
                if (!_sceneAttached)
                {
                    _sceneAttached = true;
                    Viewport.Initialize(_device, _renderTargetView, this);
                }

                Viewport.Update(deltaT);
                Viewport.Render(deltaT);
            }

            device.Flush();
        }
Esempio n. 20
0
        public void Initialize(Device1 device, RenderTargetView renderTarget, DX10RenderCanvas canvasControl)
        {
            Context.Camera           = new OrbitCamera(canvasControl);
            Context.Device           = device;
            Context.RenderControl    = canvasControl;
            Context.RenderTargetView = renderTarget;

            _grid = new Grid();
            _grid.Initialize(Context);

            MeshRenderer = new MeshRenderer(Context);
            MeshRenderer.Initialize();

            PhysicsDebugRenderer = new PhysicsDebugRenderer(Context);
            PhysicsDebugRenderer.Initialize();

            DebugLog.Log($"Initialized", "Viewport");
        }
Esempio n. 21
0
        private GraphicCore()
        {
            form                 = new RenderForm("");
            form.Width           = System.Windows.Forms.SystemInformation.PrimaryMonitorSize.Width;
            form.Height          = System.Windows.Forms.SystemInformation.PrimaryMonitorSize.Height;
            form.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable;
            form.ControlBox      = false;
            form.MaximizeBox     = false;
            var desc = new SwapChainDescription()
            {
                BufferCount     = 1,
                ModeDescription =
                    new ModeDescription(form.Width, form.Height, new Rational(frame_rate, 1), Format.R8G8B8A8_UNorm),
                IsWindowed        = true,
                OutputHandle      = form.Handle,
                SampleDescription = new SampleDescription(1, 0),
                SwapEffect        = SwapEffect.Discard,
                Usage             = Usage.RenderTargetOutput
            };

            Camera.width  = form.Width;
            Camera.height = form.Height;

            Device1.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.BgraSupport, desc,
                                        SharpDX.Direct3D10.FeatureLevel.Level_10_0, out device, out swapChain);

            factory2d   = new SharpDX.Direct2D1.Factory();
            factoryText = new SharpDX.DirectWrite.Factory();

            // Ignore all windows events
            factoryDX = swapChain.GetParent <SharpDX.DXGI.Factory>();
            //factoryDX.MakeWindowAssociation(form.Handle, WindowAssociationFlags.IgnoreAll);

            Texture2D backBuffer = Texture2D.FromSwapChain <Texture2D>(swapChain, 0);
            var       renderView = new RenderTargetView(device, backBuffer);

            Surface surface = backBuffer.QueryInterface <Surface>();

            this.render2d = new RenderTarget(factory2d, surface,
                                             new RenderTargetProperties(new SharpDX.Direct2D1.PixelFormat(Format.Unknown, AlphaMode.Premultiplied)));

            brush      = new SolidColorBrush(this.render2d, Color.White);
            _isRunning = true;
        }
Esempio n. 22
0
        /// <summary>
        /// Gives back a D3D10 device.
        /// </summary>
        /// <param name="device">Reference to the device to give back. After calling the function, the reference is set to null to signal that the device
        /// was given back to the device factory.</param>
        public void PassbackDevice(ref Device device)
        {
            if (device is null)
            {
                return;
            }

            // Do not dispose the device here
            // Disposing the device will set its flag to disposed,
            // but it still has Unmanaged memory allocated


            if (!device.IsDisposed)
            {
                device.ClearState();
                _devices.Add(device);
                device = null;
            }
        }
Esempio n. 23
0
        public void Initialize(Device1 device, RenderTargetView renderTarget, DX10RenderCanvas canvasControl)
        {
            _device                   = device;
            _renderTargetView         = renderTarget;
            _renderControl            = canvasControl;
            _renderControl.ClearColor = Color.CornflowerBlue;
            _renderControl.OnDrop    += OnDrop;

            //Set Shader (IEffect)
            Shader = new PosColorNormSkinnedEffect();
            Shader.Create(device);

            Camera = new BaseCamera();
            Camera = new FlyingCamera();

            if (OnLoad != null)
            {
                OnLoad();
            }
        }
Esempio n. 24
0
        public void Initialize(Device1 device, RenderTargetView renderTarget, DX10RenderCanvas canvasControl)
        {
            if (_isInitialized)
            {
                return;
            }
            _device           = device;
            _renderTargetView = renderTarget;
            _renderControl    = canvasControl;

            if (Shader == null)
            {
                LoadShader(@"./Shaders/PosColNorm3D.fx");
            }

            if (Model == null)
            {
                LoadModel(@"./Models/teapot.fbx");
            }

            _isInitialized = true;
        }
        public void Render(Device1 device)
        {
            if (!_isInitialized)
                Initialize(device);

            if (Shader != null)
            {
                if (!Shader.IsInitialized)
                    Shader.Initialize(device);

                device.InputAssembler.InputLayout = Shader.InputLayout;
                device.InputAssembler.PrimitiveTopology = PrimitiveTopology;
                device.InputAssembler.SetIndexBuffer(IndexBuffer, Format.R32_UInt, 0);
                device.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(VertexBuffer, VertexStride, 0));

                for (int i = 0; i < Shader.Technique.Description.PassCount; ++i)
                {
                    Shader.Technique.GetPassByIndex(i).Apply();
                    device.DrawIndexed(IndexCount, 0, 0);
                }
            }
        }
Esempio n. 26
0
        protected virtual void InitializeGraphicsInterface()
        {
            var desc = new SwapChainDescription()
            {
                BufferCount       = 1,
                ModeDescription   = new ModeDescription(form.Width, form.Height, new Rational(60, 1), Format.R8G8B8A8_UNorm),
                IsWindowed        = true,
                OutputHandle      = DisplayHandle,
                SampleDescription = new SampleDescription(1, 0),
                SwapEffect        = SwapEffect.Discard,
                Usage             = Usage.RenderTargetOutput
            };

            // Create device and swapchain
            Device1.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.BgraSupport, desc, FeatureLevel.Level_10_0, out device, out swapChain);

            // Ignore all windows events
            SharpDX.DXGI.Factory factory = swapChain.GetParent <SharpDX.DXGI.Factory>();
            factory.MakeWindowAssociation(DisplayHandle, WindowAssociationFlags.IgnoreAll);

            // New RenderTargetView from the backbuffer
            BackBuffer     = Texture2D.FromSwapChain <Texture2D>(swapChain, 0);
            BackBufferView = new RenderTargetView(device, BackBuffer);
        }
Esempio n. 27
0
        private void Clean()
        {
            Disposer.SafeDispose(ref hwndRenderingWindow);

            if (device != null)
            {
                device.ClearState();
                device.Dispose();
                device = null;
            }

            Disposer.SafeDispose(ref fillPass);
            Disposer.SafeDispose(ref fillEffect);

            Disposer.SafeDispose(ref vertexShader);
            Disposer.SafeDispose(ref pixelShader);

            Disposer.SafeDispose(ref vertices);
            Disposer.SafeDispose(ref indices);

            Disposer.SafeDispose(ref constants);
            Disposer.SafeDispose(ref layout);

            Disposer.SafeDispose(ref renderBuffer);
            Disposer.SafeDispose(ref renderView);
            Disposer.SafeDispose(ref swapChain);

            Disposer.SafeDispose(ref wpfImage);

            RaisePropertyChanged("WPFImage");
        }
Esempio n. 28
0
 public D2DLayered()
 {
     FPSLimit = 60;
     device   = new SharpDXLib.Direct3D10.Device1(DriverType.Hardware, DeviceCreationFlags.BgraSupport, SharpDXLib.Direct3D10.FeatureLevel.Level_10_1);
     someDC   = Win32Util.GetDC(IntPtr.Zero); // not sure what this exactly does... root dc perhaps...
 }
Esempio n. 29
0
 /// <summary>
 ///   Initializes a new instance of the <see cref = "T:SharpDX.Direct3D10.Device1" /> class along with a new <see cref = "T:SharpDX.DXGI.SwapChain" /> used for rendering.
 /// </summary>
 /// <param name = "driverType">The type of device to create.</param>
 /// <param name = "flags">A list of runtime layers to enable.</param>
 /// <param name = "swapChainDescription">Details used to create the swap chain.</param>
 /// <param name="featureLevel">Desired feature level</param>
 /// <param name = "device">When the method completes, contains the created device instance.</param>
 /// <param name = "swapChain">When the method completes, contains the created swap chain instance.</param>
 /// <returns>A <see cref = "T:SharpDX.Result" /> object describing the result of the operation.</returns>
 public static void CreateWithSwapChain(DriverType driverType, DeviceCreationFlags flags,
                                        SwapChainDescription swapChainDescription, FeatureLevel featureLevel, out Device1 device,
                                        out SwapChain swapChain)
 {
     CreateWithSwapChain(null, driverType, flags, swapChainDescription, featureLevel, out device, out swapChain);
 }
Esempio n. 30
0
        public void Render(Device1 device) 
        {
            switch (Mode)
            {
                case GizmoMode.None:
                    break;

                case GizmoMode.Translate:
                    foreach (var model in TranslationGizmo)
                    {
                        model.Render(device);
                    }
                    break;

                case GizmoMode.Rotate:
                    foreach (var model in RotationGizmo)
                    {
                        model.Render(device);
                    }
                    break;

                case GizmoMode.Scale:
                    foreach (var model in ScaleGizmo)
                    {
                        model.Render(device);
                    }
                    break;

                default:
                    break;
            }


        }
Esempio n. 31
0
        private void StartD3D()
        {
            this.Device = new Device(DriverType.Hardware, DeviceCreationFlags.BgraSupport, FeatureLevel.Level_10_0);

            this.D3DSurface = new DX10ImageSource();
            this.D3DSurface.IsFrontBufferAvailableChanged += OnIsFrontBufferAvailableChanged;

            this.CreateAndBindTargets();

            this.Source = this.D3DSurface;
            try
            {
                ShaderBytecode shaderBytes = ShaderBytecode.CompileFromFile("Shaders\\Bloom.fx", "fx_4_0", ShaderFlags.None, EffectFlags.None, null, null);
                this.BloomEffect = new Effect(Device, shaderBytes);
            }
            catch
            { }

            EffectTechnique technique = this.BloomEffect.GetTechniqueByIndex(0);
            EffectPass      pass      = technique.GetPassByIndex(0);

            this.VertexLayout = new InputLayout(Device, pass.Description.Signature, new[] {
                new InputElement("POSITION", 0, Format.R32G32B32A32_Float, 0, 0),
                new InputElement("TEXCOORD", 0, Format.R32G32_Float, 16, 0)
            });

            DataStream vertices = new DataStream(4 * 6 * 4, true, true);

            vertices.Write(new Vector4(-1.0f, 1.0f, 0.0f, 1.0f));
            vertices.Write(new Vector2(0.0f, 0.0f));
            vertices.Write(new Vector4(1.0f, 1.0f, 0.0f, 1.0f));
            vertices.Write(new Vector2(1.0f, 0.0f));
            vertices.Write(new Vector4(-1.0f, -1.0f, 0.0f, 1.0f));
            vertices.Write(new Vector2(0.0f, 1.0f));
            vertices.Write(new Vector4(1.0f, -1.0f, 0.0f, 1.0f));
            vertices.Write(new Vector2(1.0f, 1.0f));
            vertices.Position = 0;

            this.QuadBuffer = new Buffer(Device, vertices, new BufferDescription()
            {
                BindFlags      = BindFlags.VertexBuffer,
                CpuAccessFlags = CpuAccessFlags.None,
                OptionFlags    = ResourceOptionFlags.None,
                SizeInBytes    = 4 * 6 * 4,
                Usage          = ResourceUsage.Default
            });

            vertices = new DataStream(4 * 6 * 4, true, true);
            vertices.Write(new Vector4(-1.0f, 1.0f, 0.0f, 1.0f));
            vertices.Write(new Vector2(0.0f, 0.0f));

            vertices.Write(new Vector4(1.0f, 1.0f, 0.0f, 1.0f));
            vertices.Write(new Vector2(2.0f, 0.0f));

            vertices.Write(new Vector4(-1.0f, -1.0f, 0.0f, 1.0f));
            vertices.Write(new Vector2(0.0f, 2.0f));

            vertices.Write(new Vector4(1.0f, -1.0f, 0.0f, 1.0f));
            vertices.Write(new Vector2(2.0f, 2.0f));
            vertices.Position = 0;

            this.HalfQuadBuffer = new Buffer(Device, vertices, new BufferDescription()
            {
                BindFlags      = BindFlags.VertexBuffer,
                CpuAccessFlags = CpuAccessFlags.None,
                OptionFlags    = ResourceOptionFlags.None,
                SizeInBytes    = 4 * 6 * 4,
                Usage          = ResourceUsage.Default
            });
        }
Esempio n. 32
0
 /// <summary>
 ///   Initializes a new instance of the <see cref = "T:SharpDX.Direct3D10.Device1" /> class along with a new <see cref = "T:SharpDX.DXGI.SwapChain" /> used for rendering.
 /// </summary>
 /// <param name = "adapter">The video adapter on which the device should be created.</param>
 /// <param name = "flags">A list of runtime layers to enable.</param>
 /// <param name = "swapChainDescription">Details used to create the swap chain.</param>
 /// <param name="featureLevel">Desired feature level</param>
 /// <param name = "device">When the method completes, contains the created device instance.</param>
 /// <param name = "swapChain">When the method completes, contains the created swap chain instance.</param>
 /// <returns>A <see cref = "T:SharpDX.Result" /> object describing the result of the operation.</returns>
 public static void CreateWithSwapChain(Adapter adapter, DeviceCreationFlags flags,
                                        SwapChainDescription swapChainDescription, FeatureLevel featureLevel, out Device1 device,
                                        out SwapChain swapChain)
 {
     CreateWithSwapChain(adapter, DriverType.Hardware, flags, swapChainDescription, featureLevel, out device, out swapChain);
 }
Esempio n. 33
0
 /// <summary>
 ///   Creates a <see cref = "T:SharpDX.Direct3D10.ShaderResourceView1" /> for accessing resource data.
 /// </summary>
 /// <param name = "device">The device to use when creating this <see cref = "T:SharpDX.Direct3D10.ShaderResourceView" />.</param>
 /// <param name = "resource">The resource that represents the render-target surface. This surface must have been created with the <see cref = "T:SharpDX.Direct3D10.BindFlags">ShaderResource</see> flag.</param>
 /// <unmanaged>ID3D10Device1::CreateShaderResourceView1</unmanaged>
 public ShaderResourceView1(Device1 device, Resource resource)
     : base(IntPtr.Zero)
 {
     device.CreateShaderResourceView1(resource, null, this);
 }
        private void ParseFile(Device1 device, string path)
        {
            var verts = new List<VertexPosColNorm>();
            IndexList = new List<uint>();

            uint vertCount = 0;

            using (BinaryReader reader = new BinaryReader(File.Open(path, FileMode.Open)))
            {
                int versionMaj = reader.ReadByte();
                int versionMin = reader.ReadByte();

                for (; ; )
                {
                    // block stuff
                    int blockId = reader.ReadByte();
                    if (blockId == 0)
                        break;
                    uint blockLength = reader.ReadUInt32();

                    if (blockId == 1)
                    {
                        //general
                        reader.ReadString();
                        vertCount = reader.ReadUInt32();
                        IndexCount = (int)reader.ReadUInt32();
                    }
                    else if (blockId == 2)
                    {
                        //positions
                        for (int i = 0; i < vertCount; i++)
                        {
                            float x = reader.ReadSingle();
                            float y = reader.ReadSingle();
                            float z = reader.ReadSingle();
                            verts.Add(new VertexPosColNorm(new Vector3(x, y, z) , Color.Gray, Vector3.Zero));
                        }
                    }
                    else if (blockId == 3)
                    {
                        //indices
                        for (int i = 0; i < IndexCount; i++)
                        {
                            IndexList.Add(reader.ReadUInt32());
                        }
                    }
                    else if (blockId == 4)
                    {
                        //normals
                        for (int i = 0; i < vertCount; i++)
                        {
                            float x = reader.ReadSingle();
                            float y = reader.ReadSingle();
                            float z = reader.ReadSingle();

                            var copy = verts[i];
                            verts[i] = new VertexPosColNorm(copy.Position, Color.Gray, new Vector3(x, y, z));
                        }
                    }
                    else if (blockId == 7)
                    {
                        //colors
                        for (int i = 0; i < vertCount; i++)
                        {
                            float r = reader.ReadSingle();
                            float g = reader.ReadSingle();
                            float b = reader.ReadSingle();
                            float a = reader.ReadSingle();

                            var copy = verts[i];
                            verts[i] = new VertexPosColNorm(copy.Position, new Color(r, g, b, a), copy.Normal);
                        }
                    }
                    else
                    {
                        reader.ReadBytes((int)blockLength);
                    }
                }
            }

            //CREATE vertex buffer
            if (VertexBuffer != null)
                VertexBuffer.Dispose();

            var vertBufferDescription = new BufferDescription
            {
                BindFlags = BindFlags.VertexBuffer,
                CpuAccessFlags = CpuAccessFlags.None,
                OptionFlags = ResourceOptionFlags.None,
                Usage = ResourceUsage.Immutable,
                SizeInBytes = VertexStride * verts.Count
            };

            VertexBuffer = new Buffer(device, DataStream.Create(verts.ToArray(), false, false), vertBufferDescription);


            //CREATE index buffer
            if (IndexBuffer != null)
                IndexBuffer.Dispose();

            var intBufferDescription = new BufferDescription
            {
                BindFlags = BindFlags.IndexBuffer,
                CpuAccessFlags = CpuAccessFlags.None,
                OptionFlags = ResourceOptionFlags.None,
                Usage = ResourceUsage.Immutable,
                SizeInBytes = sizeof(uint) * IndexCount
            };

            IndexBuffer = new Buffer(device, DataStream.Create(IndexList.ToArray(), false, false), intBufferDescription);

            VertexList = new List<Vector3>();
            foreach (var vertex in verts)
            {
                VertexList.Add(vertex.Position);
            }
        }
        private void RenderSelectedGameObject(GameObject selectedObject,Camera camera,Device1 device) 
        {
            //Render the selected object
            if (selectedObject != null && SelectedShader != null)
            {
                if (!SelectedShader.IsInitialized)
                    SelectedShader.Initialize(device);

                SelectedShader.SetWorld(SelectedObject.Transform.World);
                SelectedShader.SetWorldViewProjection(selectedObject.Transform.World * camera.ViewMatrix * camera.ProjectionMatrix);

                ModelComponent modelComponent = selectedObject.GetComponent<ModelComponent>();
                if (modelComponent != null)
                {
                    device.InputAssembler.InputLayout = SelectedShader.InputLayout;
                    device.InputAssembler.PrimitiveTopology = modelComponent.PrimitiveTopology;
                    device.InputAssembler.SetIndexBuffer(modelComponent.IndexBuffer, Format.R32_UInt, 0);
                    device.InputAssembler.SetVertexBuffers(0,
                    new VertexBufferBinding(modelComponent.VertexBuffer, modelComponent.VertexStride, 0));

                    for (int i = 0; i < SelectedShader.Technique.Description.PassCount; ++i)
                    {
                        SelectedShader.Technique.GetPassByIndex(i).Apply();
                        device.DrawIndexed(modelComponent.IndexCount, 0, 0);
                    }
                }

                foreach (var child in selectedObject.Children)
                {
                    RenderSelectedGameObject(child, camera, device);
                }

            }
        }
Esempio n. 36
0
 /// <summary>
 ///   Constructs a new <see cref = "T:SharpDX.Direct3D10.BlendState1" /> based on the specified description.
 /// </summary>
 /// <param name = "device">The device with which to associate the state object.</param>
 /// <param name = "description">The state description.</param>
 /// <returns>The newly created object.</returns>
 public BlendState1(Device1 device, ref BlendStateDescription1 description)
     : base(IntPtr.Zero)
 {
     device.CreateBlendState1(ref description, this);
 }
        private SharpDX.Direct3D10.Device1 TryCreateDevice1(SharpDX.Direct3D10.DriverType type)
        {
            // We'll try to create the device that supports any of these feature levels
            SharpDX.Direct3D10.FeatureLevel[] levels =
            {
                SharpDX.Direct3D10.FeatureLevel.Level_10_1,
                SharpDX.Direct3D10.FeatureLevel.Level_10_0,
                SharpDX.Direct3D10.FeatureLevel.Level_9_3,
                SharpDX.Direct3D10.FeatureLevel.Level_9_2,
                SharpDX.Direct3D10.FeatureLevel.Level_9_1
            };

            foreach (var level in levels)
            {
                try
                {
                    //var device = new SharpDX.Direct3D10.Device1(factoryDXGI.GetAdapter(0), DeviceCreationFlags.BgraSupport, level);
                    var device = new SharpDX.Direct3D10.Device1(type, DeviceCreationFlags.BgraSupport, level);
                    return device;
                }
                catch (ArgumentException) // E_INVALIDARG
                {
                    continue; // Try the next feature level
                }
                catch (OutOfMemoryException) // E_OUTOFMEMORY
                {
                    continue; // Try the next feature level
                }
                catch (Exception) // SharpDX.Direct3D10.Direct3D10Exception D3DERR_INVALIDCALL or E_FAIL
                {
                    continue; // Try the next feature level
                }
            }
            return null; // We failed to create a device at any required feature level
        }
 /// <summary>
 /// Constructor is private, because this is a singleton class:
 /// client controls should use the public AddRef method instead.
 /// </summary>
 SharpDXGraphicsDeviceService10()
 {
     // We need a a D3D9 device.
     sharpDXGraphicsDeviceService9 = SharpDXGraphicsDeviceService9.RefToNew(0, 0);
     
     factoryDXGI = new Factory();
     factory2D = new SharpDX.Direct2D1.Factory();
     // Try to create a hardware device first and fall back to a
     // software (WARP doesn't let us share resources)
     var device1 = TryCreateDevice1(SharpDX.Direct3D10.DriverType.Hardware);
     if (device1 == null)
     {
         device1 = TryCreateDevice1(SharpDX.Direct3D10.DriverType.Software);
         if (device1 == null)
         {
             throw new Exception("Unable to create a DirectX 10 device.");
         }
     }
     // Ratserizer not needed for Direct2D (retain for if mixing D2D and D3D).
     //RasterizerStateDescription rastDesc = new RasterizerStateDescription();
     //rastDesc.CullMode = CullMode.Back;
     //rastDesc.FillMode = FillMode.Solid;
     //rastDesc.IsMultisampleEnabled = false;
     //rastDesc.IsAntialiasedLineEnabled = false;
     //device1.Rasterizer.State = new RasterizerState(device1, rastDesc);
     this.device = device1;
 }
Esempio n. 39
0
 /// <summary>
 ///   Initializes a new instance of the <see cref = "T:SharpDX.Direct3D10.Device1" /> class along with a new <see cref = "T:SharpDX.DXGI.SwapChain" /> used for rendering.
 /// </summary>
 /// <param name = "adapter">The video adapter on which the device should be created.</param>
 /// <param name = "flags">A list of runtime layers to enable.</param>
 /// <param name = "swapChainDescription">Details used to create the swap chain.</param>
 /// <param name="featureLevel">Desired feature level</param>
 /// <param name = "device">When the method completes, contains the created device instance.</param>
 /// <param name = "swapChain">When the method completes, contains the created swap chain instance.</param>
 /// <returns>A <see cref = "T:SharpDX.Result" /> object describing the result of the operation.</returns>
 public static void CreateWithSwapChain(Adapter adapter, DeviceCreationFlags flags,
                                          SwapChainDescription swapChainDescription, FeatureLevel featureLevel,out Device1 device,
                                          out SwapChain swapChain)
 {
     CreateWithSwapChain(adapter, DriverType.Hardware, flags, swapChainDescription, featureLevel, out device, out swapChain);
 }
Esempio n. 40
0
 /// <summary>
 ///   Initializes a new instance of the <see cref = "T:SharpDX.Direct3D10.Device1" /> class along with a new <see cref = "T:SharpDX.DXGI.SwapChain" /> used for rendering.
 /// </summary>
 /// <param name = "driverType">The type of device to create.</param>
 /// <param name = "flags">A list of runtime layers to enable.</param>
 /// <param name = "swapChainDescription">Details used to create the swap chain.</param>
 /// <param name="featureLevel">Desired feature level</param>
 /// <param name = "device">When the method completes, contains the created device instance.</param>
 /// <param name = "swapChain">When the method completes, contains the created swap chain instance.</param>
 /// <returns>A <see cref = "T:SharpDX.Result" /> object describing the result of the operation.</returns>
 public static void CreateWithSwapChain(DriverType driverType, DeviceCreationFlags flags,
                                          SwapChainDescription swapChainDescription, FeatureLevel featureLevel, out Device1 device,
                                          out SwapChain swapChain)
 {
     CreateWithSwapChain(null, driverType, flags, swapChainDescription, featureLevel, out device, out swapChain);
 }
Esempio n. 41
0
        private void CreateVertexBuffer(Device1 device)
        {
            var verts = new List<VertexPosColNorm>();

            Color col = Color.Red;
            Vector3 norm = new Vector3(0, 0, -1);
            //FRONT RED
            verts.Add(new VertexPosColNorm(new Vector3(-0.5f, -0.5f, -0.5f), col, norm));
            verts.Add(new VertexPosColNorm(new Vector3(-0.5f, 0.5f, -0.5f), col, norm));
            verts.Add(new VertexPosColNorm(new Vector3(0.5f, -0.5f, -0.5f), col, norm));
            verts.Add(new VertexPosColNorm(new Vector3(0.5f, 0.5f, -0.5f), col, norm));

            //BACK RED
            norm = new Vector3(0, 0, 1);
            verts.Add(new VertexPosColNorm(new Vector3(-0.5f, -0.5f, 0.5f), col, norm));
            verts.Add(new VertexPosColNorm(new Vector3(-0.5f, 0.5f, 0.5f), col, norm));
            verts.Add(new VertexPosColNorm(new Vector3(0.5f, -0.5f, 0.5f), col, norm));
            verts.Add(new VertexPosColNorm(new Vector3(0.5f, 0.5f, 0.5f), col, norm));

            //LEFT GREEN
            col = Color.Green;
            norm = new Vector3(-1, 0, 0);
            verts.Add(new VertexPosColNorm(new Vector3(-0.5f, -0.5f, -0.5f), col, norm));
            verts.Add(new VertexPosColNorm(new Vector3(-0.5f, 0.5f, -0.5f), col, norm));
            verts.Add(new VertexPosColNorm(new Vector3(-0.5f, -0.5f, 0.5f), col, norm));
            verts.Add(new VertexPosColNorm(new Vector3(-0.5f, 0.5f, 0.5f), col, norm));

            //RIGHT GREEN
            norm = new Vector3(1, 0, 0);
            verts.Add(new VertexPosColNorm(new Vector3(0.5f, -0.5f, -0.5f), col, norm));
            verts.Add(new VertexPosColNorm(new Vector3(0.5f, 0.5f, -0.5f), col, norm));
            verts.Add(new VertexPosColNorm(new Vector3(0.5f, -0.5f, 0.5f), col, norm));
            verts.Add(new VertexPosColNorm(new Vector3(0.5f, 0.5f, 0.5f), col, norm));

            //TOP BLUE
            col = Color.Blue;
            norm = new Vector3(0, 1, 0);
            verts.Add(new VertexPosColNorm(new Vector3(-0.5f, 0.5f, 0.5f), col, norm));
            verts.Add(new VertexPosColNorm(new Vector3(-0.5f, 0.5f, -0.5f), col, norm));
            verts.Add(new VertexPosColNorm(new Vector3(0.5f, 0.5f, 0.5f), col, norm));
            verts.Add(new VertexPosColNorm(new Vector3(0.5f, 0.5f, -0.5f), col, norm));

            //BOTTOM BLUE
            norm = new Vector3(0, -1, 0);
            verts.Add(new VertexPosColNorm(new Vector3(-0.5f, -0.5f, 0.5f), col, norm));
            verts.Add(new VertexPosColNorm(new Vector3(-0.5f, -0.5f, -0.5f), col, norm));
            verts.Add(new VertexPosColNorm(new Vector3(0.5f, -0.5f, 0.5f), col, norm));
            verts.Add(new VertexPosColNorm(new Vector3(0.5f, -0.5f, -0.5f), col, norm));

            //CREATE BUFFER
            if (VertexBuffer != null)
                VertexBuffer.Dispose();

            var bufferDescription = new BufferDescription
            {
                BindFlags = BindFlags.VertexBuffer,
                CpuAccessFlags = CpuAccessFlags.None,
                OptionFlags = ResourceOptionFlags.None,
                Usage = ResourceUsage.Immutable,
                SizeInBytes = VertexStride * verts.Count
            };

            VertexBuffer = new Buffer(device, DataStream.Create(verts.ToArray(), false, false), bufferDescription);
           
            VertexList = new List<Vector3>();
            foreach (var vertex in verts)
            {
                VertexList.Add(vertex.Position);
            }

        }
Esempio n. 42
0
 public void GraphicsInit()
 {
     D2DDevice = new Device1(mDevice.Adapter, DeviceCreationFlags.BgraSupport,
                             SharpDX.Direct3D10.FeatureLevel.Level_9_3);
 }
Esempio n. 43
0
        /// <summary>
        /// A Game powered by SharpDX
        /// </summary>
        /// <param name="Width">The width of the window</param>
        /// <param name="Height">The height of the window</param>
        static public void Initialize(SharpDX_Engine.Utitities.Size Size)
        {
            GC.Collect();

            form = new RenderForm();
            form.StartPosition   = FormStartPosition.CenterScreen;
            form.ClientSize      = new System.Drawing.Size((int)Size.width, (int)Size.height);
            form.MaximizeBox     = false;
            form.FormBorderStyle = FormBorderStyle.FixedSingle;
            form.FormClosed     += form_FormClosed;

            // SwapChain description
            SwapChainDescription 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
            };

            // Create Device and SwapChain
            Device1.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.BgraSupport, desc, FeatureLevel.Level_10_0, out device, out swapChain);

            var d2dFactory = new SharpDX.Direct2D1.Factory();

            // Ignore all windows events
            Factory factory = swapChain.GetParent <Factory>();

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

            // New RenderTargetView from the backbuffer
            Texture2D        backBuffer = Texture2D.FromSwapChain <Texture2D>(swapChain, 0);
            RenderTargetView renderView = new RenderTargetView(device, backBuffer);

            Surface surface = backBuffer.QueryInterface <Surface>();

            RenderTarget d2dRenderTarget = new RenderTarget(d2dFactory, surface,
                                                            new RenderTargetProperties(new SharpDX.Direct2D1.PixelFormat(Format.Unknown, AlphaMode.Premultiplied)));

            form.SizeChanged += form_SizeChanged;
            form.GotFocus    += form_GotFocus;
            form.LostFocus   += form_LostFocus;
            form.Move        += form_Move;
            WindowPosition    = new Coordinate(
                form.Location.X + SystemInformation.FixedFrameBorderSize.Width + SystemInformation.DragSize.Width,
                form.Location.Y + SystemInformation.FixedFrameBorderSize.Height + SystemInformation.CaptionHeight + SystemInformation.DragSize.Height
                );
            TextureManager = new TextureManager(d2dRenderTarget);
            //x swapChain.IsFullScreen = true;
            Game.Size = Size;
            Renderer  = new Renderer(d2dRenderTarget);
            Input     = new InputManager();
            Sound     = new Sound.Sound();

            Stopwatch = new Stopwatch();
            Stopwatch.Start();

            Scene = new DummyScene();

            UpdateThread = new Thread(UpdateScene);
        }
Esempio n. 44
0
 public void GraphicsInit()
 {
     D2DDevice = new Device1(mDevice.Adapter, DeviceCreationFlags.BgraSupport,
         SharpDX.Direct3D10.FeatureLevel.Level_10_1);
 }
Esempio n. 45
0
 /// <summary>
 ///   Creates a <see cref = "T:SharpDX.Direct3D10.ShaderResourceView1" /> for accessing resource data.
 /// </summary>
 /// <param name = "device">The device to use when creating this <see cref = "T:SharpDX.Direct3D10.ShaderResourceView" />.</param>
 /// <param name = "resource">The resource that represents the render-target surface. This surface must have been created with the <see cref = "T:SharpDX.Direct3D10.BindFlags">ShaderResource</see> flag.</param>
 /// <unmanaged>ID3D10Device1::CreateShaderResourceView1</unmanaged>
 public ShaderResourceView1(Device1 device, Resource resource)
     : base(IntPtr.Zero)
 {
     device.CreateShaderResourceView1(resource, null, this);
 }
Esempio n. 46
0
 /// <summary>
 ///   Creates a <see cref = "T:SharpDX.Direct3D10.ShaderResourceView1" /> for accessing resource data.
 /// </summary>
 /// <param name = "device">The device to use when creating this <see cref = "T:SharpDX.Direct3D10.ShaderResourceView1" />.</param>
 /// <param name = "resource">The resource that represents the render-target surface. This surface must have been created with the <see cref = "T:SharpDX.Direct3D10.BindFlags">ShaderResource</see> flag.</param>
 /// <param name = "description">A structure describing the <see cref = "T:SharpDX.Direct3D10.ShaderResourceView1" /> to be created.</param>
 /// <unmanaged>ID3D10Device1::CreateShaderResourceView1</unmanaged>
 public ShaderResourceView1(Device1 device, Resource resource, ShaderResourceViewDescription1 description)
     : base(IntPtr.Zero)
 {
     device.CreateShaderResourceView1(resource, description, this);
 }        
 public void Render(Device1 device)
 {
     //Noting to draw
 }
Esempio n. 48
0
 /// <summary>
 ///   This overload has been deprecated. Use one of the alternatives that does not take both an adapter and a driver type.
 /// </summary>
 internal static void CreateWithSwapChain(Adapter adapter, DriverType driverType, DeviceCreationFlags flags, SwapChainDescription swapChainDescription, FeatureLevel featureLevel, out Device1 device, out SwapChain swapChain)
 {
     D3D10.CreateDeviceAndSwapChain1(adapter, driverType, IntPtr.Zero, flags, featureLevel, D3D10.SdkVersion1,
                                     ref swapChainDescription, out swapChain, out device);
 }
        public void Render(Device1 device,Camera camera)
        {
            if (!IsInitialized) return;

            foreach (var obj in ObjectList)
            {
                obj.Render(device);
            }

            RenderSelectedGameObject(SelectedObject,camera,device);
        }
Esempio n. 50
0
        private static void Main()
        {
            var form = new RenderForm("SharpDX - MiniTri Direct2D - Direct3D 10 Sample");

            // 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
            };

            // Create Device and SwapChain
            Device1   device;
            SwapChain swapChain;

            Device1.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.Debug | DeviceCreationFlags.BgraSupport, desc, FeatureLevel.Level_10_0, out device, out swapChain);

            var d2dFactory = new SharpDX.Direct2D1.Factory();

            int width  = form.ClientSize.Width;
            int height = form.ClientSize.Height;

            var rectangleGeometry = new RoundedRectangleGeometry(d2dFactory, new RoundedRect()
            {
                RadiusX = 32, RadiusY = 32, Rect = new RectangleF(128, 128, width - 128, height - 128)
            });

            // Ignore all windows events
            Factory factory = swapChain.GetParent <Factory>();

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

            // New RenderTargetView from the backbuffer
            Texture2D backBuffer = Texture2D.FromSwapChain <Texture2D>(swapChain, 0);
            var       renderView = new RenderTargetView(device, backBuffer);

            Surface surface = backBuffer.QueryInterface <Surface>();


            var d2dRenderTarget = new RenderTarget(d2dFactory, surface,
                                                   new RenderTargetProperties(new PixelFormat(Format.Unknown, AlphaMode.Premultiplied)));

            var solidColorBrush = new SolidColorBrush(d2dRenderTarget, new Color4(1, 1, 1, 1));

            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start();

            // Main loop
            RenderLoop.Run(form, () =>
            {
                d2dRenderTarget.BeginDraw();
                d2dRenderTarget.Clear(new Color4(1.0f, 0.0f, 0.0f, 0.0f));
                solidColorBrush.Color = new Color4((float)Math.Abs(Math.Cos(stopwatch.ElapsedMilliseconds * .001)), 1, 1, 1);
                d2dRenderTarget.FillGeometry(rectangleGeometry, solidColorBrush, null);
                d2dRenderTarget.EndDraw();

                swapChain.Present(0, PresentFlags.None);
            });

            // Release all resources
            renderView.Release();
            backBuffer.Release();
            device.ClearState();
            device.Flush();
            device.Release();
            device.Release();
            swapChain.Release();
            factory.Release();
        }
Esempio n. 51
0
 public Dx10Device(Adapter adapter)
 {
     _device = new Device1(adapter, GetDeviceCreationFlags(), FeatureLevel.Level_10_0);
 }
Esempio n. 52
0
        /// <summary>
        /// Crée le Device DirectX 10 et initialise les resources
        /// </summary>
        public void Initialize(int width, int height)
        {
            if (width <= 2)
                throw new ArgumentOutOfRangeException("width");
            else if (height <= 2)
                throw new ArgumentOutOfRangeException("height");

            Width = width;
            Height = height;

            Clean();

            hwndRenderingWindow = new Form();
            hwndRenderingWindow.Width = hwndRenderingWindow.Height = 100;

            var desc = new SwapChainDescription()
            {
                BufferCount = 1,
                ModeDescription =
                    new ModeDescription(Width, Height,
                                        new Rational(60, 1), Format.R8G8B8A8_UNorm),
                IsWindowed = true,
                OutputHandle = hwndRenderingWindow.Handle,
                SampleDescription = new SampleDescription(1, 0),
                SwapEffect = SwapEffect.Discard,
                Usage = Usage.RenderTargetOutput
            };

            // Create Device and SwapChain
            //Device.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.BgraSupport, desc, out device, out swapChain);
            Factory factory = new Factory();
            var adapter = factory.GetAdapter(0);
            device = new Device(adapter, DeviceCreationFlags.BgraSupport, SharpDX.Direct3D10.FeatureLevel.Level_10_0);
            swapChain = new SwapChain(factory, device, desc);

            //device = new Device(DriverType.Hardware, DeviceCreationFlags.BgraSupport, SharpDX.Direct3D10.FeatureLevel.Level_10_0);

            Texture2DDescription colordesc = 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
            };

            renderBuffer = new Texture2D(device, colordesc);
            renderView = new RenderTargetView(device, renderBuffer);

            LoadRenderShader();

            wpfImage = new DX10ImageSource();
            wpfImage.SetRenderTargetDX10(renderBuffer);

            RaisePropertyChanged("WPFImage");
        }
Esempio n. 53
0
 public Dx10Device(Adapter adapter)
 {
     _device = new Device1(adapter, GetDeviceCreationFlags(), FeatureLevel.Level_10_0);
 }
Esempio n. 54
0
        public Gizmo(Device1 device) 
        {
            Mode = GizmoMode.None;
            SelectedAxis = -1;
            TranslationSnapValue = 1.0f;
            RotationSnapValue = 5.0f;
            ScaleSnapValue = 0.1f;
            ScaleSensitivity = 0.2f;

            _StartPosition = null;
            _StartScale = null;
            _StartRotation = null;

            // Translation Gizmo
            TranslationGizmo = new List<IModel>();
            var XArrow = new OvmModel("Resources//Arrow.ovm");
            XArrow.Create(device);
            XArrow.Shader = new ColorShader(new Color(255, 0, 0, 255));
            TranslationGizmo.Add(XArrow);

            var YArrow = new OvmModel("Resources//Arrow.ovm");
            YArrow.Create(device);
            YArrow.Shader = new ColorShader(new Color(0, 255, 0, 255));
            YArrow.Rotation.Z = 90;
            TranslationGizmo.Add(YArrow);

            var ZArrow = new OvmModel("Resources//Arrow.ovm");
            ZArrow.Create(device);
            ZArrow.Shader = new ColorShader(new Color(0, 0, 255, 255));
            ZArrow.Rotation.Y = 90;
            TranslationGizmo.Add(ZArrow);

            // Rotation Gizmo
            RotationGizmo = new List<IModel>();
            var XRotatinGizmo = new OvmModel("Resources//RotationGizmo.ovm");
            XRotatinGizmo.Create(device);
            XRotatinGizmo.Shader = new ColorShader(new Color(255, 0, 0, 255));
            RotationGizmo.Add(XRotatinGizmo);

            var YRotatinGizmo = new OvmModel("Resources//RotationGizmo.ovm");
            YRotatinGizmo.Create(device);
            YRotatinGizmo.Shader = new ColorShader(new Color(0, 255, 0, 255));
            YRotatinGizmo.Rotation.Z = 90;
            RotationGizmo.Add(YRotatinGizmo);

            var ZRotatinGizmo = new OvmModel("Resources//RotationGizmo.ovm");
            ZRotatinGizmo.Create(device);
            ZRotatinGizmo.Shader = new ColorShader(new Color(0, 0, 255, 255));
            ZRotatinGizmo.Rotation.Y = 90;
            RotationGizmo.Add(ZRotatinGizmo);

            // Scale Gizmo
            ScaleGizmo = new List<IModel>();
            var XScaleArrow = new OvmModel("Resources//ScaleArrow.ovm");
            XScaleArrow.Create(device);
            XScaleArrow.Shader = new ColorShader(new Color(255, 0, 0, 255));
            ScaleGizmo.Add(XScaleArrow);

            var YScaleArrow = new OvmModel("Resources//ScaleArrow.ovm");
            YScaleArrow.Create(device);
            YScaleArrow.Shader = new ColorShader(new Color(0, 255, 0, 255));
            YScaleArrow.Rotation.Z = 90;
            ScaleGizmo.Add(YScaleArrow);

            var ZScaleArrow = new OvmModel("Resources//ScaleArrow.ovm");
            ZScaleArrow.Create(device);
            ZScaleArrow.Shader = new ColorShader(new Color(0, 0, 255, 255));
            ZScaleArrow.Rotation.Y = 90;;
            ScaleGizmo.Add(ZScaleArrow);
        }
Esempio n. 55
0
 /// <summary>
 ///   Creates a <see cref = "T:SharpDX.Direct3D10.ShaderResourceView1" /> for accessing resource data.
 /// </summary>
 /// <param name = "device">The device to use when creating this <see cref = "T:SharpDX.Direct3D10.ShaderResourceView1" />.</param>
 /// <param name = "resource">The resource that represents the render-target surface. This surface must have been created with the <see cref = "T:SharpDX.Direct3D10.BindFlags">ShaderResource</see> flag.</param>
 /// <param name = "description">A structure describing the <see cref = "T:SharpDX.Direct3D10.ShaderResourceView1" /> to be created.</param>
 /// <unmanaged>ID3D10Device1::CreateShaderResourceView1</unmanaged>
 public ShaderResourceView1(Device1 device, Resource resource, ShaderResourceViewDescription1 description)
     : base(IntPtr.Zero)
 {
     device.CreateShaderResourceView1(resource, description, this);
 }
Esempio n. 56
0
        public override void Hook()
        {
            DebugMessage("Hook: Begin");

            // Determine method addresses in Direct3D10.Device, and DXGI.SwapChain
            if (_d3d10_1VTblAddresses == null)
            {
                _d3d10_1VTblAddresses = new List<IntPtr>();
                _dxgiSwapChainVTblAddresses = new List<IntPtr>();
                DebugMessage("Hook: Before device creation");
                using (var factory = new Factory1())
                {
                    using (
                        var device = new Device1(factory.GetAdapter(0), DeviceCreationFlags.None,
                            FeatureLevel.Level_10_1))
                    {
                        DebugMessage("Hook: Device created");
                        _d3d10_1VTblAddresses.AddRange(GetVTblAddresses(device.NativePointer,
                            D3D10_1_DEVICE_METHOD_COUNT));

                        using (var renderForm = new RenderForm())
                        {
                            using (
                                var sc = new SwapChain(factory, device,
                                    DXGI.CreateSwapChainDescription(renderForm.Handle)))
                            {
                                _dxgiSwapChainVTblAddresses.AddRange(GetVTblAddresses(sc.NativePointer,
                                    DXGI.DXGI_SWAPCHAIN_METHOD_COUNT));
                            }
                        }
                    }
                }
            }

            // We will capture the backbuffer here
            DXGISwapChain_PresentHook = new Hook<DXGISwapChain_PresentDelegate>(
                _dxgiSwapChainVTblAddresses[(int) DXGI.DXGISwapChainVTbl.Present],
                new DXGISwapChain_PresentDelegate(PresentHook),
                this);

            // We will capture target/window resizes here
            DXGISwapChain_ResizeTargetHook = new Hook<DXGISwapChain_ResizeTargetDelegate>(
                _dxgiSwapChainVTblAddresses[(int) DXGI.DXGISwapChainVTbl.ResizeTarget],
                new DXGISwapChain_ResizeTargetDelegate(ResizeTargetHook),
                this);

            /*
             * Don't forget that all hooks will start deactivated...
             * The following ensures that all threads are intercepted:
             * Note: you must do this for each hook.
             */
            DXGISwapChain_PresentHook.Activate();

            DXGISwapChain_ResizeTargetHook.Activate();

            Hooks.Add(DXGISwapChain_PresentHook);
            Hooks.Add(DXGISwapChain_ResizeTargetHook);
        }
Esempio n. 57
0
 /// <summary>
 ///   Constructs a new <see cref = "T:SharpDX.Direct3D10.BlendState1" /> based on the specified description.
 /// </summary>
 /// <param name = "device">The device with which to associate the state object.</param>
 /// <param name = "description">The state description.</param>
 /// <returns>The newly created object.</returns>
 public BlendState1(Device1 device, ref BlendStateDescription1 description)
     : base(IntPtr.Zero)
 {
     device.CreateBlendState1(ref description, this);
 }
Esempio n. 58
0
 /// <summary>
 ///   This overload has been deprecated. Use one of the alternatives that does not take both an adapter and a driver type.
 /// </summary>
 internal static void CreateWithSwapChain(Adapter adapter, DriverType driverType, DeviceCreationFlags flags, SwapChainDescription swapChainDescription, FeatureLevel featureLevel, out Device1 device, out SwapChain swapChain)
 {
     D3D10.CreateDeviceAndSwapChain1(adapter, driverType, IntPtr.Zero, flags, featureLevel, D3D10.SdkVersion1,
                                                    ref swapChainDescription, out swapChain, out device);
 }
Esempio n. 59
0
        private void CreateIndexBuffer(Device1 device)
        {
            IndexList = new List<uint>()
            {
                0, 1, 2, 2, 1, 3,
                4, 6, 5, 5, 6, 7,
                8, 10, 9, 9, 10, 11,
                12, 13, 14, 14, 13, 15,
                16, 18, 17, 17, 18, 19,
                20, 21, 22, 22, 21, 23
            };
            IndexCount = IndexList.Count;

            //CREATE BUFFER
            if (IndexBuffer != null)
                IndexBuffer.Dispose();

            var bufferDescription = new BufferDescription
            {
                BindFlags = BindFlags.IndexBuffer,
                CpuAccessFlags = CpuAccessFlags.None,
                OptionFlags = ResourceOptionFlags.None,
                Usage = ResourceUsage.Immutable,
                SizeInBytes = sizeof(uint) * IndexCount
            };

            IndexBuffer = new Buffer(device, DataStream.Create(IndexList.ToArray(), false, false), bufferDescription);
        }