Esempio n. 1
0
 protected void PreDraw(SharpDX.Direct3D.PrimitiveTopology PTolology, bool isBlending = false, RawColor4?blendFactor = null)
 {
     //Установка шейдеров
     _dx11DeviceContext.VertexShader.Set(_vertexShader);
     _dx11DeviceContext.PixelShader.Set(_pixelShader);
     //Устанавливаем самплер текстуры для шейдера
     _dx11DeviceContext.PixelShader.SetSampler(0, _samplerState);
     //Задаем тип рисуемых примитивов
     _dx11DeviceContext.InputAssembler.PrimitiveTopology = PTolology;
     //Устанавливаем макет для входных данных видеокарты. В нем указано какие данные ожидает шейдер
     _dx11DeviceContext.InputAssembler.InputLayout = _inputLayout;
     //Перенос данных буферов в видеокарту
     _dx11DeviceContext.InputAssembler.SetVertexBuffers(0, _vertexBinging);
     _dx11DeviceContext.InputAssembler.SetIndexBuffer(_indexBuffer, SharpDX.DXGI.Format.R32_UInt, 0);
     _dx11DeviceContext.VertexShader.SetConstantBuffer(0, _constantBuffer);
     //Отправляем текстуру в шейдер
     _dx11DeviceContext.PixelShader.SetShaderResource(0, _textureResourse);
     _dx11DeviceContext.Rasterizer.State = _rasterizerState;
     _dx11DeviceContext.OutputMerger.DepthStencilState = _DState;
     _dx11DeviceContext.OutputMerger.SetBlendState(null, null);
     if (isBlending)
     {
         _dx11DeviceContext.OutputMerger.SetBlendState(_blendState, blendFactor);
     }
 }
Esempio n. 2
0
 public override void Render(DeviceContext context, SharpDX.Direct3D.PrimitiveTopology type, int size, uint offset)
 {
     context.InputAssembler.InputLayout = Layout;
     context.VertexShader.Set(VertexShader);
     context.PixelShader.Set(PixelShader);
     context.DrawIndexed(size, (int)offset, 0);
 }
        // Note: no need to store RTV/DSV formats

        internal PipelineState(GraphicsDevice graphicsDevice, PipelineStateDescription pipelineStateDescription) : base(graphicsDevice)
        {
            // First time, build caches
            var pipelineStateCache = GetPipelineStateCache();

            // Effect
            this.rootSignature  = pipelineStateDescription.RootSignature;
            this.effectBytecode = pipelineStateDescription.EffectBytecode;
            CreateShaders(pipelineStateCache);
            if (rootSignature != null && effectBytecode != null)
            {
                ResourceBinder.Compile(graphicsDevice, rootSignature.EffectDescriptorSetReflection, this.effectBytecode);
            }

            // TODO: Cache over Effect|RootSignature to create binding operations

            // States
            blendState = pipelineStateCache.BlendStateCache.Instantiate(pipelineStateDescription.BlendState);

            this.sampleMask   = pipelineStateDescription.SampleMask;
            rasterizerState   = pipelineStateCache.RasterizerStateCache.Instantiate(pipelineStateDescription.RasterizerState);
            depthStencilState = pipelineStateCache.DepthStencilStateCache.Instantiate(pipelineStateDescription.DepthStencilState);

            CreateInputLayout(pipelineStateDescription.InputElements);

            primitiveTopology = (SharpDX.Direct3D.PrimitiveTopology)pipelineStateDescription.PrimitiveType;
        }
Esempio n. 4
0
        public virtual void Render(DeviceContext context, SharpDX.Direct3D.PrimitiveTopology type, int size, uint offset)
        {
            context.InputAssembler.InputLayout = Layout;

            // set shaders only if available
            if (OurVertexShader != null)
            {
                context.VertexShader.Set(OurVertexShader);
            }

            if (OurVertexShader != null)
            {
                context.PixelShader.Set(OurPixelShader);
                context.PixelShader.SetSampler(0, SamplerState);
            }

            if (OurVertexShader != null)
            {
                context.GeometryShader.Set(OurGeometryShader);
            }

            context.DrawIndexed(size, (int)offset, 0);

            Profiler.NumDrawCallsThisFrame++;
        }
