browser - 使用在浏览器中运行的 webgl 创建 GPU 密集型 Web 应用程序是否现实?
问题描述
我一直在考虑使用在浏览器中运行的 webgl 创建一个时髦的游戏,但我注意到尽管拥有 3gb 的 vram 的 NVIDIA GeForce GTX 1060,但我一次最多只能使用 512mb 的 vram . 我相信这是因为浏览器使用的是我的集成 gpu 而不是我的专用 gpu。我读过几个人有同样的问题并通过重新配置来纠正它,但我不希望我的 web 应用程序的用户也有类似的问题并且需要更多的 vram 来担心这个问题运行应用程序。
是否有一个简单的“修复”允许浏览器使用专用 GPU 而无需进行任何技术重新配置?这只是在浏览器中使用 gpu 的不幸问题吗?还是我不了解有关使用 gpu 的基本知识?
解决方案
在 WebGL 中,您可以要求浏览器使用离散 gpu,方法powerPreference: 'high-performance'
是getContext
传入
const gl = someCanvas.getContext('webgl', {powerPreference: 'high-performance'});
如果存在,您可以使用WEBGL_debug_renderer_info
扩展程序检查它是否有效
const canvas = document.createElement('canvas');
const gl = canvas.getContext('webgl', {powerPreference: 'high-performance'});
const ext = gl.getExtension('WEBGL_debug_renderer_info');
if (ext) {
console.log(gl.getParameter(ext.UNMASKED_VENDOR_WEBGL));
console.log(gl.getParameter(ext.UNMASKED_RENDERER_WEBGL));
} else {
console.log('this browser does not support WEBGL_debug_renderer_info');
}
如果您不传入powerPerformance
设置,则默认为浏览器选择的任何设置。大多数浏览器默认选择集成 GPU 以节省电量。
至于 GPU 密集型,我会说Google 地球相当密集?
更新
因此,从 2020-07 年起,该powerPreference
选项实际上仅适用于双 GPU Mac。好消息是微软显然正在为双 GPU Windows 添加对 Chromium 的支持。
推荐阅读
- c - 来自 C 套接字服务器中浏览器的 GET 请求的格式字符串——需要解析 GET 请求
- linked-list - 为什么 temp.data == temp.next.data 会出错?
- r - 箱线图两个变量,根据第三个变量的平均值为它们着色
- android - 如何找出用于蜂窝数据的首选 SIM 卡(双 SIM 卡)
- javascript - 在角度中使用声明的模块时找不到名称
- javascript - hook.useHook 在实现新端点 NextJS 时不是一个函数
- python - 如何在 MySQL 表中创建一个值以引用同一数据库中的另一个表?
- reactjs - 如何开玩笑地模拟 excel 静态文件,给出 SyntaxError: Invalid or unexpected token
- c# - 如何为 ASPNET CORE 应用程序中的视图删除 X-FRAME-OPTIONS
- go - 构建导入cgo包的go程序时如何指定头文件和库路径?