OpenGLControl в LinuxMint 19

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: OpenGLControl в LinuxMint 19

Сообщение olegy123 » 04.12.2018 00:28:42

Sasha писал(а):olegy123 Вы вместо того, чтобы писать столько, воспроизвели бы тот пример

Сначала классика OnPaint.. у меня сейчас все работает.
минт нет возможности на реальную тачку поставить
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: OpenGLControl в LinuxMint 19

Сообщение MysticCoder » 04.12.2018 02:53:17

у меня та же самая ошибка, что в примере TC, что в примере из examples. Ubuntu 18.04, nvidia, дрова кажись с сайта невидии. lazarus 1.8.4
MysticCoder
постоялец
 
Сообщения: 154
Зарегистрирован: 14.09.2013 00:20:28

Re: OpenGLControl в LinuxMint 19

Сообщение Sasha » 04.12.2018 21:49:57

zub Да систему ставил с диска скаченного с сайта LinuxMint (xfce 19), потом драйвера на видео из менеджера драйверов (чего-то там nvidia 370), потом обновление и Лазарус из deb пакетов, скаченных с сайта Lazarus IDE.
Пытался сравнить 2 вывода strace в Минт 18 и в Минт 19, думал может будет понятно с какого места начинаются проблемы, но как-то они совсем друг на друга не похожи, мне казалось что вывод должен быть похож.
Я баг репорты никогда не делал, может подскажите, что там писать нужно?

Добавлено спустя 12 минут 28 секунд:
MysticCoder Я уж думал я один такой.
А Ubunte 18.04 это последняя версия? Минт он же вроде из Убунты пакеты берёт, вот и проблема в обоих системах одинаковая.
Попробуйте как предлагал fedan strace ./prog что там в конце получается.
Вот мой вывод:
Код: Выделить всё
read(16, "1\0\0\03\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\031034436\0\0\0\0\0"..., 64) = 64
lseek(16, 0, SEEK_CUR)                  = 2030544
lseek(16, 2024649, SEEK_SET)            = 2024649
read(16, ".shstrtab\0.note.gnu.build-id\0.no"..., 255) = 255
lseek(16, 2030544, SEEK_SET)            = 2030544
close(16)                               = 0
write(2, "  $00007F5D5243A7C8n", 20  $00007F5D5243A7C8
)   = 20
write(2, "n", 1
)                       = 1
munmap(0x7f5d552a2000, 32768)           = 0
munmap(0x7f5d552ca000, 32768)           = 0
lseek(18, -2874, SEEK_CUR)              = 4827
exit_group(217)                         = ?
+++ exited with 217 +++


и строка lseek(18, -2874, SEEK_CUR) меня очень настараживает, если текущая позиция меньше 2874, то получается по памяти в минус уход, может тут и проблема. Другой вопрос как такое смещение получилось.

Добавлено спустя 22 минуты 35 секунд:
olegy123 "у меня сейчас все работает" На системе проверяете?
Sasha
новенький
 
Сообщения: 41
Зарегистрирован: 07.12.2015 01:27:43

Re: OpenGLControl в LinuxMint 19

Сообщение MysticCoder » 05.12.2018 00:25:21

