К сожалению мне пришлось остановить свои работы по раскапыванию форматов ассетов Need For Speed: Hot Pursuit. Сейчас я полностью занят подготовкой к весенней сессии и написанием магистерской работы. Так как времени из-за работы у меня и так мало, то его не хватает даже на подготовку к летней защите, не говоря уже о сторонних проектах.
Поэтому я выкладываю исходники своей утилиты. Возможно кому-то они пригодятся, может быть кто-то возьмется ее доделать, незнаю. Моя миссия выполнена - я расковырял бандлы и основные ресурсы (текстуры и модели). По моей документации Олег (автор ZModeller'а) написал фильтр для импорта моделей NFS:HP в свою утилиту.
В ближайшем будущем постараюсь выполнить свое обещание и написать статью о реверсе игровых ресурсов.
А вот и ссылка на репозиторий с исходниками - NFS:HP Explorer SVN
Нашел на просторах "интернетов" интересный файлик frsqrt.hh в котором собраны большинство способов вычисления обратного корня квадратного.
Вот цитата из комментария которая перечисляет присутствующие техники:
Optimisations for/by Altivec : USE_RSQRT_ALTIVEC SSE/SSE2 : USE_RSQRT_SSE / USE_RSQRT_SSE2 Lookup : Lookup table approach by Ken Turkowski USE_RSQRT_LOOKUP Magic No. : Magic numbers for initial guess USE_RSQRT_MAGIC Fallback : standard implementation via libm USE_RSQRT_LIBM
Соббсно ссылочка - http://www.hlnum.org/english/doc/frsqrt/frsqrt.hh
PS. Реализация из исходников Quake 3 здесь тоже присутствует
Давно искал подобную штуку, и недавно таки наткнулся.
Классный обширный сборник всяческих pre-defined макросов.
Всем интересующимся - ссылка Pre-defined C/C++ Compiler Macros
На сайте IBM для разработчиков есть много полезного ( http://www.ibm.com/developerworks/ru/ )
Вот и вчера тоже попалась очень занимательная статейка "Применение специальных возможностей GCC в ядре Linux" повествующая о некоторых особо интересных "финтах" компилятора GCC для языка C. Каждый такой "финт" сопровождается примером кода прямиком из ядра Linux, иллюстрируя полезность оных.
Даные "фичи" можно разделить условно на два типа: расширяющие функциональность языка; и помогающие компилятору в оптимизации кода.
После прочтения захотелось некоторые такие "фишки" и к нам в Visual Studio
Вобщем как всегда - приятного чтения!
Ссылка на статью - http://www.ibm.com/developerworks/ru/library/l-gcc-hacks/index.html
Наверное у каждого программиста есть такие маленькие функции, которые не делают ничего сверхъестественного, однако сильно упрощают жизнь.
Вот и у меня есть. И решил я что по мере появления новых буду публиковать их у себя на блоге, авось кому пригодится.
Начну с сегодняшней маленькой функции. В моем движке fEngine есть конечно же класс строки, однако когда пишешь маленькие демонстрашки или просто тесты, не всегда удобно его целиком подключать. Вот и сегодня мне было лень его подключать к моей новой демке OpenGL 3.0, а нужно было всего-навсего заменить в строке все пробелы на символы перевода каретки. Таким образом родилась такая малютка:
int change_char( int c ) { if ( what == c ) return to; return c; }
И с помощью нее задача была решена просто и елегантно:
В будущем постараюсь выкладывать наиболее интересные такие "помогашки", и возможно, соберу свои бывшие и новые в один файл и выложу здесь.
4–5 Декабря в Москве прошла очередная, десятая ежегодная конференция от Micro$oft - "Платформа 2009. Определяя будущее". Лично на конференциия не присутствовал, но был заинтересован. Очень сильно интриговал тот факт, что на конференцию приедет выступить с докладами сам великий и могучий Марк Руссинович (профиль докладчика).
Особый интерес для меня как для программиста представлял доклад "C#. Взгляд в будущее", рассказывающий историю развития языка C# его зарождения в 1998-м году и появления в 2002-м году первой его версии 1.0, до версии 4.0 которая будет доступна в VisualStudio 2010.
Итак, чтоже такого интересного нас ждет в C# 4.0?
1) Динамическая типизация объектов.
смысл в том, что мы можем напрямую сообщить компилятору что мы не знаем точного типа объекта, и что привязка к его методам должна быть выполнена в Run-Time. для этого введено новое ключевое слово dynamic :
То что раньше приходилось делать так:
Type calcType = calc.GetType();
object res = calcType.InvokeMember("Add",
BindingFlags.InvokeMethod, null,
new object[] { 10, 20 });
int sum = Convert.ToInt32(res);
Теперь можно сделать так:
int sum = calc.Add(10, 20);
Сразу хочу заметить, что тем кто, в связи с Dynamic Dispatch, переживает за производительность, Micro$oft обещает реализовать эффективный Call Site Caching.
2) Параметры по умолчанию и именованные аргументы.
Некоторым это должно быть знакомо. Да! Такое есть в языке Objective-C, так что кто писал под MacOS удивлены не будут. Однако для C# это очень крутое нововведение. Смысл его в том, что можно пропускать дефолтные параметры, а также менять порядок передачи параметров. Вот простейший пример:
можем написать такую функцию
и она будет иметь такие варианты вызовов:
M(1, 2); // опущен последний параметр z – тоже самое, что вызвать M(1, 2, 7)
M(1); // опущены 2 последних параметра - y и z – тоже самое, что вызвать M(1, 5, 7)
M(1, z: 3); // передача фактического значения по имени формального параметра - z
M(x: 1, z: 3); // передача двух значений по именам параметров - x и z
M(z: 3, x: 1); // аналогично предыдущему
3) Упрощенная работа с COM.
То чего всем так не хватало! Наконец у Micro$oft дошли руки. Встречайте - теперь вместо такой колбасни
object missing = System.Reflection.Missing.Value;
doc.SaveAs(ref fileName,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing);
можем просто написать
Ура товарищи.
4) Ко-вариантность и контра-вариантность.
Обещают безопасную ко-вариантность. Предлагается статически проверяемая вариантность по месту определения, а также типы значений теперь всегда инвариантны
5) Компилятор как сервис.
Еще одна очень интересная штуковина в C#4.0 - это Evaluator - класс для компиляции и исполнения кода в Run-Time! Да здравствует скриптование! Программа во время выполнения может в зависимости от ситуации и параметров генерировать код, компилировать и выполнять его.
ev.Usings.Add("System");
ev.Eval("for (int i = 0; i < 10; ++i) Console.WriteLine(i * i);");
Было много еще всего вкусного. Рекомендую сходить на сайт http://platforma2009.ru и узнать больше.