由于OpenGL在着色器方面,C++没有对应的查找错误的方法,在此简单总结一下纠错方法,法,希望对后来者有帮助:

  • 1.检测着色器能否编译成功,即在语法上能不能通过。
    这里要用到glGetShaderiv()函数,具体用法如下,可以用来检测编译状态的。
int success1 = 0;
 glGetShaderiv(vertexShader,GL_COMPILE_STATUS,&success1);
 if(!success1)
 { 
  cout << "failed to compile VertexShader" << endl;
  }

但有时候明明知道某个着色器编译没通过,但就是不知道在哪出错,这个时候可以用glGetShaderInfoLog:

int success1 = 0;
 glGetShaderiv(vertexShader,GL_COMPILE_STATUS,&success1);
 if(!success1)
 { 
  cout << "failed to compile VertexShader" << endl;
  char log[512];
  glGetShaderInfoLog(vertexShader,512,NULL,log);
  cout << log << endl;
 }

举个例子,比如fragmentShader这样写:

#version 330 core
out  vec4 ourColor;
void main()
{
ourColor=vec4(0.2f,0.5f,0.6f,1.0f);s
}

就会这样报错:
OpenGL初学者常犯的错误
这里的0:5,的5是行数,这样就容易找到报错的位置啦。

  • 2.还有一种错误,就是两个着色器都编译成功,但是最后没有颜色,或者linkProgram失败,这需要注意什么呢?
    (1)检查着色器之间的衔接部分,需要注意着色器之间传递的变量名一定要一模一样。
    (2)很多没有颜色出现,都是片元着色器出了问题,可以检查片元着色器。
    最后仍然可以用glGetProgramiv和glGetProgramInfoLog来找到错误。
  • 3还有的错误就要靠自己来找了
    比如报错:Fragment shader Function already has a body: main ERROR:
    检查一下自己的glGetShaderSource 写错了没,
    或者是跟我一样犯的低级错误:
    本来的程序就写了10行,但是下拉滚动后发现在98行莫名有个main函数
    OpenGL初学者常犯的错误
    把它删掉就行。

PS

如果是用的Vs studio,可以安装如下文本工具,达到如下颜色效果,帮助自己编码:
OpenGL初学者常犯的错误
具体方法如下:
1.点击工具---->拓展和更新

OpenGL初学者常犯的错误
2.选择联网----->输入GLSL,搜索后下载安装,之后重启visual studio就行。

OpenGL初学者常犯的错误

相关文章:

  • 2021-06-08
  • 2021-10-06
  • 2021-04-18
  • 2021-09-18
  • 2021-12-12
  • 2021-06-06
  • 2021-08-04
  • 2021-11-05
猜你喜欢
  • 2021-10-12
  • 2021-10-03
  • 2021-12-16
  • 2021-12-15
  • 2021-11-08
  • 2021-12-12
  • 2021-08-02
相关资源
相似解决方案