glGetString(GL_VERSION) возвращает: "3.0.0 - Build 8.15.10.2342".
Добавлено спустя 15 минут 1 секунду:Osmiy писал(а):Надо разбираться почему false возвращает.
Load_GL_VERSION_3_0(); запускал в TForm1.FormCreate, когда запустил в TForm1.OpenGLControl1Paint вернула "true", но даже если здесь делаю инициализацию VBO всравно та же ошибка.
Добавлено спустя 1 час 11 минут 31 секунду:Перенёс инициализацию на кнопку, т.е. включаю "вручную" и добавил, как советовал
Osmiy, функцию Load_GL_VERSION_3_1:
- Код: Выделить всё
// Инициализация VBO-VAO.
procedure TForm1.Button2Click(Sender: TObject);
beginfunction VBOInit: boolean;
var
Count:integer;
// d: boolean=false;
begin
Result:=false;
Load_GL_VERSION_3_0();
// glewInit(); // Вот так рекомендуют на С++, но в Lazarus-е нет glew.
Count:=high(VertexBuffer)+1;
glGenBuffers( 1, @vId );
glBindBuffer(GL_ARRAY_BUFFER, vId );
glBufferData(GL_ARRAY_BUFFER, sizeof(GLFLoat)*3*Count, @VertexBuffer[0],
GL_STATIC_DRAW); // Передача массива вершин в ОЗУ видеокарты.
glBindBuffer(GL_ARRAY_BUFFER,0);
glGenBuffers( 1, @cId );
glBindBuffer(GL_ARRAY_BUFFER, cId );
glBufferData(GL_ARRAY_BUFFER, sizeof(GLUByte)*3*Count, @ColorBuffer[0],
GL_STATIC_DRAW); // Передача массива цветов в ОЗУ видеокарты.
glBindBuffer(GL_ARRAY_BUFFER,0);
Result:=true;
end;
if VBOInit then Label2.Caption:='VBO и VAO вкл.';
end;
Заработало! Почему-то при первой перерисовке
procedure TForm1.OpenGLControl1Paint(Sender: TObject); не срабатывало. Может есть смысл поставить таймер и производить инициализацию через какой-то промежуток времени после первой перерисовки? И есть ли смысл использовать перерисовку
OpenGLControl1, если планируется работать только с буферами?
Вообщни, самое главное, что получилось. Большое спасибо всем ответившим, особенно
Osmiy и
Mikhail!
Добавлено спустя 3 минуты 40 секунд:Запускается, если ставлю от
Load_GL_VERSION_2_0(); до
Load_GL_VERSION_3_0(); (выше не работает, т.к. у меря 3-я версия OpenGL).