Если Вы никогда не должны будете сериализировать свои объекты к массиву байтов и отправлять/хранить их, то Вы не должны волноваться об этом. Если Вы делаете, то необходимо рассмотреть serialVersionUID, так как deserializer объекта будет соответствовать ему к версии объекта, который имеет ее classloader. Читайте больше об этом в Спецификации языка Java.
Это можно сделать, используя Режим цветового индекса OpenGL . Однако имейте в виду, что, по моему опыту, на большинстве современных видеокарт это на самом деле медленнее, чем просто указание цвета каждой вершины.
В режиме индекса цвета вы отправляете отдельный массив цветов, затем каждая вершина указывает индекс в массиве. , вместо полного rgb / rgba. Он более эффективен с точки зрения памяти, но не так оптимизирован для большинства драйверов оборудования.
Для этого вы можете использовать вершинный шейдер, отправив логический флаг для каждой вершины, описывающий, какой цвет будет. На самом деле, самый простой / самый быстрый способ - это, вероятно, просто отправить цвет для каждой вершины.
Если бы opengl имел возможность иметь несколько потоков вершин и индексов, это могло бы работать (но также, вероятно, не стоило бы того).