2Sasha:
Mint 19 базируется как раз на Ubuntu 18.04. Не знаю чем поможет strace, я в нем не шарю, fedan предлагал, пусть и расшифровывает :D
Код: Выделить всё
lseek(15, 0, SEEK_CUR)                  = 2030352
lseek(15, 2025813, SEEK_SET)            = 2025813
read(15, ".gnu.warning.fdetach\0.gnu.warnin"..., 255) = 255
lseek(15, 2030352, SEEK_SET)            = 2030352
read(15, "\242\4\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\344\36\0\0\0\0\0"..., 64) = 64
lseek(15, 0, SEEK_CUR)                  = 2030416
lseek(15, 2025834, SEEK_SET)            = 2025834
read(15, ".gnu.warning.setlogin\0.gnu_debug"..., 255) = 255
lseek(15, 2030416, SEEK_SET)            = 2030416
read(15, "\270\4\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\264\344\36\0\0\0\0\0"..., 64) = 64
lseek(15, 0, SEEK_CUR)                  = 2030480
lseek(15, 2025856, SEEK_SET)            = 2025856
read(15, ".gnu_debuglink\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 255) = 255
lseek(15, 2030480, SEEK_SET)            = 2030480
read(15, "\1\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\344\36\0\0\0\0\0"..., 64) = 64
lseek(15, 0, SEEK_CUR)                  = 2030544
lseek(15, 2024649, SEEK_SET)            = 2024649
read(15, ".shstrtab\0.note.gnu.build-id\0.no"..., 255) = 255
lseek(15, 2030544, SEEK_SET)            = 2030544
close(15)                               = 0
write(2, "  $00007F65EC2707C8\n", 20  $00007F65EC2707C8
)   = 20
write(2, "\n", 1
)                       = 1
munmap(0x7f65ef0f8000, 32768)           = 0
munmap(0x7f65ef100000, 32768)           = 0
exit_group(217)                         = ?
+++ exited with 217 +++

Вообще проблема есть и на других компонентах - TOpenglPanel и TOpenGLCanvas, причем для TOpenGLCanvas достаточно всего лишь бросить её на форму - вызовы gl функций у нее в Paint прописаны.
MysticCoder
постоялец
 
Сообщения: 154
Зарегистрирован: 14.09.2013 00:20:28

Re: OpenGLControl в LinuxMint 19

Сообщение Снег Север » 05.12.2018 10:21:01

Проблема где-то во взаимодействии библиотеки opengl с драйвером. Вероятнее всего на моменте ReleaseContext. Как вариант предлагаю попробовать вызывать Free opengl-ных компонетов вручную, до закрытия формы.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2990
Зарегистрирован: 27.11.2007 16:14:47

Re: OpenGLControl в LinuxMint 19

Сообщение Sasha » 05.12.2018 11:39:45

Снег Север Не поможет. Сделал тест с тремя кнопками: 1-я создаёт контекст, 2-я заполняет зелёным фоном, 3-я удаляет компонент OpenGLContol. После нажатия на 3-ю кнопку зелёный квадрат с формы исчезает (без ошибок)
при закрытии формы та же ошибка.
Sasha
новенький
 
Сообщения: 41
Зарегистрирован: 07.12.2015 01:27:43

Re: OpenGLControl в LinuxMint 19

Сообщение pupsik » 05.12.2018 12:51:24

Sasha через opaint та же ошибка?

В чём необходимость использования этого компонента?

п.с.
тогда бы вы увидели, что этот "пук в пустоту.." вполне себе окрашивает область OpenGLControl в зелёный цвет.
да? Я не знаю что за тесты у вас были но в винде "квадрат малевича" ...
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: OpenGLControl в LinuxMint 19

Сообщение Sasha » 05.12.2018 16:17:34

pupsik Дался вам этот OnPaint в этом событии ничего такого что я могу в событии по кнопке написать не происходит. Смысл в том, что ошибка возникает во время закрытия программы в том случае если были использованы функции OpenGL. Если использовать только SwapBuffers (или MakeCurrent) то ошибки не будет. Я даже ставил вывод "end prog" в самом конце программы после "Application.Run;", так вот вывод "end prog" был раньше ошибки, получается, что скорее всего ошибка возникает в секции финализации модуля GL.

pupsik писал(а):В чём необходимость использования этого компонента?

Необходимость простоя, я использую OpenGL для отображения данных.

pupsik писал(а): Я не знаю что за тесты у вас были но в винде "квадрат малевича" ...

Вы либо забыли задать цвет "glClearColor(0, 0.5, 0, 1)", либо с виндой что-то не то, у меня на одном ноуте дома, тоже почему-то то, что отображается с помощью OpenGL выводится до тех пор пока у окна размер не поменяешь.
А когда меняешь размер окна область OpenGL закрашивается каким-то серым цветом.
Sasha
новенький
 
Сообщения: 41
Зарегистрирован: 07.12.2015 01:27:43

Re: OpenGLControl в LinuxMint 19

Сообщение pupsik » 05.12.2018 17:06:21

OnPaint в этом событии ничего такого что я могу в событии по кнопке написать не происходит
Вы уверены???

Вы либо забыли задать цвет "glClearColor(0, 0.5, 0, 1)", либо с виндой что-то не то
ну да: либо лыжи не востры, либо смазать не смог :). Я имел ввиду ваш вариант = квадрату. Через событие = рисует.

Да и винда бы ругнулась на ваш вариант. Дык принципы у неё не те :) Лин правильно послал...

