public override void UpdateBuffers(ID3D11Device device, ID3D11DeviceContext deviceContext)
 {
     if (bIsUpdatedNeeded)
     {
         //todo: implement this!
     }
 }
Esempio n. 2
0
    public static Result D3D11On12CreateDevice(
        IUnknown d3d12Device,
        DeviceCreationFlags flags,
        FeatureLevel[] featureLevels,
        IUnknown[] commandQueues,
        int nodeMask,
        out ID3D11Device device,
        out ID3D11DeviceContext immediateContext,
        out FeatureLevel chosenFeatureLevel)
    {
        Result result = D3D11On12CreateDevice(d3d12Device,
                                              flags,
                                              featureLevels, featureLevels.Length,
                                              commandQueues, commandQueues.Length,
                                              nodeMask,
                                              out device, out immediateContext, out chosenFeatureLevel);

        if (result.Failure)
        {
            return(result);
        }

        if (immediateContext != null)
        {
            device.AddRef();
            device.ImmediateContext__ = immediateContext;
            immediateContext.Device__ = device;
        }

        return(result);
    }
Esempio n. 3
0
 public void RenderPrimitives(ID3D11Device InDevice, ID3D11DeviceContext InDeviceContext, Camera InCamera)
 {
     foreach (PrimitiveBatch Batch in Batches.Values)
     {
         Batch.RenderBatch(InDevice, InDeviceContext, InCamera);
     }
 }
Esempio n. 4
0
 public D3D11ResourceFactory(D3D11GraphicsDevice gd)
     : base(gd.Features)
 {
     _gd     = gd;
     _device = gd.Device;
     _cache  = new D3D11ResourceCache(_device);
 }
Esempio n. 5
0
    private static Result RawD3D11CreateDeviceNoContext(
        IntPtr adapterPtr,
        DriverType driverType,
        DeviceCreationFlags flags,
        FeatureLevel[] featureLevels,
        out ID3D11Device?device,
        out FeatureLevel featureLevel)
    {
        device = default;
        fixed(void *featureLevelsPtr = &featureLevels[0])
        fixed(void *featureLevelPtr = &featureLevel)
        {
            IntPtr devicePtr = IntPtr.Zero;
            Result result    = D3D11CreateDevice_(
                (void *)adapterPtr,
                (int)driverType,
                null,
                (int)flags,
                featureLevels != null && featureLevels.Length > 0 ? featureLevelsPtr : null,
                featureLevels?.Length ?? 0,
                SdkVersion,
                &devicePtr,
                featureLevelPtr,
                null);

            if (result.Success && devicePtr != IntPtr.Zero)
            {
                device = new ID3D11Device(devicePtr);
            }
            return(result);
        }
    }
Esempio n. 6
0
 public IntPtr GetPtr(ID3D11Device device)
 {
     if (!m_buffer)
     {
         var desc = new D3D11_BUFFER_DESC
         {
             ByteWidth = (uint)m_bytes.Length,
             Usage     = D3D11_USAGE._DEFAULT,
             BindFlags = (uint)m_bind,
         };
         if (MemoryMarshal.TryGetArray(m_bytes, out ArraySegment <byte> bytes))
         {
             using (var pin = PinPtr.Create(bytes))
             {
                 var data = new D3D11_SUBRESOURCE_DATA
                 {
                     pSysMem = pin.Ptr
                 };
                 device.CreateBuffer(ref desc, ref data,
                                     out m_buffer).ThrowIfFailed();
             }
         }
     }
     return(m_buffer.Ptr);
 }
Esempio n. 7
0
        public void Render(ID3D11Device device, ID3D11DeviceContext deviceContext, Camera camera)
        {
            if (bIsReady)
            {
                if (currentCell != -1)
                {
                    cells[currentCell].Render(device, deviceContext, camera);
                }


                foreach (var cell in cells)
                {
                    cell.Render(device, deviceContext, camera);
                }

                /*cellBoundingBox.Render(device, deviceContext, camera);
                 * currentCell = GetCell(camera.Position);
                 * //cells[currentCell].Render(device, deviceContext, camera);
                 * //Debug.WriteLine(cells[currentCell].BoundingBox.ToString());
                 * if (previousCell != currentCell)
                 * {
                 *  BoundingBox newBounds = cells[currentCell].BoundingBox;
                 *  newBounds.Minimum.Z = gridBounds.Minimum.Z;
                 *  newBounds.Maximum.Z = gridBounds.Maximum.Z;
                 *
                 *  cellBoundingBox.Update(newBounds);
                 *  cellBoundingBox.UpdateBuffers(device, deviceContext);
                 *  previousCell = currentCell;
                 * }
                 * boundingBox.Render(device, deviceContext, camera);
                 */
            }
        }
