确定屏幕覆盖面积

时间:2018-07-06 18:30:50

标签: c++ shader directx-9

我们有一个应用程序,允许用户使用附着在鼠标上的“画笔”擦除顶层图像。刷子可以是任何类型的形状,例如圆形,星形,W形或任何随机的奇异形状。

当前在C ++中使用DirectX9和着色器(3.0)实现。这是旧版系统,无法使用DirectX的更高版本。单通道不透明度贴图会累积笔触。然后将不透明度贴图用作顶部和底部图像之间的alpha层。

问题是当显示一定百分比的图像时,需要自动擦除图像的其余部分。例如,如果用户已经显示了底层的60%,则该应用程序将自动清除不透明度贴图的其余部分以显示所有内容。 问题是试图弄清楚已擦除了多少不透明度贴图,而没有锁定表面并计数像素,因为这真的很慢。

1 个答案:

答案 0 :(得分:1)

您可以尝试以下方法:

  1. 创建一个1x帧缓冲区
  2. 通过获取一列像素的所有不透明度值的总和并将其写入帧缓冲区中的索引,来创建渲染到该帧缓冲区的着色器。每次着色器调用都应负责单个像素列。
  3. 锁定帧缓冲区表面并汇总所有这些像素值。这应该比在整个屏幕上都快得多。
  4. 将总和与原始宽度和高度的乘积进行比较。