Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 元素碰撞_C++_Opengl - Fatal编程技术网

C++ 元素碰撞

C++ 元素碰撞,c++,opengl,C++,Opengl,在每次调用GLDraweElements时,我的图形驱动程序都会崩溃/冻结,并在几秒钟后恢复(Windows 7超时检测/恢复)。glGetError()始终返回GL\u NO\u错误 编辑:只是想弄清楚到底发生了什么:第一次调用GLDraweElements时,我的计算机冻结5-10秒,然后屏幕变黑几秒钟,然后恢复,Windows给我一条消息:“显示驱动程序停止响应,已恢复”。我的程序一直在运行,但它被困在了一些元素中 更新:在glClear(GL_COLOR_BUFFER_BIT | GL_

在每次调用GLDraweElements时,我的图形驱动程序都会崩溃/冻结,并在几秒钟后恢复(Windows 7超时检测/恢复)。glGetError()始终返回GL\u NO\u错误

编辑:只是想弄清楚到底发生了什么:第一次调用GLDraweElements时,我的计算机冻结5-10秒,然后屏幕变黑几秒钟,然后恢复,Windows给我一条消息:“显示驱动程序停止响应,已恢复”。我的程序一直在运行,但它被困在了一些元素中

更新:在glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)之前添加对glFlush()的调用使其工作。我不明白为什么

这是我的代码,有些简化,没有错误检查。我做错什么了吗

struct Vertex
{
    float pos[3];
    float color[3];
};

struct Tri
{
    unsigned int idxs[3];
};

// ...

GLuint m_vbo;
GLuint m_ibo;

std::vector<Vertex> m_verts;
std::vector<Tri> m_faces;

// ...

glGenBuffers(1, &m_vbo);

Vertex* vBuf = &(m_verts[0]);
unsigned int vboSize = sizeof(vBuf[0]) * m_verts.size();

glBindBuffer(GL_ARRAY_BUFFER, m_vbo);
glBufferData(GL_ARRAY_BUFFER, vboSize, vBuf, GL_STATIC_DRAW);

glGenBuffers(1, &m_ibo);

unsigned int* iBuf = (unsigned int*) (&(m_faces[0]));
unsigned int iboSize = sizeof(iBuf[0]) * (m_faces.size() * 3);

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_ibo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, iboSize, iBuf, GL_STATIC_DRAW);

// ...

// this line fixes it
// glFlush();

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glUseProgram(someShaderProgram);

// ...

glBindBuffer(GL_ARRAY_BUFFER, m_vbo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_ibo);

// the attribute locations are queried using glGetAttribLocation in the real code
glEnableVertexAttribArray(1);
glVertexAttribPointer
    (1, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)(0));

glEnableVertexAttribArray(0);
glVertexAttribPointer
    (0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)(3*sizeof(float)));

// doesn't get past this line
glDrawElements(GL_TRIANGLES, m_faces.size()*3, GL_UNSIGNED_INT, 0);

// ...

glfwSwapBuffers();
struct顶点
{
浮动位置[3];
浮色[3];
};
结构三
{
无符号整数idxs[3];
};
// ...
GLuint m_vbo;
GLuint m_ibo;
std::向量m_顶点;
std::向量m_面;
// ...
glGenBuffers(1和m_vbo);
顶点*vBuf=&(m_顶点[0]);
unsigned int vboSize=sizeof(vBuf[0])*m_verts.size();
glBindBuffer(GL_数组_BUFFER,m_vbo);
glBufferData(GLU数组缓冲区、vboSize、vBuf、GLU静态图);
glGenBuffers(1和m_ibo);
无符号整数*iBuf=(无符号整数*)(&(m_面[0]);
unsigned int iboSize=sizeof(iBuf[0])*(m_faces.size()*3);
glBindBuffer(GL_元素数组缓冲区,m_ibo);
glBufferData(GLU元素\数组\缓冲区、iboSize、iBUFF、GLU静态\绘图);
// ...
//这句话解决了这个问题
//glFlush();
glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位);
glUseProgram(someShaderProgram);
// ...
glBindBuffer(GL_数组_BUFFER,m_vbo);
glBindBuffer(GL_元素数组缓冲区,m_ibo);
//在实际代码中使用GLGetAttriblLocation查询属性位置
GlenableVertexAttributeArray(1);
glvertexattributepointer
(1,3,GL_FLOAT,GL_FALSE,sizeof(顶点),(void*)(0));
GlenableVertexAttributeArray(0);
glvertexattributepointer
(0,3,GL_FLOAT,GL_FALSE,sizeof(顶点),(void*)(3*sizeof(FLOAT));
//不能越过这条线
GLD元素(GL_三角形,m_面.size()*3,GL_无符号整数,0);
// ...
glfwSwapBuffers();

glvertexattributepointer
的最后一个参数是“第一个组件的偏移量”-以字节(!)为单位。确实要将值
3
放在那里吗?

glvertexattributepointer
的最后一个参数是“第一个组件的偏移量”-以字节(!)为单位。你确定要值
3
在那里吗?

它不是以字节为单位的大小,而是从缓冲区开始的偏移量。这就是我想说的,但偏移量是以字节为单位的,所以值3似乎不太可能。这确实是含糊不清的。谢谢。那么应该是3*sizeof(float),对吗?我会编辑我的帖子来解决这个问题。但是它仍然不能解决原来的问题。我现在看不到任何其他错误,而且如果结构比你想象的大,它会崩溃,你测试过吗?(试一试如果sizeof(TRI)是3*sizeof(unsigned))您使用的faces和iBuf变量是什么?它不是以字节为单位的大小,而是从缓冲区开始的偏移量。这就是我试图说的,但偏移量是以字节为单位的,所以值3似乎不太可能。这确实是含糊不清的。谢谢。那么应该是3*sizeof(float),对吗?我会编辑我的帖子来解决这个问题。但是它仍然不能解决原来的问题。我现在看不到任何其他错误,而且如果结构比你想象的大,它会崩溃,你测试过吗?(试一试如果sizeof(TRI)是3*sizeof(unsigned)),您使用的faces和iBuf变量是什么?