Выпуск новостей ReactOS № 95

Z98, “ReactOS Newsletter: Newsletter 95”, public translation into Russian from English More about this translation.

Translate into another language.

OpenGL

В течение долгого времени проект ReactOS для работы с 3D-графикой OpenGL использовал код проекта Mesa, однако, к сожалению, проект Mesa прекратил поддержку кода, необходимого ReactOS. В процессе рендеринга графики принимает участие несколько компонентов, одним из которых является устанавливаемый драйвер клиента (installable client driver, ICD). Чаще всего ICD поставляется в составе драйвера графической карты, однако он может представлять собой и драйвер, предназначенный для полностью программного рендеринга. Проект Mesa в течение долгого времени занимался разработкой и поддержкой программного ICD для Windows, что позволяло использовать его в ReactOS, однако значительные изменения в его архитектуре сделали для нас этот драйвер непригодным к использованию. Имя этим изменениям – Gallium3D. Gallium3D выступает в качестве прослойки между между реализацией интерфейса программирования приложений (API) для графики и драйвером видеокарты. Такой уровень абстракции в теории должен упростить разработку драйверов видеокарт и создание программных интерфейсов для работы с графикой посредством предоставления им общего API, предназначенного для их объединения и совместной работы. Ранее, проекту Mesa приходилось создавать полную реализацию OpenGL для каждой аппаратной платформы (например, различных видеокарт), для которой было необходимо обеспечить поддержку аппаратного ускорения. При использовании Gallium такой проблемы не стоит. Каждый графический драйвер, который имеет возможность подключения к интерфейсу Gallium, может использоваться Mesa для аппаратного ускорения рендеринга. Разумеется это не отменяет тот факт, что драйверы написать всё равно придётся, однако такое разделение обеспечивает лучшую изоляцию зон ответственности кода, и, соответственно, разделение обязанностей разработчиков, работающих над кодом. Это по большей части представляет собой вопрос производительности труда разработчика, а не производительности кода. Однако все эти изменения привели к тому, что старый ICD проектом Mesa более не поддерживается, и проекту ReactOS необходимо было рассмотреть другие варианты.

Первой мыслью было попытаться перейти на использование нового ICD, однако сделать это без существенного усложнения имеющегося кода крайне сложно. Для рендеринга ICD использует растеризатор, а в случае отсутствия драйвера видеокарты у него имеется лишь два выбора: использовать полностью программный растеризатор или же использовать для рендеринга набор программ компилятора LLVM. К сожалению, производительность программного растеризатора довольно сильно уступает производительности старого драйвера Mesa, которому он пришёл на смену, не говоря уже о том, что он предоставляет далеко не самую полную реализацию необходимой функциональности. Растеризатор на основе LLVM имеет лучшую производительность, однако так происходит лишь при его работе на относительно новом многоядерном процессоре. Кроме того, сборка кода такого растеризатора представляет собой далеко не тривиальный процесс и большинство разработчиков и тестеров возражали против его добавления в процесс сборки системы.

Столкнувшись с такими трудностями, Жером Гардо (Jérôme Gardou) решил полностью пересмотреть суть стоящей перед ReactOS задачи. Жером выяснил, что если конечной задачей является обеспечение совместимости системы с Windows, то ReactOS вполне достаточно наличия поддержки OpenGL версии не выше 1.2. Исходя из этой точки зрения Жером создал новый растеризатор используя код Mesa в качестве справочника, и встроил его в библиотеку OpenGL. Всё прошло на удивление гладко и вылилось в полностью работоспособную поддержку OpenGL версии 1.2, включая даже поддержку рендеринга в точечные изображения, что само по себе хотя и используется довольно редко, но тем не менее имеется в Windows. Как и в любом другом программном обеспечении, это решение понесло за собой некоторые последствия. Во-первых Жером в своей работе использовал Mesa 3.5, довольно старую версию этого проекта. Разработка этой версии была прекращена уже давно, и проекту ReactOS теперь придётся взять на себя всю ответственность по поддержке её кода. В то же время это означает, что проекту более не потребуется прикладывать усилий при обновлении Mesa, если вдруг участники этого проекта решат произвести ещё одно глобальное изменение архитектуры. Второй, хотя и не такой значимой, как первая, проблемой является то, что в ReactOS встроена поддержка OpenGL лишь версии 1.2. По большей части это не так уж и важно, поскольку пользователь, желающий получить в системе поддержку OpenGL и имеющий графическую карту с его поддержкой, может попросту воспользоваться драйвером производителя видеокарты. В долгосрочной перспективе, единственным путём дальнейшего совершенствования поддержки OpenGL в ReactOS будет являться обеспечение корректной работы драйверов видеокарты.

Исправление регрессий

Одной из ошибок, обнаруженных на стадии регрессионного тестирования приложений в рамках подготовки к выпуску версии 0.3.15, является проблема с отображением значков в приложении Notepad Lite. Томас Фабер (Thomas Faber) обнаружил, что причины этой проблемы находятся сразу в двух местах – в самой ReactOS и в системе распаковки Notepad Lite. Разработчики Notepad Lite для уменьшения размера исполняемого файла программы воспользовались утилитой UPX, однако в использованной ими версии имелась ошибка, приводящая к неправильному размещению значка в секции ресурсов исполняемого файла. Когда ReactOS пыталась загрузить двоичный файл, в систему передавался неправильный указатель на значки, и попытка получения доступа к ним приводила к критическому сбою. Это в свою очередь выявило проблему в самой ReactOS, связанную с тем, что загрузчик неправильно проверял указатели и просто полагал, что все передаваемые ему значения являются верными. Проблемный код был взят из старой версии WINE, и Томас решил проблему просто взяв соответствующий код из новой версии. Поскольку сама по себе самая новая версия Notepad Lite была выпущена уже довольно давно, Томас предположил, что и использованная при его упаковке версия UPX тоже довольно старая. Если же и более новые версии UPX будут приводить к возникновению подобных проблем, то ошибку следует искать где-то глубоко в самом этом проекте.

Рабочие столы

Яннис Адамопулос (Giannis Adamopoulos) продолжает работу над поддержкой возможности переключения между разными рабочими столами. В результате этой работы уже стало возможным запустить в ReactOS утилиту Desktops, созданную Sysinternals и предназначенную для создания нескольких рабочих столов и управления ими. Следующим шагом станет добавление в winlogon функции работы с несколькими рабочими столами, что крайне важно с точки зрения обеспечения безопасности операционной системы. Кроме того, Яннис работал совместно с Томасом над проверкой написанного им набора тестов для тестирования API рабочего стола, поскольку разные версии Windows имеют несколько разные способы работы с ним. На настоящий момент все созданные им тесты функционируют абсолютно корректно, хотя и выдают немного разные результаты.

© ReactOS Team

Original (English): ReactOS Newsletter: Newsletter 95

Translation: © evilslon, Сергей .

translatedby.com crowd

Like this translation? Share it or bookmark!