OpenGLControl в LinuxMint 19

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

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

OpenGLControl в LinuxMint 19

Сообщение Sasha » 01.12.2018 22:26:52

Установил минт 19, теперь программы использующие компонент OpenGLControl после закрытия выдают ошибку.
Попробовал сделать пустое приложение с OpenGLControl для проверки, оказалось, что если использовать MakeCurent или SwapBuffers, то по закрытии будет ошибка.
Использую Лазарус 1.8.4
Может кто-то сталкивался с такой проблемой и знает решение?
Sasha
новенький
 
Сообщения: 41
Зарегистрирован: 07.12.2015 01:27:43

Re: OpenGLControl в LinuxMint 19

Сообщение zoltanleo » 02.12.2018 00:40:44

Текст ошибки конечно же секретный?
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 457
Зарегистрирован: 17.10.2013 10:55:01

Re: OpenGLControl в LinuxMint 19

Сообщение fedan » 02.12.2018 02:05:32

Код: Выделить всё
strace ./prog

выхлоп в студию)
fedan
новенький
 
Сообщения: 70
Зарегистрирован: 15.09.2016 21:18:48

Re: OpenGLControl в LinuxMint 19

Сообщение Sasha » 02.12.2018 03:17:19

для zoltanleo:
после закрытия программы в терминале выводится это:
An unhandled exception occurred at $00007FD1466177C8:
EAccessViolation:
$00007FD1466177C8

для fedan:
я правильно понимаю, что нужно только последнее, что выводилось, а то этот starce просто мега простыню выдаёт.
последнее, что он выдавал:
Код: Выделить всё
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 +++


Добавлено спустя 16 минут 11 секунд:
А если запускать прогу в среде Лазаруса, то при закрытии выдаётся ошибка следующего вида:
Изображение
Sasha
новенький
 
Сообщения: 41
Зарегистрирован: 07.12.2015 01:27:43

Re: OpenGLControl в LinuxMint 19

Сообщение fedan » 02.12.2018 06:43:49

Попробуй примеры из $(lazdir)/components/opengl/example/
fedan
новенький
 
Сообщения: 70
Зарегистрирован: 15.09.2016 21:18:48

Re: OpenGLControl в LinuxMint 19

Сообщение Vadim » 02.12.2018 10:42:11

Sasha
А Вы там файлы, случайно, не используете?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: OpenGLControl в LinuxMint 19

Сообщение olegy123 » 02.12.2018 10:50:56

Sasha писал(а):что если использовать MakeCurent или SwapBuffers, то по закрытии будет ошибка.

а где ReleaseContext();?
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: OpenGLControl в LinuxMint 19

Сообщение Sasha » 02.12.2018 16:37:34

Код: Выделить всё
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, OpenGLContext, Forms, Controls, Graphics, Dialogs, StdCtrls, gl;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    OpenGLControl1: TOpenGLControl;
    procedure Button1Click(Sender: TObject);
  private

  public

  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  glClearColor(0,0.5,0,1);
  glClear(GL_COLOR_BUFFER_BIT);

  OpenGLControl1.SwapBuffers;
end;

end.


Вот так выглядит тестирующая прога, и это работает без проблем, но на Минт 19 возникает ошибка во время закрытия программы.
На сколько я понимаю ReleaseContext(); должен вызывать сам OpenGLControl, где-то во время своего уничтожения.
Пример я пробовал, но как и ожидалось ошибка так же возникает.
Ошибка видимо где-то в инициализации контекста или в его удалении, но по каким-то причинам она не проявляется в более ранних версиях Линукс Минт.

Добавлено спустя 2 минуты 2 секунды:
Забыл добавить, если не нажимать кнопку, то ошибки не будет.
Поэтому ошибка может быть в реализации метода SwapBuffers.
Sasha
новенький
 
Сообщения: 41
Зарегистрирован: 07.12.2015 01:27:43

Re: OpenGLControl в LinuxMint 19

