private void init(IBufferLayoutDesc bufferLayoutDesc, int vertexCount) { vertexArraySize = bufferLayoutDesc.FloatCount; var positions = bufferLayoutDesc.ElementsUsages(BufferLayoutElementUsages.Position); positionOffset = new int[positions.Count]; positionTypes = new BufferLayoutElementTypes[positions.Count]; int i = 0; foreach (var position in positions) { positionOffset[i] = position.FloatOffset; positionTypes[i] = position.Type; ++i; } var colors = bufferLayoutDesc.ElementsUsages(BufferLayoutElementUsages.Color); colorOffset = new int[colors.Count]; i = 0; foreach (var color in colors) { colorOffset[i] = color.FloatOffset; ++i; } var uvs = bufferLayoutDesc.ElementsUsages(BufferLayoutElementUsages.UV); uvOffset = new int[uvs.Count]; i = 0; foreach (var uv in uvs) { uvOffset[i] = uv.FloatOffset; ++i; } var normals = bufferLayoutDesc.ElementsUsages(BufferLayoutElementUsages.Normal); normalOffset = new int[normals.Count]; i = 0; foreach (var normal in normals) { normalOffset[i] = normal.FloatOffset; ++i; } vertex = new float[vertexArraySize]; for (i = 0; i != vertex.Length; ++i) { vertex[i] = 0; } this.vertexCount = vertexCount; vertices = new float[vertexCount * vertexArraySize]; for (i = 0; i != vertices.Length; ++i) { vertices[i] = 0; } }
protected IVertexBuffer(IDisposableResource parent, IBufferLayoutDesc bufferLayoutDesc, BufferUsages usage, float[] vertices) : base(parent) { this.usage = usage; vertexByteSize = bufferLayoutDesc.ByteSize; vertexFloatArraySize = bufferLayoutDesc.FloatCount; vertexCount = vertices.Length / vertexFloatArraySize; }
public BufferLayout(IDisposableResource parent, IShader shader, IBufferLayoutDesc desc) : base(parent) { try { var video = parent.FindParentOrSelfWithException<Video>(); com = new BufferLayoutCom(); var error = com.Init(video.com, ((BufferLayoutDesc)desc).com); switch (error) { case BufferLayoutErrors.VertexDeclaration: Debug.ThrowError("BufferLayout", "Failed to create vertex declaration"); break; } } catch (Exception e) { Dispose(); throw e; } }
protected IQuickDraw(IDisposableResource parent, IBufferLayoutDesc bufferLayoutDesc) : base(parent) { init(bufferLayoutDesc, 128 * 2); }
public VertexBuffer(IDisposableResource parent, IBufferLayoutDesc bufferLayoutDesc, BufferUsages usage, VertexBufferTopologys topology, float[] vertices, int[] indices) : base(parent, bufferLayoutDesc, usage, vertices) { init(parent, bufferLayoutDesc, usage, topology, vertices, indices); }
private void init(IDisposableResource parent, IBufferLayoutDesc bufferLayoutDesc, BufferUsages usage, VertexBufferTopologys topology, float[] vertices, int[] indices) { try { var video = parent.FindParentOrSelfWithException<Video>(); this.topology = topology; REIGN_D3DPRIMITIVETYPE topologyType = REIGN_D3DPRIMITIVETYPE.TRIANGLELIST; switch (topology) { case VertexBufferTopologys.Triangle: topologyType = REIGN_D3DPRIMITIVETYPE.TRIANGLELIST; break; case VertexBufferTopologys.Line: topologyType = REIGN_D3DPRIMITIVETYPE.LINELIST; break; case VertexBufferTopologys.Point: topologyType = REIGN_D3DPRIMITIVETYPE.POINTLIST; break; } com = new VertexBufferCom(video.com, topologyType); var error = com.Init(vertices, REIGN_D3DUSAGE.WRITEONLY, vertexCount, vertexByteSize); if (error == VertexBufferErrors.VertexBuffer) Debug.ThrowError("VertexBuffer", "Failed to create VertexBuffer"); if (indices != null && indices.Length != 0) indexBuffer = new IndexBuffer(this, usage, indices); } catch (Exception e) { Dispose(); throw e; } }