wine > 1.2 + freenx (rx) = смерть приложения

Модераторы: dimbor, Модераторы разделов

redtex
Сообщения: 7

wine > 1.2 + freenx (rx) = смерть приложения

Сообщение redtex »

Собственно... есть приложение, написано на Delphi XE2, работает под wine + nx, и все бы ничего, но с переходом с Delphi 2007 -> Delphi XE2 и апгрейде wine 1.2.3 на wine 1.3.37 - 1.4 - 1.5.4 приложение в неожиданных местах молча вываливается, при этом в консоль пишется:

Код: Выделить всё

X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  149 (RENDER)
  Minor opcode of failed request:  34 (RenderCreateLinearGradient)
  Value in failed request:  0x0
  Serial number of failed request:  83569
  Current serial number in output stream:  83613

Причем вот тут пишут, что подобное происходит и с 1С.
Самое что интересное, при даунгрейде до wine 1.2.3 проблема исчезает. Так же пробема не наблюдается под wine@etersoft 2.0
Проблема явно в nxagent - чего то он в X протоколе не поддерживает.... Пробовал NX 3.4, 3.5, даже NX server от Nomachine (который бесплатный на 2 пользователя) - везде результат один и тот же. С этим надо что-то делать..... т.к. останавливаться на wine 1.2.3 или идти в проприетарщину в век, когда корабли бороздят просторы большого театра... как то не комильфо :( Готов всячески способствовать решению - как морально, так и материально....
P.S. ОС - CentOS 6.2 x64, но люди пишут в вышеприведенной ссылке, что такое же наблюдается и в убунте.
Спасибо сказали:

Аватара пользователя
Bluetooth
Сообщения: 4395
Статус: Блюзовый
ОС: Debian Squeeze amd64

Re: wine > 1.2 + freenx (rx) = смерть приложения

Сообщение Bluetooth »

На данный момент есть проблемы с работой приложений под вайном этерсофт 2.0 в rx@etersoft. В этерсофте бьются над проблемой уже давно, решения пока нет.
На данный момент лучше использовать 1.0
в качестве костылей, не прокативших у меня в 1с, попробуйте тестинг версию rx, а также в клиенте поставить скорость подключения adsl.
Спасибо сказали:

dimbor
Ведущий рубрики
Сообщения: 1506
Статус: Подвинутый участник

Re: wine > 1.2 + freenx (rx) = смерть приложения

Сообщение dimbor »

redtex писал(а):
21.05.2012 23:33
Проблема явно в nxagent - чего то он в X протоколе не поддерживает....

Проще будет перечислить, что он поддерживает из этого самого протокола.
На самом деле X-протокол весьма прост низкоуровневый и поддерживается чуть менее чем полностью. Косяки в wm-ных надстройках над ним, которые идут каждая своим путем. А агент стоит на месте.

redtex писал(а):
21.05.2012 23:33
С этим надо что-то делать.....

Ловить и точечно давить. ;)
От тебя нужны следующие вещи:
а) Уверенное воспроизведение на твоем сервере. Уверенное - это хотя бы 0.8, чтобы месяцами в засаде не сидеть.
б) Вероятно ответы на мои идиотские вопросы по конструированию на нем стенда по сборке nx.
в) Помощь по пониманию таинств в программе, ведущих к краху.
г) Стопицот шанхайских тугриков ;)
д) Терпение на месяц-два по пессимистическим прикидкам. (Рад бы быстрее, но чет все стали на части рвать. Еще и помню, что опенэныкс обещал добить по печати.)
Спасибо сказали:

redtex
Сообщения: 7

Re: wine > 1.2 + freenx (rx) = смерть приложения

Сообщение redtex »

dimbor писал(а):
22.05.2012 04:56
а) Уверенное воспроизведение на твоем сервере. Уверенное - это хотя бы 0.8, чтобы месяцами в засаде не сидеть.


Все готово, отписал на почту.
Спасибо сказали:

dimbor
Ведущий рубрики
Сообщения: 1506
Статус: Подвинутый участник

