Opengl错误:“Error C5145: must write to gl_Position”

写opengl时,编译出现了这个错误,查了很久都没有找出问题,网上大部分说的是读取shader文件的时候出错了,或者将gl_Position拼错,或者是没有给gl_Position赋值。我检查我的代码都没有上面的问题,后来发现是API用错了。

错误代码:

vs = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(GL_VERTEX_SHADER, 1, &vsCode, NULL); // 错误用法
glCompileShader(vs);

正确代码:

vs = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vs, 1, &vsCode, NULL); // 正确用法
glCompileShader(vs);

这个错误发生在链接阶段,即将vertex shader和fragment shader链接到着色器程序上的阶段。在shader编译的时候只会检察语法错误,因此像上面的错误示例编译的时候是不会报错的,因为vs没有根本就没有加载shader代码,在编译vs的时候,shader代码是空的,就不会有语法错误,而不会报错。但是在链接的时候,需要检察一些全局的参数——传递数据的参数是否被赋值了没,其中gl_Position就是将经过顶点着色器转换后的顶点数据传递到片段着色器,因为顶点着色器没有代码,gl_Position就没有被赋值,这就是我上面报错的原因。

自己通过查询和调试,总结出一些导致产生这个错误的原因:

1.保证shader代码的字符串正确。shader代码从文件中读取时,需要注意文件的编码格式,带标签的编码,都会有前缀,会导致错误;行尾也是一样。检查方法,可以在调用glShaderSource()时,将shader的字符串打印出来。

2.gl_Position拼写正确,有些错误是因为拼写成gl_position了。

3.要给gl_Position赋值

4.api调用正确

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章