从源文件编译 QOpenGLshader 时出错

Posted

技术标签:

【中文标题】从源文件编译 QOpenGLshader 时出错【英文标题】:Error compiling QOpenGLshader from source file 【发布时间】:2019-09-05 14:23:04 【问题描述】:

我正在尝试实现a code from a paper。编译所有 C++ 代码,一切都很好,但是我在尝试编译着色器时遇到了错误。

我了解 QT-Desktop 版本将这三行附加到我的文件头部

#define lowp
#define mediump
#define highp

但它似乎直接附加在我的#version 行之后,这会导致解析错误。有什么线索吗?

系统规格:

OpenGL 4.60、Nvidia 390.87、QT 4.8.7

这是触发错误的相关代码sn-p(同时从源代码添加shader)

if (!program->addShaderFromSourceFile(QOpenGLShader::Vertex, shaderFolder + shaderName + "_vertex_shader.glsl")) 
        cout << "error adding vertex shader from source file" << endl;
        return false;
    

这是错误信息。

***
error adding vertex shader from source file
QOpenGLShader::compile(Vertex): 0(36) : error C0206: invalid token "<invalid atom 50446656>" in version line

*** Problematic Vertex shader source code ***
/**
 *   #, #,         CCCCCC  VV    VV MM      MM RRRRRRR
 *  %  %(  #%%#   CC    CC VV    VV MMM    MMM RR    RR
 *  %    %## #    CC        V    V  MM M  M MM RR    RR
 *   ,%      %    CC        VV  VV  MM  MM  MM RRRRRR
 *   (%      %,   CC    CC   VVVV   MM      MM RR   RR
 *     #%    %*    CCCCCC     VV    MM      MM RR    RR
 *    .%    %/
 *       (%.      Computer Vision & Mixed Reality Group
 *                For more information see <http://cvmr.info>
 *
 * This file is part of RBOT.
 *
 *  @copyright:   RheinMain University of Applied Sciences
 *                Wiesbaden Rüsselsheim
 *                Germany
 *     @author:   Henning Tjaden
 *                <henning dot tjaden at gmail dot com>
 *    @version:   1.0
 *       @date:   30.08.2018
 *
 * RBOT is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * RBOT is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with RBOT. If not, see <http://www.gnu.org/licenses/>.
 */

#version 330#define lowp
#define mediump
#define highp
#line 37


uniform mat4 uMVMatrix;
uniform mat4 uMVPMatrix;
uniform mat3 uNormalMatrix;

in vec3 aPosition;
in vec3 aNormal;

out vec3 vNormal;

void main() 
    vNormal = normalize(uNormalMatrix * aNormal);

    // vertex position
    gl_Position = uMVPMatrix * vec4(aPosition, 1.0);

【问题讨论】:

【参考方案1】:

更新 - 我已经使用 2 个修复程序解决了这个问题。

    在添加着色器时,我重写了代码以本质上使用函数 QOpenGLShader::CompileSourceCode 而不是 QOpenGLShaderProgram::addShaderfromSourceFile。我使用下面参考中的代码 sn-p 将源文件作为字符串读取,然后将该字符串输入 CompileSourceCode 函数。

    我用过

#version 410 

而不是

#version 330

这样做是因为与所使用的 layout() 语法不兼容。

参考: Vertex shader error C5145: must write to gl_Position using QShaderProgram

【讨论】:

以上是关于从源文件编译 QOpenGLshader 时出错的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 7 中通过 GnuWin32 使用 Microsoft Visual C/C++ 编译器编译源 (.C) 文件时出错

Unity:从远程源解析 JSON 时出错

运行可执行文件时编译着色器时出错

编译时出错 - 从DWORD转换为LPCVOID

GDB C++ 出错时无法获取源核心行(分段错误)

Intel one-api 编译器在编译 GDAL cpp 文件时出错