Re: wine > 1.2 + freenx (rx) = смерть приложения

Сообщение dimbor »

Поглядел. Первые впечатления - мы не одни во вселенной (раз, два). Но это не обнадеживает ни капли. Обнадеживает по соседству с крахом приложения пресловутое
fixme:event:wait_for_withdrawn_state window .... wait timed out

Именно эта хрень с WM_STATE проела плешь при задержке закрытия окон под рутлесом. Буду дальше поглядеть.
Спасибо сказали:

Djelf
Сообщения: 614
ОС: Гигтег+Цшт32

Re: wine > 1.2 + freenx (rx) = смерть приложения

Сообщение Djelf »

redtex писал(а):
21.05.2012 23:33
Самое что интересное, при даунгрейде до wine 1.2.3 проблема исчезает. Так же пробема не наблюдается под wine@etersoft 2.0

Ничего удивительного в этом нет. В wine 1.2.3 функция XRenderCreateLinearGradient отсутствует как факт.

В более новых версия wine xrender.c оно заключено в
#ifdef HAVE_XRENDERCREATELINEARGRADIENT
LOAD_OPTIONAL_FUNCPTR(XRenderCreateLinearGradient);
#endif
посему видимо нестабильно, а вот вылетает на этой функции при включенном или выключенном Render extension...

А в NX-X11 вообще забавно: в серверной части render.c 10й версии с наличием RenderCreateLinearGradient, а в клиентской для win32 8й - без наличия RenderCreateLinearGradient

Можно попробовать в wine
[HKEY_CURRENT_USER\Software\Wine\X11 Driver]
"ClientSideWithRender"="N"

и/или во FreeNX
AGENT_EXTRA_OPTIONS_X=" -norender"
Спасибо сказали:

dimbor
Ведущий рубрики
Сообщения: 1506
Статус: Подвинутый участник

Re: wine > 1.2 + freenx (rx) = смерть приложения

Сообщение dimbor »

Djelf писал(а):
25.05.2012 15:40
Можно попробовать в wine
[HKEY_CURRENT_USER\Software\Wine\X11 Driver]
"ClientSideWithRender"="N"

Бинго! Ослы ему славу поют, козлы бородами дорогу метут... © Слушай, ну ваще: ты пришел и победил все баги одной левой!
Побежал хлопотать о выделении тебе медали!
Спасибо сказали:

Djelf
Сообщения: 614
ОС: Гигтег+Цшт32

Re: wine > 1.2 + freenx (rx) = смерть приложения

Сообщение Djelf »

А что падать перестало?
Спасибо сказали:

dimbor
Ведущий рубрики
Сообщения: 1506
Статус: Подвинутый участник

Re: wine > 1.2 + freenx (rx) = смерть приложения

Сообщение dimbor »

Перестало. Да только, как уже известно, сглаживание шрифтов идет в... лес.
Так я пока не понял - рендер без этого хренова градиента возможен?
Ночкой попробую выяснить, пользуясь твоими наводками. Или ты?
Спасибо сказали:

Djelf
Сообщения: 614
ОС: Гигтег+Цшт32

Re: wine > 1.2 + freenx (rx) = смерть приложения

Сообщение Djelf »

dimbor писал(а):
25.05.2012 20:11
Перестало. Да только, как уже известно, сглаживание шрифтов идет в... лес.
Так я пока не понял - рендер без этого хренова градиента возможен?
Ночкой попробую выяснить, пользуясь твоими наводками. Или ты?


Тут либо wine перекомпилировать, либо понижать версию nxserver (думаю это может помочь), либо повышать версию рендера в nxwin

Первый вариант самый быстрый и безболезненный.
По коду в Wine видно: 2 новых плюшки рендера могут быть совершенно безболезненно отключены вот таким образом.

Код: Выделить всё

wine\dlls\winex11.drv\xrender.c

#undef HAVE_XRENDERCREATELINEARGRADIENT
#undef HAVE_XRENDERSETPICTURETRANSFORM

Ну можно configure поковырять для тех же целей, результат будет тот же.
В этом случае все старые рендеры останутся работоспособными.

