【发布时间】:2020-01-05 08:29:15
【问题描述】:
我正在使用 opengl 构建游戏。当我调用 glDrawElements 时,会引发来自 ig9icd32.dll 的除以零错误。经过一些研究,我发现它是一个英特尔库
由于 ig9icd32.dll 是 Intel 驱动,我尝试用专用 GPU 运行游戏,但出现同样的错误。
使用单个 VAO 并在不绘制第二个的情况下进行编译不会给出任何错误。 我检查了 VAO 生成和 VBO 绑定:它们工作得很好。
{
glGenVertexArrays(1, &m_HighwayVAO);
glGenVertexArrays(1, &m_lanesVAO);
{
glBindVertexArray(m_HighwayVAO);
unsigned int vbo, ebo;
glGenBuffers(1, &vbo);
glGenBuffers(1, &ebo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo);
//Vertex: x,y,z, u,v
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)0);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)(3 * sizeof(float)));
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glBindVertexArray(0);
}
{
glBindVertexArray(m_lanesVAO);
unsigned int buffer, index;
glGenBuffers(1, &buffer);
glGenBuffers(1, &index);
glBindBuffer(GL_ARRAY_BUFFER, buffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, index);
//Vertex: x,y,z, r,g,b,
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), 0);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)(3 * sizeof(float)));
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glBindVertexArray(0);
}
}
这是我初始化 VAO 的地方。 它们位于单独的范围内,因此我可以在编辑器上折叠。 没有范围也会发生同样的错误。
m_HighwayVAO 和 m_lanesVAO 是在 Header 中定义的变量。它们被初始化为 0。
void Rendr::highway(double time) {
float factor = time / 3;
//Vertex: x,y,z, u,v
float data[] = {
-1.0f, 0.0f, 0.0f, 0.0f, 1.0f + factor,
1.0f, 0.0f, 0.0f, 1.0f, 1.0f + factor,
-1.0f, 0.0f, 6.0f, 0.0f, 0.0f + factor,
1.0f, 0.0f, 6.0f, 1.0f, 0.0f + factor
};
unsigned int indices[] = {
0,2,3,
3,1,0
};
glBindVertexArray(m_HighwayVAO);
glBufferData(GL_ARRAY_BUFFER, sizeof(data), data, GL_DYNAMIC_DRAW);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_DYNAMIC_DRAW);
glUseProgram(m_TextureProgram);
glDrawElements(GL_TRIANGLES, sizeof(indices) / sizeof(int), GL_UNSIGNED_INT, (void*)0);
//error thrown here
glBindVertexArray(0);
}
如果您需要更多代码,我很乐意添加到帖子中。
提前感谢您的帮助。
【问题讨论】:
-
请发布您收到的确切错误消息。在调用
glDrawElements之前,您是否检查过您的程序是否存在 GL 错误?