2016-03-01 65 views
-1

我正在解決一些繪圖包裝爲我的DLL計算某些數組。 在這段代碼中,我需要它來繪製,但我不明白,爲什麼當我只綁定一次,它只繪製1點。但當我約束它(因爲我知道,我不應該那樣做是因爲記憶)每個繪畫事件,它正在繪製我的網格,正如我所期望的那樣。C++ opengl繪製只有1點,而不是網格

這裏是bindData的初始狀態。

bool mBindData = true; 

,然後在我的繪製函數:

 GLuint vbo; 
     if(mBindData){ 
      mBindData = false; 
      glGenBuffers(1, &vbo); 

      //getting size of my array of vertexes 
      int size = this->mModel->GetVboSize() * sizeof(float); 


      glBindBuffer(GL_ARRAY_BUFFER, vbo); 
      glBufferData(GL_ARRAY_BUFFER, s2, this->mModel->GetVbo(), GL_STATIC_DRAW); 
      glBindBuffer(GL_ARRAY_BUFFER, vbo); 
      glEnableVertexAttribArray(0); 
      glVertexAttribPointer(
         0,     // attribute 0. No particular reason for 0, but must match the layout in the shader. 
         3,     // size 
         GL_FLOAT,   // type 
         GL_FALSE,   // normalized? 
         0,     // stride 
         (void*)0   // array buffer offset 
         ); 
     } 
     glDrawArrays(GL_POINTS, 0,this->mModel->GetVboSize()); 

如果沒有

if(mBindData){} 

它運作良好。但正如我所說,我相信它不是這樣。

我欣賞每一個建議,您可以給我。

非常感謝。

EDIT1:我的問題是,爲什麼它繪製只有1點,而不是點N×N個網格,當我綁定VBO只有一次。我錯過了什麼?

+0

我不確定你的問題是什麼。你可以說得更詳細點嗎? –

+0

我不能完全肯定,但我的猜測是,那是因爲你生成'glGenBuffers只有一個緩衝區(1,VBO)',在那裏你會想爲N×N點 –

+0

我有float數組,創建一個網格 浮子*陣列= {0.0F,0,0f,0.0F,1.0F,0.0F,0,0f,0.0F,1.0F,0,0f,1.0F,1.0F,0.0F} ,其是2×2的網格。 –

回答

0

我很抱歉有問題。我只是愚蠢的,沒有讀完整個QT組件。我不得不在paintGL()之後調用update()。現在正在工作。