You seem to absolutely know what you are doing so, I don't want to seem like I do not realize that but, if you would like to look at how I do it in my code I am more than happy to share. It's in AS3 but, you can read it, bro. It's the same functions, loops, etc that every other humanly readable language is using.
I am not using any vis either but, I am rendering worlds that are infinitesimally smaller than yours. You will definitely need to write an exception that breaks your texture batches into numerous buffers per texture cause, you are gonna fill one up real quick. The idea is to simply cram as much geometry as you can into as few buffers as possible. Big buffers instead of lots of them... and when you aren't going to even come close to filling a buffer, use compact geometry.
ie
oneBuffer[totLen] = interleaveBuffers(vertices.length/3, vertices, normals, tangents, uvs, suvs):
I am not using any vis either but, I am rendering worlds that are infinitesimally smaller than yours. You will definitely need to write an exception that breaks your texture batches into numerous buffers per texture cause, you are gonna fill one up real quick. The idea is to simply cram as much geometry as you can into as few buffers as possible. Big buffers instead of lots of them... and when you aren't going to even come close to filling a buffer, use compact geometry.
ie
oneBuffer[totLen] = interleaveBuffers(vertices.length/3, vertices, normals, tangents, uvs, suvs):
Comment