2016-07-26 3 views
1

Я пытаюсь использовать glMapBuffer с QOpenGLWidget, но я не могу его найти. Вот мои файлы включены:OpenGL: Как использовать glMapBuffer с Qt?

#include <QOpenGLWidget> 
#include <QOpenGLFunctions> 
#include <QOpenGLBuffer> 
#include <QDebug> 
#include <QOpenGLTexture> 
#include <GL/gl.h> 
#include <GL/glext.h> 
#include <QGLFunctions> 
#include <QOpenGLShader> 
#include <QOpenGLShaderProgram> 

ответ

0

Не следует смешивать QOpenGL и QGL (удалить QGLFunctions и так старый, устаревший модуль OpenGL в конфигурации проекта). Вам не нужно включать gl.h и glext.h.

Вы включили QOpenGLBuffer. Метод map() инкапсулирует glMapBuffer:

// creation 

QOpenGLBuffer buffer = new QOpenGLBuffer(QOpenGLBuffer::VertexBuffer); 
buffer->create(); 

// allocation 

buffer->bind(); 

buffer->allocate(size_of_the_buffer); 

buffer->release(); 

// update 

buffer->bind(); 

void* buffer_data = buffer->map(QOpenGLBuffer::WriteOnly); 

memcpy(buffer_data, your_data_to_copy, size_of_your_data_to_copy); 

buffer->unmap(); 

buffer->release(); 
+0

метод отображения() работает для объекта QOpenGLBuffer, за исключением того, что я использую glBuffer для моих РВО. Мне нужно будет изменить его, и я не знаю, как это сделать. – Megatron300

+0

VBO - это буфер OpenGL, как и другой: используйте QOpenGLBuffer для управления им. Я отредактировал свой ответ с примером – wasthishelpful

+0

Хорошо, с вашим примером лучше, но у меня все еще есть вопросы. Что эквивалентно glBufferSubData в вашем примере? Нужно ли обновлять его для первой передачи данных? И как он будет работать с glVertexAttribPointer? Как я могу манипулировать смещением, поскольку я передаю Vertex и Texture координирует данные в моем буфере. – Megatron300