Ebitengine 2.3 Release Notes

Ebiten was renamed to Ebitengine on May 25, 2022.

v2.3.0

Issues for v2.3.0

DirectX on Windows

(#1007)

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

Native compile for Nintendo Switch™

(#1900)

In the previous version, Ebitengine 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, Ebitengine 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, Ebitengine introduced a new build tag ebitencbackend.

An environment variable EBITEN_GRAPHICS_LIBRARY

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

  • auto (default): Ebitengine 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)

Ebitengine 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 Ebitengine 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)

Ebitengine 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)

Ebitengine 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)

Ebitengine 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).

v2.3.3

Issues for v2.3.3

Bug fix

  • Android NDK 24 is supported (#2085).
  • An application might crash just by importing inpututil (#2103).

v2.3.4

Issues for v2.3.4

Bug fix

  • A non-existing returing value was handled in the DirectX driver (#2115).
  • An application crashes with a gamepad on 32bit Linux (#2122).
  • An application crashes with pressing Alt + Enter on Windows (#2123).

v2.3.5

Issues for v2.3.5

Bug fix

  • An application crashed when MaximizeWindow was called before the main loop started (#2137).
  • The screen unexpectedly blinked with the EvenOdd mode on Windows (#2138).
  • Debug warnings were shown after resizing the window on Windows (#2151).
  • ReplacePixels sometimes failed on macOS (#2154).

v2.3.6

Issues for v2.3.6

Bug fix

  • A memory allocation error sometimes happened on browsers (#2156).
  • An application might crash with some inputting devices on Linux (#2169).
  • A big screen might flicker on macOS (#2174).
  • An applicaiton crashed when going to a lock screen on Windows (#2179).

v2.3.7

Issues for v2.3.7

Bug fix

  • ebitenmobile for iOS didn't work with a case-sensitive file system (#2192).
  • There were wrong memory usages in the DirectX driver (#2201, #2202, #2204).
  • There was a memory leak when disconnecting a gamepad on Windows (#2205).

v2.3.8

Issues for v2.3.8

Bug fix

  • Multi-touch didn't work correctly on Android (#2220).
  • vorbis.Decode with a non-seekable source caused an error (#2252).
  • Changing the window's decorating state unexpectedly changed the window size on macOS (#2257).

Ebitengine 2.3 リリースノート

2022 年 5 月 25 日、 Ebiten は Ebitengine に改称されました。

v2.3.0

Issues for v2.3.0

Windows での DirectX サポート

(#1007)

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

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

(#1900)

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

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

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

環境変数 EBITEN_GRAPHICS_LIBRARY

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

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

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

ビルドタグ ebitenexternaldll

(#1832)

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

新しいビルドタグ ebitenexternaldll によって、 DLL 埋め込みをしないようにできます。実行ファイルは DLL ファイルがワーキングディレクトリに必要になります。 Ebitengine リポジトリの 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)。

v2.3.3

Issues for v2.3.3

バグ修正

  • Android NDK 24 のサポート (#2085)。
  • inpututil をインポートするだけでクラッシュすることがあった問題の修正 (#2103)。

v2.3.4

Issues for v2.3.4

バグ修正

  • DirectX ドライバで、存在しない戻り値をハンドルしていた問題の修正 (#2115)。
  • 32bit Linux でゲームパッド使用時にアプリケーションがクラッシュする問題の修正 (#2122)。
  • Windows で Alt+Enter を押すとアプリケーションがクラッシュする問題の修正 (#2123)。

v2.3.5

Issues for v2.3.5

バグ修正

  • MaximizeWindow をメインループ前に呼ぶとクラッシュした問題の修正 (#2137)。
  • Windows で、 EvenOdd モードで画面が点滅することがあった問題の修正 (#2138)。
  • Windows で、画面リサイズ後にデバッグ警告が表示されていた問題の修正 (#2151)。
  • macOS で、 ReplacePixels が失敗することがあった問題の修正 (#2154)。

v2.3.6

Issues for v2.3.6

バグ修正

  • ブラウザで時々メモリアロケーションエラーが発生していた問題の修正 (#2156)。
  • Linux で、特定の入力デバイスをつないでいるときにアプリケーションがクラッシュすることがあった問題の修正 (#2169)。
  • macOS で、大きい画面が点滅する事があった問題の修正 (#2174)。
  • Windows で、ロック画面にいくときにアプリケーションがクラッシュした問題の修正 (#2179)。

v2.3.7

Issues for v2.3.7

バグ修正

  • iOS 向けの ebitenmobile が、大文字小文字を区別するファイルシステムで動かなかった問題の修正 (#2192)。
  • DirectX ドライバ内でのメモリの使い方が間違っていた問題を修正 (#2201#2202#2204)。
  • Windows でゲームパッドを抜くときにメモリリークした問題の修正 (#2205)。

v2.3.8

Issues for v2.3.8

バグ修正

  • Android でマルチタッチが動かないことがあった問題の修正 (#2220).
  • vorbis.Decode にシークできないソースを与えるとエラーになった問題の修正 (#2252).
  • macOS でウィンドウのデコレーション状態を変更すると予期せずウィンドウサイズが変わってしまうことがあった問題の修正 (#2257).

Ebiten v2.3 发布日志

v2.3.0

v2.3.0的Issues

在Windows平台支持DirectX

(#1007)

Ebiten现在支持在Windows上使用DirectX. This is a preparation to support more environments like Arm Windows by Ebiten.

原生编译支持 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.

build tag ebitengl 移除.

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.

新的 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

这还不是一个完美的解决方案, 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.IsWindowResizableebiten.SetWindowResizable was now deprecated.

实时 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, 请见新示例 realtimepcm.

其他新特性

Bug修复

这个版本修复了v2.2.x的所有Bug.

  • Slight noises for a looped audio stream (#1888)
  • Bunch of bug fixes in Kage like wrong type checkings
  • 其他小修复

性能

  • Improving startup time by removing an initial dummy window (#1918, #1982).
  • 其他小修复