Ebitengine 2.4 Release Notes

v2.4.0

Issues for v2.4.0

"Truly pure Go" for Windows

(#1488, #1764)

Ebitengine originally included GLFW DLL files and extracted them dynamically. This was problematic in terms of portability. For v2.4, we rewrote the GLFW part for Windows into pure Go, which means Ebitengine becomes truly pure Go for Windows. Now an Ebitengine application can be built for an Arm Windows native binary, but this is not tested yet. This fix is also a preparation for other Windows-like system like Xbox.

With this change, the build tag ebitenexternaldll was removed.

Unmanaged images

(#2013, #2017, #2124)

New APIs NewImageWithOptions and NewImageFromImageWithOptions were added. You can specify these options:

  • Unmanaged represents whether the image is unmanaged or not. The default (zero) value is false, that means the image is managed. An unmanaged image is never on an internal automatic texture atlas. A regular image is a part of an internal texture atlas, and locating them is done automatically in Ebitengine. Unmanaged is useful when you want finer controls over the image for performance and memory reasons.
  • PreserveBounds represents whether the new image's bounds are the same as the given image. The default (zero) value is false, that means the new image's upper-left position is adjusted to (0, 0).

Audio decoding without resampling

(#2055)

New audio APIs to decode without resampling were added. Implicit resampling by Decode was useful but problematic since it might unexpectedly be slow. DecodeWithoutResampling is more explicit in terms of execution cost.

Also, an API to resample the source explicitly was added:

Debug info

(#2177)

A new function ebiten.ReadDebugInfo and a new struct ebiten.DebugInfo were added. Now what you can get from these APIs is only the type of the current graphics library so far.

Other new APIs

Renaming APIs

(#2071, #2236)

These new API were added as aliases to existing APIs. The existing APIs are still available but deprecated.

Also, environment variables and build tags were renamed. Old ones are still available but deprecated:

  • An environment variable EBITEN_SCREENSHOT_KEYEBITENGINE_SCREENSHOT_KEY
  • An environment variable EBITEN_INTERNALIMAGES_KEYEBITENGINE_INTERNAL_IMAGES_KEY
  • An environment variable EBITEN_GRAPHICS_LIBRARYEBITENGINE_GRAPHICS_LIBRARY
  • An environment variable EBITEN_DIRECTXEBITENGINE_DIRECTX
  • A build tag ebitendebugebitenginedebug
  • A build tag ebitensinglethreadebitenginesinglethread

Improving Kage (the shading language for Ebitengine)

Now NewShader checks types for builtin function arguments and operators more strictly (#2184, #2187).

Also, these new built-in functions were added:

  • discard (this is available only in Fragment function) (#1969)
  • refract (this was documented but was not implemented) (#2255)

DirectX performance improvement

(#2034, #2149, #2188)

The DirectX driver now runs 2x-3x faster than the version 2.3.

Bug fixes

This release includes all the bug fixes in the version 2.3.

Breaking changes

  • go2cpp is no longer supported (#2126).
  • A build tag ebitenwebgl1 was removed. Instead, use an environment variable EBITENGINE_OPENGL with the value webgl1.

v2.4.1

Issues for v2.4.1

Bug fixes

v2.4.2

Issues for v2.4.2

Bug fixes

  • Checking arguments for the built-in function pow for Kage was not correct (#2304).
  • Vendoring Ebitengine by go mod vendor didn't work (#2306).
  • An application under the Snap sandbox might crash with a gamepad (#2307).

Ebitengine 2.4 リリースノート

v2.4.0

Issues for v2.4.0

Windows での「真の Pure Go」

(#1488#1764)

Ebitengine は元々 GLFW の DLL を含んでおり、動的に展開していました。これは移植性という面では問題がありました。 v2.4 では、 GLFW の部分は Windows の Pure Go に書き直されました。このため、 Ebitengine は Windows では真の Pure Go となりました。 v2.4 から、 Ebitengine のアプリケーションは Arm Windows のネイティブバイナリとしてビルドすることが出来ますが、これはあまりテストされていません。また、この修正は Xbox のような他の Windows に似たシステムのための準備でもあります。

アンマネージドな画像

(#2013#2017#2124)

新しい API NewImageWithOptionsNewImageFromImageWithOptions が追加されました。次のオプションが指定できます:

この変更に伴い、ビルドタグ ebitenexternaldll は削除されました。

  • Unmanaged は画像がアンマネージドかどうかを表します。デフォルト (ゼロ値) は false で、画像がマネージドであることを意味します。アンマネージドな画像は内部自動テクスチャアトラスには決して載りません。普通の画像は内部テクスチャアトラスの一部分で、 Ebitengine 内で配置は自動的に行われます。 Unmanaged はパフォーマンスやメモリなどの理由で、画像に対してより細かいコントロールが欲しい時に便利です。
  • PreserveBounds は新しい画像が与えられた画像と同じ Bounds を持つかどうかを表します。デフォルト (ゼロ値) は false で、新しい画像の左上が (0, 0) に調整されることを意味します。

リサンプリングなしのオーディオデコード

(#2055)

リサンプリングを行わないでデコードする新しいオーディオ API が追加されました。 Decode の暗黙的なリサンプリングは便利であるものの、予想外に遅いことがありました。 DecodeWithoutResampling は実行コストに関してより明示的です。

また、ソースのリサンプルを明示的に行う API も追加されました:

デバッグ情報

(#2177)

新しい関数 ebiten.ReadDebugInfo と新しい構造体 ebiten.DebugInfo が追加されました。これらの API から取得できるのは、今の所現在のグラフィックライブラリの種類だけです。

その他の新しい API

API 名の変更

(#2071#2236)

これらの API が既存の API のエイリアスとして追加されました。既存の API はまだ利用可能ですが、非推奨になりました。

また、環境変数やビルドタグの名前が変更になりました。古いものはまだ利用可能ですが、非推奨です:

  • 環境変数 EBITEN_SCREENSHOT_KEYEBITENGINE_SCREENSHOT_KEY
  • 環境変数 EBITEN_INTERNALIMAGES_KEYEBITENGINE_INTERNAL_IMAGES_KEY
  • 環境変数 EBITEN_GRAPHICS_LIBRARYEBITENGINE_GRAPHICS_LIBRARY
  • 環境変数 EBITEN_DIRECTXEBITENGINE_DIRECTX
  • ビルドタグ ebitendebugebitenginedebug
  • ビルドタグ ebitensinglethreadebitenginesinglethread

Kage (Ebitengine のシェーディング言語) の改善

NewShader は組み込み関数の引数や演算子に関して、型をより厳密にチェックするようになりました (#2184#2187)。

また、これらの組み込み関数が追加されました:

  • discard (Fragment 関数内でのみ利用可能) (#1969)
  • refract (ドキュメントにはあったが実装されていなかった) (#2255)

DirectX パフォーマンスの改善

(#2034#2149#2188)

DirectX ドライバが、バージョン 2.3 に比べて 2-3 倍早く動くようになりました。

バグ修正

このリリースはバージョン 2.3 にあったバグ修正全てを含みます。

  • (*ebiten.Image).Set が時々正しく動いていなかった問題の修正 (#2154#2176#2180)。
  • Firefox で、 HTTPS ではないコンテキストでゲームパッドを使用しようとしたときにクラッシュした問題の修正 (#2100)。
  • その他、細かい修正

破壊的変更

  • go2cpp のサポートは廃止されました (#2126)。
  • ビルドタグ ebitenwebgl1 は廃止されました。代わりに環境変数 EBITENGINE_OPENGLwebgl1 という値で使用してください。

v2.4.1

Issues for v2.4.1

バグ修正

  • Windows でメモリリークによってアプリケーションがクラッシュすることがあった問題の修正 (#2292#2249)。
  • フルスクリーンから戻る時にウィンドウのサイズが正しく戻らなかった問題の修正 (#2295)。
  • ebitenutil.NewImageFromReader がモバイル上で利用できなかった問題の修正 (#2301)。

v2.4.2

Issues for v2.4.2

バグ修正

  • Kage の組み込み関数 pow の引数チェックが間違っていた問題の修正 (#2304)。
  • go mod vendor による Ebitengine のベンダリングが動かなかった問題の修正 (#2306)。
  • Snap サンドボックス下で、アプリケーションがゲームパッド使用時にクラッシュする可能性があった問題の修正 (#2307)。