3.6.
В общем, с помощью дебага и экспериментов, я выяснил, что функции gdk_x11_get_default_xdisplay() и gdk_x11_get_default_screen() работают нормально.
Во всяком случае, я взял glxtest.pp и запихнул их в проект Лазаруса с Tform по нажатию кнопки - этот тест работает.
Проблема проявляется с самим фактом TOpenGLControl. Т.е. проблема с glxChooseFBConfig() появляется, если у объекта свойство visible поставить в true.
Если с этого момента начать дебажить по шагам, то всё идёт своим чередом до файла wincontrol.inc, процедура TWinControl.CreateWnd(), внутри которой строка 7538 вызов функции TWSWinControlClass(WidgetSetClass).CreateHandle(Self, Params); , которая собственно вызывает из компонента OpenGL функцию TWOpenGLControl.CreateHandle(), далее из которой доходит до glxChooseFBConfig(), которая возвращает nil.
Вот я дошёл до этой стадии, но мне не понять суть проблемы и как её решить?
Что делает такого TOpenGLControl, что сносит башню у функций gdk и glx?
может @rouse_79 что скажет?
ну так почитайте доку на glxChooseFBConfig
Я читал. Если бы это помогло, то вопроса бы не было.
Тут не подскажу, не смотрел этот gl
оно выдает null если на входе что-то не то.
Return Values Null Indicates that either - an undefined GLX attribute is encountered in the specified AttributeList, that no FBConfig matches the specified values for the GLX attributes or - that screen is invalid.
Функции библиотеки gdk отлично работают за пределами компонента opengl. Атрибуты тоже менял в исходниках компонента и перекомпилировал. Не помогает.
Перетаскивал в исходник компонента атрибуты из glxtest.pp - не работает. Сами по себе функции gdk работают в тесте glxtest.pp Я делаю вывод, что проблема где то в лазарусе или компоненте OpenGL применительно к X11.
Проблема очевидно в параметрах, которые передаются, ибо библиотеке глубоко пофиг, кто ее вызывает
запросили то, чего найти не получилось, получился пустой список результатов
У функций библиотеки gdk нет параметров. Атрибуты для glxChooseFBConfig определяются Самим компонентом opengl
чтото он нето определяет
Функция CreateOpenGLContextAttrList() получает на входе вполне нормальные параметры, из которых формируются атрибуты, которые используются в glxChooeFBConfig()
а это что тогда: { Attributes to choose context with glXChooseFBConfig. Similar to Attr, but not exactly compatible. } AttrFB: Array[0..10] of integer = ( GLX_X_RENDERABLE, 1 { true }, GLX_RED_SIZE, 1, GLX_GREEN_SIZE, 1, GLX_BLUE_SIZE, 1, GLX_DOUBLEBUFFER, 1 { true }, none); ... FBConfigs := glXChooseFBConfig(dpy, DefaultScreen(dpy), AttrFB, FBConfigsCount);
файл unit_glxtest.pas: строка 38: опереляется константа AttrFB строка 144, 245: константа AttrFB передается 3-м параметром (AttributeList) в функцию glXChooseFBConfig()
Это понятно, но какие из этого выводы? Атрибуты частично насильно поменял и glxChooseFBConfig() перестала возвращать nil. Подробности выше.
Обсуждают сегодня