--Code changes

-Attempt to get GLSL working on Linux. Does not work.
This commit is contained in:
Person 2018-04-04 18:54:32 -07:00
parent ae7b1f3ba8
commit d6131b67e5
4 changed files with 64 additions and 23 deletions

View File

@ -70,7 +70,8 @@
#include <QMimeData> #include <QMimeData>
#include <QModelIndex> #include <QModelIndex>
#include <QMouseEvent> #include <QMouseEvent>
#include <QOpenGLFunctions_3_2_Core.h> //#include <qopenglfunctions_4_5_core.h>
#include <qopenglfunctions_3_3_core.h>
//#include <qopenglfunctions_2_0.h> //#include <qopenglfunctions_2_0.h>
#include <QOpenGLWidget> #include <QOpenGLWidget>
#include <QPainter> #include <QPainter>

View File

@ -4,32 +4,38 @@
#ifdef USE_GLSL #ifdef USE_GLSL
static const char* vertexShaderSource = static const char* vertexShaderSource =
"attribute vec4 posattr;\n" "#version 130\n"
"in vec4 posattr;\n"
"uniform mat4 matrix;\n" "uniform mat4 matrix;\n"
"void main() {\n" "void main() {\n"
" gl_Position = matrix * posattr;\n" " gl_Position = matrix * posattr;\n"
"}\n"; "}\n";
static const char* fragmentShaderSource = static const char* fragmentShaderSource =
"#version 130\n"
"uniform vec4 mycolor;\n" "uniform vec4 mycolor;\n"
"out vec4 fragout;"
"void main() {\n" "void main() {\n"
" gl_FragColor = mycolor;\n" " fragout = mycolor;\n"
"}\n"; "}\n";
static const char* quadVertexShaderSource = static const char* quadVertexShaderSource =
"attribute vec4 posattr;\n" "#version 130\n"
"in vec4 posattr;\n"
"uniform mat4 matrix;\n" "uniform mat4 matrix;\n"
"varying vec4 texcoord;\n" "out vec4 texcoord;\n"
"void main() {\n" "void main() {\n"
" gl_Position = matrix * posattr;\n" " gl_Position = matrix * posattr;\n"
" texcoord = posattr;\n" " texcoord = posattr;\n"
"}\n"; "}\n";
static const char* quadFragmentShaderSource = static const char* quadFragmentShaderSource =
"#version 130\n"
"uniform sampler2D quadtex;\n" "uniform sampler2D quadtex;\n"
"varying vec4 texcoord;\n" "in vec4 texcoord;\n"
"out vec4 fragout;"
"void main() {\n" "void main() {\n"
" gl_FragColor = texture2D(quadtex, texcoord.st);\n" " fragout = texture(quadtex, texcoord.st);\n"
"}\n"; "}\n";
#endif #endif
@ -41,13 +47,28 @@
GLWidget::GLWidget(QWidget* p) GLWidget::GLWidget(QWidget* p)
: QOpenGLWidget(p) : QOpenGLWidget(p)
{ {
#ifndef USE_GLSL /*
QSurfaceFormat qsf; auto qsf = this->format();
qsf.setSwapInterval(1);//Vsync. qDebug() << "Version: " << qsf.majorVersion() << ',' << qsf.minorVersion();
qsf.setSwapBehavior(QSurfaceFormat::DoubleBuffer); qDebug() << "Profile: " << qsf.profile();
qsf.setVersion(2, 0); qDebug() << "Depth buffer size: " << qsf.depthBufferSize();
setFormat(qsf); qDebug() << "Swap behavior: " << qsf.swapBehavior();
#endif qDebug() << "Swap interval: " << qsf.swapInterval();
//QSurfaceFormat qsf;
//QSurfaceFormat::FormatOptions fo;
//fo.
//qsf.setDepthBufferSize(24);
//qsf.setSwapInterval(1);//Vsync.
//qsf.setSwapBehavior(QSurfaceFormat::DoubleBuffer);
#ifndef USE_GLSL
qsf.setVersion(2, 0);
qsf.setProfile(QSurfaceFormat::CompatibilityProfile);
#else
qsf.setVersion(3, 3);
//qsf.setProfile(QSurfaceFormat::CoreProfile);
#endif
setFormat(qsf);
*/
} }
/// <summary> /// <summary>
@ -281,7 +302,7 @@ void GLWidget::initializeGL()
if (!m_Init && m_Fractorium) if (!m_Init && m_Fractorium)
{ {
initializeOpenGLFunctions(); this->initializeOpenGLFunctions();
if (!m_Program) if (!m_Program)
{ {
@ -289,19 +310,19 @@ void GLWidget::initializeGL()
if (!m_Program->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderSource)) if (!m_Program->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderSource))
{ {
QMessageBox::critical(m_Fractorium, "Shader Error", "Error compiling affine vertex source."); QMessageBox::critical(m_Fractorium, "Shader Error", "Error compiling affine vertex source: " + m_Program->log());
QApplication::exit(1); QApplication::exit(1);
} }
if (!m_Program->addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderSource)) if (!m_Program->addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderSource))
{ {
QMessageBox::critical(m_Fractorium, "Shader Error", "Error compiling affine fragment source."); QMessageBox::critical(m_Fractorium, "Shader Error", "Error compiling affine fragment source: " + m_Program->log());
QApplication::exit(1); QApplication::exit(1);
} }
if (!m_Program->link()) if (!m_Program->link())
{ {
QMessageBox::critical(m_Fractorium, "Shader Error", "Error linking affine source."); QMessageBox::critical(m_Fractorium, "Shader Error", "Error linking affine source: " + m_Program->log());
QApplication::exit(1); QApplication::exit(1);
} }
@ -316,19 +337,19 @@ void GLWidget::initializeGL()
if (!m_QuadProgram->addShaderFromSourceCode(QOpenGLShader::Vertex, quadVertexShaderSource)) if (!m_QuadProgram->addShaderFromSourceCode(QOpenGLShader::Vertex, quadVertexShaderSource))
{ {
QMessageBox::critical(m_Fractorium, "Shader Error", "Error compiling image texture vertex source."); QMessageBox::critical(m_Fractorium, "Shader Error", "Error compiling image texture vertex source: " + m_QuadProgram->log());
QApplication::exit(1); QApplication::exit(1);
} }
if (!m_QuadProgram->addShaderFromSourceCode(QOpenGLShader::Fragment, quadFragmentShaderSource)) if (!m_QuadProgram->addShaderFromSourceCode(QOpenGLShader::Fragment, quadFragmentShaderSource))
{ {
QMessageBox::critical(m_Fractorium, "Shader Error", "Error compiling image texture fragment source."); QMessageBox::critical(m_Fractorium, "Shader Error", "Error compiling image texture fragment source: " + m_QuadProgram->log());
QApplication::exit(1); QApplication::exit(1);
} }
if (!m_QuadProgram->link()) if (!m_QuadProgram->link())
{ {
QMessageBox::critical(m_Fractorium, "Shader Error", "Error linking image texture source."); QMessageBox::critical(m_Fractorium, "Shader Error", "Error linking image texture source: " + m_QuadProgram->log());
QApplication::exit(1); QApplication::exit(1);
} }

