Вход:  Пароль:  
FreeSource: WINE/Разработчику/Изображения ...
Free Source | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация |

Проблемы с изображением

Ситуация с DIB


Есть DC. Он связан с устройством, и его обрабатывают функции драйвера (WINEX11).
Созданный на его основе Compatible DC? (memdc), выполняющий все операции над DIB (в памяти), должен обрабатываться функциями DIB Engine.
В gdi32 вызов нужной функции драйвера происходит на основе таблицы с функциями, указатель на которую (dc->funcs) хранится в объекте. Если функция присутствует, она вызывается. Если функции нет, возможно использование альтернативной реализации прямо из gdi32.


Последняя реализация использует хак в Select Object?, которая если вызвана для memdc, подгружает драйвер DIB, его функции попадают в таблицу, и далее для этого объекта вызываются только функции DIB Engine.


Наша цель в этой таблице функций (для memdc) постепенно (по мере разработки) подменять функции драйвера на функции DIB Engine.


CyrilMargorin /11.10.2008 11:48/
Есть ли для этого Test cases? Сегодня к вечеру попробую просмотреть, чтобы понять выше написаное (без кода, описание не совсем понятно).


Кирилл, я уже и потерял связь давно... Может быть спишемся, или в аське/джаббере? JID: lav@im.etersoft.ru


CyrilMargorin /11.10.2008 17:56/
К сожалению, из дома в аське стараюсь не сидеть (ибо она у меня рабочая). Джаббер соответсвует е-мылу: comargo@gmail.com, но тоже забываю включить дома. На работе включена всегда.
Сейчас пока включил.


Некие проблемы с графикой


Проблемы с изображением можно увидеть на


Ситуация:
1. код около функции BITMAP_Object неверный
2. патч тоже неверный
3. в /wine/dlls/gdi/tests/bitmap.c
должны быть тесты об этом, они тоже неверные (если их исправить, они должны работать на Windows и не работать в wine)


Патч, корректирующий проблему для КОМПАСА


//Похоже надо через таблицу цветов превращать из 24х битовой в 4х битовую....
При этом надо учитывать, что кроме 24х битового дисплея бывает еще и 32 и 16.... а иногда и 8ми.....
В теории можно повнимательней просмотреть код около функции X11_GetDIBits() (или как то так она называется) и еще (скорее всего) необходимо сделать схожие изменения в функции X11_SetBitmapBits...//


CyrilMargorin /10.12.2005 01:38/
Появилась для обсуждение идея, перевести функцию CopyImage с Get/SetBitmapBits на Get/SetDIBits. Попытка сделать это в общем-то была успешна....




CyrilMargorin /13.02.2006 23:32/
После дальнейшего исследования проблемы с пропавшей заставкой в
Компасе выяснилось, что проблема состоит в том, что функция Get DI Bits?
возвращает «черную» картинку.
При этом, компиляция wine с выключенной поддержкой Shared Memory
картинку проявило.
Таким образом наткнулись на следующий момент
Есть следующий код:
dlls/x11drv/dib.c функция X11DRV_DIB_GetImageBits


В случае, если descr->image равен нулю, создается новый XImage, без поддержки Shared Memory, но если был передан параметр useShm, для получения XImage из Pixmap используется функция с поддержкой Shared Memory, которая есстественно не срабатывает в данном случае. (Схожий код исспользуется в X11DRV_DIB_SetImageBits).
Таким образом, первый патч заключается в проверке, создавалася ли XImage локально, или исспользовался внешний?

Внимание вопрос: А может быть имеет смысл попытаться создать Shared Memory XImage? Или эта операция недостаточно быстрая и будет тормозить систему?


Второй момент:
В функции X11DRV_GetDIBits при заполнении структуры X11DRV_DIB_IMAGEBITS_DESCR descr в поле image записывался NULL. Соответственно было изменено на существующий XImage из physBitmap.

Внимание вопрос: А в функции X11DRV_SetDIBits тоже наверно надо передавать image из physBitmap?


Оба патча вошли в репозиторий cvs.winehq.org 13 февраля 2006.


Страницы, ссылающиеся на данную: WINE/Разработчику


 
Файлы [Скрыть файлы/форму]
Много комментариев (7). [Показать комментарии/форму]