Ebitengine 2.5 リリースノート

v2.5.0

Issues for v2.5.0

Xbox のサポート

(#2084)

Ebitengine は Xbox をサポートするようになりました! Odencat が新しい Ebitengine 製ゲーム「メグとばけもの」を 2023 年 3 月 2 日にリリースしました。このゲームは Xbox One および Xbox Series X|S を含む複数のプラットフォームをサポートしています。

他のユーザーからも Xbox 向け Ebitengine を利用可能にするために、現在準備中です。お楽しみに!

ベクターグラフィックス

(#1843#2387)

Lines

サンプル「lines」

線や様々な図形を描画する API が vector パッケージに追加されました:

また、新しいメンバー AntiAliasebiten.DrawTrianglesOptionsebiten.DrawTrianglesShaderOptions に追加されました。 AntiAlias はなめらかなエッジでベクターグラフィックスを描画したいときに便利です。

ブレンド

(#1450#2382)

blend

サンプル「blend」

新しい型 ebiten.Blend が追加されました。 Blendebiten.CompositeMode の置き換えを目的としています。 Blend を使うと、描画元・描画先および RGB・α値に対するブレンドファクターと演算方法が指定でき、 CompositeMode よりも細かいコントロールが可能になります。 BlendSourceOver のようなプリセット Blend 定数も利用可能です。

RunGameWithOptions

(#2378#1518)

新しい関数 ebiten.RunGameWithOptions と新しい構造体 ebiten.RunGameOptions が追加されました。 RunGameWithOptions はゲームをオプションつきで実行する新しい関数です。 RunGameOptions で次のようなオプションを指定できます。

スクリーンシェーダーのカスタマイズ

(#2046)

新しいインターフェイス ebiten.FinalScreenDrawer が追加されました。

ebiten.Game を実装しているゲームが ebiten.FinalScreenDrawer も実装している場合、その DrawFinalScreen メソッドがその Draw 呼び出しの後に呼び出され、最終スクリーンの描画方法をそこでカスタマイズできます。 ebiten.Game を実装しているゲームが ebiten.FinalScreenDrawer を実装していない場合は、デフォルトの、ニアレストネイバー法フィルターに似たスクリーンシェーダが使われます。

DrawFinalScreen 関数の引数は、描画先としての最終スクリーン、描画元としてのオフスクリーン画像、最終スクリーンにオフスクリーンをフィットさせるために拡大または縮小するための幾何行列です。オフスクリーン画像はゲームの Draw 関数の引数と同じです。

ebiten.ColorScalecolorm

(#2171)

新しい構造体 ebiten.ColorScale と新しいパッケージ colorm が追加されました。これらの API は既存の色行列を使う API の置き換えを目的としています。ドローコール数などの実行コストに関して、コードがより明示的になります。

単なるスケーリングの場合、新しい構造体 ebiten.ColorScale が使えます。より複雑な色行列の場合、 colorm パッケージの API が使えます。

新しいメンバー ColorScaleebiten.DrawImageOptionsebiten.DrawRectShaderOptions に追加されました。

注意すべきなのは、 ColorScale は乗算済みアルファカラーに対して適用されるに対し、 colorm.ColorM はストレートアルファカラーに対して適用される点です。よって、 ColorM.Scale(r, g, b, a) に等しいのは ColorScale.Scale(r*a, g*a, b*a, a) になります。

ファイルのドラッグ & ドロップ

(#1868#2552)

新しい関数 ebiten.DroppedFiles が追加されました。 DroppedFiles は、ドロップされたファイルとディレクトリを含む疑似ファイルシステムを返します。そのファイルシステムでドロップされたファイルの内容にアクセスできます。実際の使い方については、サンプル examples/dropfile を参照してください。

浮動小数点版 Layout

(#2285)

新しいインターフェイス ebiten.LayoutFer が追加されました。 LayoutFerLayoutF メソッドを持ちます。これは GameLayout の浮動小数点版です。もし ebiten.Game を実装するゲームが LayoutFer も実装している場合、その LayoutF がその Layout の代わりに呼び出されます。 Layout よりも正確なレイアウト計算を LayoutF で実装できます。

SetScreenClearedEveryFrame(false) による GPU 最適化

(#2342)

SetScreenClearedEveryFrame(false) の呼び出しによってスクリーンが毎フレームクリアされなくなり、また Draw がスクリーンを変更しなかった場合、 Ebitengine は GPU の使用を抑えます。

この最適化により、 FPSModeVsyncOffMinimum は不要となります。これは GPU 使用を抑えるのには有効でしたが、マウスカーソルを素早く動かしたときのパフォーマンスなどに問題がありました。 Ebitengine 2.5 では、型 FPSModeType とそれを使う API は非推奨になりました。代わりに、 ebiten.SetVsyncEnabledebiten.IsVsyncEnabled は非推奨ではなくなりました。

その他の新しい API

Kage (シェーダー)

OpenGL ES

(#292)

OpenGL ES が、利用可能なときは自動的に選ばれるようになりました。明示的に OpenGL ES を指定する場合は、環境変数 EBITENGINE_OPENGLes に指定してください。

パフォーマンス改善

Ebitengine 2.5 では次のようなパフォーマンス改善が行われています:

非推奨 API

いくつかの API が非推奨になりました。非推奨 API はバージョン 2 である限りは利用可能ですが、新しい API に置き換えることが推奨されます。

2.4 以前2.5 以後
type ebiten.ColorMtype ebiten.ColorScale または colorm パッケージ
type ebiten.CompositeModetype ebiten.Blend
type ebiten.FPSModeType(該当なし)
const ebiten.CompositeMode*const ebiten.Blend*
const ebiten.FPSMode*(該当なし)
func (*ebiten.Image) Sizefunc (*ebiten.Image) Bounds
func ebiten.IsScreenFilterEnabled(該当なし)
func ebiten.IsScreenTransparent(該当なし)
func ebiten.FPSModefunc ebiten.IsVsyncEnabled
func ebiten.ScheduleFrameebiten.SetScreenClearedEveryFrame(false)
func ebiten.SetFPSModefunc ebiten.SetVsyncEnabled
func ebiten.SetInitFocusedfunc ebiten.RunGameWithOptions
func ebiten.SetScreenFilterEnabledインターフェイス ebiten.FinalScreenDrawer
func ebiten.SetScreenTransparentfunc ebiten.RunGameWithOptions
func ebitenutil.DrawLinefunc vector.StrokeLine (アンチエイリアス無効)
func ebitenutil.DrawCirclefunc vector.DrawFilledCircle (アンチエイリアス無効)
func ebitenutil.DrawRectfunc vector.DrawFilledRect (アンチエイリアス無効)

バグ修正

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

破壊的変更

その他

v2.5.1

バグ修正

Issues for v2.5.1

v2.5.2

バグ修正

Issues for v2.5.2

v2.5.3

バグ修正

Issues for v2.5.3

v2.5.4

バグ修正

Issues for v2.5.4

v2.5.5

バグ修正

Issues for v2.5.5

v2.5.6

バグ修正

Issues for v2.5.6

v2.5.7

バグ修正

Issues for v2.5.7

v2.5.8

バグ修正

Issues for v2.5.8

v2.5.9

バグ修正

Issues for v2.5.9

v2.5.10

バグ修正

Issues for v2.5.10