我想用glGetObjectLabel检索标签。但是,我遇到了细分错误。这是我的代码:
const unsigned int size {GL_MAX_LABEL_LENGTH};
char label[size];
GLsizei len[size];
glGetObjectLabel(m_identifier, m_name, size, len, label);
有什么问题? Here它指出:“如果不为NULL,则长度和标签应该是客户机具有写访问权限的地址,否则可能发生不确定的行为,包括进程终止。”
所以我猜我的label和len变量出了点问题。
编辑:m_name未设置为有效的名称。我不知道这会导致分段错误。
最佳答案
该代码的glGetObjectLabel()
参数有两个问题。首先,GL_MAX_LABEL_LENGTH
是用于检索最大标签长度的枚举值,而不是实际的最大标签长度。另外,第4个参数只是指向GLsizei
类型的单个值的指针,而不是数组。
整个过程应如下所示:
GLint maxLabelLen = 0;
glGetIntegerv(GL_MAX_LABEL_LENGTH, &maxLabelLen);
GLchar label[maxLabelLen];
GLsizei labelLen = 0;
glGetObjectLabel(m_identifier, m_name, maxLabelLen, &labelLen, label);
但是,这不能解释崩溃。看起来您同时想出了那部分。但是,为第二个参数传递无效值也不应该导致崩溃。看起来像是驱动程序错误。呼叫应失败,并显示
GL_INVALID_OPERATION
错误。