Calculates afterglow from a value 0.0 to 1.0
which is the factor the screen will be after 1 second (provided it draws at the set FPS rate)
This commit is contained in:
@@ -124,10 +124,11 @@ MainWindow::MainWindow(QWidget *parent) :
|
|||||||
auto widget = new QWidget;
|
auto widget = new QWidget;
|
||||||
auto layout = new QFormLayout(widget);
|
auto layout = new QFormLayout(widget);
|
||||||
{
|
{
|
||||||
auto input = new QSpinBox;
|
auto input = new QDoubleSpinBox;
|
||||||
input->setRange(0, 255);
|
input->setRange(0, 1.0);
|
||||||
|
input->setSingleStep(0.1);
|
||||||
input->setValue(m_ui->widget->afterglow());
|
input->setValue(m_ui->widget->afterglow());
|
||||||
connect(input, qOverload<int>(&QSpinBox::valueChanged), m_ui->widget, &OsciWidget::setAfterglow);
|
connect(input, qOverload<double>(&QDoubleSpinBox::valueChanged), m_ui->widget, &OsciWidget::setAfterglow);
|
||||||
layout->addRow(tr("Afterglow:"), input);
|
layout->addRow(tr("Afterglow:"), input);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
|
@@ -30,6 +30,13 @@ void OsciWidget::setFps(int fps)
|
|||||||
m_redrawTimerId = startTimer(1000/m_fps);
|
m_redrawTimerId = startTimer(1000/m_fps);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OsciWidget::setAfterglow(float afterglow){
|
||||||
|
m_afterglow = afterglow;
|
||||||
|
// percentage of the image that should be visible after one second
|
||||||
|
// i.e. factor^fps=afterglow -> factor = afterglow^(1/fps)
|
||||||
|
m_afterglowColor = 255 * pow(afterglow, 1.0/m_fps);
|
||||||
|
}
|
||||||
|
|
||||||
void OsciWidget::setLightspeed(int lightspeed) {
|
void OsciWidget::setLightspeed(int lightspeed) {
|
||||||
const auto temp = (float(lightspeed)/20.f);
|
const auto temp = (float(lightspeed)/20.f);
|
||||||
m_lightspeed = temp*temp*temp;
|
m_lightspeed = temp*temp*temp;
|
||||||
@@ -73,7 +80,7 @@ void OsciWidget::updateFrameBuffer()
|
|||||||
// darkening last frame
|
// darkening last frame
|
||||||
painter.setCompositionMode(QPainter::CompositionMode_Multiply);
|
painter.setCompositionMode(QPainter::CompositionMode_Multiply);
|
||||||
painter.setPen({});
|
painter.setPen({});
|
||||||
painter.setBrush(QColor(m_afterglow, m_afterglow, m_afterglow));
|
painter.setBrush(QColor(m_afterglowColor, m_afterglowColor, m_afterglowColor));
|
||||||
painter.drawRect(m_pixmap.rect());
|
painter.drawRect(m_pixmap.rect());
|
||||||
|
|
||||||
// drawing new lines ontop
|
// drawing new lines ontop
|
||||||
|
@@ -21,7 +21,7 @@ public:
|
|||||||
|
|
||||||
float factor() const { return m_factor; }
|
float factor() const { return m_factor; }
|
||||||
int fps() const { return m_fps; }
|
int fps() const { return m_fps; }
|
||||||
int afterglow() const { return m_afterglow; }
|
float afterglow() const { return m_afterglow; }
|
||||||
int lightspeed() const;
|
int lightspeed() const;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
@@ -30,7 +30,7 @@ signals:
|
|||||||
public slots:
|
public slots:
|
||||||
void setFactor(float factor) { m_factor = factor; }
|
void setFactor(float factor) { m_factor = factor; }
|
||||||
void setFps(int fps);
|
void setFps(int fps);
|
||||||
void setAfterglow(int afterglow) { m_afterglow = afterglow; }
|
void setAfterglow(float afterglow);
|
||||||
void setLightspeed(int lightspeed);
|
void setLightspeed(int lightspeed);
|
||||||
|
|
||||||
void renderSamples(const SamplePair *begin, const SamplePair *end);
|
void renderSamples(const SamplePair *begin, const SamplePair *end);
|
||||||
@@ -44,7 +44,8 @@ private:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
float m_factor{2.f};
|
float m_factor{2.f};
|
||||||
int m_fps{30}, m_afterglow{175};
|
int m_fps{30}, m_afterglowColor{175};
|
||||||
|
float m_afterglow{0.2};
|
||||||
float m_lightspeed{35.f};
|
float m_lightspeed{35.f};
|
||||||
|
|
||||||
std::vector<SamplePair> m_buffer;
|
std::vector<SamplePair> m_buffer;
|
||||||
|
Reference in New Issue
Block a user