Страница 5 из 9

Re: CRUSIS 9000

СообщениеДобавлено: 20.09.2013 19:42:44
hinst
я помню, ты что-то писал о некоем ручном подсчёте ссылок, можешь плз сказать, в каком файле у тебя код, ответственный за это? хочу сравнить с теми реализациями, над которыми я раздумывал

Re: CRUSIS 9000

СообщениеДобавлено: 20.09.2013 20:06:15
runewalsh
hinst
ВНИМАНИЕ! КОНЦЕНТРАЦИЯ ВЕЛОСИПЕДОВ В МОДУЛЕ ЗАШКАЛИВАЕТ
https://sourceforge.net/p/rr-rr/code/45 ... m.pas#l257
Здесь это tObject и несколько функций после него. Писал уже довольно давно и не все решения показали себя удачными. Например, типичная работа со ссылкой выглядит как
Код: Выделить всё
link = MakeRef(QueryObject() {refcount = 0!} ); // refcount = 1
DoWork(link);
Release(link); // refcount = 0

а у нормальных людей —
Код: Выделить всё
link = QueryObjectRef(); // refcount = 1
DoWork(link);
Release(link); // refcount = 0

Сейчас мне мой вариант нравится меньше, выбрал его из-за "симметричности", что ли, более того, без дополнительных мер он потоконебезопасен — между QueryObject и MakeRef ссылка может застрять с refcount = 0, и если кто-нибудь в это время её захватит и освободит... Но парадигму я уже вряд ли буду менять глобально — просто тем немногим функциям, которые должны потокобезопасно возвращать reference-counted объект, меняю поведение на второй вариант. (пример).

Re: CRUSIS 9000

СообщениеДобавлено: 22.09.2013 00:58:15
runewalsh
Научился паковать атласы (http://clb.demon.fi/files/RectangleBinPack.pdf).

Re: CRUSIS 9000

СообщениеДобавлено: 23.09.2013 20:46:28
runewalsh
Курю freetype.
Onryou — такой-то шрифт, а русский для галочки прикрутили.

Re: CRUSIS 9000

СообщениеДобавлено: 25.09.2013 01:24:06
runewalsh
Вменяемые TrueType-шрифты в адаптивных ленивых атласах, не то что раньше.

Re: CRUSIS 9000

СообщениеДобавлено: 25.09.2013 16:50:35
Mirage
Что, и кернинг поддерживается?
Даёшь сорцы на GitHub!
FreeType, кстати какой версии? Тот, что на паскаль портирован или сишная либа?

Re: CRUSIS 9000

СообщениеДобавлено: 26.09.2013 02:55:33
runewalsh
Mirage писал(а):кернинг

Угу, только что добавил поддержку кернинговых пар.
Mirage писал(а):FreeType, кстати какой версии? Тот, что на паскаль портирован или сишная либа?

Последней стабильной с их сайта (2.5.0.1 или какая там), заголовок скопипастил руками из API reference — во-первых, только то, что нужно, во-вторых, чтобы наружу выставить сразу обёртку. https://sourceforge.net/p/rr-rr/code/45 ... eeType.pas

Re: CRUSIS 9000

СообщениеДобавлено: 02.10.2013 22:21:37
runewalsh
Вынес оконный цикл в отдельный поток. Просьба потестить вообще, а особенно на XP с window.allowMT = true в конфиге.

Re: CRUSIS 9000

СообщениеДобавлено: 03.10.2013 00:49:28
debi12345
Научился паковать атласы (http://clb.demon.fi/files/RectangleBinPack.pdf).

Хм, не знал, что даже под это подвели научную базу. Взято на заметку.

Re: CRUSIS 9000

СообщениеДобавлено: 03.10.2013 03:49:29
runewalsh
debi12345
...Насколько эмпиричненькой такой эвристике подходит описание "научная база". ^^"
Завтра покурю кондишон вариэйблс короче.

Re: CRUSIS 9000

СообщениеДобавлено: 04.10.2013 11:16:15
debi12345
Если бы еще можно было расставлять картинки не в порядке убывания или возрастания размера, а псевдо-рандомно...

Добавлено спустя 4 минуты 55 секунд:
Хотя ипользуя мощь современных компов, можно любые относитель небольшие расстановки и прочие законы распределения делать просто перебирая случайные варианты, пока не выпадет нужный - еснно с заданной погрешностью (иначе возможен бесконечный цикл). Именно так в свое время сделал симулятор гауссового распределения - эмулятор эспериментальных "измерений" под заданный конечный результат :)

Re: CRUSIS 9000

СообщениеДобавлено: 07.10.2013 00:38:47
runewalsh
debi12345 писал(а):делать просто перебирая случайные варианты

Замечательное решение NP-сложной задачи, ага. Особенно когда элементов меньше 5. ;3

Переписал события на condition variables (Vista+). В 2 раза быстрее, так-то.

Re: CRUSIS 9000

СообщениеДобавлено: 08.10.2013 03:40:32
runewalsh
ВНЕЗАПНО! Добавил в движок сущность condition variable наравне с event и почти всё на них переписал. CV — классные.
P.S. CV на XP эмулируются ивентами, ивенты на Vista+ эмулируются CV. :‐) Embarcadero так умеет?

Re: CRUSIS 9000

СообщениеДобавлено: 08.10.2013 18:10:19
kipar
runewalsh писал(а): CV на XP эмулируются ивентами

Embarcadero умеет.
Код: Выделить всё
InitializeConditionVariableProc := GetProcAddress(Module, 'InitializeConditionVariable'); // do not localize
  if @InitializeConditionVariableProc = nil then
  begin
    InitializeConditionVariableProc := InternalInitConditionVariable;
...

В обратную сторону видимо нет, хотя вроде есть TConditionVariableMutex.

Re: CRUSIS 9000

СообщениеДобавлено: 08.10.2013 18:31:32
runewalsh
kipar писал(а):Embarcadero умеет.

:OKAY:
В обратную не особо и нужно, на самом деле — заметно быстрее "ядерных" ивентов, но пролетают MsgWait* и, отчасти, WaitForMultipleObjects.