Ebiten 2.2 Release Notes

v2.2.0

Issues for v2.2.0

Nintendo Switch™

Ebiten now supports Nintendo Switch. For more information, please see Nintendo Developer Portal, the portal site for Nintendo platform developers.

Audio reimplementation

(#1549)

The audio implementaiton was much improved to have a bigger buffer for each player. Delays and noises should be reduced.

Standard gamepad layout mappings

(#1557)

Until v2.1, Ebiten's gamepad button and axis assignments varied among gamepads and environments. For example, a gamepad button number 1 might indicate a different physical button in another environment. It was hard to keep poratbility with gamepads.

Ebiten v2.2 adopted the standard gamepad layout in the Web standard. The standard gamepad layout is a model for modern gamepads like Xbox, PlayStation and Nintendo Switch. The standard gamepad layout assumes these buttons or axes:

  • Two sticks
  • Four buttons on the left hand (usually for arrows or D-pad)
  • Four buttons on the right hand
  • Four buttons on the front
  • Three buttons on the center

The standard gamepad layout

The standard gamepad layout

If the standard gamepad layout is available for your gamepad in your environment, you can use APIs for standard gamepads like StandardGamepadButton. You don't have to worry about the button/axis assignment differences.

On desktops, SDL's gamepad database is used. On browsers, browsers' standard mappings are used. On mobiles, mappings are not available yet.

Unfortunately, not all gamepads have mappings for the standard gamepad layout. Use the existing APIs for unsupported gamepads.

For actual usages, see examples/gamepad.

New vector graphics APIs

(#1684)

A screenshot of examples/vector

A screenshot of examples/vector

Vector graphics APIs in Ebiten were redesigned and reimplemented with stencil buffers.

A member FillMode is added to ebiten.DrawTrianglesOptions. The fill mode ebiten.EvenOdd indicates a rule how an overlapped region is rendered. By combining this and a new function AppendVerticesAndIndicesForFilling in vector package, you can render complex shapes.

These APIs are added to vector package:

For actual usages, see examples/vector.

macOS's native fullscreen

(#1506)

On macOS, now fullscreening a window creates a new independent space and resizes the window to fit with the space.

Handling window-closing

(#1574)

You can prevent the window from being closed and do something when the window is being closed.

For actual usages, see examples/windowclosing.

New vsync mode for static applications

(#1556)

In addition to vsync on and vsync off, Ebiten v2.2 added a new mode: FPSModeVsyncOffMinimum. This indicates that the game doesn't sync with vsync, and the game is updated only when necessary like an input is detected. This is useful for a static application.

Append* functions

(#1692, #1705)

There are some Ebiten functions that return a new slice for each call. Creating a new slice for each call allocates memory and is not efficient. To mitigate this issue, new functions were added to accept a slice and append new elements. These work like the built-in function append. If the given slice has enough capacity, the functions don't allocate memory. If the given slice is empty or nil, a new slice is created.

Performance improvements

  • Memory usage at ReplacePixels was improved (#1681).
  • Allocating color matrices for scaling was improved (#1658).
  • Reduced allocations of color matrix values (#1796).
  • Ensured to free memory for image pixels soon after they were no longer used (#1803).

Other new functions

Others

  • A constant ebiten.SyncWithFPS was added to replace ebiten.UncappedTPS (#1726).
  • In audio/mp3, audio/vorbis, audio/wav packages, Decode and DecodeWithSampleRate now takes io.Reader instead of io.ReadSeeker (#1621).
  • Fixed an issue that dfdx and some functions in non-main function failed to compile in Kage (#1701).
  • Fixed the device scale factor on Linux and Unix desktops (Thank you, divVerent!) (#1774).

v2.2.1

Issues for v2.2.1

Bug fix

  • The screen was scaled wrongly with multiple and various scaling monitors on Windows (#1844).
  • The screen was sometimes too small on Linux KDE (#1847).

v2.2.2

Issues for v2.2.2

Bug fix

  • Crashed on pressing the green button of a transparent window on macOS (#1857).
  • Unexpected memory allocations happened (#1860).

v2.2.3

Issues for v2.2.3

Bug fix

  • Crash with multiple monitors (#1878).
  • The screen was not resized correcly when restoring from fullscreen by the green button on macOS (#1884).
  • Vsync didn't work on macOS 12 Monterey (#1885).

v2.2.4

Issues for v2.2.4

Bug fix

  • Crash when resizing the window on browsers (#1928).
  • FPS drop on macOS (#1939).

v2.2.5

Issues for v2.2.5

Bug fix

  • On macOS, the green button kept active unexpectedly when the window was resizable at startup and unresizable later (#1987).

v2.2.6

Issues for v2.2.6

Bug fix

  • The constant ebiten.KeyKPAdd was missing (#2025).

v2.2.7

Issues for v2.2.7

Bug fix

  • cmd/ebitenmobile couldn't be built with Go 1.18 (#2056).
  • Touches didn't work in the example "Flappy" (#2067).

Ebiten 2.2 リリースノート

v2.2.0

Issues for v2.2.0

Nintendo Switch™

Nintendo Switch をサポートしました。詳しくは任天堂プラットフォーム開発者向けポータルサイト Nintendo Developer Portal をご覧ください。

オーディオ再実装

(#1549)

各プレイヤーが大きいバッファを持つように、オーディオの実装が改善されました。遅延やノイズが低減するはずです。

標準ゲームパッドマッピング

(#1557)

Ebiten v2.1 までは、 Ebiten のゲームパッドボタンや軸の割当は、ゲームパッドごと、または環境ごとに異なりました。たとえば、ゲームパッドボタン 1 は他の環境では違う物理ボタンを指すかもしれません。ゲームパッドを使うと、ポータビリティを維持するのが大変でした。

Ebiten v2.2 は Web 標準の標準ゲームパッドレイアウトを採用しました。標準ゲームパッドレイアウトは、 Xbox、 PlayStation、 Nintendo Switch といったモダンなゲームパッドのモデルです。標準ゲームパッドレイアウトは次のボタンや軸を仮定します:

  • 2 つのスティック
  • 4 つの左側のボタン (通常、方向キーや十字キー向け)
  • 4 つの右側のボタン
  • 4 つの前方のボタン
  • 3 つの真ん中のボタン

標準ゲームパッドレイアウト

標準ゲームパッドレイアウト

もし使っているゲームパッドおよび環境で、標準ゲームパッドレイアウトが利用可能ならば、 StandardGamepadButton のような標準ゲームパッド API が使えます。ボタンや軸の割当の違いを気にする必要がなくなります。

デスクトップでは SDL のゲームパッドデータベースが使われます。ブラウザでは、ブラウザの標準マッピングが使われます。モバイルでは、マッピングはまだ利用できません。

残念ながら、すべてのゲームパッドが標準ゲームパッドレイアウトに対応しているとは限りません。サポートされてないゲームパッドに対しては、既存の API を使ってください。

実際の使用例については、 examples/gamepad を参照してください。

ベクターグラフィック

(#1684)

examples/vector のスクリーンショット

examples/vector のスクリーンショット

Ebiten のベクターグラフィックス API は再設計され、ステンシルバッファを使うよう再実装されました。

ebiten.DrawTrianglesOptions のメンバとして FillMode が追加されました。フィルモードが ebiten.EvenOdd は、重なった領域がどう描画されるかについてのルールで、 vector パッケージの新関数 AppendVerticesAndIndicesForFilling と組み合わせることで複雑な図形を描画できます。

vector パッケージに次のような関数が追加されました:

実際の使用例については、 examples/vector を参照してください。

macOS のネイティブフルスクリーン

(#1506)

macOS では、ウィンドウをフルスクリーンにするときに、新しい独立したスペースを作りそこにウィンドウをフィットさせる挙動になりました。

ウィンドウが閉じられるときのハンドリング

(#1574)

ウィンドウが閉じられるのを止めたり、ウィンドウが閉じられようとするタイミングで何かを行うことができるようになりました。

実際の使用例については、 examples/windowclosing を参照してください。

静的なアプリケーションのための新しい vsync モード

(#1556)

Vsync のオン・オフに加えて、 Ebiten v2.2 では新しい vsync モード FPSModeVsyncOffMinimum が利用できます。これはゲームは vsync には同期せず、入力が検知されたなど必要なタイミングのみで更新を行うモードです。静的なアプリケーションを実装するのに便利です。

Append* 関数

(#1692, #1705)

Ebiten のいくつかの関数は、呼び出しごとに新しいスライスを作っていました。関数呼び出しごとに新しいスライスを作るのは、メモリをアロケートするので非効率です。この問題を低減するため、スライスを受け取り新しい要素をそこに追加するような新しい関数が追加されました。これらは組み込み関数 append のような動作をします。もしスライスに十分なキャパシティがあれば、その関数は新しいメモリをアロケートすることはありません。もし空スライスや nil が渡ってきたのなら、新しいスライスが作成されます。

パフォーマンス改善

  • ReplacePixels のメモリ使用量が改善されました (#1681)。
  • スケールのための色行列アロケーションが改善されました (#1658)。
  • 色行列のアロケーションが減りました (#1796)。
  • もう使われないピクセルデータについて、確実にメモリを解放するようにしました (#1803)。

その他の新しい関数

その他

  • 定数 ebiten.SyncWithFPS が追加されました。 ebiten.UncappedTPS の置き換えです (#1726)。
  • audio/mp3, audio/vorbis, audio/wav パッケージで、 Decode 関数と DecodeWithSampleRate 関数が io.ReadSeeker の代わりに io.Reader を取るようになりました (#1621)。
  • Kage で、 dfdx やいくつかの関数が main ではない関数で使われているときにコンパイルできない問題を修正しました (#1701)。
  • Linux および Unix のデバイススケールファクター値を修正しました (ありがとう、 divVerent さん!) (#1774).

v2.2.1

Issues for v2.2.1

バグ修正

  • Windows で、複数のスケールの異なるマルチモニタを使用したときに、画面のスケールが間違っていた問題の修正 (#1844)。
  • Linux KDE で、画面が時々小さくなってしまっていた問題の修正 (#1847)。

v2.2.2

Issues for v2.2.2

バグ修正

  • macOS で、透明ウィンドウ時に緑ボタンを押すとクラッシュした問題の修正 (#1857)。
  • 予期しないメモリアロケーションが起きていた問題の修正 (#1860)。

v2.2.3

Issues for v2.2.3

バグ修正

  • モニタが複数あるときにクラッシュすることがあった問題の修正 (#1878)。
  • macOS で緑ボタンでフルスクリーンから戻したときに、画面が正しくリサイズされなかった問題の修正 (#1884)。
  • macOS 12 Monterey で Vsync が動かなかった問題の修正 (#1885)。

v2.2.4

Issues for v2.2.4

バグ修正

  • ブラウザでウィンドウのリサイズ時にクラッシュする問題の修正 (#1928)。
  • macOS で FPS が落ちる問題の修正 (#1939)。

v2.2.5

Issues for v2.2.5

バグ修正

  • macOS で、起動時にウィンドウがサイズ可変で後から不可変になったときで、緑ボタンがアクティブのままなってしまう問題の修正 (#1987)。

v2.2.6

Issues for v2.2.6

バグ修正

  • 定数 ebiten.KeyKPAdd が未定義になっていた問題の修正 (#2025)。

v2.2.7

Issues for v2.2.7

バグ修正

  • Go 1.18 で cmd/ebitenmobile がビルドできなかった問題の修正 (#2056)。
  • サンプルの Flappy でタッチが動いていなかった問題の修正 (#2067)。

Ebiten 2.2 发布日志

v2.2.0

v2.2.0的Issues

任天堂 Switch™

Ebiten现已支持任天堂Switch游戏机. 更多内容请至 任天堂平台开发主页.

音频播放

(#1549)

The audio implementaiton was much improved to have a bigger buffer for each player. Delays and noises should be reduced.

标准手柄布局映射

(#1557)

Until v2.1, Ebiten's gamepad button and axis assignments varied among gamepads and environments. For example, a gamepad button number 1 might indicate a different physical button in another environment. It was hard to keep poratbility with gamepads.

Ebiten v2.2 adopted the standard gamepad layout in the Web standard. The standard gamepad layout is a model for modern gamepads like Xbox, PlayStation and Nintendo Switch. The standard gamepad layout assumes these buttons or axes:

  • Two sticks
  • Four buttons on the left hand (usually for arrows or D-pad)
  • Four buttons on the right hand
  • Four buttons on the front
  • Three buttons on the center

The standard gamepad layout

The standard gamepad layout

If the standard gamepad layout is available for your gamepad in your environment, you can use APIs for standard gamepads like StandardGamepadButton. You don't have to worry about the button/axis assignment differences.

On desktops, SDL's gamepad database is used. On browsers, browsers' standard mappings are used. On mobiles, mappings are not available yet.

Unfortunately, not all gamepads have mappings for the standard gamepad layout. Use the existing APIs for unsupported gamepads.

For actual usages, see examples/gamepad.

新的矢量图形API

(#1684)

A screenshot of examples/vector

A screenshot of examples/vector

Vector graphics APIs in Ebiten were redesigned and reimplemented with stencil buffers.

A member FillMode is added to ebiten.DrawTrianglesOptions. The fill mode ebiten.EvenOdd indicates a rule how an overlapped region is rendered. By combining this and a new function AppendVerticesAndIndicesForFilling in vector package, you can render complex shapes.

These APIs are added to vector package:

For actual usages, see examples/vector.

MacOS原生全屏

(#1506)

On macOS, now fullscreening a window creates a new independent space and resizes the window to fit with the space.

处理窗口关闭事件

(#1574)

You can prevent the window from being closed and do something when the window is being closed.

For actual usages, see examples/windowclosing.

新的用于静态程序的垂直同步模式

(#1556)

In addition to vsync on and vsync off, Ebiten v2.2 added a new mode: FPSModeVsyncOffMinimum. This indicates that the game doesn't sync with vsync, and the game is updated only when necessary like an input is detected. This is useful for a static application.

Append* functions

(#1692, #1705)

There are some Ebiten functions that return a new slice for each call. Creating a new slice for each call allocates memory and is not efficient. To mitigate this issue, new functions were added to accept a slice and append new elements. These work like the built-in function append. If the given slice has enough capacity, the functions don't allocate memory. If the given slice is empty or nil, a new slice is created.

性能改进

  • Memory usage at ReplacePixels was improved (#1681).
  • Allocating color matrices for scaling was improved (#1658).
  • Reduced allocations of color matrix values (#1796).
  • Ensured to free memory for image pixels soon after they were no longer used (#1803).

新的函数

其他

  • A constant ebiten.SyncWithFPS was added to replace ebiten.UncappedTPS (#1726).
  • In audio/mp3, audio/vorbis, audio/wav packages, Decode and DecodeWithSampleRate now takes io.Reader instead of io.ReadSeeker (#1621).
  • Fixed an issue that dfdx and some functions in non-main function failed to compile in Kage (#1701).
  • Fixed the device scale factor on Linux and Unix desktops (Thank you, divVerent!) (#1774).

v2.2.1

v2.2.1的Issues

Bug修复

  • The screen was scaled wrongly with multiple and various scaling monitors on Windows (#1844).
  • 在KDE桌面上窗口有时过小 (#1847).

v2.2.2

v2.2.2的Issues

Bug修复

  • 在macOS上按下透明窗口的绿色按钮时崩溃 (#1857).
  • 发生意外内存分配问题 (#1860).

v2.2.3

v2.2.3的Issues

Bug修复

  • 多显示器崩溃 (#1878).
  • 当用macOS的绿色按钮从全屏恢复时,屏幕大小没有正确调整 (#1884).
  • 垂直同步在macOS 12 Monterey上不起作用(#1885).

v2.2.4

v2.2.4的Issues

Bug修复

  • 浏览器调整窗口大小时崩溃 (#1928).
  • 在macOS上的FPS下降问题 (#1939).

v2.2.5

v2.2.5的Issues

Bug修复

  • 在macOS, 修正窗口在启动时可以调整大小但启动后禁用调整大小后绿色按钮仍可用的Bug(#1987)。

v2.2.6

v2.2.6的Issues

Bug修复

  • 常量 ebiten.KeyKPAdd 丢失(#2025).

v2.2.7

v2.2.7的Issues

Bug修复

  • cmd/ebitenmobile 无法在 Go 1.18 编译 (#2056).
  • 触屏事件在示例 "Flappy" 里失效(#2067).