Есть маленькие объекты. Состят из десятка-другого вершин (полилинии).
Есть большие объекты, состят из десятка-другого маленьких объектов, смещеных и повернутых, наклоененных.
Маленьких объектов сотня-другая, часто меньше.
Больших объектов в тяжелых случая тысячи, возможно, десятки тысяч.
Большие объекты меняются часто, вплоть до на каждый кадр.
Маленькие объекты это верторый шрифт, больше -- надписи. Все должно масштабироваться.
Хочется это все нарисовать с наименьшим кол-вом вызовов, и чтобы поменьше считать на CPU (SIMD в продакшене недоступен, т.к. C#).
Идеально, видимо, как-то передать в вершинный шейдер по одной "локальной" трансофмации для кадой вставки маленького объекта внутри большого;
и по одной трансформации для каждого большого объекта.
Но, видимо, такой возможности нет и можно передать в шейдер только отдельные (в основном одинаковые) трансформации для каждой вершины?
Про glVertexAttribDivisor заню, но он же работает только для glDrawElementsInstanced и это мне не поможет?
Вероятно, было бы круто в геом.шейдере собирать весь большой объект по его "описанию" и по заранее как-то переданному "словарю" маленьких объектов,
но 1. не представлю, как бы это сделать 2. не уверен в производительности (но проверить не долго) 3. интуитивно выглядит вычурно.