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 Direction
type LineCap
type LineJoin
func vector.DrawFilledCircle
func vector.DrawFilledRect
func vector.StrokeCircle
func vector.StrokeLine
func vector.StrokeRect
func (*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)。