glGetError()返回GL_NO_ERROR,我的代码有多正确?

时间:2017-10-12 20:33:02

标签: opengl opengl-es

我的代码按预期工作100%,glGetError()始终返回GL_NO_ERROR。这是否意味着我到目前为止所做的一切都是正确的,或者我的代码中是否有错误?作为测试,我引入了一些错误,以确认glGetError()按预期工作,并检测到它们。但是,一般来说,使用glGetError()

时,误报是否有用

1 个答案:

答案 0 :(得分:1)

以下C / C ++代码没有错误:

int x = 5 + 12 * 2;

C和C ++标准完全有效,结果值定义明确:27。

但是,如果你的意思是5应该在之前加上12 乘以2 ...答案是错误的。它仍然有效且定义明确,但它不是你的意思。

OpenGL错误只能从OpenGL规范的角度来衡量正确性。当你意味着做另一件事时,你仍然有很多机会要求OpenGL做一件事。

同样,以下C / C ++代码可能有效,也可能无效:

void foo(int *ptr)
{
  *ptr += 5;
}

编译器将完全编译此代码而不会出现错误。但是如果使用NULL指针调用此函数,则会出现“未定义的行为”。通过执行*ptr,您向编译器承诺指针不会为NULL。

您还承诺编译器指针指向int类型的对象,因此如果您使用float*指针调用此函数,并将其转换为int*,也会得到不明确的行为。

OpenGL有类似的地方,你承诺OpenGL,你将遵循API 不会检查的规则,如果你打破它们,那么坏事就会发生。在渲染时从纹理中读取是UB的一种情况,就像读取顶点数据超过其缓冲对象之一一样。 许多其他人。

如果获得GL_NO_ERROR,则表示规范未明确检测到的错误均未发生。这并不意味着您的代码符合您的预期,也不代表您的代码能够合理运行。