Чем можно заменить VBO буффер?

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

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

Re: Чем можно заменить VBO буффер?

Сообщение Osmiy » 11.03.2017 02:36:24

fedan, сделай OpenGLControl.MakeCurrent перед Load_GL_VERSION_3_1().

Добавлено спустя 30 секунд:
Только это можно сделать уже после создания формы...
Osmiy
новенький
 
Сообщения: 36
Зарегистрирован: 07.05.2016 21:18:39

Re: Чем можно заменить VBO буффер?

Сообщение fedan » 11.03.2017 03:34:37

Подправил немного:
simple_vbo.zip

Кстати в линуксе glGetString(GL_VERSION) возвращает поддерживаемую версию OpenGL, название вендора и версию драйвера, а в окнах только версию.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось fedan 11.03.2017 13:50:41, всего редактировалось 1 раз.
fedan
новенький
 
Сообщения: 70
Зарегистрирован: 15.09.2016 21:18:48

Re: Чем можно заменить VBO буффер?

Сообщение shyub » 11.03.2017 10:17:04

Fedan, очень понравился ваш вариант. OpenGL я изучал по книге "OpenGL в Delphi" М.Краснов. 2000 г., а VBO по этой подборке статей: http://vbomesh.blogspot.com/2012/02/vbo-opengl.html. Применительно к моим задачам мне необходимо будет отображать объёмные детали и иметь возможность просмотра их с разных сторон, поэтому немного изменил ваш код. И второе. На https://ru.wikipedia.org/wiki/Vertex_Buffer_Object пишут, что BindBuffer поддерживаетс начиная с версии OpenGL 2.1 (до этого была процедура BindBufferARB). Мало вероятно, что у кого-то окажется версия ниже, но тем не менее я изменил инициализацию с 1.5 на 2.1.
Всё работает, но посмотрите, может что-то я сделал не совсем корректно.
simple_vbo_Windows.rar
У вас нет необходимых прав для просмотра вложений в этом сообщении.
shyub
постоялец
 
Сообщения: 112
Зарегистрирован: 25.11.2014 23:15:19

Re: Чем можно заменить VBO буффер?

Сообщение fedan » 11.03.2017 14:41:47

shyub Да я сам не специалист. :D
Просто прочитал пост, стало интересно. нашел через google по example glGenBuffers, пример на C и подправил под OpenGLControl.
Вот тут неплохие уроки на С++ http://www.opengl-tutorial.org/ru, http://gameinstitute.ru/uroki-opengl
fedan
новенький
 
Сообщения: 70
Зарегистрирован: 15.09.2016 21:18:48

Re: Чем можно заменить VBO буффер?

Сообщение shyub » 12.03.2017 12:48:31

Одна проблема решена, появилась вторая: на 4-х ядерном процессоре простой квадрат загружает одно ядро на 50%, второе - на 75%, если использую ваш вариант. Пытался у компонента OpenGLControl1 свойство AutoResizeViewport устанавливать в false - опять же не определяется версия OpenGL. Отключаю Idle-функцию, перевожу после запуска OpenGLControl1.AutoResizeViewport:=false;, т.е. перерисовка не работает, а нагрузка на ядра не падает. Впечатление, что OpenGLControl1 имеет в своих недрах какую-то функцию, которая минуя TForm1.FormShow(Sender: TObject); беспрерывно перерисовывает экран. Надо сделать так, чтоы перерисовка производилась только при изменении размера окна или картинки.
shyub
постоялец
 
Сообщения: 112
Зарегистрирован: 25.11.2014 23:15:19

Re: Чем можно заменить VBO буффер?

Сообщение fedan » 12.03.2017 14:59:52

shyub писал(а):простой квадрат загружает одно ядро на 50%, второе - на 75


Закомментировать
Код: Выделить всё
procedure TForm1.FormCreate(Sender: TObject);
begin
  OpenGLControl1.AutoResizeViewport := true;
//  Application.AddOnIdleHandler(@OnAppIdle);
end;
fedan
новенький
 
Сообщения: 70
Зарегистрирован: 15.09.2016 21:18:48

Re: Чем можно заменить VBO буффер?

Сообщение shyub » 12.03.2017 15:12:48

Я вот так решил:
Код: Выделить всё
procedure TForm1.IdleFunc(Sender: TObject; var Done: boolean);
begin
  Done:=true; // true - метод вызывается при наличиии сообщений, false - постоянно.
  if flagRepainGL then OpenGLControl1.Invalidate;
end;

а после отрисовки сбрасываю флаг flagRepainGL.
А зачем вы делаете это:
Код: Выделить всё
OpenGLControl1.AutoResizeViewport := true;

если AutoResizeViewport установлен в инспекторе объектов?
shyub
постоялец
 
Сообщения: 112
Зарегистрирован: 25.11.2014 23:15:19

Re: Чем можно заменить VBO буффер?

Сообщение fedan » 12.03.2017 15:15:56

shyub писал(а):если AutoResizeViewport установлен в инспекторе объектов


Это я уже позже в инспекторе включил :D
fedan
новенький
 
Сообщения: 70
Зарегистрирован: 15.09.2016 21:18:48

Пред.

Вернуться в Lazarus

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

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

Рейтинг@Mail.ru