Godot Shader 语法与 C/C++ 有相似之处,但也有许多独特之处,主要注意以下几点:
类型和变量声明
- Godot Shader 主要使用 GLSL 风格的类型,如
float、vec2、vec3、vec4,没有 C++ 的指针和引用。 - 变量声明不需要分号结尾的花括号块。
入口函数
- 没有
main(),而是用vertex()、fragment()、light()等函数作为入口点。
uniform 变量
- 用
uniform声明外部传入的变量,类似 C++ 的全局变量,但由引擎或脚本传值。
内置变量和常量
- 有许多内置变量(如
ALBEDO、NORMAL、SCREEN_UV),直接赋值即可影响渲染。 - 没有 C++ 的头文件和宏定义,但有
#if条件编译。
没有指针和动态内存
- 不支持指针、引用、new/delete 等操作。
函数声明和调用
- 支持自定义函数,语法类似 C,但不支持函数重载。
数组和循环
- 支持数组和 for 循环,但数组长度通常要固定,且不支持 STL 容器。
向量和矩阵运算
- 广泛使用向量和矩阵类型,支持直接的数学运算。
渲染模式和语义
- 用
shader_type和render_mode指定着色器类型和渲染模式。
调试和错误处理
- 没有断点和异常,调试主要靠输出颜色或数值到屏幕。