电子修复“ ERROR:buffer_manager.cc(488)] [.DisplayCompositor] GL错误:GL_INVALID_OPERATION:glBufferData:<-来自先前GL命令的错误”

时间:2019-10-11 20:01:21

标签: electron

我最近辞职,删除了knexsqlite的电子应用程序,因为在Windows sqlite数据库没有创建可执行文件的情况下,在Windows上进行重建也很麻烦似乎有效。 Linux可执行文件可以在sqlite上与Mac进行相同的猜测。

要使用sqlite,我已经使用electron-rebuild重建了应用程序。为了清除重建,我做了rm -rf node_modules && npm install

我最终决定使用dexie使用IndexDB。

但是现在,当我尝试从npm运行程序时,我得到了

  

ERROR:buffer_manager.cc(488)] [.DisplayCompositor] GL错误:GL_INVALID_OPERATION:glBufferData:<-来自先前GL命令的错误

我该如何解决,为什么会发生?

NB:应用程序运行正常,但终端出现的错误很烦人,我不知道为什么会发生

4 个答案:

答案 0 :(得分:9)

进行测试

electron /path/to/the/app [您会收到该错误]

尝试

electron --disable-gpu /path/to/the/app [您可能不会收到该错误]

  

解决方法是在命令行中添加“ --disable-gpu”以强制执行   Web视图不使用GPU功能。我能够在一个   通过在应用程序根目录中编辑package.json文件并更改   像“开始”这样的行:“电子”。要“开始”:“电子。   --disable-gpu“

引用https://github.com/electron/electron/issues/7834#issuecomment-275802528

答案 1 :(得分:2)

基于Sudhakar RS的回答,我在package.json中创建了一个脚本以不使用GL

这是我的package.json

{
  ...
  "scripts": {
    "start": "electron --disable-gpu .", // --disable GL ERROR and use CPU
    ...
  }
 ...

}

然后在您的终端中运行

npm run start

答案 2 :(得分:1)

运行electron-quick-start时出现相同的错误,但运行electron-boilerplate时却没有。

调查错误时,我也找到了这个问题,对我来说,也从“ electron --disable-gpu”开始。防止错误消息。但是我不必使用电子样板。因此,比较两者,我将差异追溯到电子样板中包含电子调试器,最终是:process.stderr.fd。

到目前为止,我发现足以避免错误的最小更改是:

diff --git a/main.js b/main.js
index 3508c8e..7df262b 100644
--- a/main.js
+++ b/main.js
@@ -2,6 +2,8 @@
 const {app, BrowserWindow} = require('electron')
 const path = require('path')

+process.stderr.fd;
+
 // Keep a global reference of the window object, if you don't, the window will
 // be closed automatically when the JavaScript object is garbage collected.
 let mainWindow

因此,现在我试图了解process.stderr.fd;的作用以及如何防止出现错误消息。仅仅获取stderr的文件描述符可以防止该错误,但显然可以,但似乎很奇怪。

我也对禁用GPU Vs获取文件描述符的相对优点感到好奇。

编辑:使用process.stderr;获取流就足够了,不必获取文件描述符。

答案 3 :(得分:0)

我的问题解决方案: “ dev”:“ .electron-vue / dev-runner.js --disable-gpu”