Страница 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
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
Хм, не знал, что даже под это подвели научную базу. Взято на заметку.
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.