Repository navigation
4.0.2: 26.3 の入力 (看板の設置、画面の操作と文字の入力) の修正、読み込みの高速化 - #23
Merged
Merged
Conversation
読み込みの速さ (同じファイルで、変える前と結果が 1 ビットも変わらないことを確かめた) - 画像: BufferedImage.getRGB の代わりに、よく使われる形式ではデータを直接読み替える (ArgbPixels)。 4096x4096 の JPEG で 463 -> 186 ms、PNG で 535 -> 270 ms。全形式で getRGB と一致することを argbCheck で確かめる - ImageIO が一時ファイルを使わずにメモリから読むようにした (ImageBytes。アニメーション PNG はフレームごとに書いていた) - PDF: フォントの一覧を作るとき、フォルダを 1 回たどるだけで大きさと更新日時も得て、読み直すフォントは並列に読む。 初回 3.2 -> 0.3 秒、2 回目から 1.7 -> 0.1 秒。PDFBox の一覧と 6028 個すべて同じ順で一致することを fontListCheck で確かめる - 3D モデル: 焼き込みで各点の色を並列に計算し、焼き込みで置き換わる色のテクスチャは使うときだけ作り、遮蔽の暗さは表で引く。 手元の 37 個のサンプルで合計 42.1 -> 17.7 秒。結果のハッシュが変わらないことを gltfHash で確かめた - ダウンロード: 大きさが分かれば配列を最初からその大きさで作り、読み終えた接続は使い回す (keep-alive)。 読み込みは次の tick を待たずに始め、終えたスレッドがすぐ次を始める - ダウンロードしたファイルを marumasign/cache に合計 512 MB まで保存し、次は ETag / Last-Modified で変わったかだけを問い合わせる。 サーバーにつながらないときは保存したものを使う (downloadCacheCheck) - loadBenchmark で、ファイルごとのダウンロードと読み込みの時間を測れるようにした 実機確認の判定 - 看板が描かれようとしてから表示されるまでの時間を記録し、15 秒を超えたら失敗にする。結果の load_ms に残し、遅いものを表示する - 読み込みに失敗したら時間切れを待たずに失敗にする。看板アイテムが描かれなかったら失敗にする (これまでは合格扱い) - 動画の音量の確認は、音量 0 で確かめていたため常に 0 と 0 の比較になっていた。設定の音量を 100 としたときの大きさで比べ、 看板の前で聞こえないときも失敗にする - 新しいバージョンにないメソッドを呼んだとき (LinkageError) も、ゲームを落とさずに結果として残す - Mod の読み込み・再生の失敗を、INFO の行でも警告として数える - 基準のない組み合わせは合格にしない。既知の警告は、クライアントとサーバーのどちらのログに当てはめるかを分けた - やり直して合格しても、1 回目の失敗の内容を残し、表に「1 回目は失敗」と書く - 既知の警告に、Windows のパフォーマンスカウンターが壊れているときに Minecraft 自体が出すものを加えた
26.3 から入力が GLFW から SDL に変わり、マウスボタンは 1 から数える (右クリックは 3) ようになった。 使用キーの代わり (UseKey) が既定のキーを「マウスの 1」に決め打ちしていたため、26.3 では既定が左クリックになり、 実機確認で既定のキーを押すと攻撃になって看板を置けなかった。既定のキーも元の使用キーのものを使うようにした。 あわせて、MarumaSign の画面を開くキーの既定が、26.3 では B ではなく別のキー (SDL のスキャンコード 66) に なっていたのを直した。B キーの番号は Mc ごとに持つようにした。
26.3 から入力が GLFW から SDL に変わり、マウスボタンは 1 から数えるように、キーはスキャンコードに、 修飾キーは左右で別のビットになった。画面は GLFW の番号のまま見ていたため、左クリック、Esc、Enter、 矢印、Backspace、Ctrl+V などが効かなかった。 左クリックは InputConstants.MOUSE_BUTTON_LEFT と比べるようにした (値はコンパイル時に埋め込まれるため、 26.2 以前は 0 のまま)。キーは 26.3 のときだけ Key.fromSdl と Key.modifiersFromSdl で変換し、 Ctrl+A / C / V / X は Minecraft と同じくキーボードの配列に合わせた判定 (isPaste など) を使う。 26.2 以前の変換は変えていない。
26.3 から入力が SDL になり、文字の入力 (charTyped) は画面が TextInputManager に開始を伝えたときだけ 届くようになった (看板の編集画面も init で startTextInput、removed で stopTextInput を呼んでいる)。 MarumaSign の画面は伝えていなかったため、Ctrl+V では入るのに、キーで打った文字が入らなかった。 Mc に startTextInput / stopTextInput を足し、画面を開いたときと閉じたときに呼ぶようにした。 26.3 だけが TextInputManager を使い、1.21.9 - 26.2 では何もしない。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
4.0.2 として、次をまとめて入れます。main に入ると、release ワークフローが v4.0.2 を作ります。
splatの最後のコミット (#18 のあとに足したもの) と、26.3 の入力の修正 2 つのブランチを、main の上に並べ直したものです (main の中身はorigin/splatと同じなので、そのまま当たります)。26.3 の入力 (GLFW から SDL への変更)
26.3 から入力が SDL になり、マウスボタンは 1 から数える (右クリックは 3)、キーはスキャンコード、修飾キーは左右で別のビットになりました。
InputConstants.KEY_Bを使うようにしたInputConstants.MOUSE_BUTTON_LEFTと比べ、キーは 26.3 のときだけKey.fromSdl/Key.modifiersFromSdlで変換する。Ctrl+A / C / V / X は Minecraft と同じく、キーボードの配列に合わせた判定 (isPasteなど) を使うTextInputManager.startTextInputを呼んだ画面にだけ文字が届くので、画面を開いたときに呼び、閉じたときに止める1.21.9 - 26.2 の動きは変えていません (左クリックの番号はコンパイル時に埋め込まれる定数で、26.2 以前は 0 のまま。文字の入力の開始は何もしない)。
読み込みの速さと、実機確認の判定
marumasign/cacheに 512 MB まで保存し、次は ETag / Last-Modified で変わったかだけを問い合わせる確認したこと
確認していないこと