private void GetUVsInternal <T>(List <T> uvs, int uvIndex, int dim) { InternalShaderChannel uVChannel = this.GetUVChannel(uvIndex); ResizeList(uvs, this.vertexCount); this.GetArrayFromChannelImpl(uVChannel, InternalVertexChannelType.Float, dim, ExtractArrayFromList(uvs)); }
private void GetUVsImpl <T>(int uvIndex, List <T> uvs, int dim) { if (uvs == null) { throw new ArgumentException("The result uvs list cannot be null", "uvs"); } if ((uvIndex < 0) || (uvIndex > 3)) { throw new ArgumentException("The uv index is invalid (must be in [0..3]", "uvIndex"); } uvs.Clear(); InternalShaderChannel uVChannel = this.GetUVChannel(uvIndex); if (!this.canAccess) { this.PrintErrorCantAccessMesh(uVChannel); } else if (this.HasChannel(uVChannel)) { if (this.vertexCount > uvs.Capacity) { uvs.Capacity = this.vertexCount; } this.GetUVsInternal <T>(uvs, uvIndex, dim); } }
private void SetSizedArrayForChannel(InternalShaderChannel channel, InternalVertexChannelType format, int dim, Array values, int valuesCount) { if (canAccess) { SetArrayForChannelImpl(channel, format, dim, values, valuesCount); } else { PrintErrorCantAccessMesh(channel); } }
private void GetListForChannel <T>(List <T> buffer, int capacity, InternalShaderChannel channel, int dim, InternalVertexChannelType channelType) { buffer.Clear(); if (!canAccess) { PrintErrorCantAccessMesh(channel); } else if (HasChannel(channel)) { PrepareUserBuffer(buffer, capacity); GetArrayFromChannelImpl(channel, channelType, dim, ExtractArrayFromList(buffer)); } }
private T[] GetAllocArrayFromChannel <T>(InternalShaderChannel channel, InternalVertexChannelType format, int dim) { if (canAccess) { if (HasChannel(channel)) { return((T[])GetAllocArrayFromChannelImpl(channel, format, dim)); } } else { PrintErrorCantAccessMesh(channel); } return(new T[0]); }
internal static int DefaultDimensionForChannel(InternalShaderChannel channel) { if ((channel == InternalShaderChannel.Vertex) || (channel == InternalShaderChannel.Normal)) { return(3); } if ((channel >= InternalShaderChannel.TexCoord0) && (channel <= InternalShaderChannel.TexCoord3)) { return(2); } if ((channel != InternalShaderChannel.Tangent) && (channel != InternalShaderChannel.Color)) { throw new ArgumentException("DefaultDimensionForChannel called for bad channel", "channel"); } return(4); }
internal static int DefaultDimensionForChannel(InternalShaderChannel channel) { if (channel == InternalShaderChannel.Vertex || channel == InternalShaderChannel.Normal) { return(3); } else if (channel >= InternalShaderChannel.TexCoord0 && channel <= InternalShaderChannel.TexCoord3) { return(2); } else if (channel == InternalShaderChannel.Tangent || channel == InternalShaderChannel.Color) { return(4); } throw new ArgumentException("DefaultDimensionForChannel called for bad channel", "channel"); }
private void GetListForChannel <T>(List <T> buffer, int capacity, InternalShaderChannel channel, int dim, InternalVertexChannelType channelType) { buffer.Clear(); if (!canAccess) { PrintErrorCantAccessChannel(channel); return; } if (!HasChannel(channel)) { return; } NoAllocHelpers.EnsureListElemCount(buffer, capacity); GetArrayFromChannelImpl(channel, channelType, dim, NoAllocHelpers.ExtractArrayFromList(buffer)); }
internal static int DefaultDimensionForChannel(InternalShaderChannel channel) { switch (channel) { case InternalShaderChannel.Vertex: case InternalShaderChannel.Normal: return(3); case InternalShaderChannel.TexCoord0: case InternalShaderChannel.TexCoord1: case InternalShaderChannel.TexCoord2: case InternalShaderChannel.TexCoord3: return(2); default: if (channel == InternalShaderChannel.Tangent || channel == InternalShaderChannel.Color) { return(4); } throw new ArgumentException("DefaultDimensionForChannel called for bad channel", "channel"); } }
internal extern bool HasChannel(InternalShaderChannel channel);
private void GetListForChannel <T>(List <T> buffer, int capacity, InternalShaderChannel channel, int dim) { GetListForChannel(buffer, capacity, channel, dim, InternalVertexChannelType.Float); }
private void SetListForChannel <T>(InternalShaderChannel channel, List <T> values) { SetSizedArrayForChannel(channel, InternalVertexChannelType.Float, DefaultDimensionForChannel(channel), ExtractArrayFromList(values), SafeLength(values)); }
private void SetListForChannel <T>(InternalShaderChannel channel, InternalVertexChannelType format, int dim, List <T> values) { SetSizedArrayForChannel(channel, format, dim, ExtractArrayFromList(values), SafeLength(values)); }
private void SetArrayForChannel <T>(InternalShaderChannel channel, T[] values) { SetSizedArrayForChannel(channel, InternalVertexChannelType.Float, DefaultDimensionForChannel(channel), values, SafeLength(values)); }
private void SetArrayForChannel <T>(InternalShaderChannel channel, InternalVertexChannelType format, int dim, T[] values) { SetSizedArrayForChannel(channel, format, dim, values, SafeLength(values)); }
extern private void PrintErrorCantAccessChannel(InternalShaderChannel ch);
private T[] GetAllocArrayFromChannel <T>(InternalShaderChannel channel) { return(GetAllocArrayFromChannel <T>(channel, InternalVertexChannelType.Float, DefaultDimensionForChannel(channel))); }
extern internal bool HasChannel(InternalShaderChannel ch);
internal extern void PrintErrorCantAccessMesh(InternalShaderChannel channel);
private extern void GetArrayFromChannelImpl(InternalShaderChannel channel, InternalVertexChannelType format, int dim, Array values);
private extern Array GetAllocArrayFromChannelImpl(InternalShaderChannel channel, InternalVertexChannelType format, int dim);
private extern void SetArrayForChannelImpl(InternalShaderChannel channel, InternalVertexChannelType format, int dim, Array values, int arraySize);