things i'd like to discuss
general =======
[vertex_add] (and all other objects i have done so far) can be applied to all 4 arrays; this is, you can add the vertexArray of the lefthand gemlist to the colorArray to the righthand gemlist.
naively i have assumed that all arrays are of the same dimension, which is not true; texCoordArray is [Nx2] and normalArray is [Nx3], the rest is [Nx4]; this is certainly more memory-efficient.
however, i would propose to unify all arrays to [Nx4]; why ? 1) i can apply a single processVertex-function to all arrays without having to know anything about the type of data (this reminds me strongly of the "generalized 3d shape synthesizer") 2) there shouldn't be a problem with memory nowadays. 3) operations on the normalArray is probably faster than with [Nx3] (given that SIMD needs aligned memory) why not ? 1) unifying means the the colorArray would most likely stay float instead of becoming int 2) the texCoordArray doubles
probably it would be best to define just a number of [Nx4] arrays (with no data types at all) [vertex_model] would then load 4 arrays (vertex, color, normals, texcoords), [vertex_draw] would interprete them according to these defaults. simple generators like [vertex_random] would only create one array which could then be assigned to whatever.
objects ======= (just what comes to my mind is useful)
_sources_: OBJ-loader, grid, quad, supershape, random, sphere,... _sinks_: draw, OBJ-exporter _manips_(with only a lefthand gemlist): add(=offset), scale, set, matrix-multiplication, rotation _manips2_(with 2 gemlists): add, mul, set, blend _misc_: info, merge (e.g. take array1 of gemlist1 as color and array4 of gemlist2 as vertex)
gosh there were so many; i have forgotten them right now...
mf.a.sdr IOhannes