显存与纹理内存详解

来源:互联网 发布:sql if else 循环 编辑:程序博客网 时间:2024/04/19 22:18

                            根据桌面>右键属性>设置>高级>适配器,可知当前电脑的显卡名,显卡内存(也叫显存)。显存 为什么重要? 

                           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








原创粉丝点击