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. Исправить имеющиеся ошибки в парсере.
Здесь 3
swf файла для примера.
Re: Kofee - Flash player
Posted: Thu Oct 28, 2010 2:59 pm
by Asper
Вот так они должны выглядеть:
Spoiler:
-
1mn_1.PNG (10.42 KiB)
Файл сделанный по заказу Gluk'a :) Viewed 8441 times
Spoiler:
-
Adobe_1.PNG (4.87 KiB)
Пример из спецификации на формат SWF от компании Adobe Viewed 8441 times
Spoiler:
-
Heaven7_1.PNG (34.35 KiB)
Информация на одну из лучших демок Viewed 8441 times
Re: Kofee - Flash player
Posted: Thu Oct 28, 2010 3:05 pm
by Asper
а вот так их сейчас показывает
Kofee:
Spoiler:
-
1MN.PNG (6.96 KiB)
Файл сделанный по заказу Gluk'a :) Viewed 8438 times
Spoiler:
-
ADOBE.PNG (6.12 KiB)
Пример из спецификации на формат SWF от компании Adobe Viewed 8438 times
Spoiler:
-
HEAVEN7.PNG (22.01 KiB)
Информация на одну из лучших демок Viewed 8438 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);
}