The procedural geometry tutorial is mostly my own work/fault so I might be able
to give some hints.
Procedural geometry generation first of all requires to manually generate the vertex-, normals- and
UVs-arrays. This can be done in whatever way you like. The number of elements in each array is basically
the same, as long as you are using Vec2(for UVs) and Vec3(for verts and normals).
numVerts == numNormals == numUVs
The most difficut part is to calculate the triangle-indices. This is describedin the "Simple grid"-section.
The REAL difficulties begin when you try to generate asymmetric surfaces, as this could give you
a headache when calculating the indices.
When transforming your vert-/normal-/UV-/triangleIndex values into a Horde compliant stream
you have to keep in mind that the stream wants to have single float values, not Vec2/Vec3 structs,
so you have to use three float values per Vec3 and two per Vec2.
The GeometryStreamGenerator example should be pretty universal, as long as you don't have any
errors in your array-indices. The GeometryStreamGenerator has been developed after an analysis
of the ColladaConverter. You might want to have a look at the ColladaConv sources as well.
Porting this part of the code to C# should not be too much of a problem.