2016-07-30 22:47:08 +00:00
|
|
|
# Offscreen Rendering
|
|
|
|
|
|
|
|
Offscreen rendering lets you obtain the content of a browser window in a bitmap,
|
|
|
|
so it can be rendered anywhere, for example on a texture in a 3D scene. The
|
|
|
|
offscreen rendering in Electron uses a similar approach than the [Chromium
|
|
|
|
Embedded Framework](https://bitbucket.org/chromiumembedded/cef) project.
|
|
|
|
|
|
|
|
Two modes of rendering can be used and only the dirty area is passed in the
|
|
|
|
`'paint'` event to be more efficient. The rendering can be stopped, continued
|
|
|
|
and the frame rate can be set. The specified frame rate is a top limit value,
|
|
|
|
when there is nothing happening on a webpage, no frames are generated. The
|
2018-05-08 05:16:09 +00:00
|
|
|
maximum frame rate is 60, because above that there is no benefit, only
|
2016-07-30 22:47:08 +00:00
|
|
|
performance loss.
|
|
|
|
|
2016-12-21 22:15:39 +00:00
|
|
|
**Note:** An offscreen window is always created as a [Frameless Window](../api/frameless-window.md).
|
|
|
|
|
2018-02-19 23:50:26 +00:00
|
|
|
## Rendering Modes
|
2016-07-30 22:47:08 +00:00
|
|
|
|
|
|
|
### GPU accelerated
|
|
|
|
|
|
|
|
GPU accelerated rendering means that the GPU is used for composition. Because of
|
|
|
|
that the frame has to be copied from the GPU which requires more performance,
|
|
|
|
thus this mode is quite a bit slower than the other one. The benefit of this
|
2020-01-27 06:48:56 +00:00
|
|
|
mode is that WebGL and 3D CSS animations are supported.
|
2016-07-30 22:47:08 +00:00
|
|
|
|
|
|
|
### Software output device
|
|
|
|
|
|
|
|
This mode uses a software output device for rendering in the CPU, so the frame
|
|
|
|
generation is much faster, thus this mode is preferred over the GPU accelerated
|
2016-08-03 01:32:29 +00:00
|
|
|
one.
|
2016-08-03 01:15:38 +00:00
|
|
|
|
2016-08-03 01:32:29 +00:00
|
|
|
To enable this mode GPU acceleration has to be disabled by calling the
|
|
|
|
[`app.disableHardwareAcceleration()`][disablehardwareacceleration] API.
|
2016-07-30 22:47:08 +00:00
|
|
|
|
|
|
|
## Usage
|
|
|
|
|
|
|
|
``` javascript
|
2018-02-19 23:50:26 +00:00
|
|
|
const { app, BrowserWindow } = require('electron')
|
2016-07-30 22:47:08 +00:00
|
|
|
|
2016-08-03 01:32:29 +00:00
|
|
|
app.disableHardwareAcceleration()
|
2016-07-30 22:47:08 +00:00
|
|
|
|
2016-08-04 04:47:52 +00:00
|
|
|
let win
|
2018-02-19 23:50:26 +00:00
|
|
|
|
2020-02-03 22:43:22 +00:00
|
|
|
app.whenReady().then(() => {
|
2016-08-04 04:47:52 +00:00
|
|
|
win = new BrowserWindow({
|
|
|
|
webPreferences: {
|
|
|
|
offscreen: true
|
|
|
|
}
|
|
|
|
})
|
2018-02-19 23:50:26 +00:00
|
|
|
|
2016-08-04 04:47:52 +00:00
|
|
|
win.loadURL('http://github.com')
|
|
|
|
win.webContents.on('paint', (event, dirty, image) => {
|
2016-08-05 09:08:36 +00:00
|
|
|
// updateBitmap(dirty, image.getBitmap())
|
2016-08-04 04:47:52 +00:00
|
|
|
})
|
|
|
|
win.webContents.setFrameRate(30)
|
2016-08-03 01:15:38 +00:00
|
|
|
})
|
2016-07-30 22:47:08 +00:00
|
|
|
```
|
2016-08-03 01:32:29 +00:00
|
|
|
|
|
|
|
[disablehardwareacceleration]: ../api/app.md#appdisablehardwareacceleration
|