自动纹理管理

本文介绍了Direct3D(d3d)中的自动纹理管理机制,包括托管纹理的概念、纹理管理的三个主要步骤以及如何通过时间戳和优先级来决定纹理的替换。通过创建托管纹理并设置优先级,d3d能够自动上传和管理纹理,确保渲染性能。当显存不足时,d3d会删除最不常使用的纹理。同时,通过locking和更新资源来改变系统内存中的纹理,但这些操作可能影响性能。EvictManagedResources接口用于在切换场景时更新所有托管纹理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

d3d中的自动纹理管理

 

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

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

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

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

 

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

 

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

 

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

 

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

 

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

 

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值