GLSpectrum: suppress VLAs

This commit is contained in:
f4exb 2018-03-01 01:40:29 +01:00
parent 13d3ec949d
commit 0cc99dad13
2 changed files with 95 additions and 6 deletions

View File

@ -812,7 +812,8 @@ void GLSpectrum::paintGL()
m_maxHold[i] = (j * m_powerRange) / 99.0 + m_referenceLevel;
}
{
GLfloat q3[2*m_fftSize];
//GLfloat q3[2*m_fftSize];
GLfloat *q3 = m_shaderArrays.m_q3FFT;
Real bottom = -m_powerRange;
for(int i = 0; i < m_fftSize; i++) {
@ -835,7 +836,8 @@ void GLSpectrum::paintGL()
{
{
Real bottom = -m_powerRange;
GLfloat q3[2*m_fftSize];
//GLfloat q3[2*m_fftSize];
GLfloat *q3 = m_shaderArrays.m_q3FFT;
for(int i = 0; i < m_fftSize; i++) {
Real v = (*m_currentSpectrum)[i] - m_referenceLevel;
@ -860,7 +862,8 @@ void GLSpectrum::paintGL()
tickList = &m_timeScale.getTickList();
{
GLfloat q3[4*tickList->count()];
//GLfloat q3[4*tickList->count()];
GLfloat *q3 = m_shaderArrays.m_q3TickTime;
int effectiveTicks = 0;
for (int i= 0; i < tickList->count(); i++)
@ -887,7 +890,8 @@ void GLSpectrum::paintGL()
tickList = &m_frequencyScale.getTickList();
{
GLfloat q3[4*tickList->count()];
//GLfloat q3[4*tickList->count()];
GLfloat *q3 = m_shaderArrays.m_q3TickFrequency;
int effectiveTicks = 0;
for (int i= 0; i < tickList->count(); i++)
@ -920,7 +924,8 @@ void GLSpectrum::paintGL()
tickList = &m_powerScale.getTickList();
{
GLfloat q3[4*tickList->count()];
//GLfloat q3[4*tickList->count()];
GLfloat *q3 = m_shaderArrays.m_q3TickPower;
int effectiveTicks = 0;
for(int i= 0; i < tickList->count(); i++)
@ -947,7 +952,8 @@ void GLSpectrum::paintGL()
tickList = &m_frequencyScale.getTickList();
{
GLfloat q3[4*tickList->count()];
//GLfloat q3[4*tickList->count()];
GLfloat *q3 = m_shaderArrays.m_q3TickFrequency;
int effectiveTicks = 0;
for(int i= 0; i < tickList->count(); i++)
@ -1572,6 +1578,8 @@ void GLSpectrum::applyChanges()
memset(m_histogram, 0x00, 100 * m_fftSize);
m_histogramHoldoff = new quint8[100 * m_fftSize];
memset(m_histogramHoldoff, 0x07, 100 * m_fftSize);
m_shaderArrays.allocFFT(2*m_fftSize);
}
if(fftSizeChanged || windowSizeChanged)
@ -1579,6 +1587,10 @@ void GLSpectrum::applyChanges()
m_waterfallTextureHeight = waterfallHeight;
m_waterfallTexturePos = 0;
}
m_shaderArrays.allocTickTime(4*m_timeScale.getTickList().count());
m_shaderArrays.allocTickFrequency(4*m_frequencyScale.getTickList().count());
m_shaderArrays.allocTickPower(4*m_powerScale.getTickList().count());
}
void GLSpectrum::mouseMoveEvent(QMouseEvent* event)

View File

@ -72,6 +72,82 @@ public:
void connectTimer(const QTimer& timer);
private:
struct ShaderArrays
{
GLfloat *m_q3TickTime;
GLfloat *m_q3TickFrequency;
GLfloat *m_q3TickPower;
GLfloat *m_q3FFT;
uint32_t m_q3TickTimeSize;
uint32_t m_q3TickTimeFrequencySize;
uint32_t m_q3TickPowerSize;
uint32_t m_q3FFTSize;
ShaderArrays() :
m_q3TickTime(0),
m_q3TickFrequency(0),
m_q3TickPower(0),
m_q3FFT(0),
m_q3TickTimeSize(0),
m_q3TickTimeFrequencySize(0),
m_q3TickPowerSize(0),
m_q3FFTSize(0)
{}
~ShaderArrays()
{
if (m_q3TickTime) { delete[] m_q3TickTime; }
if (m_q3TickFrequency) { delete[] m_q3TickFrequency; }
if (m_q3TickPower) { delete[] m_q3TickPower; }
if (m_q3FFT) { delete[] m_q3FFT; }
}
void allocTickTime(uint32_t size)
{
if (size <= m_q3TickTimeSize) {
return;
}
if (m_q3TickTime) { delete[] m_q3TickTime; }
m_q3TickTime = new GLfloat[size];
m_q3TickTimeSize = size;
}
void allocTickFrequency(uint32_t size)
{
if (size <= m_q3TickTimeFrequencySize) {
return;
}
if (m_q3TickFrequency) { delete[] m_q3TickFrequency; }
m_q3TickFrequency = new GLfloat[size];
m_q3TickTimeFrequencySize = size;
}
void allocTickPower(uint32_t size)
{
if (size <= m_q3TickPowerSize) {
return;
}
if (m_q3TickPower) { delete[] m_q3TickPower; }
m_q3TickPower = new GLfloat[size];
m_q3TickPowerSize = size;
}
void allocFFT(uint32_t size)
{
if (size <= m_q3FFTSize) {
return;
}
if (m_q3FFT) { delete[] m_q3FFT; }
m_q3FFT = new GLfloat[size];
m_q3FFTSize = size;
}
};
struct ChannelMarkerState {
ChannelMarker* m_channelMarker;
QMatrix4x4 m_glMatrixWaterfall;
@ -164,6 +240,7 @@ private:
GLShaderTextured m_glShaderHistogram;
int m_matrixLoc;
int m_colorLoc;
ShaderArrays m_shaderArrays;
static const int m_waterfallBufferHeight = 256;