2012-10-18 51 views
1

我一直在嘗試使用openGL製作小行星克隆,並且完全停留在分割錯誤上,我不確定如何解決。它似乎發生在函數glGenBuffersARB()的使用上。如果我使用vertexbuffer註釋掉這些行,程序會編譯並運行正常(但顯然沒有任何渲染)。我在eclipse上使用minGW編譯器和gdb調試器並試圖使用擴展,所以我可以支持早於1.5的OpenGL版本。glGenBuffersARB(1,&_VertexBufferObject)上的段錯誤;

glGenBuffers(1, &_VertexBufferObject); 

glBindBufferARB(GL_ARRAY_BUFFER_ARB, _VertexBufferObject); // Bind The Buffer 

glBufferDataARB(GL_ARRAY_BUFFER_ARB, U8VertexCount*3*sizeof(GLfloat), quad,GL_STATIC_DRAW_ARB); 

GLuints被聲明爲private在這樣的標題:

GLuint _VertexArrayObject; 

GLuint _VertexBufferObject; 

int U8VertexStride; 

int U8VertexCount; 

gdb的痕跡在這裏:gdb trace

+0

您是否通過初始化GLEW實際*加載*擴展?此外,緩衝區對象自從** 1.5 **開始就是核心OpenGL,而不是3.0。 –

+0

我相信我在開始時使用glewInit()正確地初始化了GLEW,因爲它在GLEW站點上完成了。當它變成核心時,我一定會混淆不清,我會編輯這個問題。謝謝! – Stephen

+0

在初始化glew之前,您是否設置了GL版本?打印出函數指針也可以幫助理解正在發生的事情。 glBufferDataARB與glBufferData等。我認爲glew將基於你的硬件支持的功能,除非你在glewInit之前指定gl版本(使用glfwOpenWindowHint) – Grimmy

回答

0

我已經找到了解決問題的辦法。看起來,聲明和使用一個對象的方式並不按我想要的方式工作。我宣佈的對象爲: CObj Obj; 並調用這樣的繪製: Obj.Draw(); 當我切換到聲明它爲一個指針: CObj * Obj; 並且像這樣初始化它: Obj = new CObj(); 然後使用: Obj-> Draw(); 開始工作,因爲我認爲它應該。我不確定爲什麼會出現這種情況,如果有人能夠爲我解決這個問題,我將不勝感激。

+1

你的對象在你輸入main之前被創建,因爲它是一個全局的(至少根據gdb跟蹤)。所以你的Glew初始化還沒有發生。 – Bahbar