|
07.12.2014
Дальнейшие новости и обсуждение - на форуме freepascal.ru
11.01.2014
Публичный тест №16 (скачать, 2.3Мб). Рендер в текстуру, автонастройка качества графики, адаптивный суперсэмплинг с множественной выборкой через пиксельный шейдер.
10.11.2013
Столкнулся с двумя, мягко говоря, странностями при тестировании в 32-битном вайне под 64-битной дебиан 7.2 wheezy. Первая приводила к EFileCreateError при попытке записи в ini файл. Сколько сил потратил пока докопался, что это взбрык sshfs/fuse и при копировании на локальный диск всё пучком. Вторая - куда более серьёзная, повисание при выходе. Висла критическая секция, вайн выводил в бесконечном цикле
err:ntdll:RtlpWaitForCriticalSection section 0x1d4148 "?" wait timed out in thread 0009, blocked by 3d3d3d3d, retrying (60 sec)
Переделал с голой TRTLCriticalSection на класс-обёртку TCriticalSection из модуля syncobjs - всё заработало.
Двадцать FPS - это, конечно, жесть. Но что вы хотите, фрёвая OpenGL хоть и 2.0
06.01.2010
Наконец-то добил не ловящиеся исключениями в DLL! Немного возни с исходниками модуля System - и готов очень простой хак, полностью решающий проблему. Надо было всего лишь установить собственный хандлер системных исключений, который проверяет, принадлежит ли адрес исключения моей dll, и если да - подменяет адрес возврата на процедуру, поднимающую в Dll языковое исключение. Которое уже отлично ловится всеми блоками try
26.12.2008
Я совершил ужасное надругательство над своим резервным компьютером... Но зато теперь я точно знаю, что Чентра работает под свежеустановленной, безо всяких апдейтов и дополнений, Windows 98 SE (эх, ностальгия...). Единственное, что я доставил - это драйвер видеокарты с сайта nVidia (Вот кто бы подумал, что для старушки 98 есть-таки поддержка OpenGL 2.0!)
18.08.2008
Снёс под Линуксом Free Pascal 2.2.0, установил 2.2.2. Размер dll игрового модуля ухнул вниз с 1800 до 700 килобайт, что не могло не порадовать. А вот модуль-матка перестал линковаться. Оказалось - виновата библиотека Vampyre Imaging, точнее её расширение для работы с jpeg2000 - прилинкованная библиотека OpenJpeg в виде внешних объектных файлов, скомпилированных в c++. Естественно, те зависят от сишной ртл, и в соотв. юните вампыра стояло {$linklib stdc++}. В фпц 2.2.0 всё прокатывало на ура. В фпц 2.2.2 полезли вопли линкера о не найденных символах. Поиск в гугле дал, что не хватает сишных математических библиотек. Я так понимаю, что от этого размер екзешников так и уменьшился: раньше фпц использовал сишные библиотеки, теперь - больше не использует.
Я плюнул, переделал тот юнит вампыра под динамическую загрузку, нашёл libopenjpeg.so, и стал грузить её. А она не грузится! dlopen() не срабатывает, и всё. Полез за объяснениями в dlerror(). Та сообщила, что не найден символ Floor. Полез в гугль. Получил: моя программа слинкована без сишных библиотек. Первый раз встречаю такую хрень, чтобы длл что-то ожидала найти в екзешнике %(
Стал рыть Инет дальше, и узнал о дополнительном параметре для dlopen()
Если упрощённо, то
dll2:= dlopen(PChar(libstdc++.so.5), RTLD_NOW or RTLD_GLOBAL);
dll := dlopen(PChar(libopenjpeg.so), RTLD_NOW or RTLD_GLOBAL);
И вот это RTLD_GLOBAL заставляет дллы искать у друг дружки недостающие зависимости.
28.07.2008
Испытал под пользователем с именем из иероглифов: «山田» (Ямада). Движок правильно заругался на недопустимое имя пользователя, не представимое в 8-битной кодировке, и не пошёл: путь к папке этого пользователя в «Documents And Settings» оказался содержащм знаки вопроса. Но что самое странное - имя пользователя тоже оказалось «??», хотя я вроде бы использую GetUserNameW(). Чудеса WinAPI?
27.07.2008
Очередное супер-извращение: виндовая версия не только умеет обнаруживать, что запущена из под линукса, но и пытается хитрожопым методом добраться до домашней папки пользователя, и хранить все данные там.