【发布时间】:2012-11-21 12:42:59
【问题描述】:
我最近一直在研究 glsl 着色器,并且刚刚开始使用花哨的新曲面细分阶段。
它工作了一段时间,然后突然之间,砰,它失败了。
每当我使用原始参数等运行它时,它就会中断,
glDrawElements(GL_PATCHES, numIndicies, GL_UNSIGNED_INT, 0) 在 0x00000054 处存在访问冲突。
我已经梳理了我的代码,并且从我所看到的情况来看,一切都已验证。
但事情是这样的,当我将GL_PATCHES 更改为GL_TRIANGLES 时,它可以完美运行。当然在禁用曲面细分控制和评估着色器之后。
我也尝试过glDrawArrays,但GL_PATCHES 仍然失败,所以我相当有信心它与此有关。
目前我在几何着色器中使用基本的细分,但那很快就会变老。
我正在运行带有 ATI Mobility Radeon HD 5650 的 Windows 7 x64,据我所知,最新的驱动程序是什么。 如果有帮助,它说异常发生在 atioglxx.dll 中的某处。 这是一些代码。
GLuint CreateIcosahedron(vec3, unsigned int&);
void DrawScene(){
static unsigned int numindices = 0;
static GLuint vao = CreateIcosahedron(vec3(0,0,0), vec3(1,2,1), numindices);
glBindVertexArray(vao);
glDrawElements(GL_PATCHES, numindices, GL_UNSIGNED_INT, 0);
glBindVertexArray(0);
}
GLuint CreateIcosahedron(vec3 center, unsigned int& numindices){
GLuint vaoID;
GLuint vboID;
GLuint iboID;
const int indices[] = {
// indices omitted for your viewing pleasure
};
const vec3 vertices[] = {
// vertices omitted for your viewing pleasure
};
const GLuint uPosition = 0;
numindices = sizeof(indices)/sizeof(indices[0]);
glGenVertexArrays(1, &vaoID);
glBindVertexArray(vaoID);
glGenBuffers(1, &vboID);
glBindBuffer(GL_ARRAY_BUFFER, vboID);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glVertexAttribPointer(uPosition, 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(uPosition);
glGenBuffers(1, &iboID);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, iboID);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
return vaoID;
}
我做错了什么? :c
【问题讨论】: