2

我有一个 Directx9 游戏引擎,它使用以下格式创建其普通适配器:D3DFMT_X8R8G8B8 我有一个系统,我将一些对象渲染到屏幕外渲染目标,作为光照贴图。然后,我使用该光照贴图数据合成回后台缓冲区,在那里它们充当全屏“蒙版”,让我在黑暗场景中获得手电筒或其他光源的效果。一切都很好。问题是,我知道我的大屏幕外光照贴图渲染目标每个都是 16MB,分辨率很高,我只需要它们的 8 位数据(灰度),所以 32 位渲染目标内存的 75% 是浪费。(我的目标是低规格卡)。我尝试将渲染目标创建为 D3DFMT_A8 但directx 默默地失败了(如果我添加 CheckDeviceFormat() 我看到它发生了)并且无论如何都会创建 32 位。

谢谢你的帮助,我不擅长渲染目标相关的东西:)

4

2 回答 2

1

D3DFMT_L8 是 8 位亮度。我相信它在 GeForce 3 上得到支持(即第一张带有着色器 1.1 的消费卡!),所以必须随处可用。我认为颜色读作 L, L, L, 1,即 rgb = 亮度值,alpha = 1。

编辑:此工具对于查找大写字母很有用:

http://zp.lo3.wroc.pl/cdragan/wizard.php

于 2011-09-28T23:14:08.947 回答
0

Ontopic:如果您的目标是较低规格的卡,您很可能在根本不支持 8 位单通道渲染目标的系统上运行。

如果您使用着色器进行渲染和合成,应该可以将 rgba 通道用于光照贴图的 4 个交替像素,打包您的信息。也许您可以告诉我们更多关于您当前的渲染设置的信息?

题外话:太棒了,你在 StackOverflow 上,你工作的忠实粉丝!

于 2011-06-28T11:45:06.253 回答