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):
CursorShapeDefault
CursorShapeText
CursorShapeCrosshair
CursorShapePointer
次のキー定数が追加されました (#1382、 #1561):
KeyAltLeft
KeyAltRight
KeyControlLeft
KeyControlRight
KeyMeta
KeyMetaLeft
KeyMetaRight
KeyShiftLeft
KeyShiftRight
キー定数の命名規則変更に伴い、次のキー定数が既存キーの置き換えとして追加されました (#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)。