投票行ってきた。前住んでたところまでな!
火曜日くらいに投票の案内が来たので不在者投票しようと思ったら、不在者投票の紙請求送ってきたら送り返すから~とか書いてある。間に合うかあやしいじゃん。諦めて当日往復1400円くらいかけて投票行ってきた。何やってんだ俺は……。
そういや引っ越して丁度一ヶ月くらいすね。箱入ったまま積まれてる本・ゲーム類を見ないことにしてる以外は概ね片付いた気がしますね。気のせいかもね。
高い炊飯器は粒が立ったご飯が炊けて食感もいいが、まあご飯はご飯だな。ハードル上げまくってしまったこともあって期待したほどではなかった。 もうちょい安いのでかわらないんじゃないかと思ったけど、まあ6万程度だったらありか。12万の買わなくてよかった。 ご飯冷凍したらどうなるのか気になるところだったが、当然多少味は落ちるものの食感は維持されてて充分意味があったのはよかった。
RTMPサーバがなぜか重いのは、デバッグ実行してる時だけだった。理由はさっぱりわからん。
デスクトップPCではVLCの再生が上手くできないのはfpsが低すぎたせいの模様。5fpsだったのを15fpsにしたら上手く再生してくれた。そんなもんなんだろうか?
とにもかくにも動くのはわかったのでPeerCastStationに組み込みたい。 しかしRTMPサーバはasync/awaitを駆使してしまっており、PeerCastStationの安定版はまだ.NET3.5だ。 安定版に組み込むならTaskとか外さなきゃならんが、RTMP視聴は安定版にも入れたいよなー。 さてどうしたものかと考えたけど、すぐに考えるにをやめた。 安定版のことはあとで考えて、まずは開発版で動かないと話にならないね。そうしよう。
PeerCastStationはクライアントから接続されると、まずリクエストを解析してチャンネルIDを取り出せたプロトコルハンドラを採用し、当該のチャンネルにプロトコルハンドラをくっつけて続きの処理をしている。HTTPならこれでいいんだけど、RTMPではまずハンドシェイクしないとリクエストが来ないのが困ったところ。困ったなと思ったんだけど、よくコード見たらプロトコルハンドラの選択時にべつにチャンネルIDを取り出す必要もない。適当なGUID返しといてあとからあらためて自分からチャンネルにくっつけばいいだけだった。簡単じゃん。
RTMPのプロトコル判別は簡単で0x03が最初に来たらRTMPということにした。これ以上はハンドシェイクしないとわからないし……。同じポートでいろんなもの待ち受けなければこんな判別しなくてもいいんだけど、PeerCastからこうなっちゃってるからなぁ。
他にはそれほど大変なところはなかったな。非同期通信のためのベースクラスから派生させようとしたら余計めんどいことになったので、インターフェースを直接実装したらむしろ簡単になった。非同期通信はasync/awaitでやってるもんなー。途中でチャンネルからのコンテンツ取得を致命的に間違えるというポカをやってしばらく悩んだが、そこを直したらあっさり動いて拍子抜けだ。まあもともと単体で動くことを確認したやつを組み込んだだけだから動かないと困るんだけど。
残りはエラー処理とか接続状態をPeerCastStationに返すところとか作り込まないといけない。RTMPのエラー処理については仕様書にさっぱり書いてないし、ActionScriptのドキュメント見てもはっきりまとまってないのでどうしたものか悩ましい。動けばなんでもいいんだろうか。
文字の描画はまあまあなんとかなったんですけど、あれって塗りだけなんですよね。線?というかストロークの描画ができるようになりたい。ストロークって日本語でなんて言えばいいんだ。……調べたら一画とか一筆とか出てきた。違う。なんかちょっと違うんだ。
スタイル適用した線のような凝った描画をするつもりはないので1、普通に線の中心から左右に拡張して、間を接続して、端点を閉じればいいだけだ。これをやりたい。GPUで。 CPUならまあまあ簡単なんだけど、GPUで出来るかってのが課題ですな。まあ出来ないと分かればそれはそれでいいんだけど。
GPUでやりたいとはいえ、まずCPUで出来なきゃ意味ない。とりあえず適当な線分を拡張してみた。
お、おう。こうなるか。曲がったところの外側をつないでないので離れてるのはいいんだけど、内側の重なったところも空いちゃってる。ステンシルの反転でマスク作ってから塗ってるのでこうなりそうな予感はあったけどやっぱりこうなっちゃったかー。あとでなんとかしたいけど、なんとかなるかなぁ。
内側はともかく、外側を単純につないでみたらこうなった。
内側も何も考えずにつないで見たら思ったより埋まってくれた。とはいえちゃんと埋まらないし、埋まらないのは知ってたんだけどね。 外側は単純にはつなぐ分には問題ないけど、むしろ内側がめんどくさそうだなぁ。 あとこれ自己交差しちゃった時にも抜けちゃうんだろうな。なんとかならないかなー描画方法的にならないよなー。
しかし接続をなんとかしようとしたらこれ絶対前の線分についての情報必要になるな。GPUでの描画はなんとかできるだろうか……。
するにしたって、普通に描画した上でテクスチャ適用した方が早い ↩