Esempio n. 5
0
 public override void Render(DeviceContext deviceContext, SharpDX.Direct3D.PrimitiveTopology type, int numTriangles, uint offset)
 {
     deviceContext.InputAssembler.InputLayout = Layout;
     deviceContext.VertexShader.Set(VertexShader);
     deviceContext.PixelShader.Set(PixelShader);
     deviceContext.PixelShader.SetSampler(0, SamplerState);
     deviceContext.DrawIndexed(numTriangles, (int)offset, 0);
 }
Esempio n. 6
0
 protected void SetPrimitiveTopology(SharpDX.Direct3D.PrimitiveTopology topology)
 {
     if (CurrentPrimitiveTopology == topology)
     {
         return;
     }
     CurrentPrimitiveTopology = topology;
     GetContext.InputAssembler.PrimitiveTopology = topology;
 }
Esempio n. 7
0
            private void Create(SharpDX.Direct3D11.Device device, WorldVertex[] vertices, uint[] indices, SharpDX.Direct3D.PrimitiveTopology topology)
            {
                VertexBuffer = Buffer.Create(device, vertices, new BufferDescription(Utilities.SizeOf <WorldVertex>() * vertices.Length, BindFlags.VertexBuffer, ResourceUsage.Immutable));

                IndexBuffer = Buffer.Create(device, indices, new BufferDescription(Utilities.SizeOf <uint>() * indices.Length, BindFlags.IndexBuffer, ResourceUsage.Immutable));

                PrimitiveType = topology;
                IndexCount    = indices.Length;
            }
Esempio n. 8
0
        private void ResetManagedState()
        {
            _numVertexBindings = 0;
            Util.ClearArray(_vertexBindings);
            _vertexStrides = null;
            Util.ClearArray(_vertexOffsets);

            _framebuffer = null;

            Util.ClearArray(_viewports);
            Util.ClearArray(_scissors);
            _viewportsChanged    = false;
            _scissorRectsChanged = false;

            _ib = null;
            _graphicsPipeline  = null;
            _blendState        = null;
            _depthStencilState = null;
            _rasterizerState   = null;
            _primitiveTopology = SharpDX.Direct3D.PrimitiveTopology.Undefined;
            _inputLayout       = null;
            _vertexShader      = null;
            _geometryShader    = null;
            _hullShader        = null;
            _domainShader      = null;
            _pixelShader       = null;
            Util.ClearArray(_graphicsResourceSets);

            Util.ClearArray(_vertexBoundUniformBuffers);
            Util.ClearArray(_vertexBoundTextureViews);
            Util.ClearArray(_vertexBoundSamplers);

            Util.ClearArray(_fragmentBoundUniformBuffers);
            Util.ClearArray(_fragmentBoundTextureViews);
            Util.ClearArray(_fragmentBoundSamplers);

            _computePipeline = null;
            Util.ClearArray(_computeResourceSets);

            foreach (KeyValuePair <Texture, List <BoundTextureInfo> > kvp in _boundSRVs)
            {
                List <BoundTextureInfo> list = kvp.Value;
                list.Clear();
                PoolBoundTextureList(list);
            }
            _boundSRVs.Clear();

            foreach (KeyValuePair <Texture, List <BoundTextureInfo> > kvp in _boundUAVs)
            {
                List <BoundTextureInfo> list = kvp.Value;
                list.Clear();
                PoolBoundTextureList(list);
            }
            _boundUAVs.Clear();
        }