Esempio n. 8
0
        public static IComObject <ID3D11InputLayout> CreateInputLayout(this ID3D11Device device, D3D11_INPUT_ELEMENT_DESC[] inputElements, ID3D10Blob blob)
        {
            if (device == null)
            {
                throw new ArgumentNullException(nameof(device));
            }

            if (blob == null)
            {
                throw new ArgumentNullException(nameof(blob));
            }

            if (inputElements == null)
            {
                throw new ArgumentNullException(nameof(inputElements));
            }

            if (inputElements.Length == 0)
            {
                throw new ArgumentException(null, nameof(inputElements));
            }

            device.CreateInputLayout(inputElements, inputElements.Length, blob.GetBufferPointer(), blob.GetBufferSize(), out var layout).ThrowOnError();
            return(new ComObject <ID3D11InputLayout>(layout));
        }
Esempio n. 9
0
        public override void Render(ID3D11Device device, ID3D11DeviceContext deviceContext, Camera camera)
        {
            if (!DoRender)
            {
                return;
            }

            //if (!camera.CheckBBoxFrustum(Transform.TranslationVector, BoundingBox))
            //     return;

            VertexBufferView VertexBufferView = new VertexBufferView(vertexBuffer, Unsafe.SizeOf <VertexLayouts.NormalLayout.Vertex>(), 0);

            deviceContext.IASetVertexBuffers(0, VertexBufferView);
            deviceContext.IASetIndexBuffer(indexBuffer, Vortice.DXGI.Format.R32_UInt, 0);
            deviceContext.IASetPrimitiveTopology(PrimitiveTopology.TriangleList);
            deviceContext.PSSetShaderResource(2, AOTexture);

            for (int i = 0; i != LODs[0].ModelParts.Length; i++)
            {
                ModelPart Segment = LODs[0].ModelParts[i];
                Segment.Shader.SetShaderParameters(device, deviceContext, new MaterialParameters(Segment.Material, SelectionColour.Normalize()));
                Segment.Shader.SetSceneVariables(deviceContext, Transform, camera);
                Segment.Shader.Render(deviceContext, PrimitiveTopology.TriangleList, (int)(Segment.NumFaces * 3), Segment.StartIndex);
            }
        }
Esempio n. 10
0
 public void Initialise(ID3D11Device device, ID3D11DeviceContext deviceContext)
 {
     foreach (KeyValuePair <int, IRenderer> entry in assets)
     {
         entry.Value.InitBuffers(device, deviceContext);
     }
 }
Esempio n. 11
0
        public override void InitBuffers(ID3D11Device d3d, ID3D11DeviceContext d3dContext)
        {
            vertexBuffer = d3d.CreateBuffer(BindFlags.VertexBuffer, LODs[0].Vertices, 0, ResourceUsage.Default, CpuAccessFlags.None);
            indexBuffer  = d3d.CreateBuffer(BindFlags.IndexBuffer, LODs[0].Indices, 0, ResourceUsage.Default, CpuAccessFlags.None);

            InitTextures(d3d, d3dContext);
        }
Esempio n. 12
0
        public virtual void SetShaderParameters(ID3D11Device device, ID3D11DeviceContext deviceContext, MaterialParameters matParams)
        {
            if (!previousEditorParams.Equals(matParams.SelectionColour))
            {
                var editorParams = new EditorParameterBuffer()
                {
                    selectionColour = matParams.SelectionColour
                };

                ConstantBufferFactory.UpdatePixelBuffer(deviceContext, ConstantEditorParamsBuffer, 1, editorParams);
                previousEditorParams = editorParams.selectionColour;
            }

            //experiments with samplers; currently the toolkit doesn't not support any types.

            /*SamplerStateDescription samplerDesc = new SamplerStateDescription()
             * {
             *  Filter = Filter.Anisotropic,
             *  AddressU = (material != null) ? (TextureAddressMode)material.Samplers["S000"].SamplerStates[0] : TextureAddressMode.Wrap,
             *  AddressV = (material != null) ? (TextureAddressMode)material.Samplers["S000"].SamplerStates[1] : TextureAddressMode.Wrap,
             *  AddressW = (material != null) ? (TextureAddressMode)material.Samplers["S000"].SamplerStates[2] : TextureAddressMode.Wrap,
             *  MipLodBias = 0,
             *  MaximumAnisotropy = 16,
             *  ComparisonFunction = Comparison.Always,
             *  BorderColor = new Color4(0, 0, 0, 0),
             *  MinimumLod = 0,
             *  MaximumLod = float.MaxValue
             * };
             *
             * SamplerState = new SamplerState(device, samplerDesc);*/
        }
