1

假设我有一个纹理位于视频内存中,并且隐藏在这个纹理中的某个地方可能是一个或多个具有特定颜色的像素。在 C++ 中,我想在这个 gltexture 上调用一个函数来检查这个颜色的存在,然后简单地返回 true 或 false。最快的方法是什么?

4

1 回答 1

4

我想最好的性能/简单性比率是在 CPU 上保留一份副本并测试每个纹素,可选地使用 SSE。

您也可以在 OpenGL 中执行此操作:

  • 创建与纹理大小相同的渲染目标
  • 在其中对您的纹理进行全屏渲染 - 也就是说,每个纹素将匹配渲染目标的一个片段。禁用任何精美的纹理采样
  • 渲染时,使用着色器丢弃除具有所需颜色的纹素之外的任何纹素
  • 使用遮挡查询计算渲染片段的数量。

我不确定它的性能,但它可能会以最快的速度到达 GPU 端。请注意,虽然速度很快,但此方法有滞后:通常只能在 1 或 2 帧后获得遮挡查询的结果(不过,您也可以忙着等待)。

于 2012-07-26T08:11:57.347 回答