Понижать версию nxserver в принципе можно, но зачем?

Обновить рендер в nxcompat теоретически можно, но судя по характеру отличия кода рендера между nx-X11-3.5.0-2.tar.gz и nx-X11-compat-3.5.0-1.tar.gz это занятие не на 5 минут, иначе они бы сами обновли, и я совсем не уверен что оно сразу заработает и не вылезет еще где-то боком.

P.S. Сомнения в том так заработает, все расно есть, т.к. непонятно в какую сторону под NX идет условие
if (!pXRenderCreateLinearGradient) goto fallback;
проверять надо...
Спасибо сказали:

dimbor
Ведущий рубрики
Сообщения: 1506
Статус: Подвинутый участник

Re: wine > 1.2 + freenx (rx) = смерть приложения

Сообщение dimbor »

Увы, третий вариант неизбежен. Остальные - ретроградство. Если бы дело касалось вайна@, можно было бы попробовать договориться с собирающими, чтобы лень пересилила стремление к прогрессу. А так, получится глобальная попытка хвоста вилять собакой.
Закручивать nxagent тоже не выйдет. Там такие игрулечки с LD_PRELOAD, что я до сих пор так до конца и не вхекал, что приложение использует от системной серверной Xlib, а что - от nx-X11.
Надо лезть в compat. Но по идее в !M должны были уже нажаловаться.
Спасибо сказали:

Djelf
Сообщения: 614
ОС: Гигтег+Цшт32

Re: wine > 1.2 + freenx (rx) = смерть приложения

Сообщение Djelf »

1. Мы проверили что "ClientSideWithRender"="N" т.е. полное вырубание рендера - работает.
2. Мы НЕ проверили, прав ли я в том что #undef должен сработать.
3. Если (2) работает, то для w@e сделают минут за 10 новый ключ в wine.conf и там можно будет это вырубать.
4. Повторяю: if (!pXRenderCreateLinearGradient) goto fallback; меня напрягает! Пока (2) не проверено, точно не известно где происходит вылет!
5. Думаю, с впихиванием в nxwin нового рендера будет значительно хуже, чем выпиливание его (или частичная блокировка функций) в nxagent т.к. еще придется пилить и nxcomp.
6. Вся эта каша будет окончательно варится после успешного прохождения "make World", а это уже не серьезно - слишком долго! Т.е. еще надо все makefile переделывать. Для nxwin я переделал - шустро и удобно... но для всех каталогов nx-X11 :suicide2:

Компрессию в NX мы не трогали вообще никогда... это такая мутная штука... мне все это очень не нравитсо :crazy:
Спасибо сказали:

redtex
Сообщения: 7

Re: wine > 1.2 + freenx (rx) = смерть приложения

Сообщение redtex »

dimbor писал(а):
25.05.2012 21:38
Увы, третий вариант неизбежен. Остальные - ретроградство.

Согласен !!!!

dimbor писал(а):
25.05.2012 21:38
Если бы дело касалось вайна@, можно было бы попробовать договориться с собирающими, чтобы лень пересилила стремление к прогрессу.

Судя по всему, они сами до этого дошли - я же в начале темы писал, что данная проблема отсутствует в wine@etersoft 2.0

dimbor писал(а):
25.05.2012 21:38
Надо лезть в compat.

А это что такое ????

dimbor писал(а):
25.05.2012 21:38
Но по идее в !M должны были уже нажаловаться.

Видимо, нет :( В начале темы я написал, что скачал с сайта nomachine их бесплатный сервер - там та же фигура, что и в freenx.
Спасибо сказали:

dimbor
Ведущий рубрики
Сообщения: 1506
Статус: Подвинутый участник

Re: wine > 1.2 + freenx (rx) = смерть приложения

Сообщение dimbor »

redtex писал(а):
26.05.2012 12:54
dimbor писал(а):
25.05.2012 21:38
Надо лезть в compat.

А это что такое ????

Сокращение такое.
Сердцевинка иксов есть Xlib, номашиневский тарбол с переточенными для NX-сервера (==x-сервера 0==nxagent-a) старинными ее исходниками называется nx-X11. А уж совсем антикварная аналогичная хрень для виндового клиента (==х-сервера 1==nxwin-а) кличется nx-X11-compat.

Но дело совсем не в этом. Преодолел лень, достал свой нотебяк с линуксовым клиентом, посмотрел - бага есть и там. Т.ч. дело не в compat, или не только в ней.
Значит наш ход мысли зашел не в ту сторону. Значит думать надо прекратить, надо действовать. ;)

