Page 2 of 3

Re: Kofee - Flash player

Posted: Thu Oct 07, 2010 6:36 pm
by Asper
art_zh wrote:Пока можешь работать со страничками, только помечай где в коде надо будет переделывать на malloc()
Если нет других вариантов, то похоже, что так и придётся делать.

Re: Kofee - Flash player

Posted: Thu Oct 07, 2010 9:02 pm
by Mario
ЕМНИП когда еще не было 68 функции для управления памятью, был какой-то менеджер памяти для приложений основанный на 64 функции. Может у кого сохранился его код исходный.

UPD Вот тема viewtopic.php?f=2&t=146

Re: Kofee - Flash player

Posted: Thu Oct 28, 2010 2:54 pm
by Asper
Сделал DisplayList и Dictionary. Каждый элемент этих двух структур занимает одну страницу памяти, но в принципе я придумал как использовать "лишнюю" память, по крайней мере для Dictionary. Можно записывать туда предварительно объявляемый обьект в удобной для последующей обработки структуре. Сейчас элемент Dictionary имеет такую структуру:

Code: Select all

; Dictionary Item:
;     .CharacterId  dw ?
;     .Type         dw ?
;     .Address      dd ?
а элемент DisplayList такую:

Code: Select all

; DisplayList Item:
;     .CharacterId  dw ?
;     .Depth        dw ?
;     .Address      dd ?
Сделал (частично) парсинг Shape. Только Shape с Newstyles ещё не поддерживаются.
Прикрутил графическую библиотеку Buf2D. Как оказалось она замечательно подходит для флеша!
Функции линии, кривой Безье по трём точкам, рисование в памяти, возможность сбрасывать изображение из одного буфера в другой, это как раз то, что нужно. В настоящее время не хватает возможности указывать толщину линии и функций заливки.

Временно сделал рендеринг Shape'ов в один общий буфер на этапе объявления (DefineShape, DefineShape2, DefineShape3). Обрабатываются линии и кривые Безье, цвета линий пока ещё не задаются как следует. Буфер изображения не очищается, так что вся графика накладывается друг на друга, а не "анимируется". В парсере ещё есть несколько ошибок, из-за которых плеер иногда вылетает (потом исправлю).

Надо будет сделать:
1. Отдельный буфер изображения под каждый Shape.
2. Трансформацию Shape на этапе помещения в DisplayList.
3. Очищать общий буфер изображения при входе в ShowFrame.
4. В ShowFrame скидывать изображения из буферов изображений, записанных в DisplayList в общий буфер (ImageBuffer0).
5. Добавить задание цветов и толщины линий, заливку, градиенты и битмапы, вывод звука и т.д.
6. Исправить имеющиеся ошибки в парсере.
KOFEE.7z (40.22 KiB)
Downloaded 369 times
Здесь 3 swf файла для примера.
testfiles.7z (41.22 KiB)
Downloaded 359 times

Re: Kofee - Flash player

Posted: Thu Oct 28, 2010 2:59 pm
by Asper
Вот так они должны выглядеть:
Spoiler:
Файл сделанный по заказу Gluk'a :)
1mn_1.PNG (10.42 KiB)
Файл сделанный по заказу Gluk'a :) Viewed 8348 times
Spoiler:
Пример из спецификации на формат SWF от компании Adobe
Adobe_1.PNG (4.87 KiB)
Пример из спецификации на формат SWF от компании Adobe Viewed 8348 times
Spoiler:
Информация на одну из лучших демок
Heaven7_1.PNG (34.35 KiB)
Информация на одну из лучших демок Viewed 8348 times

Re: Kofee - Flash player

Posted: Thu Oct 28, 2010 3:05 pm
by Asper
а вот так их сейчас показывает Kofee:
Spoiler:
Файл сделанный по заказу Gluk'a :)
1MN.PNG (6.96 KiB)
Файл сделанный по заказу Gluk'a :) Viewed 8345 times
Spoiler:
Пример из спецификации на формат SWF от компании Adobe
ADOBE.PNG (6.12 KiB)
Пример из спецификации на формат SWF от компании Adobe Viewed 8345 times
Spoiler:
Информация на одну из лучших демок
HEAVEN7.PNG (22.01 KiB)
Информация на одну из лучших демок Viewed 8345 times

Re: Kofee - Flash player

Posted: Fri Oct 29, 2010 4:04 pm
by Mario
Asper
Если есть необходимость, могу прикрутить OpenDialog. Load_Lib уже используется, а данные для Proc_Lib много места не займут. Вообще наверное пора над интерфейсом поработать и залить исходники на SVN, если не против.

Re: Kofee - Flash player

Posted: Fri Oct 29, 2010 4:55 pm
by Asper
Mario
Если хочешь прикрути OpenDialog и залей на SVN. Только код ещё будет сильно видоизменён, с учётом всего вышеперечисленного.

