diff --git a/docs/build.md b/docs/build.md
index f752dea..9bfc821 100644
--- a/docs/build.md
+++ b/docs/build.md
@@ -3,10 +3,10 @@ layout: default
---
### [Linux](#linux)
For debian (stretch and newer), Ubuntu 17.04+ and Mint 17+ and other deb based distributions install named requirements like this:
-> apt install g++ cmake qttools5-dev qttools5-dev-tools libfftw3-dev binutils-dev libusb-1.0-0-dev libqt5opengl5-dev mesa-common-dev libgl1-mesa-dev
+> apt install g++ cmake qttools5-dev qttools5-dev-tools libfftw3-dev binutils-dev libusb-1.0-0-dev libqt5opengl5-dev mesa-common-dev libgl1-mesa-dev libgles2-mesa-dev
For rpm based distributions (Fedora 21+, OpenSuse) use this command:
-> dnf install cmake gcc-c++ qt5-qtbase-gui qt5-qttools-devel qt5-qttranslations fftw-devel binutils-devel libusb-devel
+> dnf install cmake gcc-c++ qt5-qtbase-gui qt5-qttools-devel qt5-qttranslations fftw-devel binutils-devel libusb-devel mesa-libGL-devel mesa-libGLES-devel
After you've installed the requirements run the following commands inside the directory of this package:
> mkdir build
diff --git a/openhantek/src/glscope.cpp b/openhantek/src/glscope.cpp
index 82bcded..6a0c40b 100644
--- a/openhantek/src/glscope.cpp
+++ b/openhantek/src/glscope.cpp
@@ -12,9 +12,7 @@
#include
#include
-// We can't be more modern than OpenGL 3.2 or ES2 because of MacOSX.
-#include
-#include
+#include
#include "glscope.h"
@@ -24,12 +22,6 @@
#include "viewconstants.h"
#include "viewsettings.h"
-#if defined(QT_OPENGL_ES_2)
-typedef QOpenGLFunctions_ES2 OPENGL_VER;
-#else
-typedef QOpenGLFunctions_3_2_Core OPENGL_VER;
-#endif
-
GlScope *GlScope::createNormal(DsoSettingsScope *scope, DsoSettingsView *view, QWidget *parent) {
GlScope *s = new GlScope(scope, view, parent);
s->zoomed = false;
@@ -42,22 +34,21 @@ GlScope *GlScope::createZoomed(DsoSettingsScope *scope, DsoSettingsView *view, Q
return s;
}
-void GlScope::fixOpenGLversion() {
+void GlScope::fixOpenGLversion(QSurfaceFormat::RenderableType t) {
QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts, true);
// Prefer full desktop OpenGL without fixed pipeline
QSurfaceFormat format;
format.setSamples(4); // Antia-Aliasing, Multisampling
-#if defined(QT_OPENGL_ES_2)
- format.setVersion(2, 0);
- format.setProfile(QSurfaceFormat::CoreProfile);
- format.setRenderableType(QSurfaceFormat::OpenGLES);
- QCoreApplication::setAttribute(Qt::AA_UseOpenGLES, true);
-#else
- format.setVersion(3, 2);
format.setProfile(QSurfaceFormat::CoreProfile);
- format.setRenderableType(QSurfaceFormat::OpenGL);
-#endif
+ if (t==QSurfaceFormat::OpenGLES) {
+ format.setVersion(2, 0);
+ format.setRenderableType(QSurfaceFormat::OpenGLES);
+ QCoreApplication::setAttribute(Qt::AA_UseOpenGLES, true);
+ } else {
+ format.setVersion(3, 2);
+ format.setRenderableType(QSurfaceFormat::OpenGL);
+ }
QSurfaceFormat::setDefaultFormat(format);
}
@@ -66,7 +57,7 @@ GlScope::GlScope(DsoSettingsScope *scope, DsoSettingsView *view, QWidget *parent
vaMarker.resize(MARKER_COUNT);
}
-GlScope::~GlScope() {}
+GlScope::~GlScope() {/* virtual destructor necessary */}
void GlScope::mousePressEvent(QMouseEvent *event) {
if (!zoomed && event->button() == Qt::LeftButton) {
@@ -154,7 +145,7 @@ void GlScope::initializeGL() {
void main() { gl_FragColor = colour; }
)";
- const char *vshaderCore = R"(
+ const char *vshaderDesktop = R"(
#version 150
in highp vec3 vertex;
uniform mat4 matrix;
@@ -164,7 +155,7 @@ void GlScope::initializeGL() {
gl_PointSize = 1.0;
}
)";
- const char *fshaderCore = R"(
+ const char *fshaderDesktop = R"(
#version 150
uniform highp vec4 colour;
out vec4 flatColor;
@@ -173,9 +164,9 @@ void GlScope::initializeGL() {
qDebug() << "compile shaders";
// Compile vertex shader
- bool coreShaders = QSurfaceFormat::defaultFormat().profile() == QSurfaceFormat::CoreProfile;
- if (!program->addShaderFromSourceCode(QOpenGLShader::Vertex, coreShaders ? vshaderCore : vshaderES) ||
- !program->addShaderFromSourceCode(QOpenGLShader::Fragment, coreShaders ? fshaderCore : fshaderES)) {
+ bool usesOpenGL = QSurfaceFormat::defaultFormat().renderableType()==QSurfaceFormat::OpenGL;
+ if (!program->addShaderFromSourceCode(QOpenGLShader::Vertex, usesOpenGL ? vshaderDesktop : vshaderES) ||
+ !program->addShaderFromSourceCode(QOpenGLShader::Fragment, usesOpenGL ? fshaderDesktop : fshaderES)) {
errorMessage = "Failed to compile OpenGL shader programs.\n" + program->log();
return;
}
@@ -197,7 +188,7 @@ void GlScope::initializeGL() {
program->bind();
- auto *gl = context()->versionFunctions();
+ auto *gl = context()->functions();
gl->glDisable(GL_DEPTH_TEST);
gl->glEnable(GL_BLEND);
// Enable depth buffer
@@ -246,8 +237,7 @@ void GlScope::showData(PPresult *data) {
// doneCurrent();
}
-void GlScope::markerUpdated()
-{
+void GlScope::markerUpdated() {
for (unsigned marker = 0; marker < vaMarker.size(); ++marker) {
if (!scope->horizontal.marker_visible[marker]) continue;
@@ -264,7 +254,7 @@ void GlScope::markerUpdated()
void GlScope::paintGL() {
if (!shaderCompileSuccess) return;
- auto *gl = context()->versionFunctions();
+ auto *gl = context()->functions();
// Clear OpenGL buffer and configure settings
// TODO Don't clear if view->digitalPhosphorDraws()>1
@@ -301,7 +291,7 @@ void GlScope::paintGL() {
void GlScope::resizeGL(int width, int height) {
if (!shaderCompileSuccess) return;
- auto *gl = context()->versionFunctions();
+ auto *gl = context()->functions();
gl->glViewport(0, 0, (GLint)width, (GLint)height);
// Set axes to div-scale and apply correction for exact pixelization
@@ -416,7 +406,7 @@ void GlScope::generateGrid(QOpenGLShaderProgram *program) {
}
void GlScope::drawGrid() {
- auto *gl = context()->versionFunctions();
+ auto *gl = context()->functions();
gl->glLineWidth(1);
// Grid
@@ -439,7 +429,7 @@ void GlScope::drawGrid() {
}
void GlScope::drawMarkers() {
- auto *gl = context()->versionFunctions();
+ auto *gl = context()->functions();
QColor trColor = view->screen.markers;
m_program->setUniformValue(colorLocation, trColor);
@@ -451,7 +441,6 @@ void GlScope::drawMarkers() {
// Draw selected
if (selectedMarker != NO_MARKER) {
- qWarning() << selectedMarker;
gl->glLineWidth(3);
gl->glDrawArrays(GL_LINES, selectedMarker * 2, (GLsizei)2);
}
@@ -467,7 +456,7 @@ void GlScope::drawVoltageChannelGraph(ChannelID channel, Graph &graph, int histo
QOpenGLVertexArrayObject::Binder b(v.first);
const GLenum dMode = (view->interpolation == Dso::INTERPOLATION_OFF) ? GL_POINTS : GL_LINE_STRIP;
- context()->versionFunctions()->glDrawArrays(dMode, 0, v.second);
+ context()->functions()->glDrawArrays(dMode, 0, v.second);
}
void GlScope::drawSpectrumChannelGraph(ChannelID channel, Graph &graph, int historyIndex) {
@@ -478,5 +467,5 @@ void GlScope::drawSpectrumChannelGraph(ChannelID channel, Graph &graph, int hist
QOpenGLVertexArrayObject::Binder b(v.first);
const GLenum dMode = (view->interpolation == Dso::INTERPOLATION_OFF) ? GL_POINTS : GL_LINE_STRIP;
- context()->versionFunctions()->glDrawArrays(dMode, 0, v.second);
+ context()->functions()->glDrawArrays(dMode, 0, v.second);
}
diff --git a/openhantek/src/glscope.h b/openhantek/src/glscope.h
index 62d5dff..2206344 100644
--- a/openhantek/src/glscope.h
+++ b/openhantek/src/glscope.h
@@ -34,7 +34,7 @@ class GlScope : public QOpenGLWidget {
* We need at least OpenGL 3.2 with shader version 150 or
* OpenGL ES 2.0 with shader version 100.
*/
- static void fixOpenGLversion();
+ static void fixOpenGLversion(QSurfaceFormat::RenderableType t=QSurfaceFormat::DefaultRenderableType);
/**
* Show new post processed data
* @param data
diff --git a/openhantek/src/glscopegraph.cpp b/openhantek/src/glscopegraph.cpp
index 96b7e6c..13b5e4b 100644
--- a/openhantek/src/glscopegraph.cpp
+++ b/openhantek/src/glscopegraph.cpp
@@ -21,8 +21,6 @@ void Graph::writeData(PPresult *data, QOpenGLShaderProgram *program, int vertexL
allocatedMem = neededMemory;
}
- qDebug() << data->data(0)->frequency;
-
// Write data to buffer
int offset = 0;
vaoVoltage.resize(data->vaChannelVoltage.size());
diff --git a/openhantek/src/main.cpp b/openhantek/src/main.cpp
index 1de30ce..ad8c243 100644
--- a/openhantek/src/main.cpp
+++ b/openhantek/src/main.cpp
@@ -1,6 +1,7 @@
// SPDX-License-Identifier: GPL-2.0+
#include
+#include
#include
#include
#include
@@ -71,7 +72,19 @@ int main(int argc, char *argv[]) {
QCoreApplication::setApplicationName("OpenHantek");
QCoreApplication::setApplicationVersion(VERSION);
- GlScope::fixOpenGLversion();
+ bool useGles = false;
+ {
+ QCoreApplication parserApp(argc, argv);
+ QCommandLineParser p;
+ p.addHelpOption();
+ p.addVersionOption();
+ QCommandLineOption useGlesOption("useGLES", QCoreApplication::tr("Use OpenGL ES instead of OpenGL"));
+ p.addOption(useGlesOption);
+ p.process(parserApp);
+ useGles = p.isSet(useGlesOption);
+ }
+
+ GlScope::fixOpenGLversion(useGles ? QSurfaceFormat::OpenGLES : QSurfaceFormat::OpenGL);
QApplication openHantekApplication(argc, argv);
@@ -152,9 +165,7 @@ int main(int argc, char *argv[]) {
postProcessingThread.quit();
postProcessingThread.wait(10000);
- if (context && device != nullptr) {
- libusb_exit(context);
- }
+ if (context && device != nullptr) { libusb_exit(context); }
return res;
}