internal override void AddComponent(MyVertexInputComponent component, List<InputElement> list, Dictionary<string, int> dict, StringBuilder declaration, StringBuilder code) { AddSingle("COLOR", "float4 color", Format.R8G8B8A8_UNorm, component, list, dict, declaration, code); code.AppendLine("__color = input.color;"); }
internal override void AddComponent(MyVertexInputComponent component, List<InputElement> list, Dictionary<string, int> dict, StringBuilder declaration, StringBuilder code) { AddSingle("POSITION", "float3 position", Format.R16G16B16A16_Float, component, list, dict, declaration, code); code.AppendLine("result.position_local_raw = float4(input.position, 1);"); }
internal override void AddComponent(MyVertexInputComponent component, List<InputElement> list, Dictionary<string, int> dict, StringBuilder declaration, StringBuilder code) { AddSingle("BLENDWEIGHT", "float4 blend_weights", Format.R16G16B16A16_Float, component, list, dict, declaration, code); code.AppendLine("__blend_weights = input.blend_weights;"); }
internal override void AddComponent(MyVertexInputComponent component, List<InputElement> list, Dictionary<string, int> dict, StringBuilder declaration, StringBuilder code) { AddSingle("BLENDINDICES", "uint4 blend_indices", Format.R8G8B8A8_UInt, component, list, dict, declaration, code); code.AppendLine("__blend_indices = input.blend_indices;"); }
internal override void AddComponent(MyVertexInputComponent component, List<InputElement> list, Dictionary<string, int> dict, StringBuilder declaration, StringBuilder code) { AddSingle("POSITION", "float4 position", Format.R16G16B16A16_Float, component, list, dict, declaration, code); code.AppendLine("__position_object = unpack_position_and_scale(input.position);"); }
internal override void AddComponent(MyVertexInputComponent component, List<InputElement> list, Dictionary<string, int> dict, StringBuilder declaration, StringBuilder code) { AddSingle("POSITION", "float3 position", Format.R32G32B32_Float, component, list, dict, declaration, code); code.AppendLine("__position_object = float4(input.position, 1);"); }
protected static void AddSingle(string name, string variable, Format format, MyVertexInputComponent component, List<InputElement> list, Dictionary<string, int> dict, StringBuilder declaration) { var classification = component.Freq == MyVertexInputComponentFreq.PER_VERTEX ? InputClassification.PerVertexData : InputClassification.PerInstanceData; var freq = component.Freq == MyVertexInputComponentFreq.PER_VERTEX ? 0 : 1; var index = NextIndex(dict, name); list.Add(new InputElement(name, index, format, InputElement.AppendAligned, component.Slot, classification, freq)); declaration.AppendFormat("{0} : {1}{2};\\\n", variable, name, index); }
public int CompareTo(MyVertexInputComponent item) { if (Type == item.Type) { if (Slot == item.Slot) { return Freq - item.Freq; } return Slot - item.Slot; } else return Type - item.Type; }
internal override void AddComponent(MyVertexInputComponent component, List<InputElement> list, Dictionary<string, int> dict, StringBuilder declaration, StringBuilder code) { AddSingle("NORMAL", "float4 normal", Format.R8G8B8A8_UNorm, component, list, dict, declaration, code); code.AppendLine("__normal = unpack_normal(input.normal);"); }
internal abstract void AddComponent(MyVertexInputComponent component, List<InputElement> list, Dictionary<string, int> dict, StringBuilder declaration, StringBuilder code);
internal override void AddComponent(MyVertexInputComponent component, List<InputElement> list, Dictionary<string, int> dict, StringBuilder declaration, StringBuilder code) { AddSingle("POSITION", "float4 position", Format.R16G16B16A16_UNorm, component, list, dict, declaration, code); code.AppendLine("result.position_local_raw = unpack_voxel_position(input.position);"); code.AppendLine("result.material_weights = unpack_voxel_weights(input.position.w);"); }
internal override void AddComponent(MyVertexInputComponent component, List<InputElement> list, Dictionary<string, int> dict, StringBuilder declaration, StringBuilder code) { AddSingle("TEXCOORD", "float4 packed_bone0", Format.R8G8B8A8_UNorm, component, list, dict, declaration, code); AddSingle("TEXCOORD", "float4 packed_bone1", Format.R8G8B8A8_UNorm, component, list, dict, declaration, code); AddSingle("TEXCOORD", "float4 packed_bone2", Format.R8G8B8A8_UNorm, component, list, dict, declaration, code); AddSingle("TEXCOORD", "float4 packed_bone3", Format.R8G8B8A8_UNorm, component, list, dict, declaration, code); AddSingle("TEXCOORD", "float4 packed_bone4", Format.R8G8B8A8_UNorm, component, list, dict, declaration, code); AddSingle("TEXCOORD", "float4 packed_bone5", Format.R8G8B8A8_UNorm, component, list, dict, declaration, code); AddSingle("TEXCOORD", "float4 packed_bone6", Format.R8G8B8A8_UNorm, component, list, dict, declaration, code); AddSingle("TEXCOORD", "float4 packed_bone7", Format.R8G8B8A8_UNorm, component, list, dict, declaration, code); AddSingle("TEXCOORD", "float4 cube_transformation", Format.R16G16B16A16_Float, component, list, dict, declaration, code); AddSingle("TEXCOORD", "float4 colormask", Format.R16G16B16A16_Float, component, list, dict, declaration, code); code.AppendLine("__packed_bone0 = input.packed_bone0;"); code.AppendLine("__packed_bone1 = input.packed_bone1;"); code.AppendLine("__packed_bone2 = input.packed_bone2;"); code.AppendLine("__packed_bone3 = input.packed_bone3;"); code.AppendLine("__packed_bone4 = input.packed_bone4;"); code.AppendLine("__packed_bone5 = input.packed_bone5;"); code.AppendLine("__packed_bone6 = input.packed_bone6;"); code.AppendLine("__packed_bone7 = input.packed_bone7;"); code.AppendLine("__cube_transformation = input.cube_transformation;"); code.AppendLine("__colormask = input.colormask;"); }
internal override void AddComponent(MyVertexInputComponent component, List<InputElement> list, Dictionary<string, int> dict, StringBuilder declaration, StringBuilder code) { AddSingle("TEXCOORD", "float4 matrix_row0", Format.R16G16B16A16_Float, component, list, dict, declaration, code); AddSingle("TEXCOORD", "float4 matrix_row1", Format.R16G16B16A16_Float, component, list, dict, declaration, code); AddSingle("TEXCOORD", "float4 matrix_row2", Format.R16G16B16A16_Float, component, list, dict, declaration, code); AddSingle("TEXCOORD", "float4 colormask", Format.R16G16B16A16_Float, component, list, dict, declaration, code); AddSingle("TEXCOORD", "float2 uvOffset", Format.R16G16B16A16_Float, component, list, dict, declaration, code); code.AppendLine("__instance_matrix = construct_matrix_43( input.matrix_row0, input.matrix_row1, input.matrix_row2);"); code.AppendLine("__colormask = input.colormask;"); code.AppendLine("__uvOffset = input.uvOffset;"); }
internal override void AddComponent(MyVertexInputComponent component, List<InputElement> list, Dictionary<string, int> dict, StringBuilder declaration, StringBuilder code) { AddSingle("TEXCOORD", "float4 custom_unorm4_1", Format.R8G8B8A8_UNorm, component, list, dict, declaration, code); }
internal override void AddComponent(MyVertexInputComponent component, List<InputElement> list, Dictionary<string, int> dict, StringBuilder declaration, StringBuilder code) { AddSingle("TEXCOORD", "uint4 texIndices", Format.R8G8B8A8_UInt, component, list, dict, declaration); code.Append("__texIndices = (float4) input.texIndices;\\\n"); }
internal MyVertexInputLayout Append(MyVertexInputComponent component) { return Append(component.Type, component.Slot, component.Freq); }
internal override void AddComponent(MyVertexInputComponent component, List<InputElement> list, Dictionary<string, int> dict, StringBuilder declaration, StringBuilder code) { AddSingle("POSITION", "float4 position", Format.R16G16B16A16_UNorm, component, list, dict, declaration, code); AddSingle("POSITION", "float4 position_morph", Format.R16G16B16A16_UNorm, component, list, dict, declaration, code); code.AppendLine("__position_object = unpack_voxel_position(input.position);"); code.AppendLine("__material_weights = unpack_voxel_weights(input.position.w);"); code.AppendLine("__ambient_occlusion = unpack_voxel_ao(input.position.w);"); code.AppendLine("__position_object_morph = unpack_voxel_position(input.position_morph);"); code.AppendLine("__material_weights_morph = unpack_voxel_weights(input.position_morph.w);"); code.AppendLine("__ambient_occlusion_morph = unpack_voxel_ao(input.position_morph.w);"); }
internal override void AddComponent(MyVertexInputComponent component, List<InputElement> list, Dictionary<string, int> dict, StringBuilder declaration, StringBuilder code) { AddSingle("TEXCOORD", "float2 texcoord0", Format.R32G32_Float, component, list, dict, declaration, code); code.AppendLine("__texcoord0 = input.texcoord0;"); }
internal override void AddComponent(MyVertexInputComponent component, List<InputElement> list, Dictionary<string, int> dict, StringBuilder declaration, StringBuilder code) { AddSingle("TANGENT", "float4 tangent4", Format.R8G8B8A8_UNorm, component, list, dict, declaration, code); code.AppendLine("__tangent = unpack_tangent_sign(input.tangent4);"); }
internal override void AddComponent(MyVertexInputComponent component, List<InputElement> list, Dictionary<string, int> dict, StringBuilder declaration, StringBuilder code) { AddSingle("TEXCOORD", "float4 custom_half4_2", Format.R16G16B16A16_Float, component, list, dict, declaration, code); }
internal MyVertexInputLayout Append(MyVertexInputComponentType type, int slot = 0, MyVertexInputComponentFreq freq = MyVertexInputComponentFreq.PER_VERTEX) { MyVertexInputComponent component = new MyVertexInputComponent(); component.Type = type; component.Slot = slot; component.Freq = freq; int nextHash = MyHashHelper.Combine(m_hash, component.GetHashCode()); MyVertexInputLayout next; if(m_cached.TryGetValue(nextHash, out next)) { return next; } next = new MyVertexInputLayout(); next.m_hash = nextHash; next.m_id = m_cached.Count; next.m_components = m_components.Concat(component.Yield()).ToArray(); next.Build(); m_cached[nextHash] = next; return next; }
internal override void AddComponent(MyVertexInputComponent component, List<InputElement> list, Dictionary<string, int> dict, StringBuilder declaration, StringBuilder code) { AddSingle("TEXCOORD", "float4 matrix_row0", Format.R16G16B16A16_Float, component, list, dict, declaration, code); AddSingle("TEXCOORD", "float4 matrix_row1", Format.R16G16B16A16_Float, component, list, dict, declaration, code); AddSingle("TEXCOORD", "float4 matrix_row2", Format.R16G16B16A16_Float, component, list, dict, declaration, code); AddSingle("TEXCOORD", "float4 color_mask_hsv", Format.R16G16B16A16_Float, component, list, dict, declaration, code); code.AppendLine("result.matrix_row0 = input.matrix_row0;"); code.AppendLine("result.matrix_row1 = input.matrix_row1;"); code.AppendLine("result.matrix_row2 = input.matrix_row2;"); }