Re: Kofee - Flash player

Posted: Fri Oct 29, 2010 5:01 pm
by Mario
Ну, я надеюсь ты не глядя заливать на SVN не станешь.
И потом уже будешь работать с той версией. Иначе весь смысл потеряется.

Re: Kofee - Flash player

Posted: Fri Oct 29, 2010 5:05 pm
by Asper
Mario wrote:Ну, я надеюсь ты не глядя заливать на SVN не станешь.
И потом уже будешь работать с той версией. Иначе весь смысл потеряется.
Естесственно. Я хотел сказать, что текущие исходники ещё очень сырые.

Re: Kofee - Flash player

Posted: Sat Oct 30, 2010 1:26 am
by IgorA
Посмотрел рисунки в сообщении:
Asper wrote:а вот так их сейчас показывает Kofee:
Меня смущает то что 3-й круг получился разорванным ... Сразу возникает вопрос: допустил ли я ошибку при программировании функции buf2d_circle ?

Re: Kofee - Flash player

Posted: Sat Oct 30, 2010 12:01 pm
by Gluk
IgorA, насколько я понимаю (из недавнего сообщения Asper'а), в SWF нет такого примитива, как окружность, и она рисуется с помощью кривых Безье.

Re: Kofee - Flash player

Posted: Sat Oct 30, 2010 1:50 pm
by Asper
Gluk правильно понимает. Круг состоит из 8 кривых Безье, это и в спецификации на SWF есть. Ошибка вероятнее всего у меня в парсере, и это не третий, а первый круг. От библиотеки Buf2D нужно будет ещё задание толщины линий и разные заливки:
1. Сплошная заливка указанным цветом
2. Разного рода градиентные заливки
3. Заливка битмапом

Re: Kofee - Flash player

Posted: Sat Oct 30, 2010 5:48 pm
by IgorA
Asper wrote:Круг состоит из 8 кривых Безье
это хорошо а то я подумал что глючит функция рисования окружности
Asper wrote:нужно будет ещё задание толщины линий
думаю есть 2 пути решения:
1) сделать кисть в виде окружности, которую вызывать при прорисовке вместо функции ставящей 1-ну точку (сейчас рисование линий сделано через 1-ну точку). Недостатком может быть медленная прорисовка, т. к. большинство точек кисти будут совпадать.
2) найти какие-либо специальные алгоритмы для рисования толстых линий (возможно даже сглаженных, с заданием дробной толщины линии), тут без fpu не обойтись
Asper wrote:и разные заливки
В заливке самое главное правильно определить пиксели, которые будут заливаемыми. Когда-то я программировал на С++ рекурсивный алгоритм для заливки контура, ограниченного определенным цветом. Тот алгоритм я не хочу использовать, т. к. в нем выделялся массив для заливаемых точек, и чем больше закрашиваемая область тем больший объем памяти требовался для заливки.

Re: Kofee - Flash player

Posted: Sun Oct 31, 2010 2:20 am
by Nable
специальные алгоритмы для рисования толстых линий (возможно даже сглаженных, с заданием дробной толщины линии), тут без fpu не обойтись
Вот уж где FPU не нужен, для таких вещей как раз используют Fixed-point math.
http://algolist.manual.ru/graphics/painting/line.php
http://enlight.ru/demo/faq/smth.phtml?q ... tialiasing (вот это долго искал)
http://enlight.ru/demo/faq/smth.phtml?query=alg_line_aa (вот это то что нужно)
Хотя, по факту это уже давно задача GPU...

Re: Kofee - Flash player

Posted: Sun Oct 31, 2010 9:56 am
by Asper
IgorA
Насчет толщин линий посмотри то, что предлагает Nable.
Насчёт заливок, хранить массив заливаемых точек абсолютно не нужно.
Например алгоритм сплошной заливки примерно следующий (не проверял).

Code: Select all

int ResetColor (x,y,fillcolor, backcolor)
{
   c1=GetColor(x,y);
   if (c1!=backcolor) return 0;
   SetColor(x,y,fillcolor);
   return 1;
}

void FloodFill (int x, int y, int fillcolor, int backcolor)
{
   int result;
   SetColor(x,y,fillcolor);
   //Рекурсивный алгоритм по 4 соседним точкам
   result=ResetColor(x-1,y,fillcolor,backcolor);
   if (result) FloodFill(x-1,y,fillcolor,backcolor);

   result=ResetColor(x,y-1,fillcolor,backcolor);
   if (result) FloodFill(x,y-1,fillcolor,backcolor);

   result=ResetColor(x+1,y,fillcolor,backcolor);
   if (result) FloodFill(x+1,y,fillcolor,backcolor);

   result=ResetColor(x,y+1,fillcolor,backcolor);
   if (result) FloodFill(x,y+1,fillcolor,backcolor);
}