[Wine-devel] Мы провели совещание по скорейшему переходу на DIBEngine

Vitaly Lipatov =?iso-8859-1?q?lav_=CE=C1_etersoft=2Eru?=
Пн Янв 12 13:54:19 MSK 2009


Вопрос по состоянию DIB и принятию срочных мер по размещению всех наработок в нашем публичном репозитории.
Наработки есть, но они сделаны на основе репозитория Jesse Allen и  Huw Davies, то есть со старой структурой (в виде драйвера DIBDRV)
Massimo Del Fedele работает, взяв за основу упомянутые репозитории, но ни ответа ни принятия его патчей пока не произошло и вряд ли произойдет (он не отказался от идеи с драйвером).
Нам нужно сделать так, чтобы можно было постепенно переключать функции DIB на DIBEngine с их текущей реализации через драйвер X11DRV.
Решили создать отдельную ветку dibengine в http://git.etersoft.ru/projects/eterwine.git для разработки DIB.


Полезная часть обсуждения:

[16:22:08] <lav> Вопрос по состоянию DIB и принятию срочных мер по размещению всех наработок в нашем публичном репозитории
[16:23:01] <chi> наработки есть но они сделаны на основе репозитория Jesse Allen и  Huw Davies то есть со старой структурой
[16:24:22] <chi> по крайней мере надо сделать так чтобы можно было нереализованные функции страховать драйвером X11
[16:24:40] <lav> Да, эту задачу мы с Ильёй берём на себя
[16:25:03] <lav> Но нужно добавить функции DIB Engine в gdi32, чтобы было что вызывать
[16:25:42] <chi> Massimo Del Fedele праллельно работает также взяв за основу упомянутые репозитории, но ни ответа ни принятия его патчей пока не произошло и вряд ли произойдет. Он кстати почему-то 
проигнорировал ранние сообщшения о том что надо переделвыать структуроу
[16:26:55] <lav> Я думаю в этих условиях мы должны проявить больше активности

Я смотрел код, и предположил, что нужно ввести новую функцию, которая будет заполнять funcs определённым образом:
+++ b/dlls/gdi32/dc.c
@@ -784,7 +784,7 @@ HDC WINAPI CreateCompatibleDC( HDC hdc )
             physDev = origDC->physDev;
         }
         release_dc_ptr( origDC );
-        if (funcs) funcs = DRIVER_get_driver( funcs );
+        if (funcs) funcs = DRIVER_get_dib_driver( funcs );
     }

