天天看點

顯存與紋理記憶體詳解 .

            根據桌面>右鍵屬性>設定>進階>擴充卡,可知目前電腦的顯示卡名,顯示卡記憶體(也叫顯存)。顯存 為什麼重要? 

                           1, 系統 記憶體隻是暫時存放資料的地方,不能處理資料;要想顯示資料,還得把資料傳輸到顯示卡記憶體裡!

                          2, 每個3D 顯示卡實際隻有有限的記憶體(常見的有2、16、32、64、128MB),而這些記憶體要存儲前端和後端緩沖區,Z 緩沖區,還有所有的令人驚奇的紋理。 好吧,讓我們看一些數字…

                 比如你想讓你的遊戲看起來最好,是以你想要讓它以32位螢幕, 1280x1024分辨率和32位 Z- 緩沖跑起來。 好,螢幕上每個像素4個位元組,外加每個像素4位元組的Z-緩沖,因為都是每像素32位。我們有1280x1024 個像素 – 也就是 1,310,720個像素。基于前端緩沖區和Z-緩沖區的位元組數,這個數字乘以8,是 10,485,760位元組。包括一個後端緩沖區,這樣是 1280x1024x12, 也就是 15,728,640 位元組, 或 15MB。 在一個 16MB 顯存的顯示卡上,就隻給我們剩下1MB 來存儲所有的紋理。 現在如果最初的紋理是真32 位或 4位元組寬,那麼我們每幀能在顯示卡上存儲 1MB/4位元組每像素 = 262,144個像素。這大約是4 個 256x256 的紋理頁面。這就是顯存重要的原因,其實由此也可以由此推算有限的紋理記憶體到底是多少(也隻是大概)。

                确切的說,如何使用顯存是顯示卡的事情,對于VC程式設計來說,我們不必去關心。但是程式裡需要使用紋理的話,顯示卡記憶體就需要我們關心了。

              什麼是紋理記憶體?我覺得應該是指用于存放紋理的顯存。在渲染過程中,顯存可能被配置設定為很多不同的用途,比如作為頂點緩存、索引緩存、紋理緩存、模闆緩存..那麼紋理記憶體,應該就是指紋理緩存。 而将顯存中的那一部分作為哪個用途,那是顯存自動配置設定的.   

               好消息是 if you're loading a lot of different textures, especially if they're large, as long as you don't have all of your textures onscreen at once: both OpenGL and DirectX are supposed to automatically evict textures from graphics memory as needed. 就是說,當有許多個紋理對象的時候,會自動的把目前需要顯示的紋理對象放到顯示卡記憶體裡,作為紋理記憶體的。其他的會被驅逐出顯示卡記憶體。

          但是,壞消息是if you're loading a lot of different textures, especially if they're large, you  have all of your textures onscreen at once,some graphics drivers have major bugs that manifest as you start to approach the limit of your graphics memory, causing strange rendering artifacts or even crashes.。很明顯,一次性需要顯示的紋理所需要的紋理記憶體又不能從顯存裡擷取到(因為現在顯存已經用完了),是以會說顯存不足。

           總之,顯存是有限的,那麼其中的紋理記憶體也是有限的,特别是供你編寫的應用程式使用的紋理記憶體是有限的,For these reasons, it may be useful to limit the amount of graphics memory your application uses。具體方法有:

               1) 選擇顯存大一點的顯示卡;

              2)降低螢幕的分辨率和顔色品質,不使用Z緩沖。——這一條最不現實和可行,因為這樣的話,圖像品質可能就差得多了。

              3)在使用紋理的程式代碼裡,可以使用紋理調色闆、紋理壓縮等技術(也需要顯示卡同步支援才行)可以大大減少所需的紋理記憶體(to 1/4 or 1/8 of the original)!

       參考文章:

    1.http://www.panda3d.org/manual/index.php/Texture_Management

    2. http://dev.gameres.com/Program/Abstract/GEanatomy3.htm

           PS:     “ In some integrated graphics cards, the "graphics memory" is actually your system memory”。 對于這句話的了解,我認為不能認為內建顯示卡的顯存就可以無限擴充,因為本質上,是集顯顯示卡自己提供一部分,然後占用系統記憶體一部分,合二為所謂的顯存。占用系統記憶體一部分的這部分顯存的大小必須是有限的!

   關于獨立顯示卡與集顯的差別參見:http://wenda.tianya.cn/wenda/thread?tid=698452acc00cd93c

繼續閱讀