Одна из штук, к которой мне было сложно привыкнуть в графике и в программировании, это способность чертовски быстро вычислять кучу штук на лету.
Одинаковых штук. Абсолютно. Которые можно было бы вычислить заранее один раз и потом прочитать, а не считать по 60 раз в секунду на миллионе тредов.
Но фиг там. Каждая операция чтения из памяти дополнительной информации оборачивается в десяток раз дороже, чем операция умножения. И чем больше байт инфы читаешь, тем больше эти затраты.
Сейчас работаю с упаковкой вершин, чтобы они занимали в полтора раза меньше места в памяти. Не 6 байт, а всего лишь 4.
Для этого в одно 32-битное беззнаковое целое число заносятся аж три числа дробных. Первые 11 бит отводятся под одну координату, еще 11 под вторую, ну а третья довольствуется жалкими 10 битами и точностью похуже.
Сначала запаковать, потом каждый кадр, в каждой чертовой вершине (а на экране их сотни тысяч) проводить операцию распаковки, которая состоит из жутко выглядещей последовательности умножений и сложений...
И это работает быстрее. Реально быстрее, чем раньше.
С ума сойти.