Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

P/ECE monitorの16階調モードでキャプチャできない #2

Open
zurachu opened this issue Jul 10, 2017 · 2 comments
Open

P/ECE monitorの16階調モードでキャプチャできない #2

zurachu opened this issue Jul 10, 2017 · 2 comments

Comments

@zurachu
Copy link
Owner

zurachu commented Jul 10, 2017

P/ECE monitor(nsawa氏)の16階調モードはpceLCDSetBuffer(INVALIDPTR )で取得できる仮想画面バッファの内容をキャプチャしているため、仮想画面バッファとは別で16階調用バッファを用意している現状から改造しないと、キャプチャができません。
本ライブラリの売りである、4階調画像を16階調用バッファにレイヤーを重ねる形で表示できる機能を維持しようと思ったら、4階調用バッファを別で用意して、16階調用バッファと4階調用バッファを重ねた結果を仮想画面バッファに出力し、仮想画面バッファからダイレクト転送バッファの内容を作成する必要があります。
4階調用バッファを別で用意するということは、仮想画面バッファに書き込むようになっている描画まわりの関数を、新しい4階調用バッファに書き込むよう、ひととおりフックしてやらないといけないと思われます。

@zurachu
Copy link
Owner Author

zurachu commented Jul 10, 2017

描画まわりのAPI書き換えについて検討。
4階調描画APIをひととおりフックする形だと、標準API以外の描画関数(例えば、本ライブラリの縁取りフォント描画機能など)では16階調になっている仮想画面バッファに書き込まれてしまう。
そのため、pceLCDSetBuffer()をフックして、引数INVALIDPTRで呼び出された時(各種描画処理内でバッファのアドレスを取り出す時)は4階調用バッファのアドレスを返すようにするのはどうだろうか。
16階調描画での書き込み先バッファの取得にはpceLCDSetBuffer(INVALIDPTR)は使わず、専用の関数を使うようにすれば良い(現状、Ldirect_Buffer()がそれにあたる)。

@zurachu zurachu mentioned this issue Jul 11, 2017
@zurachu
Copy link
Owner Author

zurachu commented Jul 13, 2017

zurachu/pceth2#1 の対応をしている時に気づいたが、API内でpceLCDSetBuffer()を呼び出しているところではカーネル内のpceLCDSetBuffer()がそのまま使われるのか、4階調用描画バッファに描画してくれていない。
pceLCDSetBuffer()を呼び出していない描画系APIでも、最初のpceLCDSetBuffer()で設定したs_vbuffを参照して処理をされており、結果同上。
サンプルプログラムでもpceLCDPaint()効いてないっぽいのに、気づいてなかった。
pceLCDSetBuffer()およびvbuffを参照しているAPIは、フックしてやらないといけない。
結果、高速RAM転送サイズが大きくなるようなら、あらためて分割が必要かも。

@zurachu zurachu reopened this Jul 13, 2017
@zurachu zurachu mentioned this issue Jul 13, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant