使用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*
功能并继续。