畫面會閃爍
是因為你在一次畫出時
做了不只一次的畫面刷新動作 (glutSwapBuffers)
你的initView
最後面有個glutSwapBuffers
而你的check_data
一開始先呼叫了initView
就已經更新了一次畫面
後面畫了東西之後
又呼叫一次glutSwapBuffers
所以畫面會閃就是這個原因
我的建議是這樣的
把glutSwapBuffers從initView抽出
移動到display的後方
但是整個程式的運作邏輯需要改善
現在這樣設計簡直就像麵線團一樣糾纏
你一方面用glutTimeFunc定時重畫
但是check data裡面又呼叫glutPostRedisplay
這是讓display函數在下次的mainloop會被呼叫
你這樣子非常難確定到底是mainloop呼叫display在重畫
還是glutTimeFunc的呼叫造成重畫
何不這樣設計?
把畫東西的邏輯都只放在display中
然後就只有一個地方有swap buffer
display裡面根據flag決定什麼要畫、什麼略過不畫
至於要畫什麼功能可以抽出成為易懂的函數
讓display負責呼叫畫出與管理buffer的控制
glutPostRedisplay就放在display底端
讓電腦能畫多快就多快
display裡面自己抓兩次畫出的時間差來決定更新量
不需要用到glutTimerFunc
這樣畫出的動作就只有一個迴圈負責在做
不需要弄兩個迴圈平行跑來製造混亂