当前位置: 首页> 健康> 美食 > OpenGL3.3_C++_Windows(37)

OpenGL3.3_C++_Windows(37)

时间:2025/7/9 16:31:51来源:https://blog.csdn.net/sengyongan/article/details/142184933 浏览次数:0次

调试:

视觉错误与CPU调试不同,在GLSL代码中也不能设置断点,出现错误的时候寻找错误的源头可能会非常困难。

glGetError()

GLenum glGetError();返回整形数字,查询错误标记,但是当一个错误标记被返回的时候,将不会报告其它的错误标记。

因此根据这个特性,代码中通常使用大量的glGetError()函数(间隔尽量小),以便确定错误发生的的大致位置

为了显示更多的信息,可以写一个错误检测宏,它返回错误类型,文件名,和行数

如果你使用GLEW库,调用glewInit()会设置一个GL_INVALID_ENUM的错误标记,所以首先需要glewInit之后立即调用glGetError消除这个标记

调试输出

更为完善的错误或警告信息给用户,只有4.3以上的openGL版本支持

在调用glfwCreateWindow之前提醒到GLFW中:调试输出启用glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GL_TRUE);

检查我们是否成功地初始化了调试上下文,我们可以对OpenGL进行查询。GL_CONTEXT_FLAG_DEBUG_BIT

调试输出回调函数,在这里我们将输出一些有用的错误数据到控制台中。

void APIENTRY glDebugOutput(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *message, void *userParam);

可以通过glDebugMessageControl()过滤出你需要的错误类型

调式输出可以很容易的找出错误发生的准确行号或者调用,通过在glDebugOutput()中(特定的错误类型上)设置一个断点,查找调用栈(vs的Call Stack)直到找到消息发出的源头。

我们也可以使用glDebugMessageInsert将自定义信息推送到调试输出系统:

着色器调试

因为shader无法断点或者输出日志,所以只能用颜色来调试

通常将所有相关的变量直接发送到片段着色器的输出通道,以评估它们

比如法线可视化

参考编译器

不同的显卡商(AMD,NVidia,以及Intel)的GLSL间有不同的细微差别,如果你想要保证你的着色器代码在所有的机器上都能运行,可以直接使用官方的参考编译器(语言校验器),你可以很方便的检查你的着色器代码规范

GLSL语言校验器是通过下列固定的后缀名来决定着色器的类型的

  • .vert:顶点着色器(Vertex Shader)
  • .frag:片段着色器(Fragment Shader)
  • .geom:几何着色器(Geometry Shader)
  • .tesc:细分控制着色器(Tessellation Control Shader)
  • .tese:细分计算着色器(Tessellation Evaluation Shader)
  • .comp:计算着色器(Compute Shader)

帧缓冲输出

在OpenGL程序中一块特定区域显示帧缓冲的内容

……

外部调试器 

关键字:OpenGL3.3_C++_Windows(37)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: