Commit 6dddef1f7a21ab490c3500246460fd3a5bb73703

Authored by Denis Dovzhenko
Committed by David Gräff
1 parent 16dc684e

Fix segfaults in XY display

openhantek/src/glscope.cpp
... ... @@ -275,7 +275,9 @@ void GlScope::paintGL() {
275 275 unsigned historyIndex = 0;
276 276 for (Graph &graph : m_GraphHistory) {
277 277 for (ChannelID channel = 0; channel < scope->voltage.size(); ++channel) {
278   - drawSpectrumChannelGraph(channel, graph, (int)historyIndex);
  278 + if (scope->horizontal.format == Dso::GraphFormat::TY) {
  279 + drawSpectrumChannelGraph(channel, graph, (int)historyIndex);
  280 + }
279 281 drawVoltageChannelGraph(channel, graph, (int)historyIndex);
280 282 }
281 283 ++historyIndex;
... ...
openhantek/src/glscopegraph.cpp
... ... @@ -26,39 +26,43 @@ void Graph::writeData(PPresult *data, QOpenGLShaderProgram *program, int vertexL
26 26 vaoVoltage.resize(data->vaChannelVoltage.size());
27 27 vaoSpectrum.resize(data->vaChannelSpectrum.size());
28 28 for (ChannelID channel = 0; channel < vaoVoltage.size(); ++channel) {
29   - VaoCount &v = vaoVoltage[channel];
30   - VaoCount &s = vaoSpectrum[channel];
31 29 int dataSize;
32 30  
33 31 // Voltage channel
34   - if (!v.first) {
35   - v.first = new QOpenGLVertexArrayObject;
36   - if (!v.first->create()) throw new std::runtime_error("QOpenGLVertexArrayObject create failed");
  32 + if (channel < vaoVoltage.size()) {
  33 + VaoCount &v = vaoVoltage[channel];
  34 + if (!v.first) {
  35 + v.first = new QOpenGLVertexArrayObject;
  36 + if (!v.first->create()) throw new std::runtime_error("QOpenGLVertexArrayObject create failed");
  37 + }
  38 + ChannelGraph &gVoltage = data->vaChannelVoltage[channel];
  39 + v.first->bind();
  40 + dataSize = int(gVoltage.size() * sizeof(QVector3D));
  41 + buffer.write(offset, gVoltage.data(), dataSize);
  42 + program->enableAttributeArray(vertexLocation);
  43 + program->setAttributeBuffer(vertexLocation, GL_FLOAT, offset, 3, 0);
  44 + v.first->release();
  45 + v.second = (int)gVoltage.size();
  46 + offset += dataSize;
37 47 }
38   - ChannelGraph &gVoltage = data->vaChannelVoltage[channel];
39   - v.first->bind();
40   - dataSize = int(gVoltage.size() * sizeof(QVector3D));
41   - buffer.write(offset, gVoltage.data(), dataSize);
42   - program->enableAttributeArray(vertexLocation);
43   - program->setAttributeBuffer(vertexLocation, GL_FLOAT, offset, 3, 0);
44   - v.first->release();
45   - v.second = (int)gVoltage.size();
46   - offset += dataSize;
47 48  
48 49 // Spectrum channel
49   - if (!s.first) {
50   - s.first = new QOpenGLVertexArrayObject;
51   - if (!s.first->create()) throw new std::runtime_error("QOpenGLVertexArrayObject create failed");
  50 + if (channel < vaoSpectrum.size()) {
  51 + VaoCount &s = vaoSpectrum[channel];
  52 + if (!s.first) {
  53 + s.first = new QOpenGLVertexArrayObject;
  54 + if (!s.first->create()) throw new std::runtime_error("QOpenGLVertexArrayObject create failed");
  55 + }
  56 + ChannelGraph &gSpectrum = data->vaChannelSpectrum[channel];
  57 + s.first->bind();
  58 + dataSize = int(gSpectrum.size() * sizeof(QVector3D));
  59 + buffer.write(offset, gSpectrum.data(), dataSize);
  60 + program->enableAttributeArray(vertexLocation);
  61 + program->setAttributeBuffer(vertexLocation, GL_FLOAT, offset, 3, 0);
  62 + s.first->release();
  63 + s.second = (int)gSpectrum.size();
  64 + offset += dataSize;
52 65 }
53   - ChannelGraph &gSpectrum = data->vaChannelSpectrum[channel];
54   - s.first->bind();
55   - dataSize = int(gSpectrum.size() * sizeof(QVector3D));
56   - buffer.write(offset, gSpectrum.data(), dataSize);
57   - program->enableAttributeArray(vertexLocation);
58   - program->setAttributeBuffer(vertexLocation, GL_FLOAT, offset, 3, 0);
59   - s.first->release();
60   - s.second = (int)gSpectrum.size();
61   - offset += dataSize;
62 66 }
63 67  
64 68 buffer.release();
... ...