mirror of https://github.com/pyodide/pyodide.git
50 lines
1.3 KiB
Markdown
50 lines
1.3 KiB
Markdown
|
(using-sdl)=
|
||
|
|
||
|
# Using SDL-based packages in Pyodide
|
||
|
|
||
|
```{admonition} This is experimental
|
||
|
:class: warning
|
||
|
|
||
|
SDL support in Pyodide is experimental.
|
||
|
Pyodide relies on undocumented behavior of Emscripten and SDL,
|
||
|
so it may break or change in the future.
|
||
|
|
||
|
In addition, this feature requires to enable an opt-in flag,
|
||
|
`pyodide._api._skip_unwind_fatal_error = true;`
|
||
|
which can lead to stack unwinding issues (see {ref}`sdl-known-issues`).
|
||
|
```
|
||
|
|
||
|
Pyodide provides a way to use SDL-based packages in the browser,
|
||
|
This document explains how to use SDL-based packages in Pyodide.
|
||
|
|
||
|
## Setting canvas
|
||
|
|
||
|
Before using SDL-based packages, you need to set the canvas to draw on.
|
||
|
|
||
|
The `canvas` object must be a
|
||
|
[HTMLCanvasElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement) object,
|
||
|
with the `id` attribute set to `"canvas"`.
|
||
|
For example, you can set a canvas like this:
|
||
|
|
||
|
```js
|
||
|
let sdl2Canvas = document.createElement("canvas");
|
||
|
sdl2Canvas.id = "canvas";
|
||
|
pyodide.canvas.setCanvas2D(sdl2Canvas);
|
||
|
```
|
||
|
|
||
|
See also: {ref}`js-api-pyodide-canvas`
|
||
|
|
||
|
(sdl-known-issues)=
|
||
|
|
||
|
## Known issues
|
||
|
|
||
|
There is a known issue that with,
|
||
|
|
||
|
```
|
||
|
pyodide._api._skip_unwind_fatal_error = true;
|
||
|
```
|
||
|
|
||
|
Python call stacks are not being unwound after calling `emscripten_set_main_loop()`.
|
||
|
|
||
|
see: [pyodide#3697](https://github.com/pyodide/pyodide/issues/3697)
|