微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

GLSL着色器编译在Linux上

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

顶点程序:

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_前缀是不推荐使用的函数,但这只是一个认的着色器,所以我知道一切正常。 这个示例在我的着色器类的窗口下工作正常。

如何使用命名pipe道(C ++服务器,C#客户端)

GCC – 多个预编译头文件和特定path

const char *成员

是否有可能使用Qt类枚举networking根?

Linux,timerfd的准确性

现在到我的着色器类中,当我创build一个Shader对象时,我调用一个不带文件扩展名的path的load方法。 例如:./data/shaders/default加载程序会采用此方法,并search相应着色程序的string+ .vert .geom或.frag。 这些被加载并传递给创build程序的OpenGL部分。 这是出现问题的地方,我可以确认着色器程序的内容是从磁盘上正确加载的,所以这不是问题所在,就我所知。

文件被加载时,它将进入编译顶点和片段程序(或几何体,但是这是可选的):

a_Type是GL_FRAGMENT_SHADER或GL_VERTEX_SHADER 。 a_Source是着色器程序文件(.ver​​t / .frag / .geom文件)的内容。 当我加载顶点程序编译立即失败, if( success != GL_TRUE )命中和计算是这样,我得到一个编译错误。 我没有得到任何输出,“着色器编译输出”printf不打印任何关于编译的信息。 ( OGLCHECK是一个检查opengl错误堆栈的macros,它也不会显示任何东西。)

gluint Shader::Compile(const gluint a_Type,const char* a_Source) { if(a_Source == NULL) return 0; gluint handle = glCreateShader(a_Type); OGLCHECK glShaderSource(handle,1,&a_Source,NULL); OGLCHECK glCompileShader(handle); OGLCHECK int bufflen = 0; GLint success = GL_FALSE; glGetShaderiv(handle,GL_INFO_LOG_LENGTH,&bufflen); OGLCHECK if(bufflen > 1) { GLchar* logString = new GLchar[bufflen + 1]; glGetShaderInfoLog(handle,bufflen,logString); OGLCHECK printf( "Shader compile output:n%sn",logString ); delete logString; logString = 0; } glGetShaderiv(handle,GL_COMPILE_STATUS,&success); OGLCHECK if(success != GL_TRUE) { printf( "Failed to compile shader!n" ); glDeleteShader(handle); OGLCHECK handle = 0; } return handle; }

我不确定发生了什么事,这个实现在Windows下工作正常,因为这是我已经移植到Linux的渲染引擎的一部分。 任何人有关于在Linux下着色器编译类似的问题?

另外,我已经检查了glxinfo,这里有一些信息:

glxinfo | grep "OpenGL version" OpenGL version string: 4.2.0 NVIDIA 295.49

我也grep'd在fragment_program,vertex_program,geometry_program和所有这些扩展似乎是可用的。 我正在运行Ubuntu 12.04。

更新:它似乎与着色器文件无关,但其他的,当我从terminal运行它的罚款它编译着色器,并使用它们,但每当我从Code :: Blocks运行它只是无法编译着色器..他们正在被加载并传递给OpenGL。 不知道发生了什么事。

实时播放生成的PCM数据

audio文件格式,可以写而不寻求

文件parsing为一个太长的path。 最大长度是260个字符

OProfile警告“放入超空间样本”是什么意思?

如何在Windows中使用文件带宽保留(预定文件IO)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