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