Сообщение olegy123 » 02.12.2018 19:06:21

Sasha писал(а):На сколько я понимаю ReleaseContext(); должен вызывать сам OpenGLControl, где-то во время своего уничтожения.
Представте у вас два OpenGL окна на одной форме.
как можно сообщить что одному glClearColor(0,0.0,0,1); а второму glClearColor(1,1,1,1);
для этого существует MakeCurent/ReleaseContext

Sasha писал(а):Забыл добавить, если не нажимать кнопку, то ошибки не будет.
верно, Opengl сыпятся коды, а кому bitmapit он понять не может.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: OpenGLControl в LinuxMint 19

Сообщение Sasha » 03.12.2018 01:21:33

olegy123 Видимо вы даже не смотрели тестовый пример. Там на форме один компонент OpenGLControl и одна кнопка, так что MakeCurrent тут не нужен.


Если у кого-то установлен Минт 19 и Лазарус 1.8.4 отпишитесь пожалуйста, возникает ли у вас подобная проблема.
Ещё немного потестировав, выяснил, что если не использовать функции OpenGL, то ошибок при закрытии программы нет.
Потестировав ещё немного обнаружил, что достаточно вызвать glClear(...) и будет ошибка при закрытии, даже SwafBuffers не надо вызывать.
Sasha
новенький
 
Сообщения: 41
Зарегистрирован: 07.12.2015 01:27:43

Re: OpenGLControl в LinuxMint 19

Сообщение olegy123 » 03.12.2018 12:10:11

у OpenGLControl есть OnPaint в котором нужно писать GL код.
Но если нужно иметь за рамками OpenGLControl - в отдельном потоке. то OpenGLControl.MakeCurent захватывает контекст, теперь все gl команды будут адресованы данному окну(контексту). OpenGLControl.ReleaseContext - высвобождает контекст. за рамками gl коды не имеют смысла..

Добавлено спустя 5 минут 51 секунду:
OpenGL - это внешнее устройство, и может быть не одно.
функциональный подход GL команд не отображает владельца.
Button1Click -
Код: Выделить всё
  glClearColor(0,0.5,0,1);
  glClear(GL_COLOR_BUFFER_BIT);

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

Re: OpenGLControl в LinuxMint 19

Сообщение Sasha » 03.12.2018 17:36:30

olegy123 Вы вместо того, чтобы писать столько, воспроизвели бы тот пример, тогда бы вы увидели, что этот "пук в пустоту.." вполне себе окрашивает область OpenGLControl в зелёный цвет.
Sasha
новенький
 
Сообщения: 41
Зарегистрирован: 07.12.2015 01:27:43

Re: OpenGLControl в LinuxMint 19

Сообщение zub » 03.12.2018 21:56:25

gtk? qt? дровишки откуда? видимо карта почем?

проверте на транковой версии лазаря и на https://bugs.freepascal.org если воспроизводится
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: OpenGLControl в LinuxMint 19

Сообщение Sasha » 03.12.2018 23:01:37

zubБиблиотеки gtk, дрова, те которые сам Минт поставил из менеджера драйверов (карта NVidia GeForce).
У меня есть подозрение, что-то не так с библиотекой libgl (в 19-м Минте), т.к. исполняемый файл запускал на Linux Mint 17,18 и никаких ошибок при закрытии не было.
Идея появилась просто стащить эту библиотеку из 18-го Минта и в 19-й скопировать.
Sasha
новенький
 
Сообщения: 41
Зарегистрирован: 07.12.2015 01:27:43

Re: OpenGLControl в LinuxMint 19

Сообщение zub » 04.12.2018 00:11:52

>>zubБиблиотеки gtk, дрова, те которые сам Минт поставил из менеджера драйверов (карта NVidia GeForce).
т.е. всё заурядное, поставленное из репов, без изысков?

>>Идея появилась
сначала багрепорт
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

След.

Вернуться в Lazarus

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15

Рейтинг@Mail.ru