2012-07-26 55 views
1

假設我有一個坐在視頻內存中的紋理,並且隱藏在這個紋理內的某個地方可能有一個或多個具有特定顏色的像素。在C++中,我想調用這個gltexture上的函數來檢查這種顏色的存在,並簡單地返回true或false。什麼是最快方式做到這一點?最快的方式來掃描特定顏色的gtexture?

回答

4

我想最好的性能/簡單比例是保留一個副本在CPU上,並測試每個texel,optionnaly與SSE。

你也可以做到這一點在OpenGL:

  • 創建一個同樣大小的渲染目標不是你的紋理
  • 做全屏渲染它的質感 - 也就是每個紋理元素將匹配一個渲染目標的片段。禁用任何花式紋理採樣
  • 渲染時,用其丟棄任何紋理像素以外的一個與所想要的顏色
  • 着色器計數渲染片段的數量與遮擋查詢。

我不太確定這一點的表現,但它可能會以最快的速度在GPU端得到。請注意,雖然速度很快,但此方法存在滯後性:通常,您只能在1或2幀後才能獲得遮擋查詢的結果(儘管如此,您也可以忙於等待)。

+0

+1比我的atomic_counter或計算想法更好。 – 2012-07-26 08:14:38

+0

還不錯。我不知道遮擋查詢。我會試試這個! – SteveDeFacto 2012-07-26 08:16:23

+0

@ChristianRau我不知道獲取atomic_counter值所需的時間。我想這與OQ是一樣的;你有關於這個的任何數字嗎? – Calvin1602 2012-07-26 08:23:57