[16:27:35] <lav> Чтобы поэкспериментировать, мне нужны функции в репозитории.
Будем мы выделять для DIB отдельную ветку, или будет достаточно eterwine ?
[16:28:02] <chi> работающие функции DIB Engine?
[16:28:07] <chi> достаточно
[16:28:20] <kondratyuk> DIB сам по себе ведь ничего не затронет кардинально? Зачем новую ветку делать?
[16:29:17] <shpigor> Думаю новая ветка не нужна. Пока замены funcs не будет - ничего не изменится.
[16:29:39] <kondratyuk> Да, именно это я и имел ввиду
[16:30:31] <chi> а в случае если контекст другого устройства? Получается он в любом случае будет вызывать DRIVER_get_dib_driver( funcs );
[16:31:11] <lav> Какого другого устройства?
[16:31:22] <kondratyuk> Принтера, например
[16:31:32] <lav> Это CreateCompatibleDC - создание именно контекста работы в памяти
[16:31:59] <kondratyuk> А почему тогда страховаться иксовыми функциями?
[16:32:19] <chi> потому что сейчас все функции DIB берет на себя драйвер X11
[16:32:22] <kondratyuk> Хотя мы тогда просто получим проблемы, как в #664, так что всё правильно
[16:32:36] <shpigor> Получается надо переназначать funcs под каждый контекст?
[16:34:08] <chi> если это контекст работы в памяти то по идее функции должны быть для всех одни и те же
[16:34:31] <lav> Так, сейчас так и есть, funcs заполняется для каждого контекста
[16:34:43] <lav> Да, функции одни и те же.
[16:35:01] <lav> Я только не очень понимаю, чем compat DC для экрана отличается от него же для принтера.
[16:35:32] <chi> а ты уверен
[16:35:39] <chi> что CreateCompatibleDC - создание именно контекста работы в памяти
[16:35:47] <kondratyuk> Я уверен
[16:36:10] <kondratyuk> Хотя могу уверенно ошибаться :)
[16:36:38] <kondratyuk> Идея совместимого DC - это получить те же функции
[16:36:51] <kondratyuk> У контекста принтера нет, например, GetPixel()
[16:37:07] <kondratyuk> В у экрана есть
[16:37:36] <kondratyuk> Так что funcs одни и те же ли для всех контекстов?
[16:38:00] <chi> видимо надо отобрать те которые являются общими
[16:39:17] <kondratyuk> Я не очень хорошо помню, как поддерживаемость той или иной функции определяется
[16:40:13] <kondratyuk> А про CompatibleDC нужно просто подробнее почитать. Я разбирался, но это было ещё до идеи с DIB
[16:40:52] <chi> сейчас я  я открою книгуя тоже читал но подзабыл
[16:41:17] <kondratyuk> Литературный тайм-аут :)
[16:43:11] <chi> www.ict.edu.ru/ft/002400/num5grwin.pdf
[16:44:59] <chi> контекст устройства - это структура данных, сод. инфу о параметрах и атрибутах вывода графики на устройство
[16:45:09] <chi> 5 типов контекста
[16:45:29] <lav> funcs для любого memdc одни и те же
[16:45:52] <chi> 4 группы функции для вывода графики. 4-й тип - это для работы с растром, туда ка краз и входит GetPixel про котоырй ты говорил
[16:46:19] <lav> Я так понимаю идея совместимого DC только в том, что с него потом проще (дешевле) копировать в контекст устройства
[16:46:20] <chi> memdc - контекст виртуального устройства в памяти.
...
[16:55:41] <shpigor> У меня есть прделожение. Сергей, ты не мог бы приложить все, что у тебя есть к ветке wine и опубликовать репозиторий.
[16:55:55] <lav> Конкретнее надо
[16:55:57] <shpigor> Просто так бы разговор был более предметный
[16:56:19] <lav> клонируем eterwine - http://git.etersoft.ru/projects/eterwine.git
[16:56:35] <lav> и прикладываем туда все изменения, потом публикуем
...
[16:57:57] <chi> то есть у нас будет wine который будет с DIB Engine но с нереализованным большинством функций
[16:58:13] <chi> хорошо тогда создаем новую ветку и туда будем складывать все наработки
[16:58:49] <chi> и 2 задачи котоыре стоят щас: это передлка основной структуры и сделать так чтобы была возможность переключения выполнения тех функций которые еще не работают, на дарйвер X11
[17:17:43] <shpigor> Может вообще все funcs перекинуть на X11 и переходить на dib engine постепенно - по мере реализации нужных функций?
[17:18:59] <shpigor> Т.е. есть некоторые функции, которые хотелось бы сделать по-быстрее, т.к. они критически влияют на работу некоторых приложений, а некоторые не так важны. 
[17:19:33] <chi> они и так там есть, надо внести временные коррективы по их вызову. Потому сейчас либо вызываются только функции X11 либо только DIB. А так да можно ыот бы добавить в функцию признак ее 
выполняемости
[17:22:56] <shpigor> То есть мы не можем набрать для одного контекста массив funcs из X11 и из DIB одновременно? Дело в том, что если функция в DIB есть, но не работает может вообще ее не стоит вызывать?
[17:25:35] <chi> насчет одновременно неуверен, мне кажется, что нет, потому что при создании контекста он сразу подключается к тому или другому драйверу и берет funcs уже из него
[17:26:26] <chi> единст венное что если возможно внедрение DIB внутрь GDI тогда может быть получится чтобы функции брались частично от dib частично от x11
[17:30:00] <lav> > [17:17:43] <shpigor> Может вообще все funcs перекинуть на X11
именно так я и предлагаю
[17:30:14] <lav> funcs нужно создавать новый и заполнять его смешанно, особой проблемы тут нет
...
[17:45:52] <lav> Я думаю, что надо для каждого funcs (просто по адресу) создавать funcs_dibengine и всё
[17:45:59] <chi> то есть ты хочешь чтобы DRIVER_get_dib_driver возвращал смешанный набор функцйий?
...
[17:48:36] <chi> но за основу мы получается возьмем текущие мои разработки по DIB. Там есть некоторые реализованные фукнции

{{backlinks}}

-- 
С уважением,
Виталий Липатов
Россия, Санкт-Петербург. www.etersoft.ru
GNU! ALT Linux Team! WINE! WIKI! LaTeX! LyX!


Подробная информация о списке рассылки Wine-devel