glXChooseFBConfig w / GLX_BIND_TO_TEXTURE _ * _ EXT не возвращает FBConfigs в драйвере Nvidia - PullRequest
0 голосов
/ 16 января 2019

У меня есть приложение, которое использует расширение GLX texture_from_pixmap, для которого требуется буфер цвета, созданный с использованием FBConfig с GLX_BIND_TO_TEXTURE_RGB_EXT или GLX_BIND_TO_TEXTURE_RGBA_EXT, согласно спецификации.

Только цветовой буфер изПиксельное изображение GLX, созданное с использованием FBConfig с атрибутом GLX_BIND_TO_TEXTURE_RGB_EXT или GLX_BIND_TO_TEXTURE_RGBA_EXT, установленное в значение TRUE, может быть связано как текстура.

https://www.khronos.org/registry/OpenGL/extensions/EXT/GLX_EXT_texture_from_pixmap.txt

Мое приложение работает и отлично работает с Mes идрайвер Intel i965, но не с проприетарным драйвером Nvidia.

При использовании glXChooseFBConfig с драйвером Nvidia не возвращаются соответствующие FBConfigs, и я не могу понять, почему.

Я сделал минимальный пример кода, который воспроизводит эту проблему.

#include <stdio.h>

#include <X11/Xlib.h>
#include <GL/glx.h>

int main()
{
        Display *display = XOpenDisplay(NULL);

        if (!display) {
                printf("Unable to connect to display.\n");
                return 1;
        }

        int pixmap_config[] = {
                GLX_BIND_TO_TEXTURE_RGB_EXT, True,
                GLX_NONE
        };

        int c = 0;
        GLXFBConfig *configs = glXChooseFBConfig(display, 0, pixmap_config, &c);
        if (!configs) {
                printf("No appropriate GLX FBConfig available!\n");
        } else {
                printf("Number of matching configs: %i\n", c);
        }

        return 0;
}

На любой видеокарте Nvidia, которую я тестирую с использованием проприетарного драйвера, я получаю:

Нет соответствующего GLX FBConfigдоступны!

Используя Intel Graphics с Mesa, я получаю:

Числосоответствующих конфигов: 82

Что я тут не так делаю?

1 Ответ

0 голосов
/ 17 января 2019

Я думаю, что проблема связана со списком атрибутов, переданным glXChooseFBConfig (ваш pixmap_config []).

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

Проблема в том, что EXT_texture_from_pixmap работает только с растровыми изображениями, а не с окнами.
Итак, вы должны установить в поле GLX_DRAWABLE_TYPE маску, содержащую GLX_PIXMAP_BIT, а не значение по умолчанию GLX_WINDOW_BIT.

...