Comments (2)
@gitnabeshin
わかりやすいサンプルコードありがとうございます!
まず最初に、解決する方法をお伝えします。
方法1.一連の描画処理を startWrite() / endWrite() で囲む。
https://github.com/lovyan03/LovyanGFX/blob/0.3.4/examples/Advanced/EPD/EPD.ino#L55-L66
一連の描画をまとめて画面に反映できるので、処理速度が向上し、描画順序に依存した問題を防止できます
方法2.描画が崩れるポイントの前で waitDisplay() を配置する。
https://github.com/lovyan03/LovyanGFX/blob/0.3.4/examples/Advanced/EPD/EPD.ino#L184-L196
今回の例では drawFastHLine の直前になります
次に、サンプルコードで何が起こっていたのかをお伝えします。
まずM5Paperに搭載されているIT8951は、通常の表示更新は1回450ミリ秒かかります。
例えば10回の表示更新を行う場合、毎回表示更新の完了を待機していては合計4.5秒かかってしまいます。
しかしIT8951は前回の表示更新の完了を待機せずとも、新たな表示更新が可能です。これにより処理時間を短縮できます。
ただし、表示更新の範囲が重複する指示した場合、IT8951が誤作動して表示が乱れる事があります。
今回の例では、drawFastVLine と drawFastHLine の線が交差していることが該当します。
これを防止するため、LovyanGFXはひとつ前の範囲を記憶しており、重複があれば待機するようになっています。
今回の例であれば、drawFastVLine の直後に drawFastHLine を置いたならば、重複チェックによって待機が行われるので、描画が崩れることはありません。
しかし、今回の例では間にprintln・fillArcがあるため、drawFastVLine と drawFastHLine の重複チェックが行われず、重複した描画更新が実行されてしまい、 IT8951が正しく動作しなくなっていました。
LovyanGFX側で450ミリ秒以内の更新範囲をすべて保持して重複チェックを強化すべきかどうか、というところですが…、とりあえず現状は利用者側での処理の組み方で回避して頂く感じになっています。
よろしくお願いいたします。
from lovyangfx.
なるほど!
すごくわかりやすい解説ありがとうございます。
性能とチェックをどのあたりで両立するか、言った感じのお話ですね。
LovyanGFXは高速性能が得られるのがメリットなので、説明して頂いたあたりの仕組みを分かった上で使うのが良いですね。
サンプル、そんなに読み込んでなかったので、もうちょっと読んでみます!
ありがとうございました。
from lovyangfx.
Related Issues (20)
- The screen is initialized correctly every 2 times HOT 9
- drawEllipseとfillEllipseの、rxとryの一方だけが0のときの挙動について HOT 2
- Freeze using tft.getTouch(...) with a FT5x06 I2C capacitive touch screen HOT 3
- I need support for the CYD board (cheap yellow display) ESP32-2432S028R HOT 8
- Lilygo AMOLED series HOT 20
- Support for MakerFab 2.1 inch round MaTouch ESP32-S3 based controller HOT 3
- LilyGo AMOLED Series HOT 1
- Expose XPT2046 ability to measure VBAT HOT 4
- Endianness Inconsistency HOT 2
- Failing to build after updating platformio HOT 2
- Help me , ST7735S cannot drive 80*160 screen normally
- Color Inversion Not Working Correctly with ST7789 Display. HOT 2
- build error with cross-compiler when using SDL2 HOT 6
- Add M5Stack_Fire HOT 1
- Support for ESP32-S3-Box v3 HOT 35
- Screen tearing when using a Makerfabs Matouch 4.0" 480x480 parallel LCD screen HOT 7
- Support ST7701s IPS TFT 5 inch 854x480 RGB+SPI With ESP32-S3 HOT 15
- ST7789 cannot get it to work HOT 3
- tft.getTouch(&touchX, &touchY); freeze loop() HOT 3
- Support for 4.3" RGB Interface HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from lovyangfx.