GPGPU编程快速上手

GPGPU编程快速上手 (https://github.com/zhenghuadai/webcs)

以将图像反色处理为例,在浏览器中练习GPU编程

确保chrome 支持WebGL2.0 Compute

在chrome地址栏输入 chrome://flags/#enable-webgl2-compute-context 点击"Enabled", 按提示重启chrome。

编写kernel

// 0. 函数名glsl_invert, 
//    src 为输入图像(HTMLCanvasElement 或 HTMLImageElement),
//    dst 为输出图像
function glsl_invert(src, dst){
    return `
        // 1. 取得 threadid 
        ivec2 pos = ivec2(thread.xy);
        // 2. 根据 threadid 从输入图像读入像素
       vec4 pixel = src[pos.y][pos.x]; 
       // 3. 将像素反色
       vec4 invert = vec4(1.0 - pixel.x, 1.0 - pixel.y, 1.0 - pixel.z, 1.0);
       // 4. 将反色像素存入dst
       dst[pos.y][pos.x] = invert;     
    `;
}

然后在javascript中执行kernel

//1. 生成一个WebCS实例, canvas将用于显示图像 
let webCS = new WebCS({canvas:$("#canvas2GPU")[0]}); 

//2. 从glsl_invert函数生成shader实例cs_texture2
let cs_texture2 = webCS.createShader(glsl_invert, { local_size:[8, 8, 1], params:{src:'texture', 'dst':'texture'}});

//3. 在GPU上执行cs_texture2
let texSrc = $('#image000')[0];
cs_texture2.setGroups(512/8, 512/8, 1).run(texSrc, null);

//4. 获得dst指向的texture对象 
let tex = cs_texture2.getTexture('dst');

//5. 将tex渲染到默认canvas
webCS.present(tex);

//6. 显示 canvas
$("#display1")[0].appendChild(webCS.canvas);

练习

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值