48 if (shader_program_.isLinked()) {
49 shader_program_.release();
50 shader_program_.removeAllShaders();
53 shader_program_.addShaderFromSourceFile(QOpenGLShader::Vertex,
54 ":/shaders/triangles.v.glsl");
55 shader_program_.addShaderFromSourceFile(QOpenGLShader::Fragment,
56 ":/shaders/triangles.f.glsl");
57 shader_program_.link();
58 shader_program_.bind();
69 num_geoms_ =
data.size();
70 if (num_geoms_ == 0) {
78 vbo_.setUsagePattern(QOpenGLBuffer::DynamicDraw);
79 vbo_.allocate(
data.data(),
83 shader_program_.enableAttributeArray(
"a_position");
84 shader_program_.setAttributeBuffer(
"a_position", GL_FLOAT, 0, 3,
88 shader_program_.enableAttributeArray(
"a_color");
89 shader_program_.setAttributeBuffer(
"a_color", GL_FLOAT, 3 *
sizeof(GLfloat),
102 if (num_geoms_ == 0) {
106 shader_program_.bind();
109 shader_program_.setUniformValue(
"u_pmv_matrix", pmv_matrix);
111 QOpenGLFunctions* gl_funcs = QOpenGLContext::currentContext()->functions();
112 gl_funcs->glDrawArrays(GL_TRIANGLES, 0, (GLsizei)(3 * num_geoms_));
void Upload(const std::vector< TrianglePainter::Data > &data)
void Render(const QMatrix4x4 &pmv_matrix)