Esempio n. 13
0
 public BaseShader(ID3D11Device Dx11Device, ShaderInitParams InitParams)
 {
     if (!Init(Dx11Device, InitParams))
     {
         MessageBox.Show("Failed to construct shader!", "Toolkit");
     }
 }
Esempio n. 14
0
        public static IComObject <ID3D11InputLayout> CreateInputLayout(this ID3D11Device device, D3D11_INPUT_ELEMENT_DESC[] inputElements, IntPtr shaderBytecodeWithInputSignature, IntPtr bytecodeLength)
        {
            if (device == null)
            {
                throw new ArgumentNullException(nameof(device));
            }

            if (inputElements == null)
            {
                throw new ArgumentNullException(nameof(inputElements));
            }

            if (inputElements.Length == 0)
            {
                throw new ArgumentException(null, nameof(inputElements));
            }

            foreach (var element in inputElements)
            {
                if (element.SemanticName == null)
                {
                    throw new ArgumentException(null, nameof(inputElements));
                }
            }

            device.CreateInputLayout(inputElements, inputElements.Length, shaderBytecodeWithInputSignature, bytecodeLength, out var layout).ThrowOnError();
            return(new ComObject <ID3D11InputLayout>(layout));
        }
Esempio n. 15
0
 public override void InitBuffers(ID3D11Device d3d, ID3D11DeviceContext context)
 {
     if (vertices.Length != 0)
     {
         vertexBuffer = d3d.CreateBuffer(BindFlags.VertexBuffer, vertices, 0, ResourceUsage.Dynamic, CpuAccessFlags.Write);
     }
 }
Esempio n. 16
0
        public void Setup(ID3D11Device device, ID3D11DeviceContext context)
        {
            if (!m_vertexAttributes.Any())
            {
                return;
            }

            if (!m_inputLayout)
            {
                var hr = device.CreateVertexShader(m_vs_blob.GetBufferPointer(), m_vs_blob.GetBufferSize(), null, out m_vs);
                hr.ThrowIfFailed();
                hr = device.CreatePixelShader(m_ps_blob.GetBufferPointer(), m_ps_blob.GetBufferSize(), null, out m_ps);
                hr.ThrowIfFailed();

                hr = device.CreateInputLayout(ref m_layout[0], (uint)m_layout.Length,
                                              m_vs_blob.GetBufferPointer(), m_vs_blob.GetBufferSize(), out m_inputLayout);
                hr.ThrowIfFailed();
            }

            // setup shader pipeline
            Span <IntPtr> classes = stackalloc IntPtr[] { };

            context.VSSetShader(m_vs, ref MemoryMarshal.GetReference(classes), (uint)classes.Length);
            context.PSSetShader(m_ps, ref MemoryMarshal.GetReference(classes), (uint)classes.Length);
            context.IASetInputLayout(m_inputLayout);
        }
Esempio n. 17
0
    public static Result D3D11CreateDevice(IntPtr adapterPtr, DriverType driverType, DeviceCreationFlags flags, FeatureLevel[] featureLevels,
                                           out ID3D11Device device, out FeatureLevel featureLevel, out ID3D11DeviceContext immediateContext)
    {
        Result result = D3D11CreateDevice(adapterPtr, driverType, IntPtr.Zero,
                                          (int)flags,
                                          featureLevels,
                                          (featureLevels != null) ? featureLevels.Length : 0,
                                          SdkVersion,
                                          out device,
                                          out featureLevel,
                                          out immediateContext);

        if (result.Failure)
        {
            return(result);
        }

#if TEST
        if (immediateContext != null)
        {
            device.AddRef();
            device.ImmediateContext__ = immediateContext;
            immediateContext.Device__ = device;
        }
#endif

        return(result);
    }
