欢迎光临散文网 会员登陆 & 注册

godot computer shader 的简单原理

2023-05-31 23:20 作者:damedown  | 我要投稿

emmm,我这辈子用过最麻烦的玩意儿就是opengl。只要有了它,简单的代码,也会变得恶心的要死要死的。当然自己封装就更麻烦了,如果可以不用它,那就最好不用。


如果要在opencl 和 cuda 中要传一头大象。那太简单了。

1、准备一头大象

2、告诉gpu我要给一头大象,有30吨。

3、把大象扔过去。

如果是global,那我想看就看。

如果是device,那就我看不到了,不过但是还可以device to device 复制。

甚至还可以device to local 复制回来。



要在opengl中,想起都恶心。

1、准备一头大象

2、准备一个名片装用来指向保存后的大象的位置

    (常见的 uint VAO,VBO,EBO,FBO,不是我来设计的,而是opengl分配后会自动修改这里面的值,而且这个值在本地基本没用)

3、告诉gpu我要给一头大象,有30吨,并把准备好的名片让opengl填位置。

4、告知这个大象必须放在opengl编号3的仓库,我之后会专门访问。

这个单号还用set绑定一下,才能再使用

到时他的layout(set = 0,binding = 3) 就可以访问params_uniform的数据了,这里只是传入了一个time诶,就是要这样。

如果大家有幸使用过opengl,uniform都比他简单。


当然不要以为这样就是他的极限了

fmt:format,要生成一个格式信息,这个format要保存长宽,数据类型、已经这个数据可以怎么用,可以更新的、可以用来存储的、比特形式传入(copy_from_bity)

    我不知道一般人会不会有疑问,随便一个int 难道不能保存?难道不能更新?这已经到了脱裤子放屁的最高境界了。

    这就是opengl,如果是一般人,我不推荐用这东东,opencl的入门门槛比这个低一大截,可以说opencl没有门槛。

    总结来说:

    _on_GPU_ float* p = new float[30]();

    p.copy_bity_from(base_data_form_CPU);

    数组p就是指向float[30]的首地址,和他的unifrom存储的一个意思。

    里面最重要的应该就是 uniform_type_image,说明这东东是image。(这里的image在godot中叫texture)


参考:https://github.com/nekotogd/Raytracing_Godot4/blob/master/BasicComputeShader/ray_tracer_simple.gd


总结:如果这东西难度为2,麻烦程度10;opencl的难度为3,麻烦程度为1;


godot computer shader 的简单原理的评论 (共 条)

分享到微博请遵守国家法律