我正在尝试在没有GPU的Linux服务器上导出使用WebGL渲染的图像。为此,我使用无头Chrome,但导出的图像是黑色的(示例导出图像,截取页面屏幕截图显示只有黑色画布)。我希望得到一些帮助,弄清楚这是为什么。
要导出图像,我将图像渲染到画布中,通过canvas.toDataURL('image/jpeg')
导出数据,然后将数据发送到服务器。我使用Pixi.js进行渲染,如果我使用canvas渲染器,则服务器上的一切都正常;它不起作用的是WebGL渲染。值得注意的是,在Macbook上的Chrome 63中,WebGL渲染正常工作。
为了控制Chrome,我使用Puppeteer。我所做的就是打开一个页面,等待一秒钟,然后再关闭它:
puppeteer
.launch({
args: [
'--no-sandbox',
'--disable-setuid-sandbox',
],
})
.then(browser => {
return browser.newPage().then(page => {
return page
.goto(url)
.then(() => page.waitFor(1000))
.then(() => browser.close())
.catch(err => console.error('Failed', err));
});
})
这些是Puppeteer传递给Chrome的参数:
[ '--disable-background-networking', '--disable-background-timer-throttling', '--disable-client-side-phishing-detection', '--disable-default-apps', '--disable-extensions', '--disable-hang-monitor', '--disable-popup-blocking', '--disable-prompt-on-repost', '--disable-sync', '--disable-translate', '--metrics-recording-only', '--no-first-run', '--remote-debugging-port=0', '--safebrowsing-disable-auto-update', '--enable-automation', '--password-store=basic', '--use-mock-keychain', '--user-data-dir=/tmp/puppeteer_dev_profile-GhEAXZ', '--headless', '--disable-gpu', '--hide-scrollbars', '--mute-audio', '--no-sandbox', '--disable-setuid-sandbox']
在六月份,swiftshader的作者表示可以进行无头WebGL渲染
这个Chromium问题证实了这一点,所以我想我可能错过了什么。有人有任何想法吗?
我尝试过以下几件事:
- 不传递--disable-gpu参数
--use-gl=swiftshader-webgl
、--use-gl=swiftshader
、--use-gl=osmesa
- 拍摄全屏截图以查看是否只是canvas。整个屏幕都是黑色的。
版本信息:
- Chrome:linux-515411
- puppeteer:0.13.0
- node:8.2.1
- Linux:CentOS 7
这是我需要在服务器上安装的内容,以使chrome运行(来源)
yum install cups-libs dbus-glib libXrandr libXcursor libXinerama cairo cairo-gobject pango ffmpeg
rpm -ivh --nodeps http://mirror.centos.org/centos/7/os/x86_64/Packages/atk-2.22.0-3.el7.x86_64.rpm
rpm -ivh --nodeps http://mirror.centos.org/centos/7/os/x86_64/Packages/at-spi2-atk-2.22.0-2.el7.x86_64.rpm
rpm -ivh --nodeps http://mirror.centos.org/centos/7/os/x86_64/Packages/at-spi2-core-2.22.0-1.el7.x86_64.rpm
rpm -ivh --nodeps http://dl.fedoraproject.org/pub/archive/fedora/linux/releases/20/Fedora/x86_64/os/Packages/g/GConf2-3.2.6-7.fc20.x86_64.rpm
rpm -ivh --nodeps http://dl.fedoraproject.org/pub/archive/fedora/linux/releases/20/Fedora/x86_64/os/Packages/l/libXScrnSaver-1.2.2-6.fc20.x86_64.rpm
rpm -ivh --nodeps http://dl.fedoraproject.org/pub/archive/fedora/linux/releases/20/Fedora/x86_64/os/Packages/l/libxkbcommon-0.3.1-1.fc20.x86_64.rpm
rpm -ivh --nodeps http://dl.fedoraproject.org/pub/archive/fedora/linux/releases/20/Fedora/x86_64/os/Packages/l/libwayland-client-1.2.0-3.fc20.x86_64.rpm
rpm -ivh --nodeps http://dl.fedoraproject.org/pub/archive/fedora/linux/releases/20/Fedora/x86_64/os/Packages/l/libwayland-cursor-1.2.0-3.fc20.x86_64.rpm
rpm -ivh --nodeps http://dl.fedoraproject.org/pub/archive/fedora/linux/releases/20/Fedora/x86_64/os/Packages/g/gtk3-3.10.4-1.fc20.x86_64.rpm
rpm -ivh --nodeps http://dl.fedoraproject.org/pub/archive/fedora/linux/releases/16/Fedora/x86_64/os/Packages/gdk-pixbuf2-2.24.0-1.fc16.x86_64.rpm