OpenGLControl в LinuxMint 19
Модератор: Модераторы
OpenGLControl в LinuxMint 19
Установил минт 19, теперь программы использующие компонент OpenGLControl после закрытия выдают ошибку.
Попробовал сделать пустое приложение с OpenGLControl для проверки, оказалось, что если использовать MakeCurent или SwapBuffers, то по закрытии будет ошибка.
Использую Лазарус 1.8.4
Может кто-то сталкивался с такой проблемой и знает решение?
Попробовал сделать пустое приложение с OpenGLControl для проверки, оказалось, что если использовать MakeCurent или SwapBuffers, то по закрытии будет ошибка.
Использую Лазарус 1.8.4
Может кто-то сталкивался с такой проблемой и знает решение?
Текст ошибки конечно же секретный?
Код: Выделить всё
strace ./progвыхлоп в студию)
для zoltanleo:
после закрытия программы в терминале выводится это:
An unhandled exception occurred at $00007FD1466177C8:
EAccessViolation:
$00007FD1466177C8
для fedan:
я правильно понимаю, что нужно только последнее, что выводилось, а то этот starce просто мега простыню выдаёт.
последнее, что он выдавал:
Добавлено спустя 16 минут 11 секунд:
А если запускать прогу в среде Лазаруса, то при закрытии выдаётся ошибка следующего вида:

после закрытия программы в терминале выводится это:
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 секунд:
А если запускать прогу в среде Лазаруса, то при закрытии выдаётся ошибка следующего вида:

Попробуй примеры из $(lazdir)/components/opengl/example/
Sasha
А Вы там файлы, случайно, не используете?
А Вы там файлы, случайно, не используете?
Sasha писал(а):что если использовать MakeCurent или SwapBuffers, то по закрытии будет ошибка.
а где ReleaseContext();?
Код: Выделить всё
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.
Представте у вас два OpenGL окна на одной форме.Sasha писал(а):На сколько я понимаю ReleaseContext(); должен вызывать сам OpenGLControl, где-то во время своего уничтожения.
как можно сообщить что одному glClearColor(0,0.0,0,1); а второму glClearColor(1,1,1,1);
для этого существует MakeCurent/ReleaseContext
верно, Opengl сыпятся коды, а кому bitmapit он понять не может.Sasha писал(а):Забыл добавить, если не нажимать кнопку, то ошибки не будет.
olegy123 Видимо вы даже не смотрели тестовый пример. Там на форме один компонент OpenGLControl и одна кнопка, так что MakeCurrent тут не нужен.
Если у кого-то установлен Минт 19 и Лазарус 1.8.4 отпишитесь пожалуйста, возникает ли у вас подобная проблема.
Ещё немного потестировав, выяснил, что если не использовать функции OpenGL, то ошибок при закрытии программы нет.
Потестировав ещё немного обнаружил, что достаточно вызвать glClear(...) и будет ошибка при закрытии, даже SwafBuffers не надо вызывать.
Если у кого-то установлен Минт 19 и Лазарус 1.8.4 отпишитесь пожалуйста, возникает ли у вас подобная проблема.
Ещё немного потестировав, выяснил, что если не использовать функции OpenGL, то ошибок при закрытии программы нет.
Потестировав ещё немного обнаружил, что достаточно вызвать glClear(...) и будет ошибка при закрытии, даже SwafBuffers не надо вызывать.
у OpenGLControl есть OnPaint в котором нужно писать GL код.
Но если нужно иметь за рамками OpenGLControl - в отдельном потоке. то OpenGLControl.MakeCurent захватывает контекст, теперь все gl команды будут адресованы данному окну(контексту). OpenGLControl.ReleaseContext - высвобождает контекст. за рамками gl коды не имеют смысла..
Добавлено спустя 5 минут 51 секунду:
OpenGL - это внешнее устройство, и может быть не одно.
функциональный подход GL команд не отображает владельца.
Button1Click -
это пук в пустоту..
Но если нужно иметь за рамками OpenGLControl - в отдельном потоке. то OpenGLControl.MakeCurent захватывает контекст, теперь все gl команды будут адресованы данному окну(контексту). OpenGLControl.ReleaseContext - высвобождает контекст. за рамками gl коды не имеют смысла..
Добавлено спустя 5 минут 51 секунду:
OpenGL - это внешнее устройство, и может быть не одно.
функциональный подход GL команд не отображает владельца.
Button1Click -
Код: Выделить всё
glClearColor(0,0.5,0,1);
glClear(GL_COLOR_BUFFER_BIT);
это пук в пустоту..
olegy123 Вы вместо того, чтобы писать столько, воспроизвели бы тот пример, тогда бы вы увидели, что этот "пук в пустоту.." вполне себе окрашивает область OpenGLControl в зелёный цвет.
gtk? qt? дровишки откуда? видимо карта почем?
проверте на транковой версии лазаря и на https://bugs.freepascal.org если воспроизводится
проверте на транковой версии лазаря и на https://bugs.freepascal.org если воспроизводится
zubБиблиотеки gtk, дрова, те которые сам Минт поставил из менеджера драйверов (карта NVidia GeForce).
У меня есть подозрение, что-то не так с библиотекой libgl (в 19-м Минте), т.к. исполняемый файл запускал на Linux Mint 17,18 и никаких ошибок при закрытии не было.
Идея появилась просто стащить эту библиотеку из 18-го Минта и в 19-й скопировать.
У меня есть подозрение, что-то не так с библиотекой libgl (в 19-м Минте), т.к. исполняемый файл запускал на Linux Mint 17,18 и никаких ошибок при закрытии не было.
Идея появилась просто стащить эту библиотеку из 18-го Минта и в 19-й скопировать.
>>zubБиблиотеки gtk, дрова, те которые сам Минт поставил из менеджера драйверов (карта NVidia GeForce).
т.е. всё заурядное, поставленное из репов, без изысков?
>>Идея появилась
сначала багрепорт
т.е. всё заурядное, поставленное из репов, без изысков?
>>Идея появилась
сначала багрепорт
