1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-12-03 05:25:17 -05:00

OpenGL modernization: draw histogram contour the new way

This commit is contained in:
f4exb 2016-03-03 01:41:30 +01:00
parent 34df31ad27
commit 62a9aa2ff0
2 changed files with 28 additions and 20 deletions

View File

@ -152,7 +152,8 @@ private:
int m_histogramLateHoldoff; int m_histogramLateHoldoff;
int m_histogramStroke; int m_histogramStroke;
QRectF m_glHistogramRect; QRectF m_glHistogramRect;
QMatrix4x4 m_glHistogramMatrix; QMatrix4x4 m_glHistogramSpectrumMatrix;
QMatrix4x4 m_glHistogramBoxMatrix;
GLShaderSimple m_glShaderSimple; GLShaderSimple m_glShaderSimple;
bool m_displayHistogram; bool m_displayHistogram;

View File

@ -856,18 +856,25 @@ void GLSpectrum::paintGL()
} }
} }
glPopMatrix();
// draw rect around // draw rect around
#ifdef GL_DEPRECATED
glPushMatrix();
glTranslatef(m_glHistogramRect.x(), m_glHistogramRect.y(), 0);
glScalef(m_glHistogramRect.width(), m_glHistogramRect.height(), 1);
glEnable(GL_BLEND); glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glLineWidth(1.0f); glLineWidth(1.0f);
glColor4f(1, 1, 1, 0.5); glColor4f(1, 1, 1, 0.5);
#ifdef GL_DEPRECATED
glBegin(GL_LINE_LOOP); glBegin(GL_LINE_LOOP);
glVertex2f(1, 1); glVertex2f(1, 1);
glVertex2f(0, 1); glVertex2f(0, 1);
glVertex2f(0, 0); glVertex2f(0, 0);
glVertex2f(1, 0); glVertex2f(1, 0);
glEnd(); glEnd();
glDisable(GL_BLEND);
glPopMatrix();
#else #else
{ {
GLfloat q3[] { GLfloat q3[] {
@ -876,21 +883,11 @@ void GLSpectrum::paintGL()
0, 0, 0, 0,
1, 0 1, 0
}; };
#ifdef GL_ANDROID
glEnableVertexAttribArray(GL_VERTEX_ARRAY); QVector4D color(1.0f, 1.0f, 1.0f, 0.5f);
glVertexAttribPointer(GL_VERTEX_ARRAY, 2, GL_FLOAT, GL_FALSE, 0, q3); m_glShaderSimple.drawContour(m_glHistogramBoxMatrix, color, q3, 4);
glDrawArrays(GL_LINE_LOOP, 0, 4);
glDisableVertexAttribArray(GL_VERTEX_ARRAY);
#else
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(2, GL_FLOAT, 0, q3);
glDrawArrays(GL_LINE_LOOP, 0, 4);
glDisableClientState(GL_VERTEX_ARRAY);
#endif
} }
#endif #endif
glDisable(GL_BLEND);
glPopMatrix();
} }
// paint left scales (time and power) // paint left scales (time and power)
@ -1161,7 +1158,7 @@ void GLSpectrum::paintGL()
} }
QVector4D color(1.0f, 0.0f, 0.0f, (float) m_displayTraceIntensity / 100.0f); QVector4D color(1.0f, 0.0f, 0.0f, (float) m_displayTraceIntensity / 100.0f);
m_glShaderSimple.drawPolyline(m_glHistogramMatrix, color, q3, m_fftSize); m_glShaderSimple.drawPolyline(m_glHistogramSpectrumMatrix, color, q3, m_fftSize);
} }
#endif #endif
} }
@ -1225,7 +1222,7 @@ void GLSpectrum::paintGL()
} }
QVector4D color(1.0f, 1.0f, 0.25f, (float) m_displayTraceIntensity / 100.0f); QVector4D color(1.0f, 1.0f, 0.25f, (float) m_displayTraceIntensity / 100.0f);
m_glShaderSimple.drawPolyline(m_glHistogramMatrix, color, q3, m_fftSize); m_glShaderSimple.drawPolyline(m_glHistogramSpectrumMatrix, color, q3, m_fftSize);
} }
#endif #endif
} }
@ -1551,16 +1548,26 @@ void GLSpectrum::applyChanges()
(float)histogramHeight / (float)height() (float)histogramHeight / (float)height()
); );
m_glHistogramMatrix.setToIdentity(); m_glHistogramSpectrumMatrix.setToIdentity();
m_glHistogramMatrix.translate( m_glHistogramSpectrumMatrix.translate(
-1.0f + ((float)(2*leftMargin) / (float) width()), -1.0f + ((float)(2*leftMargin) / (float) width()),
1.0f - ((float)(2*histogramTop) / (float) height()) 1.0f - ((float)(2*histogramTop) / (float) height())
); );
m_glHistogramMatrix.scale( m_glHistogramSpectrumMatrix.scale(
((float) 2 * (width() - leftMargin - rightMargin)) / ((float) width() * (float)(m_fftSize - 1)), ((float) 2 * (width() - leftMargin - rightMargin)) / ((float) width() * (float)(m_fftSize - 1)),
((float) 2*histogramHeight / height()) / m_powerRange ((float) 2*histogramHeight / height()) / m_powerRange
); );
m_glHistogramBoxMatrix.setToIdentity();
m_glHistogramBoxMatrix.translate(
-1.0f + ((float)(2*leftMargin) / (float) width()),
1.0f - ((float)(2*histogramTop) / (float) height())
);
m_glHistogramBoxMatrix.scale(
((float) 2 * (width() - leftMargin - rightMargin)) / (float) width(),
(float) (-2*histogramHeight) / (float) height()
);
m_frequencyScaleRect = QRect( m_frequencyScaleRect = QRect(
0, 0,
frequencyScaleTop, frequencyScaleTop,