Ebiten 2.3 Release Notes

v2.3.0

Issues for v2.3.0

DirectX on Windows

(#1007)

Ebiten now supports DirectX on Windows. This is a preparation to support more environments like Arm Windows by Ebiten.

Native compile for Nintendo Switch™

(#1900)

In the previous version, Ebiten supported Nintendo Switch by go2cpp by converting Go program to C++ via the WebAssembly format. This was a portable and simple solution. However, an application was single-threaded and not performant due to the WebAssembly restriction. Compiling time for bunch of C++ files was also problematic.

In order to resolve these problems, Ebiten now supports a native compiling for Nintendo Switch by Hitsumabushi, which replaces system calls in the Go runtime with C function calls. For more technical details, see a blog article about Hitsumabushi.

In order to support this, Ebiten introduced a new build tag ebitencbackend.

An environment variable EBITEN_GRAPHICS_LIBRARY

You can specify an underlying graphics library for Ebiten by an environment variable EBITEN_GRAPHICS_LIBRARY.

  • auto (default): Ebiten chooses a graphics library automatically.
  • opengl: OpenGL, OpenGL ES, or WebGL is used.
  • metal: Metal is used.
  • directx: DirectX is used.

A build tag ebitengl was removed.

A build tag ebitenexternaldll

(#1832)

Ebiten embeds DLL files for a Windows executable, and the executable extracts them on the fly. However, this can be problematic as the application might be unexpectdly recognized as a virus by some virus checkers.

A new build tag ebitenexternaldll stops embedding DLL file in a Windows executable. The executable will require a DLL file at the working directory. Copy them from Ebiten repository's internal/glfw directory:

  • glfw_windows_386.dll for Windows GOARCH=386
  • glfw_windows_amd64.dll for Windows GOARCH=amd64

This is not a perfect solution yet, but should mitigate the false positives.

Vibration

(#1452)

Ebiten introduced new APIs to vibrate mobile devices, browsers, and game controllers:

  • ebiten.Vibrate vibrates the device with the specified options. Vibrate works on mobiles and browsers.
  • ebiten.VibrateGamepad vibrates the specified gamepad with the specified options. This works only on browsers and Nintendo Switch so far.

Window-resizing mode

(#1819)

Ebiten introduced new APIs for various modes of resizing a window:

  • ebiten.WindowResizingModeType represents a mode in which a user resizes the window.
    • WindowResizingModeDisabled indicates the mode to disallow resizing the window by a user.
    • WindowResizingModeOnlyFullscreenEnabled indicates the mode to disallow resizing the window, but allow to make the window fullscreen by a user. This works only on macOS so far.
    • WindowResizingModeEnabled indicates the mode to allow resizing the window by a user.
  • ebiten.SetWindowResizingMode sets the mode in which a user resizes the window.

ebiten.IsWindowResizable and ebiten.SetWindowResizable was now deprecated.

Real-time PCM

(#2026)

Ebiten introduced a new API for real-time PCM by adjusting an audio player's buffer size:

  • (*audio.Player).SetBufferSize adjusts the buffer size of the player. A small buffer size is useful if you want to play a real-time PCM for example.

For an actual usage, see the new example realtimepcm.

Other new features

Bug fix

This release includes all the bug fixes in v2.2.x.

  • Slight noises for a looped audio stream (#1888)
  • Bunch of bug fixes in Kage like wrong type checkings
  • Other small fixes

Performance

  • Improving startup time by removing an initial dummy window (#1918, #1982).
  • Other small fixes

v2.3.1

Issues for v2.3.1

Bug fix

  • An app froze when manipulating images at a game's Layout function (#2079).
  • An app sometimes crashed when resizing a window on Windows (#2081).

v2.3.2

Issues for v2.3.2

Bug fix

  • An old Metal shading language version could be used unexpectedly on macOS (#2086).
  • Calling Image.Fill and Image.Set and resizing the window broke the rendering (#2089).

Ebiten 2.3 リリースノート

v2.3.0

Issues for v2.3.0

Windows での DirectX サポート

(#1007)

Windows で DirectX がサポートされました。 Arm Windows など、 Ebiten がサポートする環境を増やすための準備です。

Nintendo Switch™ 向けのネイティブコンパイル

(#1900)

前のバージョンでは、 go2cpp を使って、 Go プログラムを WebAssembly フォーマット経由で C++ に変換することで、 Ebiten は Nintendo Switch をサポートしていました。これはポータブルで単純なソリューションでした。しかし、シングルスレッド故にパフォーマンスが悪く、また大量の C++ ファイルをコンパイルするため時間がかかるなどの問題がありました。

この問題を解決するため、 Go ランタイムのシステムコール呼び出しを C 関数呼び出しに置き換える Hitsumabushi を使って Nintendo Switch へのネイティブコンパイルをサポートします。技術的詳細については、 Hitsumabushi に関するブログ記事を参照してください。

これをサポートするために、 Ebiten は新しいビルドタグ ebitencbackend を導入しました。

環境変数 EBITEN_GRAPHICS_LIBRARY

環境変数 EBITEN_GRAPHICS_LIBRARY で Ebiten が内部で使うグラフィックライブラリを指定することができます。

  • auto (デフォルト): Ebiten が自動的にグラフィックライブラリを選びます。
  • opengl: OpenGL、 OpenGL ES または WebGL が使われます。
  • metal: Metal が使われます。
  • directx: DirectX が使われます。

ビルドタグ ebitengl は削除されました。

ビルドタグ ebitenexternaldll

(#1832)

Ebiten は Windows 実行ファイルに DLL ファイルを埋め込み、実行ファイルがそれを必要時に展開します。しかし、この手法には問題があり、一部のウィルス検知ソフトがアプリケーションをウィルスと誤検知してしまうことがありました。

新しいビルドタグ ebitenexternaldll によって、 DLL 埋め込みをしないようにできます。実行ファイルは DLL ファイルがワーキングディレクトリに必要になります。 Ebiten リポジトリの internal/glfw から次の DLL ファイルをコピーしてください:

  • glfw_windows_386.dll (Windows GOARCH=386 向け)
  • glfw_windows_amd64.dll (Windows GOARCH=amd64 向け)

これは未だに完璧な解決策ではありませんが、誤検知を低減することができるでしょう。

バイブレーション

(#1452)

モバイルデバイス、ブラウザ、ゲームコントローラを振動させるための新しい API が導入されました:

  • ebiten.Vibrate: 指定されたオプションでデバイスを振動させます。モバイルとブラウザで動きます。
  • ebiten.VibrateGamepad 指定されたオプションで指定されたゲームパッドを振動させます。現在のところブラウザと Nintendo Switch でのみ動きます。

ウィンドウのリサイズモード

(#1819)

ウィンドウのリサイズモードのための新しい API が導入されました:

  • ebiten.WindowResizingModeType: どのようにユーザーがウィンドウをリサイズできるかのモードを表します。
    • WindowResizingModeDisabled: ユーザーによるリサイズを不可能にします。
    • WindowResizingModeOnlyFullscreenEnabled ユーザーによるリサイズを不可能にしますが、フルスクリーンは許可します。今の所 macOS でのみ有効です。
    • WindowResizingModeEnabled: ユーザーによるリサイズを可能にします。
  • ebiten.SetWindowResizingMode: どのようにユーザーがウィンドウをリサイズできるかのモードを設定します。

ebiten.IsWindowResizableebiten.SetWindowResizable は非推奨になりました。

リアルタイム PCM

(#2026)

オーディオプレイヤーのバッファサイズを調整して、リアルタイム PCM を実現する新しい API が導入されました:

  • (*audio.Player).SetBufferSize はプレイヤーのバッファサイズを調整します。小さいバッファサイズは、例えばリアルタイム PCM を再生したいときに便利です。

実例は新しいサンプル realtimepcm を参照してください。

その他の新しい機能

バグ修正

このリリースには、 v2.2.x にあるすべてのバグ修正が含まれます。

  • ループするオーディオストリームの僅かなノイズを修正 (#1888)
  • Kage のたくさんのバグ (間違った型チェックなど) を修正
  • その他の細かい修正

パフォーマンス

  • 最初のダミーウィンドウを無くすことによる、起動スピードの改善 (#1918#1982).
  • その他の細かい修正

v2.3.1

Issues for v2.3.1

バグ修正

  • ゲームの Layout 関数内で画像を操作するとデッドロックする問題の修正 (#2079)。
  • Windows でウィンドウの大きさを変更するとクラッシュすることがあった問題の修正 (#2081)。

v2.3.2

Issues for v2.3.2

バグ修正

  • macOS で古い Metal シェーダー言語バージョンが使われてしまうことがあったバグを修正 (#2086)。
  • Image.FillImage.Set を呼んでウィンドウをリサイズすると、描画結果が壊れるバグの修正 (#2089)。