使用OpenGL 4.3调试上下文,为何glObjectLabel仅对GL_TEXTURE失效?
在使用OpenGL 4.3调试上下文、OpenTK库的场景下,能给program、shader、顶点数组及顶点缓冲区添加标签,但无法为texture添加标签,调试回调返回以下错误:
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)
出错代码块如下:
GL.GenTextures(1, out Texture); const string labelTEX = "ImGui Texture"; GL.ObjectLabel(ObjectLabelIdentifier.Texture, Texture, labelTEX.Length, labelTEX);
为何glObjectLabel对其他OpenGL对象有效,仅对GL_TEXTURE无效?
OpenGL中,glGenTextures生成的纹理名称只是一个未关联具体类型的空标识符,必须先将纹理绑定到一个纹理目标(比如GL_TEXTURE_2D),才能对其使用glObjectLabel。
program、shader、VAO、VBO这类对象在生成后就已经是完整的可操作对象,不需要额外绑定步骤就能添加标签;但纹理对象需要先绑定到具体目标(对应不同的纹理类型,比如2D、3D、立方体贴图等),才能成为OpenGL认可的有效对象,此时glObjectLabel才能正常执行。
修改后的代码示例:
GL.GenTextures(1, out Texture); // 先将纹理绑定到2D纹理目标,可根据实际需求选择对应目标 GL.BindTexture(TextureTarget.Texture2D, Texture); const string labelTEX = "ImGui Texture"; GL.ObjectLabel(ObjectLabelIdentifier.Texture, Texture, labelTEX.Length, labelTEX);
内容的提问来源于stack exchange,提问作者aybe

