我的代码按预期工作100%,glGetError()
始终返回GL_NO_ERROR
。这是否意味着我到目前为止所做的一切都是正确的,或者我的代码中是否有错误?作为测试,我引入了一些错误,以确认glGetError()
按预期工作,并检测到它们。但是,一般来说,使用glGetError()
?
答案 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
,则表示规范未明确检测到的错误均未发生。这并不意味着您的代码符合您的预期,也不代表您的代码能够合理运行。