2012-03-13 84 views
0

我想通過使用我的鼠標畫線。爲此,我使用了一個緩衝對象。在OpenGL中使用緩衝區繪製東西

我想存儲鼠標單擊位置的位置座標作爲這些行的頂點。這些頂點被存儲在我創建的數組變量中,但這些線不會被繪製。

以下是重要的代碼:

typedef struct { 
float x; 
float y; 
} vec2; 

vec2 hotSpot[1000]; 

熱點是我存儲頂點值可變。緩衝區已經被初始化爲例如:

glBufferData(GL_ARRAY_BUFFER, sizeof(hotSpot), NULL, GL_STATIC_DRAW); 

在小鼠()函數,我存儲在熱點的座標,每當我點擊的值。據我所知,main()函數總是在一個循環中。因此,這是我寫在main()函數:

glBufferData(GL_ARRAY_BUFFER, 0, sizeof(hotSpot), &hotSpot); 

然後在顯示屏()函數,這是我做的:

glClear(GL_COLOR_BUFFER_BIT); 
glDrawArrays(GL_LINES, 0, 2); 
glFlush(); 

我是不是走錯了地方?

+3

文章[一個完整的,最小的程序,演示了這個問題](http://sscce.org/)。 – genpfault 2012-03-13 01:45:32

回答

0

據我所知,main()函數總是在一個循環中。

不,主函數不循環。當然你的程序有一個事件循環,通常被稱爲「主事件循環」,但這不是綁定到「主」功能。

對你來說更好的方法不是重新上傳整個緩衝區,而是使用glBufferSubData`來更新緩衝區上標記下一個鼠標位置的條目。這也可以讓你在你的程序中去掉那個大的靜態緩衝區。您只需創建一個合適大小的緩衝區對象並進行一些簿記(緩衝區的大小,當前存儲的點擊次數)。