public override void ConvertFromData(ConverterContext converterContext, IndexBufferBindingData data, ref IndexBufferBinding source) { Buffer buffer = null; converterContext.ConvertFromData(data.Buffer, ref buffer); source = new IndexBufferBinding(buffer, data.Is32Bit, data.Count, data.Offset); }
public DeviceResourceContext(GraphicsDevice device, VertexDeclaration declaration, int vertexCount, int indexStructSize, int indexCount) { var vertexSize = declaration.CalculateSize(); VertexCount = vertexCount; IndexCount = indexCount; // Workaround: due to graphics refactor sometimes empty emitters will try to draw 0 particles // TODO Avoid calling this method if LivingParticles == 0 { if (VertexCount <= 0) { VertexCount = 1; } if (IndexCount <= 0) { IndexCount = 1; } } var vertexBuffer = Buffer.Vertex.New(device, VertexCount * vertexSize, GraphicsResourceUsage.Dynamic).DisposeBy(this); var indexBuffer = Buffer.Index.New(device, IndexCount * indexStructSize, GraphicsResourceUsage.Dynamic).DisposeBy(this); IndexBuffer = new IndexBufferBinding(indexBuffer, indexStructSize == sizeof(int), IndexCount); VertexBuffer = new VertexBufferBinding(vertexBuffer, declaration, VertexCount, vertexSize); }
public void Build(RenderDrawContext context) { if (Mesh == null && TryGetHeightMapImageData(context.CommandList, out var data)) { Data = new GeometryBuilder(data).BuildTerrainData(Size, MaxHeight, UvScale); MeshBoundingBox = Utils.FromPoints(Data.Vertices); MeshBoundingSphere = BoundingSphere.FromBox(MeshBoundingBox); BoundingBox = new BoundingBoxExt(MeshBoundingBox); var vertexBuffer = Buffer.Vertex.New(context.GraphicsDevice, Data.Vertices, GraphicsResourceUsage.Dynamic); var indexBuffer = Buffer.Index.New(context.GraphicsDevice, Data.Indices); var vertexBufferBinding = new VertexBufferBinding(vertexBuffer, VertexPositionNormalTexture.Layout, vertexBuffer.ElementCount); var indexBufferBinding = new IndexBufferBinding(indexBuffer, true, indexBuffer.ElementCount); MeshDraw = new MeshDraw { StartLocation = 0, PrimitiveType = PrimitiveType.TriangleList, VertexBuffers = new[] { vertexBufferBinding }, IndexBuffer = indexBufferBinding, DrawCount = indexBuffer.ElementCount }; Mesh = new Mesh(MeshDraw, new ParameterCollection()); } }
public IndexedVertexBufferIndex( IndexBufferBinding indexBufferBinding, int startIndexLocation, VertexBufferBinding vertexBufferBinding, int startVertexLocation) : base(vertexBufferBinding, startVertexLocation) { _indexBufferBinding = indexBufferBinding; _offset = indexBufferBinding.Offset + (startIndexLocation * FormatHelper.SizeOfInBytes(indexBufferBinding.Format)); }
void CreateDeviceObjects() { // set up a commandlist commandList = context.CommandList; // compile de shader imShader = new EffectInstance(effectSystem.LoadEffect("ImGuiShader").WaitForResult()); imShader.UpdateEffect(device); var layout = new VertexDeclaration( VertexElement.Position <Vector2>(), VertexElement.TextureCoordinate <Vector2>(), VertexElement.Color(PixelFormat.R8G8B8A8_UNorm) ); imVertLayout = layout; // de pipeline desc var pipeline = new PipelineStateDescription() { BlendState = BlendStates.NonPremultiplied, RasterizerState = new RasterizerStateDescription() { CullMode = CullMode.None, DepthBias = 0, FillMode = FillMode.Solid, MultisampleAntiAliasLine = false, ScissorTestEnable = true, SlopeScaleDepthBias = 0, }, PrimitiveType = PrimitiveType.TriangleList, InputElements = imVertLayout.CreateInputElements(), DepthStencilState = DepthStencilStates.Default, EffectBytecode = imShader.Effect.Bytecode, RootSignature = imShader.RootSignature, Output = new RenderOutputDescription(PixelFormat.R8G8B8A8_UNorm) }; // finally set up the pipeline var pipelineState = PipelineState.New(device, ref pipeline); imPipeline = pipelineState; var is32Bits = false; var indexBuffer = Xenko.Graphics.Buffer.Index.New(device, INITIAL_INDEX_BUFFER_SIZE * sizeof(ushort), GraphicsResourceUsage.Dynamic); var indexBufferBinding = new IndexBufferBinding(indexBuffer, is32Bits, 0); indexBinding = indexBufferBinding; var vertexBuffer = Xenko.Graphics.Buffer.Vertex.New(device, INITIAL_VERTEX_BUFFER_SIZE * imVertLayout.CalculateSize(), GraphicsResourceUsage.Dynamic); var vertexBufferBinding = new VertexBufferBinding(vertexBuffer, layout, 0); vertexBinding = vertexBufferBinding; }
private VertexArrayObject(GraphicsDevice graphicsDevice, EffectInputSignature shaderSignature, IndexBufferBinding indexBufferBinding, VertexBufferBinding[] vertexBufferBindings) : base(graphicsDevice) { this.vertexBufferBindings = vertexBufferBindings; this.indexBufferBinding = indexBufferBinding; this.preferredInputSignature = shaderSignature; CreateAttributes(); }
/// <inheritdoc /> public Mesh Create(IMeshData32 <TVertex> meshData) { Contracts.Requires.That(meshData != null); MeshData.VerifyContracts(meshData); var indexBuffer = new IndexBufferBinding( Buffer.Index.New(this.GraphicsDevice, meshData.Indices32, GraphicsResourceUsage.Immutable), is32Bit: true, count: meshData.IndicesCount); return(this.CreateMesh(indexBuffer, meshData)); }
private VertexArrayObject GetOrCreateVertexArrayObjectAEN(RenderContext context) { if (vertexArrayObjectAEN == null) { var graphicsDevice = context.GraphicsDevice; var indicesAEN = IndexExtensions.GenerateIndexBufferAEN(Mesh.Draw.IndexBuffer, Mesh.Draw.VertexBuffers[0]); var indexBufferBinding = new IndexBufferBinding(Buffer.Index.New(graphicsDevice, indicesAEN), true, Mesh.Draw.IndexBuffer.Count * 12 / 3); vertexArrayObjectAEN = VertexArrayObject.New(context.GraphicsDevice, Effect.InputSignature, indexBufferBinding, Mesh.Draw.VertexBuffers); } return(vertexArrayObjectAEN); }
public void GenerateChunkData() { ChunkData PrepareChunkData() { var chunkVtxCount = 16; var chunkIdxCount = 16; var vertexBuffer = Xenko.Graphics.Buffer.New <VertexPositionNormalColor>(device, chunkVtxCount, BufferFlags.VertexBuffer, GraphicsResourceUsage.Dynamic); var indexBuffer = Xenko.Graphics.Buffer.New <ushort>(device, chunkIdxCount, BufferFlags.IndexBuffer, GraphicsResourceUsage.Dynamic); var is32Bits = false; var vertexBufferBinding = new VertexBufferBinding(vertexBuffer, VertexPositionNormalColor.Layout, chunkVtxCount); var indexBufferBinding = new IndexBufferBinding(indexBuffer, is32Bits, chunkIdxCount); var chunkData = new ChunkData() { Mesh = new Mesh() { Draw = new MeshDraw() { PrimitiveType = PrimitiveType.TriangleList, VertexBuffers = new[] { vertexBufferBinding }, IndexBuffer = indexBufferBinding, DrawCount = (6 * 6) * (Chunk.SIZE * Chunk.SIZE * Chunk.SIZE) } } }; return(chunkData); } for (int x = 0; x < world.width; ++x) { for (int y = 0; y < world.height; ++y) { for (int z = 0; z < world.depth; ++z) { var key = new Int3(x, y, z); if (chunkData.TryGetValue(key, out ChunkData data)) { GenerateChunkMesh(key, ref world[x, y, z], ref data); } else { var newData = PrepareChunkData(); chunkData[key] = newData; GenerateChunkMesh(key, ref world[x, y, z], ref newData); } } } } }
public static MeshDraw ToMeshDraw <T>(this GeometricPrimitive <T> primitive) where T : struct, IVertex { var vertexBufferBinding = new VertexBufferBinding(primitive.VertexBuffer, new T().GetLayout(), primitive.VertexBuffer.ElementCount); var indexBufferBinding = new IndexBufferBinding(primitive.IndexBuffer, primitive.IsIndex32Bits, primitive.IndexBuffer.ElementCount); var data = new MeshDraw { StartLocation = 0, PrimitiveType = PrimitiveType.TriangleList, VertexBuffers = new[] { vertexBufferBinding }, IndexBuffer = indexBufferBinding, DrawCount = primitive.IndexBuffer.ElementCount, }; return(data); }
public static MeshDraw ToMeshDraw(this MeshDraw primitive) { var vertexBufferBinding = new VertexBufferBinding(primitive.VertexBuffers[0].Buffer, new VertexPositionNormalTexture().GetLayout(), primitive.VertexBuffers[0].Count); var indexBufferBinding = new IndexBufferBinding(primitive.IndexBuffer.Buffer, primitive.IndexBuffer.Is32Bit, primitive.IndexBuffer.Buffer.ElementCount); var data = new MeshDraw { StartLocation = 0, PrimitiveType = PrimitiveType.TriangleList, VertexBuffers = new[] { vertexBufferBinding }, IndexBuffer = indexBufferBinding, DrawCount = primitive.IndexBuffer.Buffer.ElementCount, }; return(data); }
private VertexArrayObject(GraphicsDevice graphicsDevice, EffectInputSignature shaderSignature, IndexBufferBinding indexBufferBinding, VertexBufferBinding[] vertexBufferBindings) : base(graphicsDevice) { this.vertexBufferBindings = vertexBufferBindings; this.indexBufferBinding = indexBufferBinding; this.preferredInputSignature = shaderSignature; // Increase the reference count on the provided buffers -> we do not want to take the ownership foreach (VertexBufferBinding vertexBufferBinding in vertexBufferBindings) vertexBufferBinding.Buffer.AddReferenceInternal(); if (indexBufferBinding != null) indexBufferBinding.Buffer.AddReferenceInternal(); CreateAttributes(); }
private void CreateMesh() { var vbo = Xenko.Graphics.Buffer.Vertex.New( GraphicsDevice, verts, GraphicsResourceUsage.Dynamic ); var ibo = Xenko.Graphics.Buffer.Index.New( GraphicsDevice, tris, GraphicsResourceUsage.Dynamic ); _vertexBufferBinding = new VertexBufferBinding(vbo, VertexPositionNormalTexture.Layout, verts.Length); _indexBufferBinding = new IndexBufferBinding(ibo, is32Bit: true, count: tris.Length); _mesh = new Mesh() { Draw = new MeshDraw() { PrimitiveType = PrimitiveType.TriangleList, VertexBuffers = new[] { _vertexBufferBinding }, IndexBuffer = _indexBufferBinding, DrawCount = tris.Length } }; _modelComponent = new ModelComponent() { Model = new Model() { _mesh, Material } }; Entity.Add(_modelComponent); // Bounding box for culling (stops rendering the mesh when the camera isn't looking at it) _mesh.BoundingBox = MathHelpers.FromPoints(verts); _mesh.BoundingSphere = BoundingSphere.FromBox(_mesh.BoundingBox); CreateCollider(); }
private void CreateMesh() { var vbo = Xenko.Graphics.Buffer.Vertex.New( GraphicsDevice, vertices, GraphicsResourceUsage.Default ); var ibo = Xenko.Graphics.Buffer.Index.New( GraphicsDevice, indices, GraphicsResourceUsage.Default ); _vertexBufferBinding = new VertexBufferBinding(vbo, VertexPositionNormalColor.Layout, vertices.Length); _indexBufferBinding = new IndexBufferBinding(ibo, is32Bit: true, count: indices.Length); _mesh = new Mesh() { Draw = new MeshDraw() { PrimitiveType = PrimitiveType.TriangleList, VertexBuffers = new[] { _vertexBufferBinding }, IndexBuffer = _indexBufferBinding, DrawCount = indices.Length } }; _modelComponent = new ModelComponent() { Model = new Model() { _mesh, material } }; Entity.Add(_modelComponent); // Bounding box for culling _mesh.BoundingBox = Helpers.FromPoints(vertices); _mesh.BoundingSphere = BoundingSphere.FromBox(_mesh.BoundingBox); }
public void CreateVAO(GraphicsDevice device, Effect effect, VertexDeclaration declaration, int indexStructSize) { if (!dirty) { return; } dirty = false; var vertexSize = declaration.CalculateSize(); EffectInputSignature = effect.InputSignature; var indexBufferBinding = new IndexBufferBinding(IndexBuffer, indexStructSize == sizeof(int), IndexBuffer.Description.SizeInBytes / indexStructSize); var vertexBufferBinding = new VertexBufferBinding(VertexBuffer, declaration, VertexCount, vertexSize); // Creates a VAO VertexArrayObject = VertexArrayObject.New(device, effect.InputSignature, indexBufferBinding, vertexBufferBinding).DisposeBy(this); }
void CheckBuffers(ImDrawDataPtr drawData) { uint totalVBOSize = (uint)(drawData.TotalVtxCount * Unsafe.SizeOf <ImDrawVert>()); if (totalVBOSize > vertexBinding.Buffer.SizeInBytes) { var vertexBuffer = Xenko.Graphics.Buffer.Vertex.New(device, (int)(totalVBOSize * 1.5f)); vertexBinding = new VertexBufferBinding(vertexBuffer, imVertLayout, 0); } uint totalIBOSize = (uint)(drawData.TotalIdxCount * sizeof(ushort)); if (totalIBOSize > indexBinding.Buffer.SizeInBytes) { var is32Bits = false; var indexBuffer = Xenko.Graphics.Buffer.Index.New(device, (int)(totalIBOSize * 1.5f)); indexBinding = new IndexBufferBinding(indexBuffer, is32Bits, 0); } }
/// <summary> /// Gets a MeshDraw that will be prepared when needed with the given index buffer & vertex buffer. /// </summary> /// <typeparam name="T">Type of vertex buffer used</typeparam> /// <param name="indexBuffer">Array of vertex indicies</param> /// <param name="vertexBuffer">Vertex buffer</param> /// <returns></returns> public static StagedMeshDraw MakeStagedMeshDraw <T>(ref uint[] indexBuffer, ref T[] vertexBuffer, VertexDeclaration vertexBufferLayout) where T : struct { // sanity checks if (indexBuffer.Length == 0 || vertexBuffer.Length == 0) { throw new ArgumentException("Trying to make a StagedMeshDraw with empty index or vertex buffer!"); } StagedMeshDraw smd = new StagedMeshDraw(); smd.PrimitiveType = PrimitiveType.TriangleList; smd.DrawCount = indexBuffer.Length; smd.Indicies = indexBuffer; smd.Verticies = vertexBuffer; smd.performStage = (GraphicsDevice graphicsDevice, StagedMeshDraw _smd) => { lock (_smd) { if (_smd.VertexBuffers == null) { _smd._vertexBuffer = Xenko.Graphics.Buffer.Vertex.New <T>( graphicsDevice, (T[])_smd.Verticies, GraphicsResourceUsage.Default ); _smd._indexBuffer = Xenko.Graphics.Buffer.Index.New <uint>( graphicsDevice, _smd.Indicies, GraphicsResourceUsage.Default ); Created++; VertexBufferBinding[] vbb = new[] { new VertexBufferBinding(_smd._vertexBuffer, vertexBufferLayout, _smd.DrawCount) }; IndexBufferBinding ibb = new IndexBufferBinding(_smd._indexBuffer, true, _smd.DrawCount); _smd.VertexBuffers = vbb; _smd.IndexBuffer = ibb; _smd.performStage = null; } } }; return(smd); }
private VertexArrayObject(GraphicsDevice graphicsDevice, EffectInputSignature shaderSignature, IndexBufferBinding indexBufferBinding, VertexBufferBinding[] vertexBufferBindings) : base(graphicsDevice) { this.vertexBufferBindings = vertexBufferBindings; this.indexBufferBinding = indexBufferBinding; this.EffectInputSignature = shaderSignature; // Calculate Direct3D11 InputElement int inputElementCount = vertexBufferBindings.Sum(t => t.Declaration.VertexElements.Length); var inputElements = new InputElement[inputElementCount]; int j = 0; for (int i = 0; i < vertexBufferBindings.Length; i++) { var declaration = vertexBufferBindings[i].Declaration; vertexBufferBindings[i].Buffer.AddReferenceInternal(); foreach (var vertexElementWithOffset in declaration.EnumerateWithOffsets()) { var vertexElement = vertexElementWithOffset.VertexElement; inputElements[j++] = new InputElement { Slot = i, SemanticName = vertexElement.SemanticName, SemanticIndex = vertexElement.SemanticIndex, AlignedByteOffset = vertexElementWithOffset.Offset, Format = (SharpDX.DXGI.Format)vertexElement.Format, }; } } Layout = VertexArrayLayout.GetOrCreateLayout(new VertexArrayLayout(inputElements)); if (indexBufferBinding != null) { indexBufferBinding.Buffer.AddReferenceInternal(); indexBufferOffset = indexBufferBinding.Offset; indexFormat = (indexBufferBinding.Is32Bit ? SharpDX.DXGI.Format.R32_UInt : SharpDX.DXGI.Format.R16_UInt); } CreateResources(); }
/// <summary> /// Determines whether the specified index buffer binding data is simple. /// A index buffer binding data is simple if: /// * Offset is 0. /// * Is32Bit is true. /// * Buffer.Content.Length is equal to sizeof(int) * Count. /// </summary> /// <param name="indexBufferBindingData">The index buffer binding data.</param> /// <returns></returns> public static bool IsSimple(this IndexBufferBinding indexBufferBindingData) { if (indexBufferBindingData.Offset != 0) { return(false); } if (!indexBufferBindingData.Is32Bit) { return(false); } var buffer = indexBufferBindingData.Buffer.GetSerializationData(); if (buffer.Content.Length != sizeof(int) * indexBufferBindingData.Count) { return(false); } return(true); }
protected Mesh CreateMesh(IndexBufferBinding indexBuffer, IMeshData <TVertex> meshData) { Contracts.Requires.That(indexBuffer != null); Contracts.Requires.That(meshData != null); var vertexBuffers = new[] { new VertexBufferBinding( Buffer.Vertex.New(this.GraphicsDevice, meshData.Vertices, GraphicsResourceUsage.Immutable), this.Format.Layout, meshData.VerticesCount), }; var meshDraw = new MeshDraw() { IndexBuffer = indexBuffer, VertexBuffers = vertexBuffers, DrawCount = meshData.IndicesCount, PrimitiveType = PrimitiveType.TriangleList, }; // create the bounding volumes var boundingBox = BoundingBox.Empty; for (int index = 0; index < meshData.VerticesCount; index++) { var position = this.Format.GetPosition(meshData.Vertices[index]); BoundingBox.Merge(ref boundingBox, ref position, out boundingBox); } var boundingSphere = BoundingSphere.FromBox(boundingBox); return(new Mesh { Draw = meshDraw, BoundingBox = boundingBox, BoundingSphere = boundingSphere, }); }
private Model CreateModel() { // https://doc.xenko.com/latest/en/manual/scripts/create-a-model-from-code.html var indexBuffer = new Buffer(); var indexBufferBinding = new IndexBufferBinding(indexBuffer, true, 10); var vertexBufferBinding = new VertexBufferBinding(); VertexBufferBinding[] vertexBufferBindings = { vertexBufferBinding }; var meshDraw = new MeshDraw { VertexBuffers = vertexBufferBindings, IndexBuffer = indexBufferBinding }; ParameterCollection parms = null; var mesh = new Xenko.Rendering.Mesh(meshDraw, parms); var model = new Model { mesh }; return(model); }
public static unsafe int[] GenerateIndexBufferAEN(IndexBufferBinding indexBuffer, VertexBufferBinding vertexBuffer, CommandList commandList = null) { // More info at http://developer.download.nvidia.com/whitepapers/2010/PN-AEN-Triangles-Whitepaper.pdf // This implementation might need some performance improvements var triangleCount = indexBuffer.Count / 3; var newIndices = new int[triangleCount * 12]; var positionMapping = GenerateIndexMapping(vertexBuffer, commandList, "POSITION"); var dominantEdges = new Dictionary <EdgeKeyAEN, EdgeAEN>(); var dominantVertices = new Dictionary <int, int>(); var indexSize = indexBuffer.Is32Bit? 4: 2; fixed(byte *indexBufferStart = &indexBuffer.Buffer.GetDataSafe(commandList)[indexBuffer.Offset]) { var triangleIndices = stackalloc int[3]; var positionIndices = stackalloc int[3]; // Step 2: prepare initial data for (int i = 0; i < triangleCount; ++i) { var oldIndices = indexBufferStart + i * 3 * indexSize; if (indexSize == 2) { var oldIndicesShort = (short *)oldIndices; triangleIndices[0] = oldIndicesShort[0]; triangleIndices[1] = oldIndicesShort[1]; triangleIndices[2] = oldIndicesShort[2]; } else { var oldIndicesShort = (int *)oldIndices; triangleIndices[0] = oldIndicesShort[0]; triangleIndices[1] = oldIndicesShort[1]; triangleIndices[2] = oldIndicesShort[2]; } positionIndices[0] = positionMapping.Indices[triangleIndices[0]]; positionIndices[1] = positionMapping.Indices[triangleIndices[1]]; positionIndices[2] = positionMapping.Indices[triangleIndices[2]]; newIndices[i * 12 + 0] = triangleIndices[0]; newIndices[i * 12 + 1] = triangleIndices[1]; newIndices[i * 12 + 2] = triangleIndices[2]; newIndices[i * 12 + 3] = triangleIndices[0]; newIndices[i * 12 + 4] = triangleIndices[1]; newIndices[i * 12 + 5] = triangleIndices[1]; newIndices[i * 12 + 6] = triangleIndices[2]; newIndices[i * 12 + 7] = triangleIndices[2]; newIndices[i * 12 + 8] = triangleIndices[0]; newIndices[i * 12 + 9] = triangleIndices[0]; newIndices[i * 12 + 10] = triangleIndices[1]; newIndices[i * 12 + 11] = triangleIndices[2]; // Step 2b/2c: Build dominant vertex/edge list for (int j = 0; j < 3; ++j) { dominantVertices[positionIndices[j]] = triangleIndices[j]; var edge = new EdgeAEN( triangleIndices[((j + 0) % 3)], triangleIndices[((j + 1) % 3)], positionIndices[((j + 0) % 3)], positionIndices[((j + 1) % 3)]); dominantEdges[new EdgeKeyAEN(edge)] = edge; edge = edge.Reverse(); dominantEdges[new EdgeKeyAEN(edge)] = edge; } } // Step3: Find dominant vertex/edge for (int i = 0; i < triangleCount; ++i) { var oldIndices = indexBufferStart + i * 3 * indexSize; if (indexSize == 2) { var oldIndicesShort = (short *)oldIndices; triangleIndices[0] = oldIndicesShort[0]; triangleIndices[1] = oldIndicesShort[1]; triangleIndices[2] = oldIndicesShort[2]; } else { var oldIndicesShort = (int *)oldIndices; triangleIndices[0] = oldIndicesShort[0]; triangleIndices[1] = oldIndicesShort[1]; triangleIndices[2] = oldIndicesShort[2]; } positionIndices[0] = positionMapping.Indices[triangleIndices[0]]; positionIndices[1] = positionMapping.Indices[triangleIndices[1]]; positionIndices[2] = positionMapping.Indices[triangleIndices[2]]; for (int j = 0; j < 3; ++j) { // Dominant edge int vertexKey; if (dominantVertices.TryGetValue(positionIndices[j], out vertexKey)) { newIndices[i * 12 + 9 + j] = vertexKey; } // Dominant vertex EdgeAEN edge; var edgeKey = new EdgeKeyAEN(positionIndices[((j + 0) % 3)], positionIndices[((j + 1) % 3)]); if (dominantEdges.TryGetValue(edgeKey, out edge)) { newIndices[i * 12 + 3 + j * 2 + 0] = edge.Index0; newIndices[i * 12 + 3 + j * 2 + 1] = edge.Index1; } } } } return(newIndices); }
private VertexArrayObject GetOrCreateVertexArrayObjectAEN(RenderContext context) { if (vertexArrayObjectAEN == null) { var graphicsDevice = context.GraphicsDevice; var indicesAEN = IndexExtensions.GenerateIndexBufferAEN(Mesh.Draw.IndexBuffer, Mesh.Draw.VertexBuffers[0]); var indexBufferBinding = new IndexBufferBinding(Buffer.Index.New(graphicsDevice, indicesAEN), true, Mesh.Draw.IndexBuffer.Count * 12 / 3); vertexArrayObjectAEN = VertexArrayObject.New(context.GraphicsDevice, Effect.InputSignature, indexBufferBinding, Mesh.Draw.VertexBuffers); } return vertexArrayObjectAEN; }
private IndexBufferBinding UpdateIndexBuffer(GraphicsContext graphicsContext, IndexBufferBinding indexBufferBinding) { int indexStructSize = Utilities.SizeOf <short>(); if (indexBufferBinding.Count != indexBuffer.Length) { indexBufferBinding.Buffer.Dispose(); return(new IndexBufferBinding(SiliconStudio.Xenko.Graphics.Buffer.Index.New <short>(graphicsContext.CommandList.GraphicsDevice, indexBuffer, GraphicsResourceUsage.Default), indexStructSize == sizeof(Int32), indexBuffer.Length)); } else { //var mappedIndices = graphicsContext.CommandList.MapSubresource(indexBufferBinding.Buffer, 0, MapMode.WriteNoOverwrite, false, 0, indexStructSize * indexBufferBinding.Count); //var indexPointer = mappedIndices.DataBox.DataPointer; //for (int i = 0; i < indexBuffer.Length; i++) //{ // indexPointer += indexStructSize; //} //graphicsContext.CommandList.UnmapSubresource(mappedIndices); indexBufferBinding.Buffer.SetData(graphicsContext.CommandList, indexBuffer); return(indexBufferBinding); } }
private VertexArrayObject(GraphicsDevice graphicsDevice, object shaderSignature, IndexBufferBinding indexBufferBinding, VertexBufferBinding[] vertexBuffers) { throw new NotImplementedException(); }