Наперво сейчас начну сооружать под тестовым центос последний nx. Что-то там было в CHANGELOG агентском про рендер. Совсем не факт, что поможет.
Вводить каждый раз пароль и тыкать кучу кнопок для наблюдения баги не дело. Поэтому имеется просьба redtex и его команде разработчиков в сооружении тестового приложения на тех-же дельфях.
Оно должно быть очень простым: при запуске автоматически открывать окно, рожденное из той-же компоненты, что и "типы столов", на этом окне аналогичная кнопка "добавить", в свою очередь открывающая аналогичный модал ввода текстовой строки. Больше там кода не надо никакого - только интерфейс. А то я даже украсть под винду имеющийся монстряк не смог - ему еще и Interbase нужон. И самое главное - оно должно также справно валиться.



Djelf писал(а):
25.05.2012 15:40
А в NX-X11 вообще забавно: в серверной части render.c 10й версии с наличием RenderCreateLinearGradient

Копать буду тута.
Спасибо сказали:

redtex
Сообщения: 7

Re: wine > 1.2 + freenx (rx) = смерть приложения

Сообщение redtex »

Djelf писал(а):
25.05.2012 23:09
2. Мы НЕ проверили, прав ли я в том что #undef должен сработать.

Работает


dimbor писал(а):
27.05.2012 00:54
Поэтому имеется просьба redtex и его команде разработчиков в сооружении тестового приложения на тех-же дельфях.

Программеры ленивые :( не хотят.... могу помочь перенести тестовое приложение на нужную платформу разработки....
Спасибо сказали:

dimbor
Ведущий рубрики
Сообщения: 1506
Статус: Подвинутый участник

Re: wine > 1.2 + freenx (rx) = смерть приложения

Сообщение dimbor »

redtex писал(а):
30.05.2012 19:59
dimbor писал(а):
27.05.2012 00:54
Поэтому имеется просьба redtex и его команде разработчиков в сооружении тестового приложения на тех-же дельфях.

Программеры ленивые :( не хотят....

Ух ты. Как знакомо. Да и еще и небось в количестве, потребном для закручивания лампочки, ленятся.
Им наверное будет неприятно узнать, что по результирующей лени они все пятеро просто щенки по сравнению со мной и Djelf.

redtex писал(а):
30.05.2012 19:59
могу помочь перенести тестовое приложение на нужную платформу разработки....

Дык, это... Свяжусь с тобой на этот предмет неспешно. ;)
Спасибо сказали:

Djelf
Сообщения: 614
ОС: Гигтег+Цшт32

Re: wine > 1.2 + freenx (rx) = смерть приложения

Сообщение Djelf »

redtex писал(а):
30.05.2012 19:59
Djelf писал(а):
25.05.2012 23:09
2. Мы НЕ проверили, прав ли я в том что #undef должен сработать.

Работает

Спасибо за подтвеждение гипотезы!

Значит, скорее всего, проблема не в NX а в wine!

Запускаем в консольке rendercheck из под NXWin и видим: рендер версии 8!
Т.е. rendercheck видит версию протокола конечного клиента! А Wine, видимо, на это плюет и кидает в клиент то, что он не умеет.
Спасибо сказали:

dimbor
Ведущий рубрики
Сообщения: 1506
Статус: Подвинутый участник

Re: wine > 1.2 + freenx (rx) = смерть приложения

Сообщение dimbor »

Djelf писал(а):
31.05.2012 02:17
Запускаем в консольке rendercheck из под NXWin и видим: рендер версии 8!
Т.е. rendercheck видит версию протокола конечного клиента! А Wine на это плюет и кидает в клиент то что он не умеет.

Кхм! Это что, в вайне рендерчек на дефайнах сделан? Заблаговременно, так сказать? ;)
Или если заставить агента ряпорьтовать 8-ю весию, все заработает?
Спасибо сказали:

Djelf
Сообщения: 614
ОС: Гигтег+Цшт32

Re: wine > 1.2 + freenx (rx) = смерть приложения

Сообщение Djelf »

dimbor писал(а):
31.05.2012 02:29
Djelf писал(а):
31.05.2012 02:17
Запускаем в консольке rendercheck из под NXWin и видим: рендер версии 8!
Т.е. rendercheck видит версию протокола конечного клиента! А Wine на это плюет и кидает в клиент то что он не умеет.

Кхм! Это что, в вайне рендерчек на дефайнах сделан? Заблаговременно, так сказать? ;)
Или если заставить агента ряпорьтовать 8-ю весию, все заработает?

Не... сейчас идет внедрение dib и довольно существенная переписка кода отрисовки: ошибки неизбежны...

Репортить... как? Я вообще не понимаю откуда и как wine берет версию протокола! Откуда берется значение pXRenderCreateLinearGradient на которое есть условие? Если бы pXRenderCreateLinearGradient было false то #undef бы не понадобился...

Ха... агент то может выдавать хоть сотую версию если захочет... имеет право: например этот градиент агент может преобразовать в битмап, сжать и плюнуть в клиент (возможно так менее накладно). Формально версия протокола будет соблюдена...
Спасибо сказали:

dimbor
Ведущий рубрики
Сообщения: 1506
Статус: Подвинутый участник

Re: wine > 1.2 + freenx (rx) = смерть приложения

Сообщение dimbor »

Djelf писал(а):
31.05.2012 02:42
Репортить... как? Я вообще не понимаю откуда и как wine берет версию протокола! Откуда берется значение pXRenderCreateLinearGradient на которое есть условие? Если бы pXRenderCreateLinearGradient было false то #undef бы не понадобился...

Ну если без смеха: Насколько я понял, pXRenderCreateLinearGradient - указатель на функцию. Т.ч. true/false некорректно, правильнее - NULL/не NULL. Ставится при инициализации вайна. А если там хоть какая-то проверка на версию есть, то не исключен вариант, что nx именно в этом случае не теребит клиент - сообщает агентскую.
Спасибо сказали:

dimbor
Ведущий рубрики
Сообщения: 1506
Статус: Подвинутый участник

Re: wine > 1.2 + freenx (rx) = смерть приложения

Сообщение dimbor »

--- Глупый вопрос, а где ты нонче исходники вайна берешь и почем? ;)
Спасибо сказали:

Djelf
Сообщения: 614
ОС: Гигтег+Цшт32

Re: wine > 1.2 + freenx (rx) = смерть приложения

Сообщение Djelf »

dimbor писал(а):
31.05.2012 03:00
не исключен вариант, что nx именно в этом случае не теребит клиент - сообщает агентскую.