Esempio n. 9
0
        public void Draw(Matrix world, Matrix view, Matrix proj, SharpDX.Direct3D.PrimitiveTopology pt = SharpDX.Direct3D.PrimitiveTopology.TriangleList)
        {
            cbuffer mvp = new cbuffer(this.World * world, view, proj);

            mvp.Transpose();
            mvp.TF = tFactor;
            _dx11Context.UpdateSubresource(ref mvp, _constantBuffer);
            VM.ConstantBuffers = new[] { _constantBuffer };
            foreach (var item in subsets)
            {
                item.FillVM(ref VM);
                dr.Draw(VM, pt);
            }
        }
Esempio n. 10
0
            int GetIndex(SharpDX.Direct3D.PrimitiveTopology topology)
            {
                var i = _positions.Count;

                if (i == 0)
                {
                    _topology = topology;
                }
                else
                {
                    if (_topology != topology)
                    {
                        throw new InvalidOperationException();
                    }
                }
                return(i);
            }
Esempio n. 11
0
        public override void Render(DeviceContext deviceContext, SharpDX.Direct3D.PrimitiveTopology type, int size, uint offset)
        {
            deviceContext.InputAssembler.InputLayout = Layout;
            deviceContext.VertexShader.Set(VertexShader);
            deviceContext.PixelShader.Set(PixelShader);

            switch (type)
            {
            case SharpDX.Direct3D.PrimitiveTopology.LineList:
            case SharpDX.Direct3D.PrimitiveTopology.TriangleList:
                deviceContext.DrawIndexed(size, (int)offset, 0);
                break;

            case SharpDX.Direct3D.PrimitiveTopology.LineStrip:
                deviceContext.Draw(size, 0);
                break;

            default:
                break;
            }
        }
Esempio n. 12
0
        private void ResetManagedState()
        {
            _numVertexBindings = 0;
            Util.ClearArray(_vertexBindings);
            _vertexStrides = null;
            Util.ClearArray(_vertexOffsets);

            _fb = null;

            Util.ClearArray(_viewports);
            Util.ClearArray(_scissors);
            _viewportsChanged    = false;
            _scissorRectsChanged = false;

            _ib                = null;
            _pipeline          = null;
            _blendState        = null;
            _depthStencilState = null;
            _rasterizerState   = null;
            _primitiveTopology = SharpDX.Direct3D.PrimitiveTopology.Undefined;
            _inputLayout       = null;
            _vertexShader      = null;
            _geometryShader    = null;
            _hullShader        = null;
            _domainShader      = null;
            _pixelShader       = null;
            Util.ClearArray(_resourceSets);

            Util.ClearArray(_vertexBoundUniformBuffers);
            Util.ClearArray(_vertexBoundTextureViews);
            Util.ClearArray(_vertexBoundSamplers);

            Util.ClearArray(_fragmentBoundUniformBuffers);
            Util.ClearArray(_fragmentBoundTextureViews);
            Util.ClearArray(_fragmentBoundSamplers);
        }
Esempio n. 13
0
        public static void DrawForScreen(RenderContext11 renderContext, PositionColoredTextured[] points, int count, Texture11 texture, SharpDX.Direct3D.PrimitiveTopology primitiveType)
        {
            if (VertexBuffer == null)
            {
                VertexBuffer        = new Buffer(renderContext.Device, System.Runtime.InteropServices.Marshal.SizeOf(points[0]) * 2500, ResourceUsage.Dynamic, BindFlags.VertexBuffer, CpuAccessFlags.Write, ResourceOptionFlags.None, System.Runtime.InteropServices.Marshal.SizeOf(points[0]));
                VertexBufferBinding = new VertexBufferBinding(VertexBuffer, System.Runtime.InteropServices.Marshal.SizeOf((points[0])), 0);
            }

            renderContext.devContext.InputAssembler.PrimitiveTopology = primitiveType;
            renderContext.BlendMode = BlendMode.Alpha;
            renderContext.setRasterizerState(TriangleCullMode.Off);

            SharpDX.Matrix mat =
                SharpDX.Matrix.Translation(-renderContext.ViewPort.Width / 2, -renderContext.ViewPort.Height / 2, 0) *
                SharpDX.Matrix.Scaling(1f, -1f, 1f)
                * SharpDX.Matrix.OrthoLH(renderContext.ViewPort.Width, renderContext.ViewPort.Height, 1, -1);
            mat.Transpose();

            WarpOutputShader.MatWVP = mat;
            WarpOutputShader.Use(renderContext.devContext, texture != null);

            renderContext.SetVertexBuffer(VertexBufferBinding);

            DataBox box = renderContext.devContext.MapSubresource(VertexBuffer, 0, MapMode.WriteDiscard, MapFlags.None);

            Utilities.Write(box.DataPointer, points, 0, count);

            renderContext.devContext.UnmapSubresource(VertexBuffer, 0);
            if (texture != null)
            {
                renderContext.devContext.PixelShader.SetShaderResource(0, texture.ResourceView);
            }
            else
            {
                renderContext.devContext.PixelShader.SetShaderResource(0, null);
            }
            renderContext.devContext.Draw(count, 0);
        }
