48 if (shader_program_.isLinked()) {
49 shader_program_.release();
50 shader_program_.removeAllShaders();
53 shader_program_.addShaderFromSourceFile(QOpenGLShader::Vertex,
54 ":/shaders/points.v.glsl");
55 shader_program_.addShaderFromSourceFile(QOpenGLShader::Fragment,
56 ":/shaders/points.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 const float point_size) {
103 if (num_geoms_ == 0) {
107 shader_program_.bind();
110 shader_program_.setUniformValue(
"u_pmv_matrix", pmv_matrix);
111 shader_program_.setUniformValue(
"u_point_size", point_size);
113 QOpenGLFunctions* gl_funcs = QOpenGLContext::currentContext()->functions();
114 gl_funcs->glDrawArrays(GL_POINTS, 0, (GLsizei)num_geoms_);
void Upload(const std::vector< PointPainter::Data > &data)
void Render(const QMatrix4x4 &pmv_matrix, const float point_size)