Shader Learn

00 序章:GPU 如何绘制画面

C 的两层循环,GPU 一次做完

同一个 shade() 函数:CPU 一格一格算,GPU 为每个格子同时调用一次。

UV0.50, 0.50
424
4120
讲解

带下划线的数字可以左右拖动

for (int y = 0; y < ; y++)  for (int x = 0; x < ; x++)    image[y][x] = shade(x, y);// 第 i 次调用
i =0/ 144

void main() {  // 不写循环:GPU 为每个像素  // 各调用一次 main  gl_FragColor = shade(vUv);}
同时调用144次
当前格子(6, 6) → RGB (0.54, 0.54, 0.25)
关键差别main 只知道自己的位置,看不到邻居算出的结果

真实画布有几十万到几百万个像素;GPU 有成千上万个小核心同时执行。

JS 这一侧gl.uniform1f(uTime, 0.00)

C 里你写两层 for 循环;GPU 上你只写循环体,GPU 同时为每个像素调用它。

试一试

  • 切到「CPU 逐个」,看一格一格地算
  • 切到「GPU 同时」,所有格子一起出现
  • 移动指针,读出某一格的输入和输出