qt: Try to fix linux gcc 11 build

This commit is contained in:
ts-korhonen
2022-02-27 20:22:28 +02:00
parent 1dcb712ef7
commit c9714c9bfc
4 changed files with 59 additions and 46 deletions

View File

@@ -72,14 +72,14 @@ OpenGLOptions::OpenGLOptions(QObject *parent, bool loadConfig)
}
void
OpenGLOptions::save()
OpenGLOptions::save() const
{
video_vsync = m_vsync ? 1 : 0;
video_framerate = m_renderBehavior == RenderBehaviorType::SyncWithVideo ? -1 : m_framerate;
video_filter_method = m_filter == FilterType::Nearest ? 0 : 1;
/* TODO: multiple shaders */
auto path = m_shaders.first().path.toLocal8Bit();
auto path = m_shaders.first().path().toLocal8Bit();
if (!path.isEmpty())
memcpy(video_shader, path.constData(), path.size());

View File

@@ -21,31 +21,44 @@
#include <QObject>
#include <QOpenGLShaderProgram>
struct OpenGLShaderPass {
class OpenGLShaderPass {
public:
OpenGLShaderPass(QOpenGLShaderProgram *shader, const QString &path)
: shader(shader)
, path(path)
, vertex_coord(shader->attributeLocation("VertexCoord"))
, tex_coord(shader->attributeLocation("TexCoord"))
, color(shader->attributeLocation("Color"))
, mvp_matrix(shader->uniformLocation("MVPMatrix"))
, input_size(shader->uniformLocation("InputSize"))
, output_size(shader->uniformLocation("OutputSize"))
, texture_size(shader->uniformLocation("TextureSize"))
, frame_count(shader->uniformLocation("FrameCount"))
: m_shader(shader)
, m_path(path)
, m_vertex_coord(shader->attributeLocation("VertexCoord"))
, m_tex_coord(shader->attributeLocation("TexCoord"))
, m_color(shader->attributeLocation("Color"))
, m_mvp_matrix(shader->uniformLocation("MVPMatrix"))
, m_input_size(shader->uniformLocation("InputSize"))
, m_output_size(shader->uniformLocation("OutputSize"))
, m_texture_size(shader->uniformLocation("TextureSize"))
, m_frame_count(shader->uniformLocation("FrameCount"))
{
}
QOpenGLShaderProgram *shader;
const QString path;
const GLint vertex_coord;
const GLint tex_coord;
const GLint color;
const GLint mvp_matrix;
const GLint input_size;
const GLint output_size;
const GLint texture_size;
const GLint frame_count;
bool bind() const { return m_shader->bind(); }
const QString &path() const { return m_path; }
const GLint &vertex_coord() const { return m_vertex_coord; }
const GLint &tex_coord() const { return m_tex_coord; }
const GLint &color() const { return m_color; }
const GLint &mvp_matrix() const { return m_mvp_matrix; }
const GLint &input_size() const { return m_input_size; }
const GLint &output_size() const { return m_output_size; }
const GLint &texture_size() const { return m_texture_size; }
const GLint &frame_count() const { return m_frame_count; }
private:
QOpenGLShaderProgram *m_shader;
QString m_path;
GLint m_vertex_coord;
GLint m_tex_coord;
GLint m_color;
GLint m_mvp_matrix;
GLint m_input_size;
GLint m_output_size;
GLint m_texture_size;
GLint m_frame_count;
};
class OpenGLOptions : public QObject {
@@ -65,7 +78,7 @@ public:
bool vSync() const { return m_vsync; }
FilterType filter() const;
QList<OpenGLShaderPass> shaders() const { return m_shaders; };
const QList<OpenGLShaderPass> &shaders() const { return m_shaders; };
void setRenderBehavior(RenderBehaviorType value);
void setFrameRate(int value);
@@ -73,7 +86,7 @@ public:
void setFilter(FilterType value);
void addShader(const QString &path);
void addDefaultShader();
void save();
void save() const;
private:
RenderBehaviorType m_renderBehavior = SyncWithVideo;

View File

@@ -40,7 +40,7 @@ OpenGLOptionsDialog::OpenGLOptionsDialog(QWidget *parent, const OpenGLOptions &o
ui->vsync->setChecked(options.vSync());
if (!options.shaders().isEmpty()) {
auto path = options.shaders().first().path;
auto path = options.shaders().first().path();
if (!path.isEmpty())
ui->shader->setPlainText(path);
}

View File

@@ -281,45 +281,45 @@ OpenGLRenderer::applyOptions()
void
OpenGLRenderer::applyShader(const OpenGLShaderPass &shader)
{
if (!shader.shader->bind())
if (!shader.bind())
return;
if (shader.vertex_coord != -1) {
glEnableVertexAttribArray(shader.vertex_coord);
glVertexAttribPointer(shader.vertex_coord, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), 0);
if (shader.vertex_coord() != -1) {
glEnableVertexAttribArray(shader.vertex_coord());
glVertexAttribPointer(shader.vertex_coord(), 2, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), 0);
}
if (shader.tex_coord != -1) {
glEnableVertexAttribArray(shader.tex_coord);
glVertexAttribPointer(shader.tex_coord, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), (void *) (2 * sizeof(GLfloat)));
if (shader.tex_coord() != -1) {
glEnableVertexAttribArray(shader.tex_coord());
glVertexAttribPointer(shader.tex_coord(), 2, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), (void *) (2 * sizeof(GLfloat)));
}
if (shader.color != -1) {
glEnableVertexAttribArray(shader.color);
glVertexAttribPointer(shader.color, 4, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), (void *) (4 * sizeof(GLfloat)));
if (shader.color() != -1) {
glEnableVertexAttribArray(shader.color());
glVertexAttribPointer(shader.color(), 4, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), (void *) (4 * sizeof(GLfloat)));
}
if (shader.mvp_matrix != -1) {
if (shader.mvp_matrix() != -1) {
static const GLfloat mvp[] = {
1.f, 0.f, 0.f, 0.f,
0.f, 1.f, 0.f, 0.f,
0.f, 0.f, 1.f, 0.f,
0.f, 0.f, 0.f, 1.f
};
glUniformMatrix4fv(shader.mvp_matrix, 1, GL_FALSE, mvp);
glUniformMatrix4fv(shader.mvp_matrix(), 1, GL_FALSE, mvp);
}
if (shader.output_size != -1)
glUniform2f(shader.output_size, destination.width(), destination.height());
if (shader.output_size() != -1)
glUniform2f(shader.output_size(), destination.width(), destination.height());
if (shader.input_size != -1)
glUniform2f(shader.input_size, source.width(), source.height());
if (shader.input_size() != -1)
glUniform2f(shader.input_size(), source.width(), source.height());
if (shader.texture_size != -1)
glUniform2f(shader.texture_size, source.width(), source.height());
if (shader.texture_size() != -1)
glUniform2f(shader.texture_size(), source.width(), source.height());
if (shader.frame_count != -1)
glUniform1i(shader.frame_count, frameCounter);
if (shader.frame_count() != -1)
glUniform1i(shader.frame_count(), frameCounter);
}
void