Ebitengine 2.5 リリースノート
v2.5.0
Xbox のサポート
(#2084)
Ebitengine は Xbox をサポートするようになりました! Odencat が新しい Ebitengine 製ゲーム「メグとばけもの」を 2023 年 3 月 2 日にリリースしました。このゲームは Xbox One および Xbox Series X|S を含む複数のプラットフォームをサポートしています。
他のユーザーからも Xbox 向け Ebitengine を利用可能にするために、現在準備中です。お楽しみに!
ベクターグラフィックス

線や様々な図形を描画する API が vector パッケージに追加されました:
type Directiontype LineCaptype LineJoinfunc vector.DrawFilledCirclefunc vector.DrawFilledRectfunc vector.StrokeCirclefunc vector.StrokeLinefunc vector.StrokeRectfunc (*vector.Path) AppendVerticesAndIndicesForStroke
また、新しいメンバー AntiAlias が ebiten.DrawTrianglesOptions と ebiten.DrawTrianglesShaderOptions に追加されました。 AntiAlias はなめらかなエッジでベクターグラフィックスを描画したいときに便利です。
ブレンド

新しい型 ebiten.Blend が追加されました。 Blend は ebiten.CompositeMode の置き換えを目的としています。 Blend を使うと、描画元・描画先および RGB・α値に対するブレンドファクターと演算方法が指定でき、 CompositeMode よりも細かいコントロールが可能になります。 BlendSourceOver のようなプリセット Blend 定数も利用可能です。
RunGameWithOptions
新しい関数 ebiten.RunGameWithOptions と新しい構造体 ebiten.RunGameOptions が追加されました。 RunGameWithOptions はゲームをオプションつきで実行する新しい関数です。 RunGameOptions で次のようなオプションを指定できます。
GraphicsLibraryは Ebitengine が使うグラフィックライブラリを指定します。SkipTaskbarはアプリケーションアイコンが Windows のタスクバーから消えるかどうかを指定します。これはデスクトップマスコットアプリケーションを作るのに便利です。- 他
スクリーンシェーダーのカスタマイズ
(#2046)
新しいインターフェイス ebiten.FinalScreenDrawer が追加されました。
ebiten.Game を実装しているゲームが ebiten.FinalScreenDrawer も実装している場合、その DrawFinalScreen メソッドがその Draw 呼び出しの後に呼び出され、最終スクリーンの描画方法をそこでカスタマイズできます。 ebiten.Game を実装しているゲームが ebiten.FinalScreenDrawer を実装していない場合は、デフォルトの、ニアレストネイバー法フィルターに似たスクリーンシェーダが使われます。
DrawFinalScreen 関数の引数は、描画先としての最終スクリーン、描画元としてのオフスクリーン画像、最終スクリーンにオフスクリーンをフィットさせるために拡大または縮小するための幾何行列です。オフスクリーン画像はゲームの Draw 関数の引数と同じです。
ebiten.ColorScale と colorm
(#2171)
新しい構造体 ebiten.ColorScale と新しいパッケージ colorm が追加されました。これらの API は既存の色行列を使う API の置き換えを目的としています。ドローコール数などの実行コストに関して、コードがより明示的になります。
単なるスケーリングの場合、新しい構造体 ebiten.ColorScale が使えます。より複雑な色行列の場合、 colorm パッケージの API が使えます。
新しいメンバー ColorScale も ebiten.DrawImageOptions と ebiten.DrawRectShaderOptions に追加されました。
注意すべきなのは、 ColorScale は乗算済みアルファカラーに対して適用されるに対し、 colorm.ColorM はストレートアルファカラーに対して適用される点です。よって、 ColorM.Scale(r, g, b, a) に等しいのは ColorScale.Scale(r*a, g*a, b*a, a) になります。
ファイルのドラッグ & ドロップ
新しい関数 ebiten.DroppedFiles が追加されました。 DroppedFiles は、ドロップされたファイルとディレクトリを含む疑似ファイルシステムを返します。そのファイルシステムでドロップされたファイルの内容にアクセスできます。実際の使い方については、サンプル examples/dropfile を参照してください。
浮動小数点版 Layout
(#2285)
新しいインターフェイス ebiten.LayoutFer が追加されました。 LayoutFer は LayoutF メソッドを持ちます。これは Game の Layout の浮動小数点版です。もし ebiten.Game を実装するゲームが LayoutFer も実装している場合、その LayoutF がその Layout の代わりに呼び出されます。 Layout よりも正確なレイアウト計算を LayoutF で実装できます。
SetScreenClearedEveryFrame(false) による GPU 最適化
(#2342)
SetScreenClearedEveryFrame(false) の呼び出しによってスクリーンが毎フレームクリアされなくなり、また Draw がスクリーンを変更しなかった場合、 Ebitengine は GPU の使用を抑えます。
この最適化により、 FPSModeVsyncOffMinimum は不要となります。これは GPU 使用を抑えるのには有効でしたが、マウスカーソルを素早く動かしたときのパフォーマンスなどに問題がありました。 Ebitengine 2.5 では、型 FPSModeType とそれを使う API は非推奨になりました。代わりに、 ebiten.SetVsyncEnabled と ebiten.IsVsyncEnabled は非推奨ではなくなりました。
その他の新しい API
type ebiten.ColorScaleMode(#2365)func ebiten.KeyName(#1904)const ebiten.MouseButton0-const ebiten.MouseButton4(#2445)const ebiten.Termination(#2266)func inpututil.AppendJustPressedKeys(#2381)func inpututil.AppendJustReleasedKeys(#2381)func inpututil.AppendJustPressedGamepadButtons(#2381)func inpututil.AppendJustPressedStandardGamepadButtons(#2381)func inpututil.AppendJustReleasedGamepadButtons(#2381)func inpututil.AppendJustReleasedStandardGamepadButtons(#2381)func inpututil.AppendPressedGamepadButtons(#2381)func inpututil.AppendPressedStandardGamepadButtons(#2381)
Kage (シェーダー)
- 新しい型が追加されました:
ivec2、ivec3、ivec4(#1911) intの値がユニフォーム変数として許容されるようになりました (#2305)- 配列がユニフォーム変数として許容されるようになりました (#2448)
OpenGL ES
(#292)
OpenGL ES が、利用可能なときは自動的に選ばれるようになりました。明示的に OpenGL ES を指定する場合は、環境変数 EBITENGINE_OPENGL を es に指定してください。
パフォーマンス改善
Ebitengine 2.5 では次のようなパフォーマンス改善が行われています:
- 部分画像に対する描画がより効率的になりました (#2232)。
- メモリ使用量が減りました (#2274)。
- 正方形ではない内部テクスチャが許容されるようになりました (#2327)。
- 内部テクスチャの数が減りました (#2581)。
非推奨 API
いくつかの API が非推奨になりました。非推奨 API はバージョン 2 である限りは利用可能ですが、新しい API に置き換えることが推奨されます。
| 2.4 以前 | 2.5 以後 |
|---|---|
type ebiten.ColorM | type ebiten.ColorScale または colorm パッケージ |
type ebiten.CompositeMode | type ebiten.Blend |
type ebiten.FPSModeType | (該当なし) |
const ebiten.CompositeMode* | const ebiten.Blend* |
const ebiten.FPSMode* | (該当なし) |
func (*ebiten.Image) Size | func (*ebiten.Image) Bounds |
func ebiten.IsScreenFilterEnabled | (該当なし) |
func ebiten.IsScreenTransparent | (該当なし) |
func ebiten.FPSMode | func ebiten.IsVsyncEnabled |
func ebiten.ScheduleFrame | ebiten.SetScreenClearedEveryFrame(false) |
func ebiten.SetFPSMode | func ebiten.SetVsyncEnabled |
func ebiten.SetInitFocused | func ebiten.RunGameWithOptions |
func ebiten.SetScreenFilterEnabled | インターフェイス ebiten.FinalScreenDrawer |
func ebiten.SetScreenTransparent | func ebiten.RunGameWithOptions |
func ebitenutil.DrawLine | func vector.StrokeLine (アンチエイリアス無効) |
func ebitenutil.DrawCircle | func vector.DrawFilledCircle (アンチエイリアス無効) |
func ebitenutil.DrawRect | func vector.DrawFilledRect (アンチエイリアス無効) |
バグ修正
このリリースはバージョン 2.4 にあった全てのバグ修正を含みます。
破壊的変更
その他
- サンプルのためのビルドタグ
exampleは不要になりました (#1462)。 - パッケージ
textがヒンティングを考慮する用になりました。textは、フォントがヒンティングを使用しない場合のために、サブピクセルのずれを考慮したグリフを作るようになりました (#2469、 #2528)。
v2.5.1
バグ修正
- macOS 上で、
ebiten.SetRunnableOnUnfocused(false)を呼び出す Ebitengine アプリケーションが起動しなかった問題の修正 (#2620)。
v2.5.2
バグ修正
- Web ブラウザで、
CursorModeCaptureを使用したときにマウスカーソルの位置が正しくなかった問題の修正 (#2634).
v2.5.3
バグ修正
- Kage で
vec2に対する Swizzling の要素rがコンパイルできなかった問題の修正 (#2652)。
v2.5.4
バグ修正
shaderサンプル内でpositionの使用方法が間違っていたのを修正 (#2638)。
v2.5.5
バグ修正
- iOS アプリケーションが稀にクラッシュしていた問題の修正 (#2679)。
ebiten.AppendInputCharsが Android 上で正しく動いていなかった問題の修正 (#2682、 #2684)。
v2.5.6
バグ修正
- Go 1.21 で macOS 上でクラッシュした問題の修正 (#2700)。
v2.5.7
バグ修正
- 32bit マシンでの、オーバーフローによるパフォーマンス問題を修正 (#2728)。
v2.5.8
バグ修正
- macOS で
DYLD_FALLBACK_FRAMEWORK_PATH環境変数が設定されているときに起動しないことがあった問題の修正 (#2732)。 (*ebiten.Image).DrawImageおよび(*ebiten.Image).DrawRectShaderでoptions引数の内容をを誤って変更することがあった問題の修正 (#2733)。(*audio.Player).Playを独立した goroutine で呼んだときにデッドロックすることがあった問題の修正 (#2737)。
v2.5.9
バグ修正
ebiten.RunGameを呼ぶ前にebiten.SetCursorModeなどを別 goroutine から呼び出したときにクラッシュすることがあった問題の修正 (#2742)。