最近我一直在使用glsl着色器,剛剛開始使用新的鑲嵌細分階段。 它完美的工作了一段時間,然後突然間,BANG,它失敗了。 每當我運行它與原始參數等,它打破, glDrawElements(GL_PATCHES, numIndicies, GL_UNSIGNED_INT, 0)
訪問衝突在0x00000054。glDrawElements只會導致與GL_PATCHES的訪問衝突
我已經梳理了我的代碼,從我所看到的內容中,所有內容都會檢查出來。 但是,當我將GL_PATCHES
更改爲GL_TRIANGLES
時,它的功能完美無缺。當然,在禁用曲面細分控制和eval着色器之後。 我也試過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
謝謝,我會給你一個鏡頭 – Manpat
它完美的作品。在函數的末尾解除頂點數組的綁定,解決了所有問題。謝謝噸:D 你已經救了我幾小時的頭髮拉:p – Manpat
我到這裏因爲我有同樣的0x00000054崩潰。原來,這是因爲我沒有將tesselation控制和評估着色器附加到程序對象。 – RelativeGames