我如何找出传递给 glGetObjectLabel 的 GLuint id 的类型?
How do I find out the type of the GLuint id passed to glGetObjectLabel?
OpenGL 通过带有声明的回调发送所有调试消息:
void MessageCallback(GLenum eSource, GLenum eType,
GLuint eId, GLenum eSeverity,
GLsizei sLength, const GLchar* strMessage,
const void* userParam)
GLuint eId
类似于导致消息的对象。如果为对象分配了标签,则可以使用 glGetObjectLabel
读取字符串。但是函数定义
void glGetObjectLabel(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei * length, char * label);
声明我必须将对象的 identifier
(GLenum) 传递给该函数。我从哪里得到对象类型?是否有另一个函数可以从回调的 GLuint eId
中检索它?
我认为这对 OpenGL 生成的消息根本不起作用。
根据 Khronos 网站和 OpenGl SuperBible 的网页,MessageCallback eID 是一个消息标识符。它不保证是一个实际的OpenGL对象。可以是递增的序列号。
即使 eID 是 texture/buffer/whatever 标识符,据我所知,您也无法确定它是什么类型。 OpenGL id 只是整数,至少在我的系统上它们在所有 OpenGL 中都不是唯一的。我可以生成一个顶点数组对象、一个顶点缓冲区对象和一个纹理,它们都具有相同的整数 id 值。有函数glIsBuffer、glIsTexture等;但它们可能都 return 对于单个 ID 为真。
您可以通过将对象标识符作为 eID 传递并将对象类型作为消息中的固定位置传递,使其适用于您自己的 glDebugMessageInsert 调用。
OpenGL 通过带有声明的回调发送所有调试消息:
void MessageCallback(GLenum eSource, GLenum eType,
GLuint eId, GLenum eSeverity,
GLsizei sLength, const GLchar* strMessage,
const void* userParam)
GLuint eId
类似于导致消息的对象。如果为对象分配了标签,则可以使用 glGetObjectLabel
读取字符串。但是函数定义
void glGetObjectLabel(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei * length, char * label);
声明我必须将对象的 identifier
(GLenum) 传递给该函数。我从哪里得到对象类型?是否有另一个函数可以从回调的 GLuint eId
中检索它?
我认为这对 OpenGL 生成的消息根本不起作用。
根据 Khronos 网站和 OpenGl SuperBible 的网页,MessageCallback eID 是一个消息标识符。它不保证是一个实际的OpenGL对象。可以是递增的序列号。
即使 eID 是 texture/buffer/whatever 标识符,据我所知,您也无法确定它是什么类型。 OpenGL id 只是整数,至少在我的系统上它们在所有 OpenGL 中都不是唯一的。我可以生成一个顶点数组对象、一个顶点缓冲区对象和一个纹理,它们都具有相同的整数 id 值。有函数glIsBuffer、glIsTexture等;但它们可能都 return 对于单个 ID 为真。
您可以通过将对象标识符作为 eID 传递并将对象类型作为消息中的固定位置传递,使其适用于您自己的 glDebugMessageInsert 调用。