Godot Shader 语法与 C/C++ 有相似之处,但也有许多独特之处,主要注意以下几点:


类型和变量声明

  • Godot Shader 主要使用 GLSL 风格的类型,如 floatvec2vec3vec4,没有 C++ 的指针和引用。
  • 变量声明不需要分号结尾的花括号块。

入口函数

  • 没有 main(),而是用 vertex()fragment()light() 等函数作为入口点。

uniform 变量

  • uniform 声明外部传入的变量,类似 C++ 的全局变量,但由引擎或脚本传值。

内置变量和常量

  • 有许多内置变量(如 ALBEDONORMALSCREEN_UV),直接赋值即可影响渲染。
  • 没有 C++ 的头文件和宏定义,但有 #if 条件编译。

没有指针和动态内存

  • 不支持指针、引用、new/delete 等操作。

函数声明和调用

  • 支持自定义函数,语法类似 C,但不支持函数重载。

数组和循环

  • 支持数组和 for 循环,但数组长度通常要固定,且不支持 STL 容器。

向量和矩阵运算

  • 广泛使用向量和矩阵类型,支持直接的数学运算。

渲染模式和语义

  • shader_typerender_mode 指定着色器类型和渲染模式。

调试和错误处理

  • 没有断点和异常,调试主要靠输出颜色或数值到屏幕。