Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ linux上的GLSL着色器编译_C++_Linux_Opengl_Glsl - Fatal编程技术网

C++ linux上的GLSL着色器编译

C++ linux上的GLSL着色器编译,c++,linux,opengl,glsl,C++,Linux,Opengl,Glsl,我试图让我的跨平台着色器编译一个默认着色器,它只不过是基本着色器程序,如下所示: 顶点程序: void main() { //vec4 vertex = matModelView * a_vertex; gl_Position = ftransform();//matProj * vertex; gl_TexCoord[0] = gl_MultiTexCoord0; } 片段程序: uniform sampler2D colorMap; void main() {

我试图让我的跨平台着色器编译一个默认着色器,它只不过是基本着色器程序,如下所示:

顶点程序:

void main()
{
    //vec4 vertex = matModelView * a_vertex;
    gl_Position = ftransform();//matProj * vertex;

    gl_TexCoord[0] = gl_MultiTexCoord0;
}
片段程序:

uniform sampler2D colorMap;

void main()
{
    gl_FragColor = texture2D(colorMap, gl_TexCoord[0].st);
}
我知道gl_uu前缀是不推荐使用的函数,但这只是一个默认着色器,所以我知道一切正常。此示例在windows和my shader类下运行良好

现在转到我的着色器类,当我创建一个着色器对象时,我调用load方法,该方法采用一个没有文件扩展名的路径。例如:./data/shaders/default加载程序获取该字符串并搜索该字符串+.vert.geom或.frag以查找适当的着色器程序。然后加载这些文件并将其传递到创建程序的OpenGL部分。这就是出现问题的地方,我可以确认着色器程序的内容是从磁盘正确加载的,所以就我所见,这不是问题所在

加载文件后,将继续编译顶点和片段程序(或几何体,但这是可选的):

a_类型
GL_片段_着色器
GL_顶点_着色器
a_Source
是着色器程序文件(.vert/.frag/.geom文件)的内容。当我加载vertex程序时,编译立即失败,
if(success!=GL\u TRUE)
被命中并评估为是,我得到一个编译错误。我没有得到任何输出,“着色器编译输出”printf不会打印任何编译信息。(OGLCHECK是一个检查opengl错误堆栈的宏,它也不会显示任何内容。)

我不确定到底发生了什么,这个实现在windows下运行良好,因为这是我的渲染引擎的一部分,我已经移植到linux。有人在linux下的着色器编译方面有类似的问题吗

此外,我已经检查了glxinfo,以下是一些信息:

glxinfo | grep "OpenGL version"
OpenGL version string: 4.2.0 NVIDIA 295.49
我还对fragment_程序、vertex_程序、geometry_程序和所有这些扩展都很满意。我正在运行Ubuntu 12.04

更新:
它似乎与着色器文件无关,但其他一些东西,当我从终端运行它时,它会编译着色器并使用它们,但每当我从Code::Blocks运行它时,它就无法编译着色器。。它们正在加载并传递给OpenGL。不知道发生了什么。

可能是DOS新线还是Unix新线?DOS将新行编码为
\r\n
对,而Unix只编码
n
。根据规范,两者都是空白,编译器应该接受它,但可能它会对此产生误解。您是在Windows上使用GL3.1+核心配置文件,还是在linux上仅使用兼容配置文件?如果是这样,着色器在linux上是非标准的-您必须声明out_FragColor元素manually@datenwolf检查,结果相同,但谢谢你的提示。@ViktorLatypov我还没想过要瞄准什么。我声明了自己的out vec4,但仍然无法编译。您能为我的着色器显示一个核心配置文件和兼容性配置文件的示例吗?通过这种方式,我可以看到是否是这种情况或其他正在发生的事情。添加了一个更新,这不是由于着色器本身。
glxinfo | grep "OpenGL version"
OpenGL version string: 4.2.0 NVIDIA 295.49