Ebitengine 2.9 リリースノート
このリリースノートはドラフトです。まだ v2.9.0 はリリースされていません。
v2.9.0
このリリースでは、主に細かい機能追加、バグ修正、パフォーマンス改善を行いました。
Ebitengine 2.9 から Go 1.24 以上が必要になりました。
ベクターグラフィックスの描画クオリティ向上
これまでの vector
パッケージは AppendVerticesAndIndicesForFilling
関数や AppendVerticesAndIndicesForStroke
関数を用いて、ベクター図形を三角形の図形に分割してそれを三角形として描画していました。これには次のような問題がありました:
- エッジ部分がきれいにならない。 Ebitengine では一旦大きいオフスクリーンにベクターグラフィックを描画してそれを縮めるという手法を採用しているが、実行効率も質もあまり良くなかった。
- 半透明色の描画が不可能だった。
Blend
オプションが期待通りに動作しなかった。
新しい手法では、特殊なシェーダーを用いて独自のステンシルバッファーを作成し、そのステンシルバッファーを使って色を塗りつぶすようにしました。これにより、同程度かそれ未満のテクスチャ使用量でも 1 ピクセルあたりのサンプル数が増え、描画結果の質が向上しました。また、複数の三角形を重ねて描画するのではなく、完成されたステンシルバッファーを一気に塗りつぶすため、半透明色を使った描画や Blend
オプションの指定が正しく動作するようになりました。実装にあたっては Evan Wallace さんのブログ記事「Easy Scalable Text Rendering on the GPU」を参考にさせていただきました。
新描画手法のために追加された関数は主に vector.FillPath()
と vector.StrokePath()
になります。新描画手法を使用するためには、これまでの AppendVerticesAndIndicesFor
… 関数呼出しを、新しい関数呼び出しに置き換える必要があります。これまでの AppendVerticesAndIndicesFor
… 関数に関しては描画の結果は変わりません。また、これらの関数は非推奨になります。非推奨関数は、 Ebitengine のメジャーバージョンが同じである限り、これまで通り動きます。ただし、新しいメジャーバージョンでは削除される可能性があります。
新しい API
ebiten.DefaultDrawFinalScreen
(#3139)ebiten.FilterPixelated
(#2826)ebiten.Tick()
(#3213)(*ebiten.Image).DrawTriangles32
(#3201)(*ebiten.Image).DrawTrianglesShader32
(#3201)ebiten.RunGameOptions.ApplePressAndHoldEnabled
(#3233)audio.ResampleReader
(#3194)audio.ResampleReaderF32
(#3194)colorm.DrawImageOptions.ColorScale
(#3188)vector.DrawPathOptions
(#3287)vector.FillOptions
(#3287)vector.FillCircle()
(#3150)vector.FillPath()
(#3153、 #3278)vector.FillRect()
(#3150)vector.StrokePath()
(#3153、 #3278)(*vector.Path).AddPath()
(#3153、 #3266)(*vector.Path).AddStroke()
(#3153、 #3266)(*vector.Path).Bounds()
(#3271)(*vector.Path).Reset()
(#3123)
非推奨になった API
2.8 以前 | 2.9 以降 | Issue |
---|---|---|
ebiten.FillRule |
#3153 | |
ebiten.DrawTrianglesOptions.AntiAlias |
vector.FillPath() |
#3153 |
ebiten.DrawTrianglesOptions.FillRule |
vector.FillPath() |
#3153 |
ebiten.DrawTrianglesShaderOptions.AntiAlias |
vector.FillPath() |
#3153 |
ebiten.DrawTrianglesShaderOptions.FillRule |
vector.FillPath() |
#3153 |
audio.Resample() |
audio.ResampleReader() |
#3194 |
audio.ResampleF32() |
audio.ResampleReaderF32() |
#3194 |
colorm.DrawTrianglesOptions.AntiAlias |
#3153 | |
colorm.DrawTrianglesOptions.FillRule |
#3153 | |
text/v2.GoTextFace.Script |
text/v2.GoTextFace.Language |
#3175 |
vector.Path.AppendVerticesAndIndicesForFilling() |
vector.FillPath() |
#3153 |
vector.Path.AppendVerticesAndIndicesForStroke() |
vector.FillPath() と vector.Path.AddStroke() |
#3153 |
vector.DrawFilledCircle() |
vector.FillCircle() |
#3150 |
vector.DrawFilledRect() |
vector.FillRect() |
#3150 |
バグ修正
このリリースは、以下の修正に加えて、バージョン 2.8 にあった全てのバグ修正を含みます。
- ウィンドウのモニター間の移動でクラッシュが起きることがあった問題の修正 (#3121)。
- タッチパッドの入力で
ebiten.IsMouseButtonPressed
やinpututil.IsMouseButtonJustPressed
の結果が正しくないことがあった問題の修正 (#3137、 #3249)。 - ウィンドウがバックグラウンドのときに、
(*audio.Player).Position()
が正しい値を返さなかった問題の修正 (#3154)。 - シェーディング言語 Kage で、ユニフォーム変数に bool 型を指定するとクラッシュした問題の修正 (#3165)。
audio/vorbis
パッケージなどで、io.Seeker
を正しく実装していないソースをデコーダなどに与えたときにクラッシュした問題の修正 (#3192、 #3193)。ebiten.SetWindowMousePassThrough
を起動前に呼んでも正しく動作しなかった問題の修正 (#3222)。- macOS で画面に時々ちらつきが発生していた問題の修正 (#3278)。
- スリープ復帰時に音楽が勝手に再生してしまうことがあった問題の修正 (#3297)。
- その他マイナーな問題の修正
パフォーマンス改善
(*ebiten.Image).SubImage()
の結果が内部で一定時間キャッシュされるように修正 (#2902)。- その他マイナーなパフォーマンス改善