public static source ArrayToSource(Color[] input, string tag) { source outputSource = new source(); outputSource.id = tag; const int num_values = 4; float_array vectorArray = new float_array(); vectorArray.Values = new double[input.Length * num_values]; for (int i = 0; i < input.Length; i++) { vectorArray.Values[i * num_values + 0] = input[i].r; vectorArray.Values[i * num_values + 1] = input[i].g; vectorArray.Values[i * num_values + 2] = input[i].b; vectorArray.Values[i * num_values + 3] = input[i].a; } vectorArray.id = tag + "-array"; vectorArray.count = (ulong)vectorArray.Values.Length; outputSource.Item = vectorArray; accessor vectorAccessor = new accessor(); vectorAccessor.source = "#" + vectorArray.id; vectorAccessor.count = (ulong)input.Length; vectorAccessor.stride = num_values; vectorAccessor.param = new param[num_values]; vectorAccessor.param[0] = new param(); vectorAccessor.param[0].name = "R"; vectorAccessor.param[0].type = "float"; vectorAccessor.param[1] = new param(); vectorAccessor.param[1].name = "G"; vectorAccessor.param[1].type = "float"; vectorAccessor.param[2] = new param(); vectorAccessor.param[2].name = "B"; vectorAccessor.param[2].type = "float"; vectorAccessor.param[3] = new param(); vectorAccessor.param[3].name = "A"; vectorAccessor.param[3].type = "float"; outputSource.technique_common = new sourceTechnique_common(); outputSource.technique_common.accessor = vectorAccessor; return(outputSource); }
public static source ArrayToSource(Color[] input, string tag) { source outputSource = new source(); outputSource.id = tag; const int num_values = 4; float_array vectorArray = new float_array(); vectorArray.Values = new double[input.Length * num_values]; for (int i = 0; i < input.Length; i++) { vectorArray.Values[i * num_values + 0] = input[i].r; vectorArray.Values[i * num_values + 1] = input[i].g; vectorArray.Values[i * num_values + 2] = input[i].b; vectorArray.Values[i * num_values + 3] = input[i].a; } vectorArray.id = tag + "-array"; vectorArray.count = (ulong)vectorArray.Values.Length; outputSource.Item = vectorArray; accessor vectorAccessor = new accessor(); vectorAccessor.source = "#" + vectorArray.id; vectorAccessor.count = (ulong)input.Length; vectorAccessor.stride = num_values; vectorAccessor.param = new param[num_values]; vectorAccessor.param[0] = new param(); vectorAccessor.param[0].name = "R"; vectorAccessor.param[0].type = "float"; vectorAccessor.param[1] = new param(); vectorAccessor.param[1].name = "G"; vectorAccessor.param[1].type = "float"; vectorAccessor.param[2] = new param(); vectorAccessor.param[2].name = "B"; vectorAccessor.param[2].type = "float"; vectorAccessor.param[3] = new param(); vectorAccessor.param[3].name = "A"; vectorAccessor.param[3].type = "float"; outputSource.technique_common = new sourceTechnique_common(); outputSource.technique_common.accessor = vectorAccessor; return outputSource; }
public static source ArrayToSource(Vector3[] input, string tag) { source outputSource = new source(); outputSource.id = tag; float_array vectorArray = new float_array(); vectorArray.Values = new double[input.Length * 3]; for (int i = 0; i < input.Length; i++) { vectorArray.Values[i * 3 + 0] = input[i].x; vectorArray.Values[i * 3 + 1] = input[i].y; vectorArray.Values[i * 3 + 2] = input[i].z; } vectorArray.id = tag + "-array"; vectorArray.count = (ulong)vectorArray.Values.Length; outputSource.Item = vectorArray; accessor vectorAccessor = new accessor(); vectorAccessor.source = "#" + tag + "-array"; vectorAccessor.count = (ulong)input.Length; vectorAccessor.stride = 3; vectorAccessor.param = new param[3]; vectorAccessor.param[0] = new param(); vectorAccessor.param[0].name = "X"; vectorAccessor.param[0].type = "float"; vectorAccessor.param[1] = new param(); vectorAccessor.param[1].name = "Y"; vectorAccessor.param[1].type = "float"; vectorAccessor.param[2] = new param(); vectorAccessor.param[2].name = "Z"; vectorAccessor.param[2].type = "float"; outputSource.technique_common = new sourceTechnique_common(); outputSource.technique_common.accessor = vectorAccessor; return(outputSource); }
public static source ArrayToSource(Vector3[] input, string tag) { source outputSource = new source(); outputSource.id = tag; float_array vectorArray = new float_array(); vectorArray.Values = new double[input.Length * 3]; for (int i = 0; i < input.Length; i++) { vectorArray.Values[i * 3 + 0] = input[i].x; vectorArray.Values[i * 3 + 1] = input[i].y; vectorArray.Values[i * 3 + 2] = input[i].z; } vectorArray.id = tag + "-array"; vectorArray.count = (ulong)vectorArray.Values.Length; outputSource.Item = vectorArray; accessor vectorAccessor = new accessor(); vectorAccessor.source = "#" + tag + "-array"; vectorAccessor.count = (ulong)input.Length; vectorAccessor.stride = 3; vectorAccessor.param = new param[3]; vectorAccessor.param[0] = new param(); vectorAccessor.param[0].name = "X"; vectorAccessor.param[0].type = "float"; vectorAccessor.param[1] = new param(); vectorAccessor.param[1].name = "Y"; vectorAccessor.param[1].type = "float"; vectorAccessor.param[2] = new param(); vectorAccessor.param[2].name = "Z"; vectorAccessor.param[2].type = "float"; outputSource.technique_common = new sourceTechnique_common(); outputSource.technique_common.accessor = vectorAccessor; return outputSource; }
static CL.source CreateSource(string id, Func <int, Vector4> get, int components, int len) { var src = new CL.source(); src.id = id; var floats = new float[len * components]; for (int i = 0; i < len; i++) { var v4 = get(i); floats[i * components] = v4.X; floats[i * components + 1] = v4.Y; if (components > 2) { floats[i * components + 2] = v4.Z; } if (components > 3) { floats[i * components + 3] = v4.W; } } string arrId = id + "-array"; src.Item = new CL.float_array() { id = arrId, Text = string.Join(" ", floats.Select((x) => x.ToString(CultureInfo.InvariantCulture))) }; src.technique_common = new CL.sourceTechnique_common(); var acc = new CL.accessor() { source = "#" + arrId, count = (ulong)len, stride = (ulong)components }; src.technique_common.accessor = acc; if (components == 2) { acc.param = new CL.param[] { new CL.param() { name = "U", type = "float" }, new CL.param() { name = "V", type = "float" } }; } else if (components == 3) { acc.param = new CL.param[] { new CL.param() { name = "X", type = "float" }, new CL.param() { name = "Y", type = "float" }, new CL.param() { name = "Z", type = "float" } }; } else if (components == 4) { acc.param = new CL.param[] { new CL.param() { name = "R", type = "float" }, new CL.param() { name = "G", type = "float" }, new CL.param() { name = "B", type = "float" }, new CL.param() { name = "A", type = "float" } }; } return(src); }