1
0
mirror of https://github.com/LearnOpenGL-CN/LearnOpenGL-CN.git synced 2025-08-23 04:35:28 +08:00

fix some translation mistakes

This commit is contained in:
aillieo
2017-05-07 21:42:22 +08:00
parent 14a8b75207
commit 472b28fab4

View File

@@ -1,10 +1,10 @@
# 调试
原文 | [Debugging](http://learnopengl.com/#!In-Practice/Debugging)
----- | ----
作者 | JoeydeVries
翻译 | [Meow J](https://github.com/Meow-J)
校对 | 暂无
| 原文 | [Debugging](http://learnopengl.com/#!In-Practice/Debugging) |
| ---- | ---------------------------------------- |
| 作者 | JoeydeVries |
| 翻译 | [Meow J](https://github.com/Meow-J) |
| 校对 | 暂无 |
图形编程可以带来很多的乐趣,然而如果什么东西渲染错误,或者甚至根本就没有渲染,它同样可以给你带来大量的沮丧感!由于我们大部分时间都在与像素打交道,当出现错误的时候寻找错误的源头可能会非常困难。调试(Debug)这样的**视觉**错误与往常熟悉的CPU调试不同。我们没有一个可以用来输出文本的控制台在GLSL代码中也不能设置断点更没有方法检测GPU的运行状态。
@@ -12,7 +12,7 @@
## glGetError()
当你不正确使用OpenGL的时候比如说在绑定之前配置一个缓冲它会检测到并在幕后生成一个或多个用户错误标记。我们可以使用一个叫做<fun>glGetError</fun>的函数查询这些错误标记他会检测错误标记集并且在OpenGL确实出错的时候返回一个错误值。
当你不正确使用OpenGL的时候比如说在绑定之前配置一个缓冲它会检测到并在幕后生成一个或多个用户错误标记。我们可以使用一个叫做<fun>glGetError</fun>的函数查询这些错误标记他会检测错误标记集并且在OpenGL确实出错的时候返回一个错误值。
```c++
GLenum glGetError();
@@ -21,7 +21,7 @@ GLenum glGetError();
当<fun>glGetError</fun>被调用时,它要么会返回错误标记之一,要么返回无错误。<fun>glGetError</fun>会返回的错误值如下:
| 标记 | 代码 | 描述 |
| :------: | :------: | :------: |
| :------------------------------: | :--: | :------------------------------: |
| GL_NO_ERROR | 0 | 自上次调用<fun>glGetError</fun>以来没有错误 |
| GL_INVALID_ENUM | 1280 | 枚举参数不合法 |
| GL_INVALID_VALUE | 1281 | 值参数不合法 |
@@ -37,7 +37,7 @@ GLenum glGetError();
!!! important
注意如果OpenGL是分布式(Distributely)运行的时候,经常像是在X11系统上其它的用户错误代码仍然可以被生成只要它们有着不同的错误代码。调用<fun>glGetError</fun>只会重置一个错误代码标记,而不是所有。由于这一点,我们通常会建议在一个循环中调用<fun>glGetError</fun>。
注意OpenGL是分布式(Distributely)运行的时候,在X11系统上其它的用户错误代码仍然可以被生成只要它们有着不同的错误代码。调用<fun>glGetError</fun>只会重置一个错误代码标记,而不是所有。由于这一点,我们通常会建议在一个循环中调用<fun>glGetError</fun>。
```c++
glBindTexture(GL_TEXTURE_2D, tex);
@@ -102,7 +102,7 @@ glGetError();
## 调试输出
虽然没有<fun>glGetError</fun>普遍,但一个叫做<def>调试输出</def>(Debug Output)的OpenGL拓展是一个非常有用的工具它在4.3版本之后变为了核心OpenGL的一部分。通过使用调试输出拓展OpenGL自身会直接发送一个比起<fun>glGetError</fun>更为完善的错误或警告信息给用户。它不仅提供了更多的信息,也能够帮助你使用一个调试器(Debugger)捕捉错误源头。
虽然没有<fun>glGetError</fun>普遍,但一个叫做<def>调试输出</def>(Debug Output)的OpenGL拓展是一个非常有用的工具它在4.3版本之后变为了核心OpenGL的一部分。通过使用调试输出拓展OpenGL自身会直接发送一个比起<fun>glGetError</fun>更为完善的错误或警告信息给用户。它不仅提供了更多的信息,也能够帮助你使用调试器(Debugger)捕捉错误源头。
!!! important
@@ -207,7 +207,7 @@ glDebugMessageControl(GL_DEBUG_SOURCE_API,
0, nullptr, GL_TRUE);
```
有了我们的配置,如果你的上下文支持调试出的话每个不正确的OpenGL指令都会打印出一大堆的有用数据。
有了我们的配置,如果你的上下文支持调试出的话每个不正确的OpenGL指令都会打印出一大堆的有用数据。
![](../img/06/01/debugging_debug_output.png)
@@ -266,7 +266,7 @@ void main()
通过多年的经验你会最终能够知道不同GPU供应商之间的细微差别但如果你想要保证你的着色器代码在所有的机器上都能运行你可以直接对着官方的标准使用OpenGL的GLSL[参考编译器](https://www.khronos.org/opengles/sdk/tools/Reference-Compiler/)Reference Compiler来检查。你可以从[这里](https://www.khronos.org/opengles/sdk/tools/Reference-Compiler/)下载所谓的<def>GLSL语言校验器</def>(GLSL Lang Validator)的可执行版本,或者从[这里](https://github.com/KhronosGroup/glslang)找到完整的源码。
有了这个GLSL语言校验器你可以很方便的检查你的着色器代码只需要把着色器文件作为程序的第一参数即可。注意GLSL语言校验器是通过下列固定的后缀名来决定着色器的类型的
有了这个GLSL语言校验器你可以很方便的检查你的着色器代码只需要把着色器文件作为程序的第一参数即可。注意GLSL语言校验器是通过下列固定的后缀名来决定着色器的类型的
- **.vert**:顶点着色器(Vertex Shader)
- **.frag**:片段着色器(Fragment Shader)
@@ -363,7 +363,7 @@ int main()
## 外部调试软件
当上面所有介绍到的技巧都不能使用的时候我们仍可以使用一个第三方的工具来帮助我们调试。第三方应用通常将它们自己注入到OpenGL驱动中并且能够拦截各种OpenGL调用给你大量有用的数据。这些工具可以在很多方面帮助到你对OpenGL函数使用进行性能测试寻找瓶颈检查缓冲内存显示纹理和帧缓冲附件。如果你正在写大规模产代码,这类的工具在开发过程中是非常有用的。
当上面所有介绍到的技巧都不能使用的时候我们仍可以使用一个第三方的工具来帮助我们调试。第三方应用通常将它们自己注入到OpenGL驱动中并且能够拦截各种OpenGL调用给你大量有用的数据。这些工具可以在很多方面帮助到你对OpenGL函数使用进行性能测试寻找瓶颈检查缓冲内存显示纹理和帧缓冲附件。如果你正在写大规模代码,这类的工具在开发过程中是非常有用的。
我在下面列出了一些流行的调试工具,选几个尝试一下,看看哪个最适合你。