К сожалению мне пришлось остановить свои работы по раскапыванию форматов ассетов 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);
можем просто написать
Ура товарищи.
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 и узнать больше.