shader语法请教

大家好,我是傻叉,有一个shader语法知识点想请教大家,希望好人能帮帮我。
下图是cocos中sprite组件使用的shader文件


我的问题是

  1. #pragma builtin(local)这句代码是glsl语法吗?我看了opengl的书,但是没看到glsl中有这样的语法。
  2. #pragma builtin(local)这个语法的教程或者说明文档在哪里可以找到呢?
  3. #pragma builtin(local)中的builtin的作用是什么?括号的作用是什么?是一个函数么?括号中local的作用又是什么?
  4. layout(set = 2, binding = 12) uniform sampler2D cc_spriteTexture;这行代码是在定义uniform参数,这行代码与#pragma builtin(local)这行代码有关系么?
  5. 据我所知layout(set = 2, binding = 12)这个语法是Vulkan中的,Vulkan与opengl的关系是什么呢?为什么cocos中同时出现opengl和Vulkan的语法。

希望大家帮帮我,因为我脑子有点问题,好像进水了。

你不是第一个提问的人


https://blog.csdn.net/u014206745/article/details/126584694

谢谢鸽们,我对layout有了更详细的理解,但是pragma builtin(local)的作用是什么呢?

https://docs.cocos.com/creator/3.8/manual/zh/shader/surface-shader/builtin-surface-shader.html

// 在之前 WebGL 里的内容,我们有提及在访问输入属性的时候,需要调用 gl.getAttribLocation 获取当前顶点属性的位置,然后再激活属性 gl.enableVertexAttribArray
// 这个位置默认是由着色器分配,当然我们也可以自己指定。
// 可以通过 gl 指令 gl.bindAttribLocation 按照指定的位置绑定,然后直接根据位置值激活属性 gl.enableVertexAttribArray
// 或者也可以通过 layout 布局限定符指定,location 就代表属性要设定位置。在两者同时设定的情况下,layout 优先级更高
layout(location = 2) in vec3 position;
// 这里只是简单列举了顶点属性的内存分配,uniform 那些也是可以指定内存分配

// Cocos Creator 内置两大数据内存结构,一个是 CCLocal 一个是 CCGlobal
// #pragma builtin(local) 代表申请 CCLocal 内存
// layout(set = 2, binding = 10) 代表绑定到 CCLocal 内存指定位置,跟 location 类似,只不过这是 GLSL 更高版本的使用方式,比低版本在指定上更加灵活
#pragma builtin(local)
layout(set = 2, binding = 10) uniform sampler2D cc_spriteTexture;

找个ai吧,辅助学习,读这种小case

我只在《暴改一个带纹理贴图的 Shader》这篇文章中找到了一处说明,#pragma builtin(local) 代表申请 CCLocal 内存。我不知道CCLocal内存是个什么东西,不知道也不影响。我想知道的是为什么#pragma builtin(local)这段代码能申请CCLocal内存,预处理命令也得有出处吧,这段预处理命令展开后的代码是什么呢?

因为贫穷的原因,我只能使用微软的copilot,它告诉我pragma是一个预处理命令。
我继续追问它#pragma builtin(local)展开后的代码是什么样子,他告诉我是CCLocalMemory localMemory。
这我就更糊涂了,在shader中申请了一个内存,但是哪句代码在使用这个内存呢?
我继续追问copilot,它跟我说cocos是一个闭源软件,细节信息不对外开放。
现在我想知道的是

  1. 为什么#pragma builtin(local)展开后的代码是CCLocalMemory localMemory,这个预处理命令是在那个文件中定义的呢?
  2. 既然申请了localMemory这个内存,那么shader中的哪句代码使用了这个内存呢?

他这里对layout分析的更进一步,但是也没到问题的终点。
我更想知道#pragma builtin(local)这行代码的意义,而不是layout的用法。
公众号Cocos Shader基础入门遇到的关于layout问题求助 - Creator 3.x - Cocos中文社区
这个问题是太简单了没人关心?还是太难了没人会?还是太无用了弄明白也没什么用呢?

image