经纬志
首页 / luma.gl / API 文档

DeviceFeatures

先看结论

设备能力的集合式查询对象:判断某项特性是否存在,或遍历当前全部可用特性。

最后验证 2026-11-03 · luma.gl 9.4 · 更新 2026-10-29 · 引用本文
device.features → DeviceFeatures

由设备创建时确定,运行期不变。

方法

方法返回说明
has(feature)boolean指定特性是否可用
[Symbol.iterator]()迭代器遍历当前全部可用特性

特性名来自 DeviceFeature 类型,涵盖纹理压缩、浮点渲染、 多画布等后端能力。具体名称以所用版本的声明文件为准, 不要在代码里凭记忆拼字符串。

按能力分支

function requireFeatures(device, required) {
  const missing = required.filter(function (feature) {
    return !device.features.has(feature);
  });

  if (missing.length) {
    console.warn('缺少设备特性', missing);
    return false;
  }

  return true;
}

/* 需要的特性名从配置或常量表里读,不在这里硬编码 */
const ok = requireFeatures(device, config.requiredFeatures);

分支的目的不是拿到某个固定格式,而是避免在不支持的设备上创建失败。 特性名必须与 DeviceFeature 类型里的字面量一致, 拼错时 has 只会返回 false,不会提示拼写错误。

列出全部特性

const list = [];

for (const feature of device.features) {
  list.push(feature);
}

console.log(list.length, list);

排查「为什么这台机器上纹理是黑的」时,先把完整列表打出来, 对照代码里依赖的特性逐项确认,比逐条猜要快。

能力与上限的分工

对象回答的问题
device.features某项功能是否可用,布尔判断
device.limits尺寸、数量、绑定槽位的上限数值
device.info显卡型号、版本、着色语言等描述信息

有特性不等于能直接用:压缩纹理还需要检查具体格式是否支持, 用 device.isTextureFormatSupported 再确认一次。

WebGL 与 WebGPU 的差异

同一项能力在两种后端上的判定方式不同:WebGPU 看设备请求到的特性, WebGL 看扩展是否存在。应用层用同一套 has 调用, 但要知道某些特性只在其中一种后端上为真。

不要在模块顶层做能力判断。 设备是异步创建的,模块加载时还没有实例。 能力分支放在设备创建后的初始化函数里,或延迟到首次使用时。

引用本文

经纬志(2026)。《DeviceFeatures》。https://www.jingweizhi.com/lumagl/api/device-features.html(访问日期 2026-11-03)。