Closed alto0126 closed 2 years ago
検証途中ですが、進展があったので報告します。
サブセットフォントメーカーでASCIIのみに軽量化したフォントで検証した結果、症状改善せず。 よってフォントファイル容量が原因ではない
ttf2bin.py
によってコード埋め込みにした場合、両フォント(軽量化済み)は正常に表示。
よって、ファイルからの読み込み時にのみ症状が出る
以上の検証結果から、原因はファイル読み込みの部分だと考えられます。 おそらくファイル読み込み部分の処理がインスタンスごとに分けられていないため、 後からロードしたフォントで上書きされてしまっているのだと思います。
この問題に対応する予定ですが、おそらく時間がかかります。 しばらくの間、複数フォント利用時はコード埋め込みによる利用をしていただければと思います。
私の方でもその後色々調べていますが原因は見つけられていません。私もファイルアクセス辺りが怪しいと考えています。 例えば、下記の様にコードを書いてみると
ofr1.loadFont("/font/ShipporiMincho-Bold.ttf"); ofr1.setDrawer(M5.Lcd); ofr1.setFontSize(30); ofr1.setCursor(0, 0); ofr1.printf("1234"); ofr2.loadFont("/font/OpenSans-Bold.ttf"); ofr2.setDrawer(M5.Lcd); ofr1.setFontSize(30); ofr1.setCursor(0, 50); ofr1.printf("123456789"); ofr2.setFontSize(30); ofr2.setCursor(0, 100); ofr2.printf("12345678");
最初にofr1で、「1234]と出力したときにこの内容はキャッシュに残っているようで、 その後、ofr2.loadFont()を実行した後に、ofr1で「123456789」と出力すると、[1234」まで正常に 出力されて、それ以降はエラーで表示されなくなります。キャッシュにフォントが無いとき ファイルに読みに行く辺りが原因かと疑っていますが、そこまでソースが追えていません。
コードへの埋め込みはまだ試していません。
対策を行ったバージョンをアップしました。 SDカードからの読み込みでも複数フォントを正常に表示できるようになったはずです。 お試しください。
バージョンアップ版で確認しました。3つのフォントを表示して問題なく表示されています。 綺麗なフォント表示ができるようになりました。ありがとうございました。
下記のように複数のOpenFontRenderクラスから別のインスタンスを生成し、それぞれフォントファイルをloadFont()で指定して、それぞれを表示しようとしましたが、最後にloadFont()した物しか表示されません。 テストした、ArduinoIDEのコードを載せます。
include "M5Core2.h"
include "OpenFontRender.h"
void setup() { M5.begin(); OpenFontRender ofr1; OpenFontRender ofr2; M5.Lcd.fillScreen(BLACK); ofr1.loadFont("/font/OpenSans-Light-webfont.ttf"); ofr2.loadFont("/font/OpenSans-Bold.ttf"); ofr1.setDrawer(M5.Lcd); ofr1.setFontSize(30); ofr1.setCursor(0, 0); ofr1.printf("ABCDEFG"); //ofr2.loadFont("/font/OpenSans-Bold.ttf"); ofr2.setDrawer(M5.Lcd); ofr2.setFontSize(30); ofr2.setCursor(0, 50); ofr2.printf("12345678"); }
void loop() { // put your main code here, to run repeatedly: }
fonttest.zip