圖形開發(fā)確是一件麻煩事,把效果弄好就不易,還得忍受不同卡不同驅(qū)動帶來的差異化問題,比如這幾天遇到的與驅(qū)動有關(guān)的問題就讓我吐血,素聞N卡驅(qū)動比A卡驅(qū)動穩(wěn)定,原先一直半信半疑,因為剛好我家里的機器是A卡,公司的機器是N卡,因此在開發(fā)引擎的過程中對兩者間的差異有了切身的體會.以下記下碰到的這兩個問題,留待日后查詢
問題1:引擎的地形在公司的9600GT上跑一直都有1000fps左右,前些天拿回到家里的4850跑下一看,結(jié)果大跌眼鏡,FPS掉到了100,9600GT和4850應(yīng)該說是同一級別的顯卡,雖說貌似A卡在游戲這一項的性能不如N卡,但也不能給我銼到差10倍吧,于是開debug 版DX調(diào)試看看,發(fā)現(xiàn)SetIndices時不時報參數(shù)索引長度與流大小不一致錯誤,再一跟蹤,原來由于疏忽,主線程某個函數(shù)修改了渲染線程中正在使用的索引緩沖指針,導(dǎo)致SetIndice傳的IndexBuffer和VertexBuffer數(shù)據(jù)對不上,表現(xiàn)到視覺上是遠處的地形會時不時閃爍一下,這個現(xiàn)象在9600GT的機器上也有,不過由于當(dāng)時專注于效率問題還沒空去查,想不到在A卡上竟然會導(dǎo)致FPS大幅降低,呵呵,改正這個BUG后FPS上到了1K,與9600GT差不多
問題2:還是A卡和 N卡的效率差異問題,看來只有效率能挑動我的神經(jīng)了,呵呵。。這次是模型的渲染出了問題,同屏渲染100個骨骼動畫模型 + 地形9600GT有200FPS,4850只有10FPS不到。。開debug版DX調(diào)試沒有發(fā)現(xiàn)任何問題,再用PIX運行幀分析,按F12的一刻直接崩掉,輸出的log也沒發(fā)現(xiàn)有什么問題,崩潰。。總而言之,費了很大功夫,終于發(fā)現(xiàn)原來是因為沒有清空instancing渲染狀態(tài),導(dǎo)致后面的所有模型都多畫了N次,還是疏忽阿,為啥在N卡上沒有問題?
關(guān)于這里面深層次的原因我沒去追究,有明白的朋友一定告訴我,總體上, N卡驅(qū)動所表現(xiàn)出的容錯性的確比A卡驅(qū)動好,但換個角度來看,也許隱藏了錯誤并不是件好事,A卡這樣更加有助于開發(fā)者早期發(fā)現(xiàn)錯誤,避免拖到后面付出更大的代價
posted on 2010-09-22 13:32
清風(fēng) 閱讀(3368)
評論(4) 編輯 收藏 引用 所屬分類:
圖形