看板 C_and_CPP 關於我們 聯絡資訊
畫面會閃爍 是因為你在一次畫出時 做了不只一次的畫面刷新動作 (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 這樣畫出的動作就只有一個迴圈負責在做 不需要弄兩個迴圈平行跑來製造混亂 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.210.62 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1403854098.A.84D.html
cklonger:非常感謝 06/27 17:50