我试图让我的跨平台着色器编译一个默认着色器,它只不过是基本的着色器程序,如下所示:
顶点程序:
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是着色器程序文件(.vert / .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数据
该文件parsing为一个太长的path。 最大长度是260个字符
OProfile警告“放入超空间样本”是什么意思?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。