貼り付けなければならないコードが多すぎます。私はチュートリアルに従っていますが、自分でそれらを実装しようとすると、何もうまくいかないようです. glMapBuffer
以下にルーチンを貼り付けます。vertex_type
とrender_target
は、ユーザーがこれらの列挙値を自分で設定できるテンプレート化されたパラメーターであることに注意してください。
これは、VBO の内容を変更することによって、正方形が画面の右上隅に向かってゆっくりと直線的に移動していることを示しています。
bool modify_vertex_data(
std::vector<vertex_2d_renderer_type<vertex_type> > &data,
GLsizeiptr start_index) {
if (!vertex_vbo_pointer_ || (start_index + data.size()) >
static_cast<uint32_t>(vertex_count_)) {
return false;
}
glBindBuffer(render_target, vertex_vbo_pointer_);
vertex_2d_renderer_type<vertex_type> *vbo_data;
vbo_data = reinterpret_cast<vertex_2d_renderer_type<vertex_type> *>(
glMapBuffer(render_target, modify_access));
memcpy(vbo_data, data.data(),
data.size() * sizeof(vertex_2d_renderer_type<vertex_type>));
return (glGetError() == GL_NO_ERROR) && glUnmapBuffer(render_target);
}
これを呼び出すコードは次のとおりです。
void QtRenderer::paintGL() {
//makeCurrent();
count_++;
glMatrixMode(GL_PROJECTION);
glEnable(GL_SCISSOR_TEST);
glDisable(GL_DEPTH_TEST);
glLoadIdentity();
glViewport(0, 0, width(), height());
glOrtho(0, width(), 0, height(), -1, 1);
glMatrixMode(GL_MODELVIEW);
glScissor(0, 0, width(), height());
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0.0, 0.0, 0.0, 1.0);
glLoadIdentity();
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
for (uint32_t i = 0; i < 6; ++i) {
data_[i].vertex_.x_ += 0.1;
data_[i].vertex_.y_ += 0.1;
}
if (!renderer_2d_.modify_vertex_data(data_, 0)) {
throw std::runtime_error("ERROR: Data Modification Error");
}
renderer_2d_.draw_vertex_data();
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
swapBuffers();
}