Мне нужен (A) прозрачный или полупрозрачный фон (т. е. не просто прозрачные объекты в непрозрачном окне), как в [1], [2], [3]. В то же время мне нужно (B) MSAA (или сглаживание с ускорением графического процессора другого типа). Существуют различные рабочие примеры для (B). Единственный рабочий пример (A) для современного OpenGL, который я нашел, это [4]; причина, по которой довольно сложно получить прозрачный фон с помощью OpenGL и X11, автор [4] прокомментировал здесь [5] (2-й ответ сверху, разверните комментарии и прочитайте важную вещь о «Вы обязательно должны использовать XRenderPictFormat... ").
Но теперь мне нужно присоединиться (A) и (B) только с графическим процессором. Нет ни одного примера этой комбинации и даже никакой информации, если это возможно/должно быть теоретически возможно. После много кофе и segfaults я частично понял это.
Короче говоря, если мы посмотрим на glxinfo | grep "32 tc" или около того, можно обнаружить, что на графических процессорах Intel, независимо от того, работает ли это от батареи Celeron или процессора мощностью в сто ватт, нет ни одного Visual с MSAA: два правые столбцы — нули. Или когда с MSAA (до 16х) ни одного Визуала с Альфой нет. И мои многочисленные пробы и ошибки с кодом на C, все безуспешно, подтверждают это (пока). Мой Франкенштейн, сделанный из (A) и (B), не хочет жить.
Вопреки этому, с (внешним) Графический процессор Nvidia, даже старый, без проблем имеет (A) и (B) одновременно: вы 1) видите это через glxinfo, 2) просто возьмите код [4] и добавьте/включите все привлекательные возможности OpenGL.
Итак, это показывает, что (а) графический процессор Intel (или (б) текущий драйвер Intel для Linux/OpenGL) делает это невозможным.
Q1: Как я могу подтвердить это с помощью теоретических характеристик оборудования?
Q2: Вывод glxinfo в основном осуществляется драйвером -зависимый?
Пока все хорошо. Знать, что это невозможно (с Intel, которая является моей целью, я ограничен в физическом размере установки) лучше, чем вообще этого не знать.
НО >.
Мой старый Compiz легко справляется с этим. На графическом процессоре Intel, используя Window Opacity, я могу получить прозрачность окна (или прозрачное окно поверх другого прозрачного окна или даже поверх видео) с точными математическими вычислениями с точностью до пикселя и без какой-либо заметной дополнительной нагрузки на процессор. Compiz использует библиотеку OpenGL в качестве интерфейса к графическому оборудованию, как указано в вики.
Q3. Как это возможно?
Q4. Опять же, где характеристики для этого конкретного случая?
Этот тип прозрачности (Compiz) (C) может быть > принципиально отличается от (A), поскольку теоретически можно реализовать без альфа-канала, поскольку все пиксели одного окна имеют одинаковое значение «альфа» (полупрозрачность) (в отличие от моего ( A) случай, когда мне нужны полностью непрозрачные элементы). Как я могу в своем коде OpenGL C использовать эту (C) полупрозрачность для каждого окна?
Спасибо.
Arch Linux, 6.11.1-arch1-1, OpenGL ES 3.2 Mesa 24.2.3-arch1.1, OpenGL ES GLSL ES 3.20
Строка рендеринга OpenGL: Mesa Intel(R) UHD Графика 630 (CFL GT2) (вместе с другими процессорами Intel)
На всех тестовых установках используется свежее программное обеспечение, кроме Compiz, стабильная версия 0.8.18.
[1] Как создать контекст рендеринга OpenGL с прозрачным фоном?
[2] Установка прозрачного цвета фона в OpenGL не работает
[3] https://gist.github.com/je-so/903479
[4] https://github.com/datenwolf/codesample ... r/samples/ OpenGL/x11argb_opengl/x11argb_opengl.c
[5] https://stackoverflow.com/a/9215724
Подробнее здесь: https://stackoverflow.com/questions/790 ... dow-on-x11
Прозрачный фон и MSAA одновременно для окна OpenGL на X11 ⇐ Linux
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение