一、FreeBSD下實(shí)現(xiàn)3D的原理。
其實(shí)這不僅僅是FreeBSD下的原理,也是整個(gè)*nix家族的原理。
3D功能的實(shí)現(xiàn)其實(shí)也是分層的,近似于OSI的分層模型。
(1)、在最上端,是應(yīng)用層,就是應(yīng)用程序提出3D渲染的申請(qǐng)。這個(gè)申請(qǐng)通過一個(gè)函數(shù)調(diào)用,從而調(diào)用下面一層的3D加速的調(diào)用接口。
?。?)、3D加速的函數(shù)接口(API)。它將應(yīng)用層的各個(gè)應(yīng)用轉(zhuǎn)換為系統(tǒng)的調(diào)用,從而可以讓X系統(tǒng)去和硬件打交道。最流行的API包括:DirectX,OpenGL等。在*nix的領(lǐng)域,就不得不提到一個(gè)Windows領(lǐng)域比較陌生的名詞:MESA。最原始的Mesa就是一個(gè)OpenGL的實(shí)現(xiàn),現(xiàn)在的Mesa在許多地方都有所突破。詳情可以參看:
http://www.mesa3d.org/
而這些函數(shù)和X系統(tǒng)的接口,就是GLX。GLX是運(yùn)行在X上的一種協(xié)議,能過它,函數(shù)調(diào)用才能和X系統(tǒng)打交道。
?。?)、DRI。這是實(shí)現(xiàn)3D功能最重要的部分。
DRI是Direct Rendering Infrastructure,可以簡單得把它理解為X和硬件間的接口。但它包含很多獨(dú)立的模塊,負(fù)責(zé)從X到硬件的各個(gè)環(huán)節(jié),包括內(nèi)核。
它最主要的工作就是將Mesa或OpenGL的函數(shù)調(diào)用轉(zhuǎn)換為硬件的指令,從而指揮硬件進(jìn)行渲染等工作。
(4)、DRI驅(qū)動(dòng)程序。這是直接和硬件相關(guān)的程序。它提供對(duì)硬件的支持。
二、實(shí)現(xiàn)的條件
由前面的介紹可以知道,最重要的事情就是讓你DRI支持你的顯卡。目前為止,在FreeBSD中,DRI支持以下幾個(gè)系統(tǒng)的顯卡(在/usr/src/sys/i386/conf/NOTES中有介紹):
device drm # DRM core module required by DRM drivers
device i915drm # Intel i830 through i915
device mach64drm # ATI Rage Pro, Rage Mobility P/M, Rage XL
device mgadrm # AGP Matrox G200, G400, G450, G550
device r128drm # ATI Rage 128
device radeondrm # ATI Radeon
device savagedrm # S3 Savage3D, Savage4
device sisdrm # SiS 300/305, 540, 630
device tdfxdrm # 3dfx Voodoo 3/4/5 and Banshee
如果你的顯卡沒在上面列出,那么你就要做好打不開3D的準(zhǔn)備!
如果你的顯卡是nVidia的,那么你不要悲傷,接著往下看,你會(huì)發(fā)現(xiàn)你選擇nVidia是沒錯(cuò)的!
如果你的顯卡在上面列出了,那么你也不要高興得太早,因?yàn)檫@些當(dāng)中都有例外,就比如說我的筆記本顯卡:ATI IGP 340M,就是很難實(shí)現(xiàn)3D的一款。
測(cè)試你的顯卡是不是能實(shí)現(xiàn)3D功能,可以采取以下辦法:
(1):dmesg | grep agp,如果出現(xiàn)
引用: agp0: VIA 82C691 (Apollo Pro) host to PCI bridge> mem 0xe0000000-0xe3ffffff at device 0.0 on pci0
的字樣,那么你的顯卡就有可能實(shí)現(xiàn)3D功能。如果什么也沒有的話,那么恭喜你,你再也不用為3D功能而費(fèi)心了,你應(yīng)該毫不猶豫地關(guān)上這篇文章,并且在你得到新的顯卡前也不用再打開。
?。?):kldload drm,如果沒報(bào)錯(cuò)的話,那么你的顯卡基本上就可以實(shí)現(xiàn)3D功能了。
如果很遺憾地報(bào)錯(cuò)了,那么你成功的機(jī)率就減小了一半,或者說希望不很大。
?。?):前兩關(guān)都過了,就可以實(shí)驗(yàn)了。
三、3D功能的實(shí)現(xiàn)。
1、普通顯卡產(chǎn):
?。?):安裝好Xorg和KDE(Gnom也可以)。
?。?):Xorg -configure。這樣在我的home里有一個(gè)xorg.conf.new的文件,把這復(fù)制到/etc/X11/xorg.conf。
(3):startx。這時(shí)候會(huì)出現(xiàn)三個(gè)窗口和一個(gè)時(shí)鐘。有的人可能覺得是什么地方出錯(cuò)了,其實(shí)這是對(duì)的,因?yàn)檫@個(gè)時(shí)候,你還沒有進(jìn)入KDE。
(4):退出X。在最左邊的窗口中輸入:exit。或者按ctrl+Alt+BackSpace。
(5):cat /var/log/Xorg.0.log | grep " Direct Rendering enabled",如果出現(xiàn)下面的字樣,引用:(II) RADEON(0): Direct Rendering enabled
那么你的3D就啟用的。
如果沒有,那么你要仔細(xì)讀/var/log/Xorg.0.log。它會(huì)在某一行告訴你沒啟用的原因的。
2、nVidia的顯卡:
如果你用的是nVidia的顯卡,那就到http://www.nvidia.com/object/freebsd_1.0-8756.html去下載最新的FreeBSD的官方驅(qū)動(dòng),下載后直接安裝。
安裝完成后,用kldstat 查看,會(huì)多了linux的模塊。nVidia的說明書上說這是為了兼容而設(shè)的。FreeBSD的驅(qū)動(dòng)是一個(gè)純FreeBSD的驅(qū)動(dòng),不是linux兼容的??梢詫⑺サ簟#?boot/load.conf)。
安裝完成再啟動(dòng)X,這時(shí)候就會(huì)在KDE之前出現(xiàn)一個(gè)nvidia的圖標(biāo),很快就閃過去。(但本人現(xiàn)在已經(jīng)沒有測(cè)試環(huán)境,要不也可以用相機(jī)拍下來。)只要出現(xiàn)這個(gè)圖標(biāo)。那就說明你已經(jīng)安裝成功了。
四、3D功能的確認(rèn)
也就是說,怎么樣才能確定是3D加速啟用?
?。?)最正式的是:打開一個(gè)終端,運(yùn)行:glxinfo。在第二行或第三行,如果出現(xiàn)”Direct Rendering: YES“字樣,那就說明已經(jīng)啟用3D加速了。
(2)經(jīng)實(shí)踐,最好用的一個(gè)就是運(yùn)行屏幕保護(hù)程序,選中帶GL的那幾個(gè),然后測(cè)試,如果不卡,那么就是已經(jīng)啟用了。最明顯的就是:幻想。
如果能平滑地顯示,那么就已經(jīng)啟用了。
五、可能會(huì)出現(xiàn)的問題
(1)你的顯卡關(guān)列表中,但是還是加載不上。
解決辦法:用Google或baidu去搜吧。
?。?)用共享內(nèi)存的顯卡,結(jié)果老出問題。
解決辦法:如果能在BIOS中調(diào)節(jié)共享內(nèi)存的大小,那么就設(shè)成>16M。如果不能調(diào)節(jié),就是/etc/X11/xorg.conf中,把”Ramsize"的值設(shè)置成>4096。
?。?)IBM r40e系統(tǒng)的筆記本顯卡不能用,老提示“不支持AGP”。
解決辦法:升級(jí)到6.1-Release。這可是6.1-Release的一個(gè)大改進(jìn),把我的筆記本顯卡問題給解決了。(感謝FreeBSD的開發(fā)團(tuán)隊(duì)?。?/p>
?。?)我的顯卡應(yīng)該沒問題,但我還是不能啟用3D加速。
解決辦法:這個(gè)問題不好回答。有很多顯卡不支持24或32位的模式,在/etc/X11/xorg.conf里面設(shè)置成16位試試。有很多人都卡在這個(gè)地方。
?。?)我想啟用雙顯模式,應(yīng)該怎么辦?
解決辦法:去man吧。
?。?)啟用3D加速后有什么好處?
答:首先,你可以玩quake;其次,你的所有和圖形相關(guān)的軟件都明顯提速;第三,你可以看一個(gè)絢麗的屏保;第四,由于很多工作都讓顯卡干了,可以明顯延長你的CPU的壽命!最后,還有你自己的理由。