Я бы поэкспериментировал и нашел бы размер буфера, который вам подходит, и по возможности объединил бы ваши данные vert в VBO.Ваше целевое оборудование действительно то, что будет диктовать это, поэтому лучше поиграться с разными числами.
Используйте некоторый класс для ссылки на смещение в VBO, которое ваша модель должна фактически использовать для рендеринга.Например, у вас есть коробка и машина.
class MeshManager
{
public:
int loadMesh(const Mesh * mesh)
{
//load the mesh
//Add it to some current VBO or manage the creation of VBOs better.
ManagedMesh managedMesh(theVao, theVbo, theOffset, theLength, theType, theIdentifier);
theIdentifier++;
}
private:
std::map<std::string, ManagedMesh> meshMap;
int theIdentifier;
}
class Renderer
{
public:
void render(int meshId, Vector3f translation, Vector3f rotation);
}
int main(int argc, char** argv)
{
MeshManager meshManager;
Model model("mymodel.obj");
const Mesh * meshes = model.getMeshes();
int meshCount = model.getMeshCount();
for(int i=0; i<meshCount; i++)
{
meshManager.loadMesh(mesh);
}
model.freeMeshes();
}
что-то в этом роде.Очевидно, я не храню эти загруженные идентификаторы сетки, но я думаю, что вы получите картину.Я не эксперт, но это грубый пример того, как я могу это сделать.Также не забудьте попробовать пакетный рендеринг как можно больше.Сортируйте рендеринг по 1) загруженным VBO, 2) загруженным материалам.Постоянно менять и выключать видеокарту очень дорого.Метод проб и ошибок - название игры (игра является Программированием).