Summary: | некорректная отрисовка окна 3D документа | ||
---|---|---|---|
Product: | [Поддержка проектов] КОМПАС 3D | Reporter: | Виталий Булгаков <bulgakov> |
Component: | Тестирование | Assignee: | BUGS@Etersoft <bugs> |
Status: | CLOSED LATER | QA Contact: | Денис Баранов <baraka> |
Severity: | major | ||
Priority: | P4 | CC: | amorozov, baraka, ivan, kondratyuk, lav, mais, mx, shpigor, vostok |
Version: | v10 | Keywords: | АСКОН |
Target Milestone: | --- | ||
Hardware: | PC | ||
OS: | ALT Linux | ||
URL: | http://winehq.org.ru/GL | ||
Whiteboard: | |||
Заявки RT: | Связано с: | ||
Дата напоминания: | 2010-01-10 | ||
Bug Depends on: | 2670, 3132 | ||
Bug Blocks: | 753, 1196 | ||
Attachments: |
Показывает затенение экрана и проблемы с обновлением
Показывает инвертирование цветов содержимого окна просмотра 3d документов меню деталь окно с деталью Тест для воспроизведения проблемы. скрин Тест 3D с MDI Исходный код теста на C++ Linux text for GL with GDI drawing |
Description
Виталий Булгаков
2007-12-14 16:18:54 MSK
Пока выявлены две глобальные проблемы в этой области: 1. Экран залит чёрным цветом, но при наведении курсора подсвечивается контур поддетали. 2. Очень часто бывает, что экран просмотра 3d документа перестаёт обновляться. То есть берём деталь, она отображается корректно (и экран тоже), а вот когда начинаем вертеть её - она меняет цвет, экран на каждое движение мышки мигает и остаётся фантом предыдущей детали, приэтом он перерисовывается в инверсионных цветах. Created attachment 327 [details]
Показывает затенение экрана и проблемы с обновлением
Created attachment 328 [details]
Показывает инвертирование цветов содержимого окна просмотра 3d документов
Проблема решается, если в функции SwapBuffers вставить строчку с вызовом SetROP2(dc, R2_COPYPEN); которая устанавливает константу по умолчанию. Но в windows эта константа не меняется и все работает нормально. Надо написать тесты на проверяющие вывод в GDI с использованием функции SetROP2. Тестирование показало, что всьавка строчки SetROP2(dc, R2_COPYPEN) в функцию SwapBuffers решает проблему правильного, отображения в Kompas Viewer, но не решает при просмотре 3D документа в самом Kompas. Если в самой функции "SetROP2", принудительно выставлять всегда режим R2_COPYPEN, то документы проказываются нормально. Сформировал патч, отправил на wine-devel. Как только будет новая сборка с этим патчем, необходимо проверить как Kompas на работоспособность, так и погонять другие программы, чтобы удостоверится, что ни чего не ломается. Описание проблемы. 1. Проблема наблюдается только тогда, когда происходит рисование с помощью GDI поверх изображения сформированного в opengl(т.е. при рисовании помеченных граней и плоскостей). Если ни чего не помечать, то деталь будет вращаться без ошибок. 2. В Копасе при воспроизведении сцены используется функция SetROP2 - которая устанавливает режим рисования картинки (mask, xor, not и т.д.) для функций рисования GDI, а так же BitBlt, PatBlt и т.д. Для вывода буфера кадра OpenGL в wine используется команда BitBlt, на результат работы которой сказывается значение установленное с помощью SetROP2. Сделанный хак, принудительно выставляет всегда значение R2_COPYPEN, которая указывает, что выводить картинку в тех цветах, которые указаны. на компас 3д v9 не прорисовывается окно с деталью. см вложение не прорисовывается частично меню. И вообще тормоза... Created attachment 500 [details]
меню
не перерисовывает полностью меню
Created attachment 501 [details]
деталь
при выборе файла, деталь на мгновение прорисовывается и исчезает
Created attachment 502 [details]
окно с деталью
окно вообще не появляется. прорисовываются только очертания детали при наведении
Предыдущее решение, не подходит, т.к. выяснилось, что оно ломает вывод mdi окон в 1С, необходимо искать другое, с разработчиками связался снова, жду ответа. Получилось написать тест, который воспроизводит проблему. Проблема воспроизводится, только при использовании MDI окон, в обычном окне не воспроизводится. Дальнейшие исследования показали: 1. Ошибка возникает при выводе OpenGL, т.к. в wine вывод GL осуществляется на спец. контекст и потом, просто копируется полученное в нем изображение, вот на этом этапе и возникает ошибка. 2. В wine происходит вывод OpenGL по команде glFinish, чего в принципе не должно быть Сделал новый патч. Проверил на КОмпас Viewer и Компас 3D V10 LT. Работает нормально. Исправляет ошибки при воспроизведении 3D и исправляет ошибку с исчезновением фантомов построений. Не ломает 2D построения, как предыдущий патч. Не ломает отрисовку mdi окон в 1С - бага 2098. Как только патч из баги 2098, и этот будут приняты и сделана сборка. Необходимо проверить и закрыть багу. Проверил на сборке от 28.08.08, ALTLinux 4.0 и КОМПАС 3D V10 (проф.версия) 1. Запустить КОМПАС 2. Файл - Создать - Деталь - Ок Создается деталь, окно детали залито черным. 3. Свернуть - развернуть окно КОМПАС - черная заливка уходит. Можно так же покрутить колесом мыши (изменение масштаба отображения в окне модели) 4. Закрыть крестиком окно Дерево модели (по умолчанию расположено слева вертикально) - снова заливает черным. Лечиться так же, как и в предыдущем случае. (Обратно включить окно Дерево модели можно из контекстного меню вызванного в окне модели.) Ошибка воспроизводится только на новых драйверах версии 173.* на версии 169.* воспроизвести не удалось. Теперь будем разбираться в чем проблема. Выяснено, что появления ошибки можно получить любым способом, который изменяет размеры окна. Результаты тестирования: 1. видеокарта NVidia, версия драйверов 169.12 - Ошибка не проявляется. 2. видеокарта NVidia, версия драйверов 173.14 - Ошибка проявляется. 3. видеокарта Radeon 7500, драйвера Mesa - ошибка не проявилась. 4. видеокарта Radeon X1200, драйвер 2.1.7659 - При запуске испортились иксы, так же испортились при запуске моего теста используешего gl. Winecg и notepad отработали нормально. Может ли такое поведение отрисовки быть связано с багой http://bugs.etersoft.ru/show_bug.cgi?id=1935 или нет? Зададим этот вопрос Илье :) Вообще-то, проблема баги 1935 заключается в том, что wine делает лишний Expose. Если приложение что-нибудь рисует не по WM_PAINT, то этот Expose в некоторых случаях все перекрывает. Возможно, 1935 как-то связана с этой багой. Во-всяком случае можно проверить, что будет, если запретить wine делать первый Expose на все окно. Замечено, что ошибка возникает только в активных окнах. Т.е. если открыть два документа и закрыть дерево объектов в неактивном документе, то отрисовка произойдет правильно, а в активном это приводит к перекрашиванию в черный экран. Сделал в тесте такие же стили окон, как в Компас. В тесте ошибка не воспроизвелась. Через Spy++ видно, что при изменении размеров MDI окна в компасе онон получает несколько событий WM_PAINT, а в тестовой программе, только одно. Из аскона ответили, что при получении WM_SIZE в компасе перенастраивается область вывода: "На обработке WM_SIZE выставляется glViewport" У меня в тесте этого не делалось. Добавлю в тест посмотрю на результат. добавил в тест установку glViewPort по событию WM_SIZE. Ошибка не воспроизвелась. На драйверах nVidia 177.80 проблема не воспроизвелось. Считаю, что проблема с 173.14 в прошлом, и делать что-либо по поводу старого драйвера смысла и возможности нет. Впрочем, если у Алексея Рассыпнова (АСКОН) будет возможность для воспроизведения проблемы на старых драйверах, мы, конечно, готовы соучаствовать в создании теста по проблеме, с целью внесения дальнейших корректив. Мы проверяли на nVidia с версиями драйверов 169.12, 173.14, 177.80 ATI с версиями драйверов 2.1.7659, Mesa Intel 945G проблем не обнаружено. Created attachment 896 [details]
Тест для воспроизведения проблемы.
На драйверах для ATI от 12 ноября проблема воспроизвелась(смотреть в скрине). Ubuntu 8.04 X -version This is a pre-release version of the X server from The X.Org Foundation. It is not supported in any way. Bugs may be filed in the bugzilla at http://bugs.freedesktop.org/. Select the "xorg" product for bugs you find in this release. Before reporting bugs in pre-release versions please check the latest version in the X.Org Foundation git repository. See http://wiki.x.org/wiki/GitPage for git access instructions. X.Org X Server 1.4.0.90 Release Date: 5 September 2007 X Protocol Version 11, Revision 0 Build Operating System: Linux Ubuntu (xorg-server 2:1.4.1~git20080131-1ubuntu9.2) Current Operating System: Linux BARA 2.6.24-21-generic #1 SMP Mon Aug 25 17:32:09 UTC 2008 i686 Build Date: 13 June 2008 01:08:21AM Created attachment 897 [details]
скрин
С новым X.org и с драйверами ATI 8.11 проблема так же воспроизводится. Ubuntu 8.10. X -version X.Org X Server 1.5.2 Release Date: 10 October 2008 X Protocol Version 11, Revision 0 Build Operating System: Linux 2.6.24-19-server i686 Ubuntu Current Operating System: Linux BARA 2.6.27-8-generic #1 SMP Thu Nov 6 17:33:54 UTC 2008 i686 Build Date: 24 October 2008 08:00:16AM xorg-server 2:1.5.2-2ubuntu3 (buildd@rothera.buildd) Поставил в ссылку страницу с результатами тестирования: http://winehq.org.ru/GL Основные выводы: 1. С nVidia на старых Иксах (думаю, что до версии 1.4, то есть, например на ALT Linux 4.0) есть проблемы, вызывающие неудобство, но не мешающие работать. Это уйдёт в прошлое, как и подустаревшая уже система ALT 4.0 2. С ATI проблемы продолжаются до сих пор - изображение всегда чёрное, и никакими настройками и версиями драйверов вплоть до 8.55.2 (Catalyst 8.11) побороть это не удалось. Более того, последние версии на последних Иксах работают нестабильно (зависание системы, чёрный экран при запуске иксов...) 3. По Intel не очень большая статистика (у нас только одна машина), но проблем не обнаружено. Проблемы с профессиональной картой Nvidia Quadro FX1500 ALTLinux 4.1 Desktop Драйвер NVIDIA-Linux-x86-177.82-pkg1.run - рекомендуемый на сайте Nvidia Параметры драйвера по умолчанию При открытии сборки \Samples\Reduser\078.505.9.0100.00.A3D прорисовывается дерево модели, после этого в окне модели на курсоре появляются песочные часы и КОМПАС виснет. Нормально открывается, если окно документа не максимизировано. Created attachment 922 [details]
Тест 3D с MDI
Created attachment 923 [details]
Исходный код теста на C++
Разработан тест под Linux, показывающий проблему на ATI: http://git.etersoft.ru/people/shpigor/packages/?p=gdigltest.git;a=blob;f=linux/glgditest.c;h=3423ebd48d2a110929e485b63fb7f8f4d0086b54;hb=b015c1e72b080cbb85aad5ed694002e1323673b4 Created attachment 1345 [details]
Linux text for GL with GDI drawing
Откладываем решение до получения ответа от AMD. Выношу из проекта. Вернёмся, когда будет решение или новые драйвера. Напоминание установлено. Откатил в eterwine патч "winex11.drv:opengl.c:fix bug 954. make right drawing mode? when swapbuffers, and delete render when call glFinish." Для тех, кто не пользуется багзиллой или не умеет пользоваться групповым редактированием при поиске, закрываем задачи, которые они должны были принять. |