自动纹理管理

来源:互联网 发布:linux shell 写入文件 编辑:程序博客网 时间:2024/05/29 03:03

d3d中的自动纹理管理

 

   纹理管理是在给定的时间确定哪些纹理需要渲染并保证那些纹理被加载到显存的过程。纹理管理算法可能非常复杂,但是它基本上都会包含下面三个主要步骤:

1. 跟踪可以获取到的显存的总量;

2.计算哪些纹理是渲染所必须的,哪些不是;

3.确定哪些显存中的纹理资源需要被另外的纹理图片替换;

 

    d3d实现了系统支持的纹理管理,保证了纹理加载的性能很快。d3d管理的纹理资源被叫做托管纹理。纹理管理通过给每个纹理加上时间戳即标记该纹理上次使用的时间,来管理纹理。它使用的是最近最少使用的算法来确定哪个纹理应该被删除。如果两个纹理的时间戳相同,则比较两个纹理的优先级。

 

    在创建纹理的时候使用D3DPOOL_MANAGEED标记,就可以创建托管纹理。不允许在创建托管纹理的时候进行指定纹理存储的位置,比如使用D3DPOOL_DEAFAULT和D3DPOOL_SYSTEMMEM标记。在创建完成后,可以调用SetTexture接口来制定纹理。

 

    可以通过IDirect3DResource9::SetPriority接口来为纹理表面来设置优先级。

 

     d3d将自动地把托管纹理上传到显存中来显示。对应用程序来说,托管纹理存储在什么位置是透明的,也就是不需要知道的信息。如果你的 应用程序需要的纹理内存大于显存则,d3d将会自动把老纹理删除。如果使用一个已经被删除的纹理,则系统将会再次把原始的系统内存中的纹理加载到显存中。虽然重新加载纹理是必须的,但是它会降低应用程序的性能。

 

     可以动态的修改系统内存中的纹理,通过调用updating 或 locking 资源。当系统在一个update完成之后或当表面被解锁时检测到一个dirtysurface,纹理管理会自动的更新显存内容。当然这一个过程也会降低性能。

 

     当进入一个新的游戏画面时,可能需要更新所有的托管纹理,可以通过调用IDirect3DDevice9::EvictManagedResources接口来实现。

 

原创粉丝点击