Electron fix “ERROR:buffer_manager.cc(488)] [.Disp

2020-07-13 22:52发布

问题:

I recently stepped down my electron application removed knex and sqlite since it was painfully complicated to creating a rebuild on windows also when i made an executable for windows sqlite database didn't seem to work. Linux executable worked fine with sqlite guessing the same with mac.

To use sqlite i had rebuilt the application using electron-rebuild. In order to clear the rebuild i did rm -rf node_modules && npm install

I have eventually decided to use IndexDB using dexie.

However now when i try to run my program from npm i get

ERROR:buffer_manager.cc(488)] [.DisplayCompositor]GL ERROR :GL_INVALID_OPERATION : glBufferData: <- error from previous GL command

How do i fix this, why is it happening ?

NB: The application works just fine but this error i the terminal is just annoying and i have no idea why its happenning

回答1:

Do a test,

electron /path/to/the/app [You will get that Error]

Try

electron --disable-gpu /path/to/the/app [You mayn't get that Error]

The fix was to add "--disable-gpu" to the command-line to force the web view not to use gpu features. I was able to accomplish this in an electron app by editing the package.json file in app root and changing the line like "start": "electron ." to "start": "electron . --disable-gpu"

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



回答2:

Based on Sudhakar RS answer , I made a script in my package.json to not use GL

here is my package.json

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

}

Then in your terminal run

npm run start


回答3:

I had the same error running electron-quick-start but not when running electron-boilerplate.

Investigating the error I found this question and for me also, starting with "electron --disable-gpu ." prevents the error message. But I didn't have to do that with electron-boilerplate. So, comparing the two I traced the difference to the inclusion of electron-debug in electron-boilerplate and, ultimately, to this: process.stderr.fd.

Thus far, the minimal change I have found sufficient to avoid the error is:

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

So, now I am trying to understand what process.stderr.fd; does and how it prevents the error message from appearing. It seems odd that merely getting the file descriptor of stderr would prevent the error but evidently it does.

I am also curious about the relative merits of disabling the GPU Vs getting the file descriptor.

edit: it is sufficient to get the stream with process.stderr; it is not necessary to get the file descriptor.



回答4:

My solution for issue: "dev": ".electron-vue/dev-runner.js --disable-gpu"



标签: electron