【问题标题】:HLSL/GLSL Find range for integerHLSL/GLSL 查找整数范围
【发布时间】:2014-07-15 21:19:34
【问题描述】:

假设我有几百个不同大小的相邻范围 0-100,101-300,301-1000,1001-2000 等。使用 HLSL/GLSL 找到给定整数属于哪个范围的最快方法是什么?

范围将存储在一个常量缓冲区中,我需要从顶点着色器中找到范围。

我目前使用的蛮力方法太慢了。

int index = 0;
int count = Lookup[index].count;
while (integer > count){
    count += Lookup[index++].count;
}
return index;

有人有什么想法吗?

【问题讨论】:

  • 我想到的第一件事:二分查找而不是线性查找怎么样?唯一的条件是您的范围已排序,并且速度会更快。 en.wikipedia.org/wiki/Binary_search_algorithm
  • 这正是我所追求的。谢谢!发表您的评论作为答案,我会接受。
  • 完成,很高兴为您提供帮助 :)

标签: glsl hlsl


【解决方案1】:

我想使用二进制搜索而不是线性搜索。这会将速度从 O(n) 提高到 O(log n)。唯一的条件是您的范围已排序并且速度会更快。

Wikipedia-Entry for binary search

【讨论】:

    猜你喜欢
    • 2017-02-06
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 2021-08-08
    • 2013-09-27
    相关资源
    最近更新 更多