我有一个directx9游戏引擎,可以使用以下格式创建其正常的适配器: D3DFMT_X8R8G8B8 我有一个系统,我将一些对象渲染到屏幕外渲染目标,作为光照贴图。然后我使用该光照贴图数据合成回到后面缓冲区,在那里它们充当全屏“遮罩”,让我在黑暗场景中获得火炬或其他光源的效果。 一切都很好。 问题是,我知道我的大屏幕外光照贴图渲染目标是每个16MB,在一个大的res,我只需要8位数据(灰度),所以32位渲染目标内存的75%是浪费。 (我的目标是低规格卡)。 我尝试将渲染目标创建为 D3DFMT_A8 但是directx默默地失败了(如果我添加CheckDeviceFormat()我发现它会发生)并且无论如何都会创建32位。我使用D3DXCreateTexture函数 我的问题是,什么格式最适合创建这些屏幕外缓冲区?
谢谢你的帮助,我不擅长渲染目标相关的东西:)
答案 0 :(得分:1)
D3DFMT_L8是8位亮度。我相信它支持GeForce 3(即带有着色器1.1的第一张消费卡!),所以必须随处可用。我认为颜色读数为L,L,L,1,即rgb =亮度值,alpha = 1。
编辑:此工具可用于查找上限:
答案 1 :(得分:0)
Ontopic:如果您要定位较低规格的卡,则很可能在不支持8位单通道渲染目标的系统上运行。
如果您使用着色器进行渲染和合成,则应该可以将rgba通道用于光照贴图的4个交替像素,打包您的信息。也许你可以告诉我们一些你当前的渲染设置?
Offtopic:很高兴能在StackOverflow上找到你们的工作!