游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2985|回复: 1

【请教】关于D3DPOOL_DEFAULT与 D3DPOOL_MANAGED

[复制链接]

3

主题

7

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2014-4-3 16:40:38 | 显示全部楼层 |阅读模式
在D3D中创建一个动态纹理用于渲染到纹理,必须要采用D3DPOOL_DEFAULT类型,但是这个类型的纹理占用了显存资源,尤其是对于低端集成显卡,无法创建太多这种类型的纹理。

因此我希望创建后,在渲染内容已经渲染到此纹理后,将这个纹理存成D3DPOOL_MANAGED类型的纹理,因为这种纹理可以待在内存里,只要内存够大就行。

因此我想问问高手,怎么将D3DPOOL_DEFAULT类型的纹理转成D3DPOOL_MANAGED类型,或者怎么样拷贝给D3DPOOL_MANAGED类型的纹理也好。我只知道可以用GetRenderTargetData将其拷贝到D3DPOOL_SYSTEMMEM类型的纹理,但是不能用这个函数拷贝到D3DPOOL_MANAGED.

5

主题

26

帖子

57

积分

注册会员

Rank: 2

积分
57
发表于 2015-4-30 09:51:14 | 显示全部楼层
第一D3DPOOL_MANAGED的纹理也是会消费显存的。D3DPOOL_MANAGED是显存内存各有一份。所以说D3DPOOL_MANAGED是最消费资源的。
你要的方法可以这么实现:
(1)从D3DPOOL_DEFAULT到D3DPOOL_SYSTEMMEM,(2)Lock D3DPOOL_SYSTEMMEM Lock D3DPOOL_MANAGED,(3)赋值
这个方法写低效。
更好的方法
将D3DPOOL_DEFAULT与D3DPOOL_SYSTEMMEM通信,绘制D3DPOOL_DEFAULT后在copy到D3DPOOL_SYSTEMMEM里.使用的时候在从D3DPOOL_SYSTEMMEM copy到D3DPOOL_DEFAULT。当D3D9DeviceLost的时候也可以从D3DPOOL_SYSTEMMEM copy到D3DPOOL_DEFAULT。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-25 20:40

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表