Вообще не вижу разницы, да и нету её. Глобалсы удобнее тем, что не надо заводить каждый раз три переменных. Можно конечно там NULL понапихать, но всё равно минимум одну заводить придётся.
Я бы поспорил. У тебя fwd - Vector? Наглядно то, что ты передаёшь его по значению в функцию, и следовательно, в него ничего не запишется. И только знающие люди сообразят, что при этом вызывается оператор каста в флоат*. Вот она, типично вальвовская наглядность. Учитесь, товарищи!
ЗЫ: в волатиле надо было бы написать:
ANGLE_VECTORS(angles, &fwd, NULL, NULL);
Т.е. взять адрес именно вектора, никаких неочевидных кастов. Но в волатиле и нет такой срани, когда вектор в одной дллке - арай из 3 флоатов, а в другой класс, там он во всех библиотеках класс.
Не придирайся
у меня передача по ссылке или через анонимный юнион или через адрес.... короче, быстро. свой класс Vector я перелопатил весьма сильно (только SIMD не напихал), но речь не об этом.
Вобщем, экономия на неиспользуемых векторах у меня получилась гигантской. Теоретически, на создание временного Vector fwd уходит некоторое кол-во ресурсов, но мат. операции внутри AngleVectors() намного длиннее, имхо.
Кстати, в XDM во всяких TraceAttack(), например, я все векторы передаю как "const Vector &", что есть ня и кавай. :3
~ X ~ писал: Вобщем, экономия на неиспользуемых векторах у меня получилась гигантской.
О боже, я знал, знал что появиться такой человек на форуме который сделает старый голд сорс намного производительней! Я даже слышал что вам светит нобелевская премия за ваш вклад в геймдев!
За это сообщение pRoxxx получил предупреждение за флуд
Большая хитрость и профит видны в дальнейшем, когда идёт обращение к элементам ветора как к членам или как к элементам массива (не надо изобретать хак с operator []).