Ebitengine 2.4 Release Notes
v2.4.0
"Truly pure Go" for Windows
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
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
ebiten.IsStandardGamepadAxisAvailable
(#2040)ebiten.IsStandardGamepadButtonAvailable
(#2040)(*ebiten.Image).ReadPixels
(#1995)ebitenutil.DrawCircle
(#2163)ebitenutil.NewImageFromFileSystem
(this is available only with Go 1.16 or newer) (#1948)inpututil.AppendJustReleasedTouchIDs
(#2057)inpututil.TouchPositionInPreviousTick
(#2057)- An environment variable
EBITENGINE_OPENGL
Renaming APIs
These new API were added as aliases to existing APIs. The existing APIs are still available but deprecated.
ebiten.SetMaxTPS
→ebiten.SetTPS
ebiten.MaxTPS
→ebiten.TPS
ebiten.CurrentFPS
→ebiten.ActualFPS
ebiten.CurrentTPS
→ebiten.ActualTPS
(*ebiten.Image).ReplacePixels
→(*ebiten.Image).WritePixels
Also, environment variables and build tags were renamed. Old ones are still available but deprecated:
- An environment variable
EBITEN_SCREENSHOT_KEY
→EBITENGINE_SCREENSHOT_KEY
- An environment variable
EBITEN_INTERNALIMAGES_KEY
→EBITENGINE_INTERNAL_IMAGES_KEY
- An environment variable
EBITEN_GRAPHICS_LIBRARY
→EBITENGINE_GRAPHICS_LIBRARY
- An environment variable
EBITEN_DIRECTX
→EBITENGINE_DIRECTX
- A build tag
ebitendebug
→ebitenginedebug
- A build tag
ebitensinglethread
→ebitenginesinglethread
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 inFragment
function) (#1969)refract
(this was documented but was not implemented) (#2255)
DirectX performance improvement
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.
(*ebiten.Image).Set
sometimes didn't work correctly (#2154, #2176, #2180).- An application might crash when trying to use gamepads on Firefox in a non-HTTPS context (#2100).
- Other small fixes
Breaking changes
- go2cpp is no longer supported (#2126).
- A build tag
ebitenwebgl1
was removed. Instead, use an environment variableEBITENGINE_OPENGL
with the valuewebgl1
.
v2.4.1
Bug fixes
- An application might crash due to memory leak on Windows (#2292, #2249).
- A window size was not restored correctly after exiting from fullscreen (#2295).
ebitenutil.NewImageFromReader
was not available on mobiles (#2301).
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
Windows での「真の Pure Go」
Ebitengine は元々 GLFW の DLL を含んでおり、動的に展開していました。これは移植性という面では問題がありました。 v2.4 では、 GLFW の部分は Windows の Pure Go に書き直されました。このため、 Ebitengine は Windows では真の Pure Go となりました。 v2.4 から、 Ebitengine のアプリケーションは Arm Windows のネイティブバイナリとしてビルドすることが出来ますが、これはあまりテストされていません。また、この修正は Xbox のような他の Windows に似たシステムのための準備でもあります。
アンマネージドな画像
新しい API NewImageWithOptions
と NewImageFromImageWithOptions
が追加されました。次のオプションが指定できます:
この変更に伴い、ビルドタグ ebitenexternaldll
は削除されました。
Unmanaged
は画像がアンマネージドかどうかを表します。デフォルト (ゼロ値) は false で、画像がマネージドであることを意味します。アンマネージドな画像は内部自動テクスチャアトラスには決して載りません。普通の画像は内部テクスチャアトラスの一部分で、 Ebitengine 内で配置は自動的に行われます。Unmanaged
はパフォーマンスやメモリなどの理由で、画像に対してより細かいコントロールが欲しい時に便利です。PreserveBounds
は新しい画像が与えられた画像と同じ Bounds を持つかどうかを表します。デフォルト (ゼロ値) は false で、新しい画像の左上が (0, 0) に調整されることを意味します。
リサンプリングなしのオーディオデコード
(#2055)
リサンプリングを行わないでデコードする新しいオーディオ API が追加されました。 Decode
の暗黙的なリサンプリングは便利であるものの、予想外に遅いことがありました。 DecodeWithoutResampling
は実行コストに関してより明示的です。
また、ソースのリサンプルを明示的に行う API も追加されました:
デバッグ情報
(#2177)
新しい関数 ebiten.ReadDebugInfo
と新しい構造体 ebiten.DebugInfo
が追加されました。これらの API から取得できるのは、今の所現在のグラフィックライブラリの種類だけです。
その他の新しい API
ebiten.IsStandardGamepadAxisAvailable
(#2040)ebiten.IsStandardGamepadButtonAvailable
(#2040)(*ebiten.Image).ReadPixels
(#1995)ebitenutil.DrawCircle
(#2163)ebitenutil.NewImageFromFileSystem
(Go 1.16 以降で利用可能) (#1948)inpututil.AppendJustReleasedTouchIDs
(#2057)inpututil.TouchPositionInPreviousTick
(#2057)
API 名の変更
これらの API が既存の API のエイリアスとして追加されました。既存の API はまだ利用可能ですが、非推奨になりました。
ebiten.SetMaxTPS
→ebiten.SetTPS
ebiten.MaxTPS
→ebiten.TPS
ebiten.CurrentFPS
→ebiten.ActualFPS
ebiten.CurrentTPS
→ebiten.ActualTPS
(*ebiten.Image).ReplacePixels
→(*ebiten.Image).WritePixels
- 環境変数
EBITENGINE_OPENGL
また、環境変数やビルドタグの名前が変更になりました。古いものはまだ利用可能ですが、非推奨です:
- 環境変数
EBITEN_SCREENSHOT_KEY
→EBITENGINE_SCREENSHOT_KEY
- 環境変数
EBITEN_INTERNALIMAGES_KEY
→EBITENGINE_INTERNAL_IMAGES_KEY
- 環境変数
EBITEN_GRAPHICS_LIBRARY
→EBITENGINE_GRAPHICS_LIBRARY
- 環境変数
EBITEN_DIRECTX
→EBITENGINE_DIRECTX
- ビルドタグ
ebitendebug
→ebitenginedebug
- ビルドタグ
ebitensinglethread
→ebitenginesinglethread
Kage (Ebitengine のシェーディング言語) の改善
NewShader
は組み込み関数の引数や演算子に関して、型をより厳密にチェックするようになりました (#2184、 #2187)。
また、これらの組み込み関数が追加されました:
DirectX パフォーマンスの改善
DirectX ドライバが、バージョン 2.3 に比べて 2-3 倍早く動くようになりました。
バグ修正
このリリースはバージョン 2.3 にあったバグ修正全てを含みます。
(*ebiten.Image).Set
が時々正しく動いていなかった問題の修正 (#2154、 #2176、 #2180)。- Firefox で、 HTTPS ではないコンテキストでゲームパッドを使用しようとしたときにクラッシュした問題の修正 (#2100)。
- その他、細かい修正
破壊的変更
- go2cpp のサポートは廃止されました (#2126)。
- ビルドタグ
ebitenwebgl1
は廃止されました。代わりに環境変数EBITENGINE_OPENGL
をwebgl1
という値で使用してください。
v2.4.1
バグ修正
- Windows でメモリリークによってアプリケーションがクラッシュすることがあった問題の修正 (#2292、 #2249)。
- フルスクリーンから戻る時にウィンドウのサイズが正しく戻らなかった問題の修正 (#2295)。
ebitenutil.NewImageFromReader
がモバイル上で利用できなかった問題の修正 (#2301)。
v2.4.2
バグ修正
- Kage の組み込み関数
pow
の引数チェックが間違っていた問題の修正 (#2304)。 go mod vendor
による Ebitengine のベンダリングが動かなかった問題の修正 (#2306)。- Snap サンドボックス下で、アプリケーションがゲームパッド使用時にクラッシュする可能性があった問題の修正 (#2307)。