Esempio n. 14
0
 public abstract void Render(DeviceContext context, SharpDX.Direct3D.PrimitiveTopology type, int size, uint offset);
Esempio n. 15
0
        protected override void SetPipelineCore(Pipeline pipeline)
        {
            if (!pipeline.IsComputePipeline && _graphicsPipeline != pipeline)
            {
                D3D11Pipeline d3dPipeline = Util.AssertSubtype <Pipeline, D3D11Pipeline>(pipeline);
                _graphicsPipeline = d3dPipeline;
                Util.ClearArray(_graphicsResourceSets); // Invalidate resource set bindings -- they may be invalid.
                Util.ClearArray(_invalidatedGraphicsResourceSets);

                BlendState blendState = d3dPipeline.BlendState;
                if (_blendState != blendState)
                {
                    _blendState = blendState;
                    _context.OutputMerger.SetBlendState(blendState);
                }

                DepthStencilState depthStencilState = d3dPipeline.DepthStencilState;
                uint stencilReference = d3dPipeline.StencilReference;
                if (_depthStencilState != depthStencilState || _stencilReference != stencilReference)
                {
                    _depthStencilState = depthStencilState;
                    _stencilReference  = stencilReference;
                    _context.OutputMerger.SetDepthStencilState(depthStencilState, (int)stencilReference);
                }

                RasterizerState rasterizerState = d3dPipeline.RasterizerState;
                if (_rasterizerState != rasterizerState)
                {
                    _rasterizerState          = rasterizerState;
                    _context.Rasterizer.State = rasterizerState;
                }

                SharpDX.Direct3D.PrimitiveTopology primitiveTopology = d3dPipeline.PrimitiveTopology;
                if (_primitiveTopology != primitiveTopology)
                {
                    _primitiveTopology = primitiveTopology;
                    _context.InputAssembler.PrimitiveTopology = primitiveTopology;
                }

                InputLayout inputLayout = d3dPipeline.InputLayout;
                if (_inputLayout != inputLayout)
                {
                    _inputLayout = inputLayout;
                    _context.InputAssembler.InputLayout = inputLayout;
                }

                VertexShader vertexShader = d3dPipeline.VertexShader;
                if (_vertexShader != vertexShader)
                {
                    _vertexShader = vertexShader;
                    _context.VertexShader.Set(vertexShader);
                }

                GeometryShader geometryShader = d3dPipeline.GeometryShader;
                if (_geometryShader != geometryShader)
                {
                    _geometryShader = geometryShader;
                    _context.GeometryShader.Set(geometryShader);
                }

                HullShader hullShader = d3dPipeline.HullShader;
                if (_hullShader != hullShader)
                {
                    _hullShader = hullShader;
                    _context.HullShader.Set(hullShader);
                }

                DomainShader domainShader = d3dPipeline.DomainShader;
                if (_domainShader != domainShader)
                {
                    _domainShader = domainShader;
                    _context.DomainShader.Set(domainShader);
                }

                PixelShader pixelShader = d3dPipeline.PixelShader;
                if (_pixelShader != pixelShader)
                {
                    _pixelShader = pixelShader;
                    _context.PixelShader.Set(pixelShader);
                }

                _vertexStrides = d3dPipeline.VertexStrides;
                if (_vertexStrides != null)
                {
                    int vertexStridesCount = _vertexStrides.Length;
                    Util.EnsureArrayMinimumSize(ref _vertexBindings, (uint)vertexStridesCount);
                    Util.EnsureArrayMinimumSize(ref _vertexOffsets, (uint)vertexStridesCount);
                }

                Util.EnsureArrayMinimumSize(ref _graphicsResourceSets, (uint)d3dPipeline.ResourceLayouts.Length);
                Util.EnsureArrayMinimumSize(ref _invalidatedGraphicsResourceSets, (uint)d3dPipeline.ResourceLayouts.Length);
            }
            else if (pipeline.IsComputePipeline && _computePipeline != pipeline)
            {
                D3D11Pipeline d3dPipeline = Util.AssertSubtype <Pipeline, D3D11Pipeline>(pipeline);
                _computePipeline = d3dPipeline;
                Util.ClearArray(_computeResourceSets); // Invalidate resource set bindings -- they may be invalid.
                Util.ClearArray(_invalidatedComputeResourceSets);

                ComputeShader computeShader = d3dPipeline.ComputeShader;
                _context.ComputeShader.Set(computeShader);
                Util.EnsureArrayMinimumSize(ref _computeResourceSets, (uint)d3dPipeline.ResourceLayouts.Length);
                Util.EnsureArrayMinimumSize(ref _invalidatedComputeResourceSets, (uint)d3dPipeline.ResourceLayouts.Length);
            }
        }
