私は最近glslシェーダーをいじくり回していて、派手な新しいテッセレーションステージから始めたところです。それはしばらくの間完全に機能していましたが、突然、BANG、失敗しました。元のパラメータなどを使用して実行すると、
glDrawElements(GL_PATCHES, numIndicies, GL_UNSIGNED_INT, 0)
0x00000054でアクセス違反が発生します。
私は自分のコードをくまなく調べました、そして私が見ることができるものから、すべてがチェックアウトします。しかし、これが問題です。に変更GL_PATCHES
するとGL_TRIANGLES
、問題なく動作します。もちろん、テッセレーションコントロールと評価シェーダーを無効にした後。私も試しましたがglDrawArrays
、それでも失敗するGL_PATCHES
ので、それはそれと関係があるとかなり確信しています。
現在、ジオメトリシェーダーで基本的なテッセレーションを使用していますが、そのガンナはすぐに古くなります。
私はATIMobilityRadeonHD5650を搭載したWindows7x64を実行していますが、私の知る限り、最新のドライバーは何ですか。それが助けになるなら、例外は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