【问题标题】:What format for #greyscale' render targets in directX?DirectX 中#greyscale 渲染目标的格式是什么?
【发布时间】:2011-06-28 09:35:08
【问题描述】:

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

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

【问题讨论】:

    标签: directx directx-9 d3dx


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      Offtopic:很高兴看到您来到 StackOverflow,您的工作的忠实粉丝!

      【讨论】:

      • 谢谢,事实证明我可以使用 D3DFMT_R5G6B5 而不损失任何视觉效果,并且减少内存使用量,所以总比没有好。基本上我有一个用于光照贴图的全屏渲染目标以及我的正常(后缓冲)RT。当我渲染明亮的东西时,我将它复制到光照贴图缓冲区。然后在帧的最后,我在 backbuffer 的顶部绘制光照贴图 RT,就像一个大的纹理 splat,它使除了明亮的光源位之外的所有东西都变暗。
      • 酷。 D3DFMT_R5G6B5 将在无处不在可用,所以这是一个安全的选择。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-13
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-29
      相关资源
      最近更新 更多