Esempio n. 16
0
 public override void Render(DeviceContext context, SharpDX.Direct3D.PrimitiveTopology type, int size, uint offset)
 {
     base.Render(context, type, size, offset);
 }
Esempio n. 17
0
        public override void SetPipeline(Pipeline pipeline)
        {
            if (_pipeline != pipeline)
            {
                D3D11Pipeline d3dPipeline = Util.AssertSubtype <Pipeline, D3D11Pipeline>(pipeline);
                _pipeline = d3dPipeline;
                Util.ClearArray(_resourceSets); // Invalidate resource set bindings -- they may be invalid.

                BlendState blendState = d3dPipeline.BlendState;
                if (_blendState != blendState)
                {
                    _blendState = blendState;
                    _context.OutputMerger.SetBlendState(blendState);
                }

                DepthStencilState depthStencilState = d3dPipeline.DepthStencilState;
                if (_depthStencilState != depthStencilState)
                {
                    _depthStencilState = depthStencilState;
                    _context.OutputMerger.SetDepthStencilState(depthStencilState);
                }

                RasterizerState rasterizerState = d3dPipeline.RasterizerState;
                if (_rasterizerState != rasterizerState)
                {
                    _rasterizerState          = rasterizerState;
                    _context.Rasterizer.State = rasterizerState;
                }

                SharpDX.Direct3D.PrimitiveTopology primitiveTopology = d3dPipeline.PrimitiveTopology;
                if (_primitiveTopology != primitiveTopology)
                {
                    _primitiveTopology = primitiveTopology;
                    _context.InputAssembler.PrimitiveTopology = primitiveTopology;
                }

                InputLayout inputLayout = d3dPipeline.InputLayout;
                if (_inputLayout != inputLayout)
                {
                    _inputLayout = inputLayout;
                    _context.InputAssembler.InputLayout = inputLayout;
                }

                VertexShader vertexShader = d3dPipeline.VertexShader;
                if (_vertexShader != vertexShader)
                {
                    _vertexShader = vertexShader;
                    _context.VertexShader.Set(vertexShader);
                }

                GeometryShader geometryShader = d3dPipeline.GeometryShader;
                if (_geometryShader != geometryShader)
                {
                    _geometryShader = geometryShader;
                    _context.GeometryShader.Set(geometryShader);
                }

                HullShader hullShader = d3dPipeline.HullShader;
                if (_hullShader != hullShader)
                {
                    _hullShader = hullShader;
                    _context.HullShader.Set(hullShader);
                }

                DomainShader domainShader = d3dPipeline.DomainShader;
                if (_domainShader != domainShader)
                {
                    _domainShader = domainShader;
                    _context.DomainShader.Set(domainShader);
                }

                PixelShader pixelShader = d3dPipeline.PixelShader;
                if (_pixelShader != pixelShader)
                {
                    _pixelShader = pixelShader;
                    _context.PixelShader.Set(pixelShader);
                }

                _vertexStrides = d3dPipeline.VertexStrides;
                int vertexStridesCount = _vertexStrides.Length;
                Util.EnsureArraySize(ref _vertexBindings, (uint)vertexStridesCount);
                Util.EnsureArraySize(ref _vertexOffsets, (uint)vertexStridesCount);

                Util.EnsureArraySize(ref _resourceSets, (uint)d3dPipeline.ResourceLayouts.Length);
            }
        }
