2017年8月27日日曜日

レイアウタ

シェルからのリクエストで子プロセスへの通信路を確保して起動できるようにした...んだけどメニューとか出すためにはレイアウタを完成させないとならん。とりあえず描画内容を反映できるからとメニューとか先に「てやーっ!」て作っても結局「リストコントロールを使ったメニューコントロール」を作るのだから二度手間だ...てわけでレイアウタでやることを書いてみる。

レイアウタはサイズを持つWidgetのサイズを決めるもので、レイアウタを使うことでユーザプログラムは配置計算から解放される。要するに項目を追加してったり、予めサイズが決まってるところを分活したりする時に確保する幅や割合だけで宜しくやってくれるってわけ。

しかし、追加したり割り当てたりするのはいいんだけど、どういうインターフェイスにするべきか悩むところ。縦用とか横用とか用意するのかとか。

2017年8月17日木曜日

描画領域外の画素

Rift他大抵のVRHMDは光学系の歪みを描画内容を歪ませることで補正しているが、この副作用として実際のフレームバッファより大きな領域を必要とする。この関係で描画領域が実画面サイズと一致している場合フレームバッファ外から画素を拾う必要がある。

となるとテクスチャとして確保されたフレームバッファオブジェクトの外側をアクセスするわけで、デフォルトの設定では左右の外側が繰り返しになってしまって見苦しい、

というワケでフレームバッファオブジェクトの設定をGL_CLAMPへ変更。この設定だと外側へのアクセスは外周の半分の値を得られるのでちょうどいい塩梅にぼやけた感じになってくれる。最初歪み補正テクスチャの属性をいじって変わらんなーと悩んでたのはナイショだ。

2017年8月16日水曜日

TB::Threadの修正

TB::Threadではスレッド本体を自動で起動しているのだが、これがタイミングが悪いと継承する前のスレッド本体(純粋仮想関数)を呼び出してしまう可能性がある。

実際にはスレッドの起動は最低優先度スレッドで行われるのでまず起きないことではあるし今のところ問題は起きていないのだが、起動準備ができていないのに起動する可能性は依然残っているので明示的にRaiseThreadを呼び出して起動するようにした。

明示的に呼び出さないと動かないとか仕様として気持ち悪いのだが全ての継承先クラスのコンストラクタの処理が完了した事を確認する方法がないので仕方がない。

2017年8月12日土曜日

地磁気センサの磁化分除去

地磁気センサを扱うには地磁気より強い機器自体の磁化成分を除去する必要がある。旧来は「機器を8の字に回して」キャリブレーションしてみたり、あるいは旭化成が特許を持ってるDOEみたいな方法もあったのだが、VRHMDをぐるぐる回してキャリブレーションするのはかなり面倒だしDOEは知的財産権的に微妙だし四点のサンプルを必要とする。

考案自体はだいぶ前にしていたのだが式が解けなかったのだが、先ほど式ではないが図で解けた。しかもDOEが四点のサンプルを必要とするのに対して新方式は二点でキャリブレーションを進められる。

2017年8月2日水曜日

他の窓をGLXでキャプチャするのはダメポ

開発環境にはXfce4を使っているのだが、この環境でGLXでキャプチャするとXfce4をコンポジット処理の「全画面オーバーレイウィンドウを直接表示する」を設定しておかないとキャプチャできず真っ黒になり、指定しておくと画面の更新が止まり、コンポジットを使わないとゴミが読み出される...という状況になっている。

まぁ要するにこの方法では無理って事だ。

KDEとかだとまた違う可能性もあるのでそのうち試すとしても、GLXによるキャプチャが使えないとするとあのスットロイX標準の方法でキャプチャするしかないのか...orz

--

Xephryを取り込んだりして子コンテキストに描画させることはできるので不可能じゃないんだけど、手間かかりそうなので将来の課題だなー。本筋じゃないし。

引っ越すことにした。

引っ越し先。 見えるかな。