Esempio n. 18
0
 public override void Render(ID3D11Device device, ID3D11DeviceContext deviceContext, Camera camera)
 {
     if (DoRender != false)
     {
         BBox.Render(device, deviceContext, camera);
         Path.Render(device, deviceContext, camera);
     }
 }
Esempio n. 19
0
 public void Render(ID3D11Device device, ID3D11DeviceContext deviceContext, Camera camera)
 {
     /*foreach (KeyValuePair<int, IRenderer> entry in assets)
      * {
      *  entry.Value.UpdateBuffers(device, deviceContext);
      *  entry.Value.Render(device, deviceContext, camera);
      * }*/
 }
Esempio n. 20
0
 public override void UpdateBuffers(ID3D11Device device, ID3D11DeviceContext deviceContext)
 {
     if (bIsUpdatedNeeded)
     {
         SetupShaders();
         InitTextures(device, deviceContext);
         bIsUpdatedNeeded = false;
     }
 }
Esempio n. 21
0
        public bool Init(ID3D11Device device)
        {
            // construct default shader
            ShaderInitParams DefaultInitParams = new ShaderInitParams();

            DefaultInitParams.Elements         = VertexLayouts.NormalLayout.GetLayout();
            DefaultInitParams.PixelShaderFile  = new ShaderInitParams.ShaderFileEntryPoint("LightPS.hlsl", "LightPixelShader", "ps_4_0");
            DefaultInitParams.VertexShaderFile = new ShaderInitParams.ShaderFileEntryPoint("LightVS.hlsl", "LightVertexShader", "vs_4_0");

            DefaultShader OurDefaultShader = new DefaultShader(device, DefaultInitParams);

            // construct debug shader
            ShaderInitParams DebugInitParams = new ShaderInitParams();

            DebugInitParams.Elements         = VertexLayouts.BasicLayout.GetLayout();
            DebugInitParams.PixelShaderFile  = new ShaderInitParams.ShaderFileEntryPoint("DebugPS.hlsl", "DebugPixelShader", "ps_4_0");
            DebugInitParams.VertexShaderFile = new ShaderInitParams.ShaderFileEntryPoint("DebugVS.hlsl", "DebugVertexShader", "vs_4_0");

            DebugShader OurDebugShader = new DebugShader(device, DebugInitParams);

            // construct collision shader
            ShaderInitParams CollisionInitParams = new ShaderInitParams();

            CollisionInitParams.Elements         = VertexLayouts.CollisionLayout.GetLayout();
            CollisionInitParams.PixelShaderFile  = new ShaderInitParams.ShaderFileEntryPoint("CollisionPS.hlsl", "CollisionShader", "ps_4_0");
            CollisionInitParams.VertexShaderFile = new ShaderInitParams.ShaderFileEntryPoint("CollisionVS.hlsl", "CollisionShader", "vs_4_0");

            CollisionShader OurCollisionShader = new CollisionShader(device, CollisionInitParams);

            // construct shader_601151254 shader
            ShaderInitParams Shader601151254_InitParams = new ShaderInitParams();

            Shader601151254_InitParams.Elements         = VertexLayouts.NormalLayout.GetLayout();
            Shader601151254_InitParams.PixelShaderFile  = new ShaderInitParams.ShaderFileEntryPoint("LightPS.hlsl", "PS_601151254", "ps_4_0");
            Shader601151254_InitParams.VertexShaderFile = new ShaderInitParams.ShaderFileEntryPoint("LightVS.hlsl", "LightVertexShader", "vs_4_0");

            Shader_601151254 OurShader601151254 = new Shader_601151254(device, Shader601151254_InitParams);

            // construct shader_50760736 shader
            ShaderInitParams Shader_50760736_InitParams = new ShaderInitParams();

            Shader_50760736_InitParams.Elements         = VertexLayouts.NormalLayout.GetLayout();
            Shader_50760736_InitParams.PixelShaderFile  = new ShaderInitParams.ShaderFileEntryPoint("LightPS.hlsl", "PS_50760736", "ps_4_0");
            Shader_50760736_InitParams.VertexShaderFile = new ShaderInitParams.ShaderFileEntryPoint("LightVS.hlsl", "LightVertexShader", "vs_4_0");

            Shader_50760736 OurShader50760736 = new Shader_50760736(device, Shader_50760736_InitParams);

            shaders = new Dictionary <ulong, BaseShader>();
            shaders.Add(0, OurDefaultShader);
            shaders.Add(1, OurDebugShader);
            shaders.Add(2, OurCollisionShader);
            shaders.Add(601151254, OurShader601151254);
            shaders.Add(50760736, OurShader50760736);

            return(true);
        }
