# 内置函数(Built-in Functions)

r21u12 的 CSS 编译环境会在作者代码之前注入 CSSIntrinsics.dragonbuiltin。本页列出的辅助函数无需由作者执行 include,主要用于查询引擎编码的游戏状态,或解码保留内置 Uniform中的枚举与位域。

# 使用范围

这些辅助函数在内部读取 MaterialID(vec4)。作者无需为调用这些函数另行声明 MaterialID。其编码内容取决于当前根类型:

  • MaterialID.x 保存材质、层或类型信息;
  • MaterialID.y 保存水下、着火、冰冻、附魔和通电等状态位。

函数仅在表格注明的根类型上具有规格所述含义。开发者不应在其他根类型上依赖这些函数的返回值。

# 游戏状态

以下函数读取 MaterialID.y 中的状态位。只有当前根类型及其背后材质写入了相应状态位时,返回值才具有对应含义。

函数签名 返回类型 说明
isUnderwater() bool 表面是否处于水下
isOnFire() bool 是否着火
isFrozen() bool 是否冰冻
isEnchanted() bool 是否附魔
isEnchantedOrCharged() bool 检查与 isEnchanted() 相同的状态位(当前命名同时包含 Charged)
isPowered() bool 是否通电或充能

# 资源类型

类型查询函数返回资源标识符的哈希。开发者判断具体类型时,应将返回值与 str_hash("<资源标识符>") 的结果比较,不应在代码中依赖哈希数值本身。

函数签名 返回类型 适用目标 说明
getActorType() int Actor 当前实体类型哈希
getItemType() int ItemInHand 当前手持物品类型哈希
getParticleType() int Particle 当前粒子类型哈希
str_hash(string) int 编译期 将资源标识符字面量转换为可比较哈希

传给 str_hash 的资源标识符必须与目标资源的实际标识符一致。

# 子表面

函数签名 返回类型 适用目标 说明
isSky() bool Sky / EndSky 是否为主世界或下界天空
isEndSky() bool Sky / EndSky 是否为末地星空
isMoon() bool SunMoon 是否为月亮
isSun() bool SunMoon 是否为太阳
isRain() bool Weather 当前天气表面是否为雨
isSnow() bool Weather 当前天气表面是否为雪

# 地形层

以下函数均返回 bool,只适用于 Terrain 目标。

函数 地形层
isTerrainOpaque() 不透明层
isTerrainOpaqueSeasons() 带季节着色的不透明层
isTerrainAlpha() Alpha 测试层
isTerrainAlphaSingleSide() 单面 Alpha 测试层
isTerrainAlphaSeasons() 带季节着色的 Alpha 测试层
isTerrainBlend() 半透明混合层
isTerrainDoubleSide() 双面渲染层
isTerrainBlendFar() 远景半透明混合层
isTerrainFar() 远景层
isTerrainFarSeasons() 带季节着色的远景层
isTerrainFarSeasonsAlpha() 带季节着色的远景透明层
isTerrainDeferredWater() 延迟水面层
isTerrainRaytracedWater() 光线追踪水面层
isTerrainLight() 光照层
isTerrainLightSource() 光源层
isTerrainBarrier() 屏障方块层
isTerrainStructureVoid() 结构空位层
isTerrainEndPortal() 末地传送门层

上述函数只区分 Terrain 的渲染层,不提供具体方块类型。r21u12 的内置函数列表中没有 getBlockType()。

# 维度

参数应传入 int(MinecraftDimensionID)。

函数签名 返回类型 说明
isDimensionOverworld(int) bool 是否为主世界
isDimensionNether(int) bool 是否为下界
isDimensionTheEnd(int) bool 是否为末地

# 天气

参数应传入 int(MinecraftWeatherID)。

函数签名 返回类型 说明
weatherHasRain(int) bool 是否包含雨
weatherHasSnow(int) bool 是否包含雪
weatherHasPlankton(int) bool 是否包含浮游生物
weatherHasRedSpores(int) bool 是否包含红色孢子
weatherHasBlueSpores(int) bool 是否包含蓝色孢子
weatherHasAsh(int) bool 是否包含灰烬
weatherHasWwhiteAsh(int) bool 是否包含白色灰烬

r21u12 中的函数标识符是 weatherHasWwhiteAsh(包含两个连续的 w)。调用时必须使用该标识符的原始拼写。

# 月相

参数应传入 int(MinecraftMoonPhase)。

函数签名 返回类型 说明
isFullMoon(int) bool 满月
isWaningGibbousMoon(int) bool 亏凸月
isFirstQuarterMoon(int) bool 上弦月
isWarningCresentMoon(int) bool 残月
isNewMoon(int) bool 新月
isWaxingCresentMoon(int) bool 娥眉月
isLastQuarterMoon(int) bool 下弦月
isWaxingGibbousMoon(int) bool 盈凸月

r21u12 中的函数标识符是 isWarningCresentMoon 和 isWaxingCresentMoon。调用时必须使用上述原始拼写。

# 标准 GLSL 函数

CSS 代码还可以直接使用标准 GLSL 函数,例如 mix、clamp、dot、normalize、texture、sin 和 cos。这些函数属于 GLSL 语言能力,不属于 ShaderSDK 专有 API,因此本页不重复列出完整语言参考。

# 兼容性

这些 CSS 专有辅助函数描述的是 r21u12 当前实现。用于解码 Upgradeable: No 保留内置 Uniform 的辅助函数不提供跨版本兼容保证。开发者升级项目版本时,如果项目调用了这些函数,应对照目标版本的规格和内置函数定义确认函数名称、参数、返回值与语义,并在必要时修改调用代码。