#灰度'的格式;在directX中渲染目标?

#灰度'的格式;在directX中渲染目标?,directx,directx-9,d3dx,Directx,Directx 9,D3dx,我有一个directx9游戏引擎,它使用以下格式创建其普通适配器: D3DFMT_X8R8G8B8 我有一个系统,将一些对象渲染到屏幕外的渲染目标,如光照贴图。然后,我使用光照贴图数据合成回后台缓冲区,在那里它们充当全屏“遮罩”,让我在黑暗场景中获得手电筒或其他光源的效果。 一切都很好。 问题是,我知道我的大屏幕外光照贴图渲染目标每个都是16MB,分辨率很高,而且我实际上只需要它们的8位数据(灰度),因此32位渲染目标内存的75%是一种浪费。(我的目标是低规格卡)。 我尝试将渲染目标创建为 D3

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


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

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

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


离题:很高兴你来到StackOverflow,你的工作的忠实粉丝

D3DFMT_L8是8位亮度。我相信GeForce 3(即第一个使用shader 1.1的消费卡)支持它,因此必须在任何地方都可以使用。我认为颜色被解读为L,L,L,1,即rgb=亮度值,alpha=1

编辑:此工具用于查找封口:


谢谢,事实证明,我可以使用D3DFMT_R5G6B5,而不会损失任何视觉效果,并减少内存使用,所以这总比什么都没有好。基本上,我有一个全屏渲染目标,用于光照贴图以及我的普通(backbuffer)RT。当我渲染明亮的东西时,我将它复制到光照贴图缓冲区。然后在帧的末尾,我在backbuffer的顶部绘制了光照贴图RT,就像一个大的纹理splat,它使所有东西变暗,除了明亮的光源部分。酷。D3DFMT_R5G6B5将在任何地方都可用,因此这是一个安全的赌注。