Esempio n. 22
0
        public override void Render(ID3D11Device device, ID3D11DeviceContext deviceContext, Camera camera)
        {
            if (!DoRender)
            {
                return;
            }

            instance.SetTransform(Transform);
            instance.Render(device, deviceContext, camera);
        }
Esempio n. 23
0
        public static IComObject <ID3D11VertexShader> CreateVertexShader(this ID3D11Device device, IntPtr shaderBytecode, int bytecodeLength, ID3D11ClassLinkage classLinkage = null)
        {
            if (device == null)
            {
                throw new ArgumentNullException(nameof(device));
            }

            device.CreateVertexShader(shaderBytecode, (IntPtr)bytecodeLength, classLinkage, out var shader).ThrowOnError();
            return(new ComObject <ID3D11VertexShader>(shader));
        }
Esempio n. 24
0
 public override void UpdateBuffers(ID3D11Device device, ID3D11DeviceContext deviceContext)
 {
     if (vertexBuffer != null)
     {
         vertexBuffer.Dispose();
         vertexBuffer = null;
     }
     InitBuffers(device, deviceContext);
     bIsUpdatedNeeded = false;
 }
Esempio n. 25
0
        public static IComObject <ID3D11DeviceContext> GetImmediateContext(this ID3D11Device obj)
        {
            if (obj == null)
            {
                throw new ArgumentNullException(nameof(obj));
            }

            obj.GetImmediateContext(out var value);
            return(value != null ? new ComObject <ID3D11DeviceContext>(value) : null);
        }
Esempio n. 26
0
        public static IComObject <ID3D11RasterizerState> CreateRasterizerState(this ID3D11Device device, D3D11_RASTERIZER_DESC desc)
        {
            if (device == null)
            {
                throw new ArgumentNullException(nameof(device));
            }

            device.CreateRasterizerState(ref desc, out var state).ThrowOnError();
            return(new ComObject <ID3D11RasterizerState>(state));
        }
Esempio n. 27
0
 public Device(ID3D11Device device, ID3D11RenderTargetView renderTarget, ID3D11DepthStencilView depthStencilView, ID3DCompiler compiler)
 {
     _device           = device ?? throw new ArgumentNullException(nameof(device));
     _renderTarget     = renderTarget ?? throw new ArgumentNullException(nameof(renderTarget));
     _depthStencilView = depthStencilView ?? throw new ArgumentNullException(nameof(depthStencilView));
     ImmediateContext  = new DeviceContext(device.Context, false);
     BackBuffer        = new RenderTarget(renderTarget);
     DepthStencil      = new DepthStencil(depthStencilView);
     TEMPORARYCompiler = compiler;
 }
Esempio n. 28
0
        public static IComObject <ID3D11BlendState> CreateBlendState(this ID3D11Device device, D3D11_BLEND_DESC desc)
        {
            if (device == null)
            {
                throw new ArgumentNullException(nameof(device));
            }

            device.CreateBlendState(ref desc, out var state).ThrowOnError();
            return(new ComObject <ID3D11BlendState>(state));
        }
Esempio n. 29
0
        public static IComObject <ID3D11DepthStencilState> CreateDepthStencilState(this ID3D11Device device, D3D11_DEPTH_STENCIL_DESC desc)
        {
            if (device == null)
            {
                throw new ArgumentNullException(nameof(device));
            }

            device.CreateDepthStencilState(ref desc, out var state).ThrowOnError();
            return(new ComObject <ID3D11DepthStencilState>(state));
        }
Esempio n. 30
0
        public static IComObject <T> CreateTexture2D <T>(this ID3D11Device device, D3D11_TEXTURE2D_DESC desc, D3D11_SUBRESOURCE_DATA[] initialData = null) where T : ID3D11Texture2D
        {
            if (device == null)
            {
                throw new ArgumentNullException(nameof(device));
            }

            device.CreateTexture2D(ref desc, initialData, out var texture).ThrowOnError();
            return(new ComObject <T>((T)texture));
        }