Я пытаюсь использовать QOpenGL для рисования точек. Основная логика заключается в том, что при щелчке мыши рисуется точка.
Поэтому я написал следующий код (Объекты vao и vbo были созданы в InitializeGL())
Код: Выделить всё
void PointWidget::mousePressEvent(QMouseEvent* event)
{
QMatrix4x4 mat_viewport{};
mat_viewport.viewport(0, 0, 500, 500);
auto inverse = mat_viewport.inverted(nullptr);
QVector4D new_pos{ static_cast(event->pos().x()),static_cast(500 - event->pos().y()),0.0f,1.0f };
new_pos = inverse * new_pos;
//nothing important just draw a new point
click_points_[tot_click] = new_pos.x();
++tot_click;
click_points_[tot_click] = new_pos.y();
++tot_click;
vao_click_points->bind();
vbo_click_points->bind();
vbo_click_points->allocate(click_points_, sizeof(float) * tot_click);
click_shader_->bind();
click_shader_->setAttributeBuffer("aPos", GL_FLOAT, 0, 2, 2 * sizeof(float));
click_shader_->enableAttributeArray("aPos");
click_shader_->release();
vbo_click_points->release();
vao_click_points->release();
}
Поэтому я использовал RenderDoc для отладки и обнаружил, что aPos был отключен.
здесь
Затем я попробовал скопировать часть кода в InitializeGL()
Код: Выделить всё
void PointWidget::initializeGL()
{
......................
......................
//real code start here
vao_click_points->bind();
vbo_click_points->bind();
click_shader_->bind();
click_shader_->setAttributeBuffer("aPos", GL_FLOAT, 0, 2, 2 * sizeof(float));
click_shader_->enableAttributeArray("aPos");
click_shader_->release();
vbo_click_points->release();
vao_click_points->release();
......................
......................
}
I checked the documentation and didn't see any relevant instructions.I want to know why this is happening
Источник: https://stackoverflow.com/questions/781 ... ot-working
Мобильная версия