我想用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,则length和label应该是客户端具有写访问权限的地址,否则可能会发生未定义的行为,包括进程终止。"
所以我猜我的标签和 len 变量出了问题。
编辑:m_name未设置为有效名称。我不知道这会导致分段错误。
答案 0 :(得分:1)
代码对glGetObjectLabel()
的参数有几个问题。主要是,GL_MAX_LABEL_LENGTH
是用于检索最大标签长度的枚举值,而不是实际的最大标签长度。此外,第四个参数只是指向类型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
错误。