48 if (shader_program_.isLinked()) {
49 shader_program_.release();
50 shader_program_.removeAllShaders();
53 shader_program_.addShaderFromSourceFile(QOpenGLShader::Vertex,
54 ":/shaders/lines.v.glsl");
56 ":/shaders/lines.g.glsl");
57 shader_program_.addShaderFromSourceFile(QOpenGLShader::Fragment,
58 ":/shaders/lines.f.glsl");
59 shader_program_.link();
60 shader_program_.bind();
71 num_geoms_ =
data.size();
72 if (num_geoms_ == 0) {
80 vbo_.setUsagePattern(QOpenGLBuffer::DynamicDraw);
81 vbo_.allocate(
data.data(),
85 shader_program_.enableAttributeArray(
"a_pos");
86 shader_program_.setAttributeBuffer(
"a_pos", GL_FLOAT, 0, 3,
90 shader_program_.enableAttributeArray(
"a_color");
91 shader_program_.setAttributeBuffer(
"a_color", GL_FLOAT, 3 *
sizeof(GLfloat),
104 const int height,
const float line_width) {
105 if (num_geoms_ == 0) {
109 shader_program_.bind();
112 shader_program_.setUniformValue(
"u_pmv_matrix", pmv_matrix);
113 shader_program_.setUniformValue(
"u_inv_viewport",
115 shader_program_.setUniformValue(
"u_line_width", line_width);
117 QOpenGLFunctions* gl_funcs = QOpenGLContext::currentContext()->functions();
118 gl_funcs->glDrawArrays(GL_LINES, 0, (GLsizei)(2 * num_geoms_));
void Render(const QMatrix4x4 &pmv_matrix, const int width, const int height, const float line_width)
void Upload(const std::vector< LinePainter::Data > &data)