当前位置: 首页 > news >正文

OpenGL3.3_C++_Windows(37)

调试:

视觉错误与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程序中一块特定区域显示帧缓冲的内容

……

外部调试器 


http://www.mrgr.cn/news/25675.html

相关文章:

  • 野指针与空指针的异同
  • 队列的基本概念及顺序实现
  • 【2025】基于python的网上商城比价系统、智能商城比价系统、电商比价系统、智能商城比价系统(源码+文档+解答)
  • [基于 Vue CLI 5 + Vue 3 + Ant Design Vue 4 搭建项目] 09 集成 Ant Design Vue
  • 45. 跳跃游戏 II
  • D2307 Zblog 的CDNfly|CloudFlare全能CDN自动刷新缓存插件_自动清理_适配优化2.1.0版本
  • [项目][WebServer][Util类]详细讲解
  • 腾讯云、阿里云、华为云优惠券领取、查看、使用教程分享
  • PCL 读取STL文件转换为点云
  • odoo14 | 报错:Database backup error: Access Denied
  • MySQL 存储过程:强大的数据库功能利器
  • C++缺省参数
  • 数学基础 -- 线性代数之特征值与特征向量深入解析
  • 十,Spring Boot 的内容协商的详细剖析(附+Debug调试说明)
  • 数据库锁有哪些?什么是死锁?
  • brew install node提示:Error: No such keg: /usr/local/Cellar/node
  • Linux 驱动编写框架 并编译导入开发板
  • Leetcode 第 138 场双周赛题解
  • 分类预测|基于改进的灰狼IGWO优化支持向量机SVM的数据分类预测matlab程序 改进策略:Cat混沌与高斯变异
  • 阿里达摩院:FunASR - onnxruntime 部署