我想用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错误。

10-08 08:23