为什么glObjectLabel只对GL_TEXTURE失败



使用OpenGL 4.3和调试上下文,我能够标记程序、着色器、顶点数组和顶点缓冲区。

然而,我无法标记纹理,并在回调中得到以下错误:

Source: DebugSourceApi
Type: DebugTypeError
Id: 1011
Severity: DebugSeverityHigh
Message: glObjectLabel failed because (depending on the operation) a referenced binding point is empty; a referenced name is not the name of an object; or the given name is otherwise not valid to this operation (GL_INVALID_VALUE)

如果这很重要的话,我会使用OpenTK库。

这是发生错误的代码块:

GL.GenTextures(1, out Texture);
const string labelTEX = "ImGui Texture";
GL.ObjectLabel(ObjectLabelIdentifier.Texture, Texture, labelTEX.Length, labelTEX);

问题:

为什么glObjectLabel适用于除GL_TEXTURE之外的所有内容?

在示例代码中,您还没有创建纹理。您已经为纹理创建了名称。为了创建实际的纹理对象,需要将该纹理名称绑定到上下文。

如果您的其他代码在给对象命名之前没有绑定对象,那么您可能会逃脱惩罚,因为大多数对象都不是类型化的。纹理的特殊之处在于,为了创建它们,必须给它们一个类型(glBindTexture中的第一个参数(。该类型成为纹理对象本身的一部分,指定将来如何使用(和不使用(它。

或者,如果DSA功能对您可用,只需切换到glCreate*功能并继续。

相关内容

  • 没有找到相关文章

最新更新