Esempio n. 18
0
            public Mesh(SharpDX.Direct3D11.Device device, RenderGroup rg)
            {
                WorldVertex[] vertices = new WorldVertex[rg.VertexCount];

                // Copy the vertex data into the render vertices
                for (int i = 0; i < vertices.Length; i++)
                {
                    // Color
                    if (rg.VertexBuffer.VertexComponents.HasFlag(VertexComponent.Color))
                    {
                        vertices[i].Color = new Vector4(rg.VertexBuffer.VertexData[i * rg.VertexBuffer.VertexSize + rg.VertexBuffer.ColorOffset + 2] / 255.0f,
                                                        rg.VertexBuffer.VertexData[i * rg.VertexBuffer.VertexSize + rg.VertexBuffer.ColorOffset + 1] / 255.0f,
                                                        rg.VertexBuffer.VertexData[i * rg.VertexBuffer.VertexSize + rg.VertexBuffer.ColorOffset] / 255.0f,
                                                        rg.VertexBuffer.VertexData[i * rg.VertexBuffer.VertexSize + rg.VertexBuffer.ColorOffset + 3] / 255.0f);
                    }
                    else
                    {
                        vertices[i].Color = Vector4.One;
                    }

                    // Normal
                    if (rg.VertexBuffer.VertexComponents.HasFlag(VertexComponent.Normal))
                    {
                        vertices[i].Normal = new Vector3(System.BitConverter.ToSingle(rg.VertexBuffer.VertexData, i * (int)rg.VertexBuffer.VertexSize + (int)rg.VertexBuffer.NormalOffset),
                                                         System.BitConverter.ToSingle(rg.VertexBuffer.VertexData, i * (int)rg.VertexBuffer.VertexSize + (int)rg.VertexBuffer.NormalOffset + 4),
                                                         System.BitConverter.ToSingle(rg.VertexBuffer.VertexData, i * (int)rg.VertexBuffer.VertexSize + (int)rg.VertexBuffer.NormalOffset + 8));
                    }

                    // Position
                    if (rg.VertexBuffer.VertexComponents.HasFlag(VertexComponent.Normal))
                    {
                        vertices[i].Position = new Vector3(System.BitConverter.ToSingle(rg.VertexBuffer.VertexData, i * (int)rg.VertexBuffer.VertexSize + (int)rg.VertexBuffer.PositionOffset),
                                                           System.BitConverter.ToSingle(rg.VertexBuffer.VertexData, i * (int)rg.VertexBuffer.VertexSize + (int)rg.VertexBuffer.PositionOffset + 4),
                                                           System.BitConverter.ToSingle(rg.VertexBuffer.VertexData, i * (int)rg.VertexBuffer.VertexSize + (int)rg.VertexBuffer.PositionOffset + 8));
                    }

                    // Texcoords
                    if (rg.VertexBuffer.VertexComponents.HasFlag(VertexComponent.UV))
                    {
                        vertices[i].UV0 = new Vector2(System.BitConverter.ToSingle(rg.VertexBuffer.VertexData, i * (int)rg.VertexBuffer.VertexSize + (int)rg.VertexBuffer.UVOffset),
                                                      System.BitConverter.ToSingle(rg.VertexBuffer.VertexData, i * (int)rg.VertexBuffer.VertexSize + (int)rg.VertexBuffer.UVOffset + 4));
                        if (rg.VertexBuffer.UVCount > 1)
                        {
                            vertices[i].UV1 = new Vector2(System.BitConverter.ToSingle(rg.VertexBuffer.VertexData, i * (int)rg.VertexBuffer.VertexSize + (int)rg.VertexBuffer.UVOffset + 8),
                                                          System.BitConverter.ToSingle(rg.VertexBuffer.VertexData, i * (int)rg.VertexBuffer.VertexSize + (int)rg.VertexBuffer.UVOffset + 12));
                        }
                        if (rg.VertexBuffer.UVCount > 2)
                        {
                            vertices[i].UV2 = new Vector2(System.BitConverter.ToSingle(rg.VertexBuffer.VertexData, i * (int)rg.VertexBuffer.VertexSize + (int)rg.VertexBuffer.UVOffset + 16),
                                                          System.BitConverter.ToSingle(rg.VertexBuffer.VertexData, i * (int)rg.VertexBuffer.VertexSize + (int)rg.VertexBuffer.UVOffset + 20));
                        }
                        if (rg.VertexBuffer.UVCount > 3)
                        {
                            vertices[i].UV3 = new Vector2(System.BitConverter.ToSingle(rg.VertexBuffer.VertexData, i * (int)rg.VertexBuffer.VertexSize + (int)rg.VertexBuffer.UVOffset + 24),
                                                          System.BitConverter.ToSingle(rg.VertexBuffer.VertexData, i * (int)rg.VertexBuffer.VertexSize + (int)rg.VertexBuffer.UVOffset + 28));
                        }
                    }
                }

                uint[] indices = new uint[rg.IndexBuffer.IndexCount];
                for (int i = 0; i < indices.Length; i++)
                {
                    indices[i] = System.BitConverter.ToUInt16(rg.IndexBuffer.IndexData, i * 2);
                }

                SharpDX.Direct3D.PrimitiveTopology topology = SharpDX.Direct3D.PrimitiveTopology.TriangleList;
                switch (rg.IndexBuffer.PrimitiveType)
                {
                case Drome.PrimitiveType.LineList:
                    topology = SharpDX.Direct3D.PrimitiveTopology.LineList; break;

                case Drome.PrimitiveType.LineStrip:
                    topology = SharpDX.Direct3D.PrimitiveTopology.LineStrip; break;

                case Drome.PrimitiveType.PointList:
                    topology = SharpDX.Direct3D.PrimitiveTopology.PointList; break;

                case Drome.PrimitiveType.TriangleFan:
                    throw new System.Exception();

                case Drome.PrimitiveType.TriangleList:
                    topology = SharpDX.Direct3D.PrimitiveTopology.TriangleList; break;

                case Drome.PrimitiveType.TriangleStrip:
                    topology = SharpDX.Direct3D.PrimitiveTopology.TriangleStrip; break;
                }

                Create(device, vertices, indices, topology);
            }
 protected void Draw(CB data, int indexCount, SharpDX.Direct3D.PrimitiveTopology pTopology, bool isBlend = false)
 {
     OnDraw?.Invoke(data, _indexBuffer, _constantBuffer, _vertexBinging, indexCount, pTopology, isBlend);
 }
Esempio n. 20
0
 public Mesh(SharpDX.Direct3D11.Device device, WorldVertex[] vertices, uint[] indices, SharpDX.Direct3D.PrimitiveTopology topology)
 {
     Create(device, vertices, indices, topology);
 }