Использование QOpenGLShaderProgram в обычной функции не работаетC++

Программы на C++. Форум разработчиков
Ответить
Гость
 Использование QOpenGLShaderProgram в обычной функции не работает

Сообщение Гость »


Я пытаюсь использовать 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();

......................
......................

}
Suddenly I could draw normally, but I didn't change any code inside mousePressEvent()
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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»