п.с.
Хотя бы с азами познакомились.
Основы работы с жл (да и лином) поняли. Дык не...е: всё не эдак, всё не так.... а Я делаю всё правильно. В принципе пф...
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: OpenGLControl в LinuxMint 19

Сообщение MysticCoder » 05.12.2018 18:05:06

pupsik писал(а):
OnPaint в этом событии ничего такого что я могу в событии по кнопке написать не происходит
Вы уверены???

Вы либо забыли задать цвет "glClearColor(0, 0.5, 0, 1)", либо с виндой что-то не то
ну да: либо лыжи не востры, либо смазать не смог :). Я имел ввиду ваш вариант = квадрату. Через событие = рисует.

Да и винда бы ругнулась на ваш вариант. Дык принципы у неё не те :) Лин правильно послал...

п.с.
Хотя бы с азами познакомились.
Основы работы с жл (да и лином) поняли. Дык не...е: всё не эдак, всё не так.... а Я делаю всё правильно. В принципе пф...

То что у тебя не рисуется - просто контекст почему то не стал текущим автоматически. Никакой связи между WM_PAINT и Опенгл нет. Что в винде, что в линуксе. Рисовать можно в любое время и в играх в основном так и рисуют постоянно по 60 раз в секунду не оглядываясь на WM_PAINT, а если будет какая то ошибка opengl, в том числе и если контекст не будет активным при отрисовке - opengl просто умолчит это оставив ошибку в glgetlasterror.
Тут проблема походу исключительно линуксовая, кривая реализация gtk может. Возникает на этапе выхода из процесса, надо как то отладить, да только хз как :)
MysticCoder
постоялец
 
Сообщения: 154
Зарегистрирован: 14.09.2013 00:20:28

Re: OpenGLControl в LinuxMint 19

Сообщение Снег Север » 06.12.2018 11:02:44

MysticCoder писал(а):Тут проблема походу исключительно линуксовая

Как я понял проблема конкретной версии линя с дровами nvidia. Не знаю как это в лине, в винде каждый драйвер ставит свою адаптированную версию библиотеки opengl, которая подменяет дефолтную. Вот тут и "собака порылась".
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2990
Зарегистрирован: 27.11.2007 16:14:47

Re: OpenGLControl в LinuxMint 19

Сообщение Vadim » 06.12.2018 11:22:13

Снег Север
Говорят что теперь надо вместо OpenGL использовать Vulkan. OpenGL устарел... :-)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: OpenGLControl в LinuxMint 19

Сообщение Снег Север » 06.12.2018 11:41:34

Vadim писал(а):Говорят что теперь надо вместо OpenGL использовать Vulkan. OpenGL устарел...

Это смотря для чего. Если вы делаете движок ААА класса с перспективой, то верно. Если контролы или инди-игру, то нет никакого смысла морочиться.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2990
Зарегистрирован: 27.11.2007 16:14:47

Re: OpenGLControl в LinuxMint 19

Сообщение olegy123 » 06.12.2018 14:24:03

Vadim писал(а):Говорят что теперь надо вместо OpenGL использовать Vulkan. OpenGL устарел...
:lol: с OpenGL не удалось, а с Вулканом точно запустится. Правда там железо нужно поддерживающее не ниже Opengl 4.х
Снег Север писал(а):Если вы делаете движок ААА класса с перспективой, то верно.
в ходу еще 1.х
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: OpenGLControl в LinuxMint 19

Сообщение Sasha » 06.12.2018 16:35:55

Да, использовать Вулкан, при том, что используются функции OpenGL не выше 2.0, как-то не практично.
Вот у меня всё руки не дойдут просто тупо заменить библиотеку libgl из Минт 18.3 в Минт 19, если это прокатит, будет здорово, хотя решение не нормальное.

Добавлено спустя 2 минуты 26 секунд:
Да кстати, проблема не просто в линуксе, а в линукс Минт начиная с 19-й версии, или Убунту 18.04, на версиях более старых никаких проблем, в винде так же никаких проблем.

Добавлено спустя 7 часов 6 минут 49 секунд:
Руки дошли, но к сожалению подмена библиотеки не помогла, с теми libGL, которые на рабочих компах создание контекста вызывало ошибку, до рисования дело даже не дошло, а жаль
хоть какое-то решение было бы.
Sasha
новенький
 
Сообщения: 41
Зарегистрирован: 07.12.2015 01:27:43

Пред.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot], Yandex [Bot] и гости: 13

Рейтинг@Mail.ru