OSDN Ticket Archive


Ticket #39726

macOS版 起動時に"Unsupported bitmap format"エラーが発生する

登録: 2019-11-06 01:17 最終更新: 2019-11-07 01:30

報告者:
yknk
担当者:
yknk
チケットの種類:
バグ
状況:
完了
コンポーネント:
MIDITrail Ver.1.3.x for macOS
マイルストーン:
Version 1.3.1 for macOS (完了済み)
優先度:
5 - 中
重要度:
5 - 中
解決法:
修正済み
ファイル:
なし

詳細

App Store に Ver.1.3.1 を提出したところ、却下された。

We discovered one or more bugs in your app when reviewed on Mac running macOS 10.15.
Error displayed on launch.
(Please see attached screenshot)

却下の理由は、MIDITrail起動時に以下のエラーが発生するため。

ERROR
Unsupported bitmap format.
FILE: OGLTexture.mm
LINE: 123
INFO: 00000040 00000000

ユーザからも同様の報告があり、チケット登録されている。

  • #39716 fails on startup

チケットの履歴

2019-11-06 01:17 更新者: yknk
  • 新しいチケット "起動時に"Unsupported bitmap format"エラーが発生する" が作成されました
2019-11-06 01:20 更新者: yknk
コメント

調査状況

App Storeでの却下理由と、#39716の報告のいずれも、macOS Catalina (10.15)で問題が発生している。 しかし、Mac mini Late 2014 に Catalina を導入した環境では、当該事象は発生していない。

起動直後にエラーが発生している前提で、エラーメッセージから判断できる情報は以下の通り。

"MIDITrail"のロゴを表示するため、文字列を描画したビットマップを作成してテクスチャを生成するとき、 ビットマップのピクセルデータフォーマットがサポートしていない値であった。

エラー発生までの処理フローは以下の通り。

  • (1) MTLogo:_CreateTexture 文字列テクスチャ生成を依頼
  • (2) MTFontTexture::CreateTexture 文字列を描画したビットマップを生成
  • (3) OGLTexture::LoadBitmap ビットマップからテクスチャを生成

(3)において、ビットマップのピクセルデータフォーマットがサポートしていない値であった。 24bit(RGB)または32bit(RGBA)を期待しているところ、64bitになっていたため、 サポート対象でないとしてエラーと判定した。

以下のページで、同様の問題が報告されていた。 こちらはCatalina(10.15)と新しいMacBookの組み合わせで発生している。

NSImage to Texture
https://stackoverflow.com/questions/58403209/nsimage-to-texture

2019-11-06 01:21 更新者: yknk
コメント

原因

MTFontTexture::CreateTexture にて、文字列を描画したビットマップを生成するとき、 NSBitmapImageRep の initWithFocusedViewRect メソッドを利用して、 すでに文字列がレンダリングされた結果からビットマップを生成していた。

pBitmap = [[NSBitmapImageRep alloc] initWithFocusedViewRect:rect];
しかし、initWithFocusedViewRect メソッドは非推奨になっており、 OSの仕様変更によって、特定の条件(おそらくMacの機種に依存)で動作結果が変わってしまったと推測する。 エラーを再現できる環境がないため、断定ができない。

2019-11-06 01:22 更新者: yknk
コメント

対策

MTFontTexture::CreateTexture にて、initWithFocusedViewRect メソッドの利用を取りやめる。

文字列の描画処理の前に、NSBitmapImageRep の initWithBitmapDataPlanes メソッドを用いて、 ピクセルデータフォーマットを指定してビットマップを作成する。 作成したビットマップをカレントコンテキストに指定してから、文字列の描画処理を行う。 これにより、常に期待するピクセルデータフォーマットでビットマップが作成されるようにする。

2019-11-06 01:23 更新者: yknk
  • 概要が更新されました
2019-11-07 01:30 更新者: yknk
  • 解決法なし から 修正済み に更新されました
  • 状況オープン から 完了 に更新されました

添付ファイルリスト

添付ファイルはありません