(本文未经许可禁止转载)

           

在具体指明算法复杂度前,我们需要搞清楚像素世界的计算流程。以下首先列出像素世界大致的计算流程图。

GLSL渲染模式

GLSL流程图

GLSL渲染模式计算复杂度

常数时间项(CPU时间)

(1),(2),(3),(4),(6),(7),(10),(11),(12),(14),(15),(16),(18)的计算复杂度:

O(1)

图层尺寸依赖项(CPU时间)

(5),(17)的计算复杂度:

O(HW+\sum_{k=1}^n{H_kW_k})
  • H: 图层高度
  • W: 图层宽度
  • H_k: 第k参数层的高度
  • W_k: 第k参数层的宽度

输入代码长度依赖项(CPU时间)

(8),(9)的计算复杂度:

O(S)
  • S: 输入代码长度 注意:这里的(9)指绝大多数情况

未知渲染时间项(GPU时间)

(13)的计算复杂度:

O(\infty)

最快的渲染时间是O(WH)最慢没有上限——如果您愿意,可以写个死循环把PixelsWorld锁住。

准确的来说,(13)的复杂度为:

O(HWK)

K即是您GLSL代码的单次运行的计算时间复杂度。

和其它编程语言一样,像素世界没有断言您的代码是否含有死循环的能力。

shadertoy渲染模式

shadertoy模式的运算时间复杂度和GLSL一模一样。在此不做多的赘述。

Lua渲染模式

Lua流程图

Lua的渲染流程非常单一但Lua十分强大。 大部分我们用Lua是想用它在图层上执行一些功能脚本或者渲染代理。

常数渲染复杂度(CPU时间)

(1),(2),(4),(5)的渲染复杂度:

O(1)

未知渲染时间项(CPU/GPU时间)

(3)的计算复杂度:

O(\infty)

同样,当你什么都不做的时候,是O(1)。 如果您想保持输入像素传到输出像素,是O(WH)。 当然您仍然可以写死循环。也可以运行写了死循环的GLSL、写了死循环的shadertoy、死循环的Lua、写了死循环的js、只输入但不显示控制台的控制台指令。

       

(本文未经许可禁止转载)

   

1 对 “像素世界算法复杂度”的想法;

发表回复