/// <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 }
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); }
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); }
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); } }
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; }
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))); }
//*******************************************************// // 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); }
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()); }
/// <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); }
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(); }
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"); }
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; }
/// <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; } }
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(); } }
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); } } }
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); }
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"); }
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... }
/// <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); }
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; } }
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 }); }
/// <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); }
/// <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); } } }
/// <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> /// 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); }
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); } }
public void GraphicsInit() { D2DDevice = new Device1(mDevice.Adapter, DeviceCreationFlags.BgraSupport, SharpDX.Direct3D10.FeatureLevel.Level_9_3); }
/// <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); }
public void GraphicsInit() { D2DDevice = new Device1(mDevice.Adapter, DeviceCreationFlags.BgraSupport, SharpDX.Direct3D10.FeatureLevel.Level_10_1); }
/// <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 }
/// <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); }
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(); }
public Dx10Device(Adapter adapter) { _device = new Device1(adapter, GetDeviceCreationFlags(), FeatureLevel.Level_10_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"); }
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); }
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); }
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); }