Ebiten 2.1 リリースノート
v2.1.0
新機能
関数
次の関数が追加されました (#770、 #995、#1385、 #1561):
ebiten.CursorShape: 現在のカーソルの形を取得する。ebiten.SetCursorShape: 現在のカーソルの形を設定する。ebiten.SetWindowSizeLimits: ウィンドウの大きさ制限を設定する。ebiten.WindowSizeLimits: ウィンドウの大きさ制限を取得する。inpututil.PressedKeys: 現在押されているすべてのキーを取得する。
カーソルについては新しいサンプル examples/cursor を参照してください。
関数 (audio)
次の関数が追加されました (#1460):
mp3.DecodeWithSampleRate: MP3 を与えられたサンプルレートでデコードする。vorbis.DecodeWithSampleRate: Ogg/Vorbis を与えられたサンプルレートでデコードする。wav.DecodeWithSampleRate: WAV を与えられたサンプルレートでデコードする。
関数 (text)
text.CacheGlyphs が追加されました (#1413)。
与えられた文字列とフォントから、グリフの事前キャッシュを作ります。
キャッシュは text.Draw と共有されます。グリフは LRU 方式でキャッシュされます。キャッシュ容量には上限があるので、 CacheGlyphs で与えられた文字のグリフすべてがキャッシュされる保証はありません。
Draw は自動的にグリフを作成しキャッシュするので、通常 CacheGlyphs を明示的に呼ぶ必要はありません。しかし、例えば、大きなテキストの 1 文字ずつに対して Draw を呼ぶ場合、 Draw はグリフを作って描画を作るということを 1 文字ずつに対して行います。これはとても非効率的です。なぜならばグリフの画像を作るのとそれを描画するのは異なる操作で ((*ebiten.Image).ReplacePixels と (*ebiten.Image).DrawImage)、 1 つのドローコールとしてマージされないからです。 CacheGlyphs は必要なグリフを描画せずに作るので、文字列の大きさに関わりなく、高確率で操作がマージされて 1 つのドローコールになります。 2 つの関数は次のように実装されています:
Draw= 必要ならばグリフを(*ebiten.Image).ReplacePixelsで作り、それらをキャッシュする +(*ebiten.Image).DrawImageで描画先上に描画するCacheGlyphs= 必要ならばグリフを(*ebiten.Image).ReplacePixelsで作り、それらをキャッシュする
定数
システムカーソルのために、型 CursorShapeType 及び次の定数が追加されました (#995):
CursorShapeDefaultCursorShapeTextCursorShapeCrosshairCursorShapePointer
次のキー定数が追加されました (#1382、 #1561):
KeyAltLeftKeyAltRightKeyControlLeftKeyControlRightKeyMetaKeyMetaLeftKeyMetaRightKeyShiftLeftKeyShiftRight
キー定数の命名規則変更に伴い、次のキー定数が既存キーの置き換えとして追加されました (#1394)。置き換わり元のキー定数は互換性のために残しています:
KeyArrowDown(元:KeyDown)KeyArrowLeft(元:KeyLeft)KeyArrowRight(元:KeyRight)KeyArrowUp(元:KeyUp)KeyBackquote(元:KeyGraveAccent)KeyBracketLeft(元:KeyLeftBracket)KeyBracketRight(元:KeyRightBracket)KeyContextMenu(元:KeyMenu)KeyDigit0(元:Key0)KeyDigit1(元:Key1)KeyDigit2(元:Key2)KeyDigit3(元:Key3)KeyDigit4(元:Key4)KeyDigit5(元:Key5)KeyDigit6(元:Key6)KeyDigit7(元:Key7)KeyDigit8(元:Key8)KeyDigit9(元:Key9)KeyNumpad*(元:KeyKP*)KeyQuote(元:KeyApostrophe)
ビルドタグ
新しいビルドタグ ebitensinglethread が追加されました (#1367)。有効にすると、内部のスレッドが 1 つになり、パフォーマンスの向上が期待されます。副作用として、すべてのコンカレントセーフな Ebiten の関数が、コンカレントセーフでなくなります。
その他
- Go を C++ に変換するツールである、 go2cpp に対応しました (#744)。これにより、 Go が本来コンパイルできない環境でも Ebiten を動かす事ができるようになります。環境に合わせてバインディングの実装が必要です。詳細については、今後発表していく予定です。
- ウィンドウを拡大縮小しても、描画が止まらなくなりました (#1204)。
SubImageで作られた部分画像に対してFillやDrawImageなどが呼べるようになりました (#1255、 #1461)。これにより、クリッピングを使った描画ができるようになりました。CursorModeCapturedが一部ブラウザでも動くようになりました (#1572)。- シェーディング言語 Kage で
constが使えるようになりました (#1192)。 - シェーディング言語 Kage に
cap関数が追加されました (#1361)。 - シェーディング言語 Kage に
imageDstOnTexture関数が追加されました (#1428)。 - ブラウザにおけるオーディオを再実装しました (#1458)。オーディオバッファに余裕ができ、ノイズが減ることが期待されます。
後方互換性
- 「負のミップマップ」が廃止されました (#1400)。これにより、大きな拡大率で描画した場合、端の描画の結果が v2.0 と比べて変わることがあります。端を含めて確実に描画したい場合は、描画元画像に
SubImageを用いて、大きな画像の一部として描画してください。
バグ修正
このリリースには、 v2.0.x にあるすべてのバグ修正が含まれます。
- TPS の値が極端に小さい場合にうまく動かなかった問題の修正 (#1417)
- TPS の値が極端に大きい場合にうまく動かなかった問題の修正 (#1443、 #1444)
CursorPositionが極端に小さい値を返すことがあった問題を修正 (#1587)。GamepadNameおよびGamepadSDLIDがブラウザで間違った値を返す可能性があった問題の修正 (#1472)。SetWindowIconに*ebiten.Imageを与えるとクラッシュした問題の修正 (#1468)。- フルスクリーン時に
SetWindowIconを呼ぶとアイコンが消えてしまう問題の修正 (#1587)。 NewInfiniteLoopおよびNewInfiniteLoopWithIntroに 4 の倍数でない長さのバッファを与えたときにうまく動かなかった問題の修正 (#1503)。- シェーディング言語 Kage で
dfdx、dfdy、fwidth関数がブラウザで動かなかった問題の修正 (#1404)。 - シェーディング言語 Kage で同名の関数が重複してもエラーにならなかった問題の修正 (#1430)。
パフォーマンス改善
- スレッドのコンテキストスイッチの削減 (#1358)。
(*ColorM).Scaleの結果をキャッシュするように修正 (#1474)。- Metal において
ReplacePixelsが遅くなることがあった問題の改善 (#1418、 #1517)。 - 内部テクスチャアトラス拡大時に
ReplacePixelsではなくDrawImageを使用するように変更 (#1022、 #1414)。 - 独立内部テクスチャを内部テクスチャアトラス上に乗せるときに
ReplacePixelsではなくDrawImageを使用するように変更 (#1508)。 - JavaScript オブジェクト生成を削減 (#1426)。
- JavaScript 文字列生成を削減 (#1437、 #1438)。
- WebGL2 関数の使用 (#1435)
inpututilパッケージ使用時のオブジェクト生成を削減 (#1473)。
v2.1.1
バグ修正
- ブラウザで、画面のフォーカスが外れてもオーディオが止まらなかった問題の修正 (#1630)。
- ブラウザで、オーディオの長さが正確に内部バッファサイズの倍数だったときにクラッシュした問題の修正 (#1635)。
v2.1.2
バグ修正
ebitenmobileが環境変数EBITENMOBILE_GOMOBILEを指定したときにうまく動かなかった問題の修正 (#1667)。ebitenmobileが一時ディレクトリを削除しなかった問題の修正 (#1668)。- Windows で
SetWindowSizeを呼びすぎるとクラッシュすることがある問題の修正 (#1672)。
v2.1.3
バグ修正
v2.1.4
バグ修正
EBITEN_SCREENSHOT_KEYによるスクリーンショットが 1px のボーダーを含んでしまっていた問題の修正 (#1736)。- WebGL2 が動かないときの WebGL1 フォールバックが動かないことがあった問題の修正 (#1738)。
v2.1.5
バグ修正
- 一部のゲームパッドが使われていたときにクラッシュする問題の修正 (#1229)。
- 32bit Windows においてクラッシュする問題の修正 (#1750)。
Shaderを破棄したあとにShaderを作成したときに、予期しない描画結果になることがある問題の修正 (#1753)。- Windows でシェーダーが期待通りに動かないことがある問題の修正 (#1754)。
v2.1.6
バグ修正
- Windows でフルスクリーンになるときに Vsync モードが予期せずリセットされる問題の修正 (#1787)。
v2.1.7
バグ修正
- macOS のネイティブなフルスクリーン時に、
MinimizeWindowまたはMaximizeWindowを呼ぶとフリーズする問題の修正 (#1810)。