2015年09月の
鯖の煮噌味
Saba no Nisomi
2015.09.25(金)
▼フツーにマウスで操作可能な、OpenGL描画の不定形ウィンドウを作成する最もラクちんな方法は?
透明な部分がある画像をクリップボードにコピーして、それをPhotoshopでペーストするなんてことはあんまりした記憶がないので知らなかったんですわ。Photoshopのコピペって、アルファチャンネルだけ独自データで処理してるのかな? 他のアプリとの間では透明な画像をやり取り出来ないのか。アドビ公式に「Photoshop の透明な背景を保持したまま Illustrator に読み込む方法」なんてのがあるくらいだから、一度ファイルに書き出すしか無さそう。Illustratorには問題無くペースト出来るんだから、Photoshopもなんとかして欲しいもんです。って手持ちのPhotoshopもIllustratorもCS6なんで、最新版の挙動は知りませんが。NSViewの中だけの画像なら dataWithPDFInsideRect でPDF化してNSPasteboardに書き出せばPhotoshopでもイケますけど、ウィンドウの影も含めるとなるとまたもう一手間増えるしなー........。それはさておき。
OpenGLの描画はハードウェア的にVRAM上で行われるので、不定形ウィンドウ内でOpenGLを描画してもOS側からすれば何が描かれているか分からないからマウスクリックに難あり、って解釈でイイんですかね? オフスクリーンでOpenGL描画して、その画像を不定形ウィンドウに描くか。てなわけで、OpenGLのオフスクリーンでの描画を考える。
考えるよりもネットで検索(ぉ。以前は NSOpenGLPixelBuffer なるものを使ったようですが、Appleの OpenGL Programming Guide for Mac によればOS X 10.7からは "use framebuffer objects instead" だそうで。んー、なんかよくわからんですな。オフスクリーン描画なら Core Animation なる技術のLayerを使えだとか、その CALayer を継承した CAOpenGLLayer だとか 更に継承した NSOpenGLLayer だとか、もぅお腹いっぱい。私は別にOpenGLの勉強をしたいわけでなく、画像の三次元変換をしたいだけで。だらだらと書いてますけど、まぁ結局私が試したのは次のような感じ。
(1) NSViewを継承した独自ビューに NSOpenGLContext を設定。
(2) その独自ビューを非表示ウィンドウのコンテキストに。
(3) (1)のNSOpenGLContextに描画。
(4) (3)の描画データからNSImageを作成。
てな具合で作った画像で、不定形ウィンドウを作る、と。
立方体ぐるぐるぐる〜。
んー、なんだかアレですな。高速処理とか考えてないし、いえ、そんなに負担も無いと思うから、これでイくとしますか。
2015.09.29(火)
▼私がデビルマンを録画すると、やはり失敗するのだ。
昨日深夜のANIMAX放映第30話「妖獣ファイゼル 影に狂う」を確認したら、画面真っ暗。STBを見ればエラーの表示。んー、悪いのはSTBか、CATVの信号なのか、いずれにしてもこーゆー事態が年に1, 2度は起きるんですよね。だから録画後の確認が欠かせない。大抵は再放送で救済可能なんですが、ANIMAXのデビルマンは深夜0:30の放映後、再放送はなんと直後の4:30から。短時間すぎ...。まぁまた来月に1話から始まりますけど、週に2話ずつって第30話は年明けかヨ! がっかりしたから、寝る。