Ага, да. В этом месте в документации они назвали чуть по-разному, но по сути одно и то же. В описании протокола они используют один и тот же enum, тем не менее:
Ну да. Имена все формируются преобразованием CamelCase в CAMEL_CASE (CAMElCase -> CAM_EL_CASE) в случае, например, enum или в camel_case в случае функций. Первое слово xcb_, потом идет название расширения xcb_render_, потом идет название запроса xcb_render_trapezoids. Ну и аргументы так же. По данной системе и получается с enum XCB_, IMAGE_ORDER и потом сами названия в структуре LSB_FIRST/MSB_FIRST.
И вообще сишные исходники (хедеры) генерятся из xml-файлов протокола python-скриптом.
Да-да, в курсе. А с самого начала, до python-скрипта, генерировали при помощи XSLT. В *.h, к сожалению, не указано, какой enum надо в поле подставлять, а в XML указано.
можно запросить pixmap в любом этом формате через xcb_get_image или как? (чтобы отдать клиенту как он хочет без доп работы)
При помощи xcb_get_image ты не pixmap запрашиваешь, а image. Ты «фотографируешь» pixmap и получаешь фотографию в виде image. Глубина image должна соответствоать глубине drawable, то есть глубине window или pixmap — это объекты типа drawable.
man xgetimage:
If XYBitmap format is used, the depth of the image must be one, or a BadMatch error results. For XYPixmap and ZPixmap, the depth of the image must match the depth of the drawable, or a BadMatch error results.
The depth of the destination XImage structure must be the same as that of the drawable.
XGetImage returns the depth of the image to the depth member of the XImage structure. The depth of the image is as specified when the drawable was created, except when getting a subset of the planes in XYPixmap format, when the depth is given by the number of bits set to 1 in plane_mask.
второй вопрос, смотрю доступные visuals например так
в чем смысл, они же одинаковы по формату?!
Вопрос, почему много одинаковых? На самом деле, они не совсем одинаковые. Они разные свойства у GLX имеют. Можешь посмотреть glxinfo, где он табличку выведет по visuals.
ну тебе нужно жеж узнать информацию о системе? что бы потом ей пользоваться... в системе не один формат, допустим... как еще, если не перебором найти необходимые данные?
чтобы выставить/сбросить два флага в разных комбинациях, достаточно дать пользователю эти два флага, а не высерать список всех их возможных комбинаций, нет?
Да, оно старое, для другого способа отображения и организации видеопамяти, которое сейчас не используется, но когда-то использовалось. https://en.wikipedia.org/wiki/Planar_(computer_graphics). Сейчас не имеет никакого смысла, так как GPU этот формат не понимают и ускорить не могут.
А до XSLT и XML, с самого начала проекта, протокол описывался и разворачивался при помощи m4 macros, но в какой-то момент решили, что m4 не так уж стильно и не так уж модно. :)
Блин, вот почитал, и понял, что я лох, большая часть того, что я считал болью, решается с помощью многопроходных преобразований, о существовании которях я десять лед назад даже не подозревал :) Если закрыть глаза на забористые xpath-выражения, у них все очень даже прилично выглядит.
А до XSLT и XML, с самого начала проекта, протокол описывался и разворачивался при помощи m4 macros, но в какой-то момент решили, что m4 не так уж стильно и не так уж модно. :)
Когда XCB появился на слуху, там уже во всю был XML, я и не думал, что его разрабатывали с 2001 года.
XCB’s code generation continued to be based on m4 for the next three years, until Josh Triplett took Bart’s “Open Source UNIX Software Development” class and replaced all my beautiful m4 macros with a combination of XML and XSLT. Despite that, we became good friends.
Выбор XSLT сложно обосновать чем-то, кроме моды, а вот XML-спецификация это сила. С m4-спецификацией работать можно, по большому счету, только на самом m4, а для xml понаписали сторонних обработчиков на разных языках, в т.ч. X11 клиенты для других ЯП и обработчик в wireshark. Что-то IDL-образное было бы, на мой вкус, красивее, но тогда для каждого языка пришлось бы писать отдельный парсер.
То есть любой язык может легко написать и использовать свою реализацию протокола, потому что это легко и просто - всего-то надо использовать парсер xml. Или все используют единственную реализацию на си?
Для этого нужно написать парсер самого idl, т.е. распарсить текст на токены, построить из них какое-то подобие AST, а уже потом его обходить и что-то с ним делать, аналогично тому, как работают с XML DOM. Или намешать все в одну кучу, но очевидно, что общая сложность от этого не уменьшится.
Ты на серьезе утверждаешь, что сделать свой парсер, даже сгенерированный на основе грамматики, это тот же объем работы, что и обойти готовое DOM-дерево? Похоже на троллинг