Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Torvald от Март 11, 2012, 14:41



Название: [решено] VBO + OpenGL + Qt (как подключить VBO?)
Отправлено: Torvald от Март 11, 2012, 14:41
Qt 4.7.4, не пойму как подключить VBO? Есть ли он в стандартной библиотеке Qt? Где то видел, что нужно подключать библиотеки
Код:
#include <GL/glext.h>
#include <GL/glxext.h>
но толку от них никакого. Пишу под линь и вин, использую QGLWidget


Название: Re: VBO + OpenGL + Qt (как подключить VBO?)
Отправлено: mitrich от Март 11, 2012, 15:48
Для использования VBO необходимо также объявить и инициализировать указатели на необходимые функции. Варианты следующие:

A) Решение проблемы "в лоб" на Win (исключительно для примера):
Код
C++ (Qt)
#include <GL/glext.h>
 
PFNGLBINDBUFFERPROC    glBindBuffer;
PFNGLBUFFERDATAPROC    glBufferData;
PFNGLBUFFERSUBDATAPROC glBufferSubData;
PFNGLDELETEBUFFERSPROC glDeleteBuffers;
PFNGLGENBUFFERSPROC    glGenBuffers;
PFNGLMAPBUFFERPROC     glMapBuffer;
PFNGLUNMAPBUFFERPROC   glUnmapBuffer;
 
//...
 
glBindBuffer    = wglGetProcAddress("glBindBuffer");
glBufferData    = wglGetProcAddress("glBufferData");
glBufferSubData = wglGetProcAddress("glBufferSubData");
glDeleteBuffers = wglGetProcAddress("glDeleteBuffers");
glGenBuffers    = wglGetProcAddress("glGenBuffers");
glMapBuffer     = wglGetProcAddress("glMapBuffer");
glUnmapBuffer   = wglGetProcAddress("glUnmapBuffer");
 

B) Кроссплатформенное и удобное решение - библиотека GLEW (http://glew.sourceforge.net/). Не надо ничего самому объявлять и инициализировать - просто вызываем glewInit().

C) Qt-only вариант - вместо этих функций используем класс QGLBuffer (http://doc.qt.nokia.com/4.7-snapshot/qglbuffer.html).


Название: Re: VBO + OpenGL + Qt (как подключить VBO?)
Отправлено: Torvald от Март 11, 2012, 17:28
Спасибо, за столь быстрый и развернутый ответ :) Я остановился на третьем варианте, но поглядываю на второй.