View File

@ -28,7 +28,8 @@ template<typename T> class FractoriumEmberController;
/// </summary> /// </summary>
class GLWidget : public QOpenGLWidget, protected class GLWidget : public QOpenGLWidget, protected
#ifdef USE_GLSL #ifdef USE_GLSL
QOpenGLFunctions_3_2_Core //QOpenGLFunctions_4_5_Core
QOpenGLFunctions_3_3_Core
#else #else
QOpenGLFunctions_2_0 QOpenGLFunctions_2_0
#endif #endif
@ -99,7 +100,7 @@ private:
QMatrix4x4 m_ModelViewProjectionMatrix; QMatrix4x4 m_ModelViewProjectionMatrix;
QMatrix4x4 m_TextureProjMatrix; QMatrix4x4 m_TextureProjMatrix;
vector<float> m_Verts; vector<float> m_Verts;
std::array<GLfloat, 10> m_TexVerts = std::array<GLfloat, 10> m_TexVerts = std::array<GLfloat, 10>
{ {
0, 0, 0, 0,
0, 1, 0, 1,

View File

@ -41,6 +41,24 @@ int main(int argc, char* argv[])
#else #else
putenv(const_cast<char*>("GPU_MAX_ALLOC_PERCENT=100")); putenv(const_cast<char*>("GPU_MAX_ALLOC_PERCENT=100"));
#endif #endif
//auto qsf = QSurfaceFormat::defaultFormat();
//qDebug() << "Version: " << qsf.majorVersion() << ',' << qsf.minorVersion();
//qDebug() << "Profile: " << qsf.profile();
//qDebug() << "Depth buffer size: " << qsf.depthBufferSize();
//qDebug() << "Swap behavior: " << qsf.swapBehavior();
//qDebug() << "Swap interval: " << qsf.swapInterval();
//qsf.setDepthBufferSize(24);
//qsf.setSwapInterval(1);//Vsync.
//qsf.setSwapBehavior(QSurfaceFormat::DoubleBuffer);
#ifndef USE_GLSL
qsf.setVersion(2, 0);
qsf.setProfile(QSurfaceFormat::CompatibilityProfile);
#else
//qsf.setVersion(4, 5);
//qsf.setRenderableType(QSurfaceFormat::OpenGL);
//qsf.setProfile(QSurfaceFormat::CoreProfile);
#endif
//QSurfaceFormat::setDefaultFormat(qsf);
Fractorium w; Fractorium w;
w.show(); w.show();
a.installEventFilter(&w); a.installEventFilter(&w);