Ticket #39726

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

Open Date: 2019-11-06 01:17 Last Update: 2019-11-07 01:30

Reporter:
Owner:
Type:
Status:
Closed
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
Fixed
File:
None

Details

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

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

Ticket History (3/6 Histories)

2019-11-06 01:17 Updated by: yknk
  • New Ticket "起動時に"Unsupported bitmap format"エラーが発生する" created
2019-11-06 01:20 Updated by: yknk
Comment

調査状況

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 Updated by: yknk
Comment

原因

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

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

2019-11-06 01:22 Updated by: yknk
Comment

対策

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

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

2019-11-06 01:23 Updated by: yknk
  • Summary Updated
2019-11-07 01:30 Updated by: yknk
  • Status Update from Open to Closed
  • Resolution Update from None to Fixed

Attachment File List

No attachments

Edit

Please login to add comment to this ticket » Login