从源文件编译 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) 文件时出错