OSDN Ticket Archive


Ticket #23969

曲名に含まれる空白文字がタイトル表示に反映されない

登録: 2010-12-26 13:04 最終更新: 2010-12-26 14:25

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

詳細

MIDIファイルに格納されている曲名の文字列に空白文字が含まれている場合、 画面上部に表示するタイトルに反映されない。 例えば曲名が「Foo Bar 123」であると、タイトルは「FooBar123」と表示される。

チケットの履歴

2010-12-26 13:04 更新者: yknk
  • 新しいチケット "曲名に含まれる空白文字がタイトル表示に反映されない" が作成されました
2010-12-26 14:10 更新者: yknk
コメント

原因

フォントビットマップクラスの不具合。

MTFont2Bmp::_WriteGlyphToBmpBuf()において、 1文字ずつ個別に作成したビットマップを1行の文字列としてメモリ上に並べるとき、 空文字の書き込み処理をスキップしていたが、次の文字の書き込み位置の更新もスキップしていた。 このため空白文字が描画に反映されなかった。

2010-12-26 14:13 更新者: yknk
コメント

対策

MTFont2Bmp::_WriteGlyphToBmpBuf()

空白文字が現れたときは、次の文字の書き込み位置を更新してから描画処理をスキップする。

修正前
//空文字はスキップ
if (itr->pBmp == NULL) continue;

修正後
//空文字はスキップ
if (itr->pBmp == NULL) {
    offsetX += (itr->glyphMetric.gmCellIncX);
    continue;
}
2010-12-26 14:25 更新者: yknk
  • 解決法なし から 修正済み に更新されました
  • 状況オープン から 完了 に更新されました
  • チケット完了時刻2010-12-26 14:25 に更新されました
コメント

備考

本件の対策中に「曲名が長すぎると文字列のビットマップがテクスチャ画像の最大サイズを超えてしまう可能性がある」ことを発見した。 一般的なテクスチャ画像の最大サイズは2048のため、ビットマップを作成できてもテクスチャの作成でエラーが発生する可能性がある。 最近のビデオカードでは大抵2048以上のテクスチャをサポートしているはずであるが、それでも何らかの限界値があることに変わりはない。

念のため、文字列のビットマップ作成処理では、横幅2048以上は切り落とすことにする。

#本来は別のチケットで対応するべき

MTFont2Bmp::_CreateBmpBuf()
追加
//テクスチャとして許容される一般的なサイズを超える場合はクリップする
if (m_BmpWidth > MTFONT2BMP_MAX_BMP_WIDTH) {
    m_BmpWidth = MTFONT2BMP_MAX_BMP_WIDTH;
}

MTFont2Bmp::_WriteGlyphToBmpBuf()
追加
//コピー先の領域外になる場合はスキップする
destX = offsetX + (itr->glyphMetric.gmptGlyphOrigin.x) + x;
if (destX >= (m_BmpWidth-1)) continue;

添付ファイルリスト

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