Да мне не смешно... В том то и дело, что непонятно какую: системного xorg, nxagent`а или вообще из воздуха берет... но точно не из nxwin!

dimbor писал(а):
31.05.2012 03:08
--- Глупый вопрос, а где ты нонче исходники вайна берешь и почем? ;)

Ну да... 3 часа ночи уже.. приехали... http://sourceforge.net/projects/wine/files/Source/
Спасибо сказали:

dimbor
Ведущий рубрики
Сообщения: 1506
Статус: Подвинутый участник

Re: wine > 1.2 + freenx (rx) = смерть приложения

Сообщение dimbor »

Djelf писал(а):
31.05.2012 03:10
Ну да... 3 часа ночи уже.. приехали... http://sourceforge.net/projects/wine/files/Source/

Кому не спится в ночь глухую? ...

Залез в вайн X11DRV_XRender_Init(void). Собсно, ты все уже процитировал выше:
Djelf писал(а):
25.05.2012 15:40
#ifdef HAVE_XRENDERCREATELINEARGRADIENT
LOAD_OPTIONAL_FUNCPTR(XRenderCreateLinearGradient);
#endif


там чуть выше макрос этот определен:

Код: Выделить всё

#define LOAD_OPTIONAL_FUNCPTR(f) p##f = wine_dlsym(xrender_handle, #f, NULL, 0)

В переводе на русский - определение наличия заключается в разборе файла на предмет экспортируемых функций. До клиентского таким способом не дотянуться, хоть тресни.

По бессонице попробовал возродить традицию патчей на ощупь. На этот раз вайна. Т.е. я его не собирал - типа Штирлиц стрелял вслепую:

cat winerendercheck.patch

Код: Выделить всё

--- dlls/winex11.drv/xrender.c.orig    2012-05-11 22:08:09.000000000 +0400
+++ dlls/winex11.drv/xrender.c    2012-05-31 06:06:43.837935700 +0400
@@ -197,6 +197,7 @@
 MAKE_FUNCPTR(XRenderFreePicture)
 MAKE_FUNCPTR(XRenderSetPictureClipRectangles)
 #ifdef HAVE_XRENDERCREATELINEARGRADIENT
+MAKE_FUNCPTR(XRenderQueryVersion)
 MAKE_FUNCPTR(XRenderCreateLinearGradient)
 #endif
 #ifdef HAVE_XRENDERSETPICTURETRANSFORM
@@ -382,7 +383,15 @@
     LOAD_FUNCPTR(XRenderSetPictureClipRectangles);
     LOAD_FUNCPTR(XRenderQueryExtension);
 #ifdef HAVE_XRENDERCREATELINEARGRADIENT
+    LOAD_FUNCPTR(XRenderQueryVersion);
     LOAD_OPTIONAL_FUNCPTR(XRenderCreateLinearGradient);
+    int major_version,minor_version;
+    if (!pXRenderQueryVersion(gdi_display, &major_version, &minor_version)) {
+        pXRenderCreateLinearGradient=NULL;
+    }
+    else {
+        if (major_version!= 0 || minor_version < 10) pXRenderCreateLinearGradient=NULL;
+    }
 #endif
 #ifdef HAVE_XRENDERSETPICTURETRANSFORM
     LOAD_OPTIONAL_FUNCPTR(XRenderSetPictureTransform);


Как бе должно заработать, как синтаксические ошибки исправите. ;)
Спасибо сказали:

Djelf
Сообщения: 614
ОС: Гигтег+Цшт32

Re: wine > 1.2 + freenx (rx) = смерть приложения

Сообщение Djelf »

dimbor писал(а):
31.05.2012 06:16
там чуть выше макрос этот определен:

По бессонице попробовал возродить традицию патчей на ощупь. На этот раз вайна. Т.е. я его не собирал - типа Штирлиц стрелял вслепую:

Ну я про макрос то и думал... не нашел...

Тут похоже ошибка
if (major_version < 1) pXRenderCreateLinearGradient=NULL;
имхо как то так (подсмотрел в rendercheck):
if (major_version!= 0 || minor_version < 10) pXRenderCreateLinearGradient=NULL;
иначе он будет вырубаться там где не надо.
Спасибо сказали:

dimbor
Ведущий рубрики
Сообщения: 1506
Статус: Подвинутый участник

Re: wine > 1.2 + freenx (rx) = смерть приложения

Сообщение dimbor »

Djelf писал(а):
31.05.2012 13:18
имхо как то так (подсмотрел в rendercheck):
if (major_version!= 0 || minor_version < 10) pXRenderCreateLinearGradient=NULL;

Посмотрел. Скорее всего ты прав. А если под новым показывает Render extension version 0.12, тогда стопудово прав. Но что там на мажора тест поставлен, что он больше нуля быть не может. Сакральный смысл не понял.
Спасибо сказали:

dimbor
Ведущий рубрики
Сообщения: 1506
Статус: Подвинутый участник

Re: wine > 1.2 + freenx (rx) = смерть приложения

Сообщение dimbor »

Поправил пост в соответствии.
Спасибо сказали:

redtex
Сообщения: 7

Re: wine > 1.2 + freenx (rx) = смерть приложения

Сообщение redtex »

dimbor писал(а):
31.05.2012 06:16
... Штирлиц стрелял вслепую....


пуля просвистела мимо.....
А вообще - я могу поднять доступную среду для билда - это так сказать, если гора не идет к Магомеду.....
Спасибо сказали:

dimbor
Ведущий рубрики
Сообщения: 1506
Статус: Подвинутый участник

Re: wine > 1.2 + freenx (rx) = смерть приложения

Сообщение dimbor »

Ить! Странно. Действительно нужен стенд.
Спасибо сказали:

dimbor
Ведущий рубрики
Сообщения: 1506
Статус: Подвинутый участник

Re: wine > 1.2 + freenx (rx) = смерть приложения

Сообщение dimbor »

Такой вариант надо проверить:

Код: Выделить всё

--- dlls/winex11.drv/xrender.orig.c<--->2012-05-25 22:21:15.000000000 +0400
+++ dlls/winex11.drv/xrender.c<>2012-06-22 16:40:05.591189907 +0400
@@ -197,6 +197,7 @@
 MAKE_FUNCPTR(XRenderFreePicture)
 MAKE_FUNCPTR(XRenderSetPictureClipRectangles)
 #ifdef HAVE_XRENDERCREATELINEARGRADIENT
+MAKE_FUNCPTR(XRenderQueryVersion)
 MAKE_FUNCPTR(XRenderCreateLinearGradient)
 #endif
 #ifdef HAVE_XRENDERSETPICTURETRANSFORM
@@ -381,14 +382,9 @@
     LOAD_FUNCPTR(XRenderFreePicture);
     LOAD_FUNCPTR(XRenderSetPictureClipRectangles);
     LOAD_FUNCPTR(XRenderQueryExtension);
-#ifdef HAVE_XRENDERCREATELINEARGRADIENT
-    LOAD_OPTIONAL_FUNCPTR(XRenderCreateLinearGradient);
-#endif
 #ifdef HAVE_XRENDERSETPICTURETRANSFORM
     LOAD_OPTIONAL_FUNCPTR(XRenderSetPictureTransform);
 #endif
-#undef LOAD_OPTIONAL_FUNCPTR
-#undef LOAD_FUNCPTR

     wine_tsx11_lock();
     ok = pXRenderQueryExtension(gdi_display, &event_base, &xrender_error_base);
@@ -410,6 +406,23 @@
         return NULL;
     }
+#ifdef HAVE_XRENDERCREATELINEARGRADIENT
+    LOAD_OPTIONAL_FUNCPTR(XRenderCreateLinearGradient);
+    LOAD_FUNCPTR(XRenderQueryVersion);
+    int major_version,minor_version;
+    wine_tsx11_lock();
+    ok = pXRenderQueryVersion(gdi_display, &major_version, &minor_version);
+    wine_tsx11_unlock();
+    if (!ok)
+       pXRenderCreateLinearGradient=NULL;
+    else if (major_version!= 0 || minor_version < 10) {
+           pXRenderCreateLinearGradient=NULL;
+           WARN("Render extension version is %d.%d - XRenderCreateLinearGradient switch to NULL\n", major_version,minor_version);
+        }
+#endif
+#undef LOAD_OPTIONAL_FUNCPTR
+#undef LOAD_FUNCPTR
+
 #ifdef SONAME_LIBFONTCONFIG
     if ((fontconfig_handle = wine_dlopen(SONAME_LIBFONTCONFIG, RTLD_NOW, NULL, 0)))
     {
Спасибо сказали:

dimbor
Ведущий рубрики
Сообщения: 1506
Статус: Подвинутый участник

Re: wine > 1.2 + freenx (rx) = смерть приложения

Сообщение dimbor »

Собрал патченный вайн 1.5.5 на любезно предоставленной виртуалке и даже make install. Да вот только не нашел, за что дергать, чтобы запустить тест.
Спасибо сказали: