Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: ngscopeclient/scopehal-apps
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: b9fcfeb64be7
Choose a base ref
...
head repository: ngscopeclient/scopehal-apps
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 87a452434f42
Choose a head ref
  • 2 commits
  • 7 files changed
  • 1 contributor

Commits on Feb 21, 2020

  1. Copy the full SHA
    d3cfabf View commit details
  2. Copy the full SHA
    87a4524 View commit details
27 changes: 19 additions & 8 deletions glscopeclient/WaveformArea.cpp
Original file line number Diff line number Diff line change
@@ -52,7 +52,6 @@ WaveformArea::WaveformArea(
, m_channel(channel)
, m_parent(parent)
, m_pixelsPerVolt(1)
, m_msaaEnabled(true)
{
SharedCtorInit();
}
@@ -68,7 +67,6 @@ WaveformArea::WaveformArea(const WaveformArea* clone)
, m_channel(clone->m_channel)
, m_parent(clone->m_parent)
, m_pixelsPerVolt(clone->m_pixelsPerVolt)
, m_msaaEnabled(clone->m_msaaEnabled)
{
SharedCtorInit();
}
@@ -117,12 +115,14 @@ WaveformArea::~WaveformArea()
tavg*1000, 1/tavg, m_frameCount);
LogDebug("Total render time: %.3f ms\n",
m_renderTime * 1000);
LogDebug("Cairo underlay : %.3f ms (%.1f %%)\n",
LogDebug("Cairo underlay : %.3f ms (%.1f %%)\n",
m_underlayTime * 1000, m_underlayTime * 100 / m_renderTime);
LogDebug("Cairo overlay : %.3f ms (%.1f %%)\n",
LogDebug("Cairo overlay : %.3f ms (%.1f %%)\n",
m_overlayTime * 1000, m_overlayTime * 100 / m_renderTime);
LogDebug("Prepare geometry: %.3f ms (%.1f %%)\n",
LogDebug("Prepare geometry : %.3f ms (%.1f %%)\n",
m_prepareTime * 1000, m_prepareTime * 100 / m_renderTime);
LogDebug("Build index : %.3f ms (%.1f %%)\n",
m_indexTime * 1000, m_indexTime * 100 / m_renderTime);
LogDebug("Download geometry: %.3f ms (%.1f %%)\n",
m_downloadTime * 1000, m_downloadTime * 100 / m_renderTime);
}
@@ -463,10 +463,7 @@ void WaveformArea::on_unrealize()
m_cairoProgram.Destroy();
m_cairoVAO.Destroy();
m_cairoVBO.Destroy();
m_waveformFramebuffer.Destroy();
m_waveformFramebufferResolved.Destroy();
m_windowFramebuffer.Detach();
m_waveformTexture.Destroy();
m_waveformTextureResolved.Destroy();
m_cairoTexture.Destroy();
m_cairoTextureOver.Destroy();
@@ -505,6 +502,20 @@ void WaveformArea::InitializeWaveformPass()
m_traceVBOs[0]->Bind();
m_traceVAOs.push_back(new VertexArray);
m_traceVAOs[0]->Bind();

//Create the shader stuff
ComputeShader wc;
if(!wc.Load("shaders/waveform-compute.glsl"))
{
LogError("failed to load waveform compute shader, aborting");
exit(1);
}
m_waveformComputeProgram.Add(wc);
if(!m_waveformComputeProgram.Link())
{
LogError("failed to link shader program, aborting");
exit(1);
}
}

void WaveformArea::InitializeColormapPass()
12 changes: 8 additions & 4 deletions glscopeclient/WaveformArea.h
Original file line number Diff line number Diff line change
@@ -237,15 +237,19 @@ class WaveformArea : public Gtk::GLArea
std::vector<float> m_traceBuffer;
float m_xoff;

//New trace rendering path
Program m_waveformComputeProgram;
std::vector<uint32_t> m_indexBuffer;
ShaderStorageBuffer m_waveformStorageBuffer;
ShaderStorageBuffer m_waveformConfigBuffer;
ShaderStorageBuffer m_waveformIndexBuffer;

//Color correction
void RenderTraceColorCorrection();
void InitializeColormapPass();
VertexArray m_colormapVAO;
VertexBuffer m_colormapVBO;
Program m_colormapProgram;
Framebuffer m_waveformFramebuffer; //multisample
Texture m_waveformTexture;
Framebuffer m_waveformFramebufferResolved; //single sample
Texture m_waveformTextureResolved;

//Persistence
@@ -323,6 +327,7 @@ class WaveformArea : public Gtk::GLArea
double m_underlayTime;
double m_overlayTime;
double m_prepareTime;
double m_indexTime;
double m_downloadTime;

float m_pixelsPerVolt;
@@ -350,7 +355,6 @@ class WaveformArea : public Gtk::GLArea
DRAG_CURSOR
} m_dragState;

bool m_msaaEnabled;
bool m_geometryDirty;
};

35 changes: 1 addition & 34 deletions glscopeclient/WaveformArea_events.cpp
Original file line number Diff line number Diff line change
@@ -84,43 +84,10 @@ void WaveformArea::on_resize(int width, int height)
if(err != 0)
LogNotice("resize 3, err = %x\n", err);

//Initialize the color buffers
m_waveformFramebuffer.Bind(GL_FRAMEBUFFER);
m_waveformTexture.Bind(GL_TEXTURE_2D_MULTISAMPLE);
m_waveformTexture.AllocateMultisample(width, height, 4);
ResetTextureFiltering();
m_waveformFramebuffer.SetTexture(m_waveformTexture, GL_TEXTURE_2D_MULTISAMPLE);
m_msaaEnabled = true;
if(!m_waveformFramebuffer.IsComplete())
{
//if MSAA failed to initialize, ignore the error
glGetError();

//Failed to allocate the texture as multisample. Try doing non-multisample.
m_waveformTexture.Destroy();
m_waveformTexture.Bind();
m_waveformTexture.SetData(width, height, NULL);
ResetTextureFiltering();
m_waveformFramebuffer.SetTexture(m_waveformTexture, GL_TEXTURE_2D);
m_msaaEnabled = false;
if(!m_waveformFramebuffer.IsComplete())
{
LogError("FBO is still incomplete (non-multisample fallback): %x\n",
glCheckFramebufferStatus(GL_FRAMEBUFFER));
}
}

err = glGetError();
if(err != 0)
LogNotice("resize 4, err = %x\n", err);

m_waveformFramebufferResolved.Bind(GL_FRAMEBUFFER);
//Allocate waveform texture
m_waveformTextureResolved.Bind();
m_waveformTextureResolved.SetData(width, height, NULL, GL_RGBA, GL_UNSIGNED_BYTE, GL_RGBA32F);
ResetTextureFiltering();
m_waveformFramebufferResolved.SetTexture(m_waveformTextureResolved);
if(!m_waveformFramebufferResolved.IsComplete())
LogError("FBO is incomplete: %x\n", glCheckFramebufferStatus(GL_FRAMEBUFFER));

SetGeometryDirty();

Loading