ActionScriptaboutmemo.393個人的メモです。間違いなどありましたらご指摘ください。iOSにて、スクリーンショットをカメラロールに保存するANEを作ってみた、への追加メモです。結論から、iOS6では「スクリーンショットをカメラロールに保存するANE」は正常に機能しなくなりました。iOS(AIR3.4SDK)ではANE内でスクリーンショット(UIImageとして取得)することは無理じゃね?という結論に達しました。以下、無理じゃね?と思う理由が続きマス。(解決策わかる方がいました教えてください。)■Objective-Cでのスクリーンショットを取るコードをiOS6上で動かしてみる上記aneで使ったこちらのコード。Gameテンプレートを使用)でOpenGLで描画したもののキャプチャを取ってみようとしましたが、iOS6実機ではキャプチャが正常に取れません。(Xcodeのシミュレーター上では正常にキャプチャできるんですが、iOS6実機ではキャプチャ画像は真っ白になってしまう)※iOS5実機ではなんら問題なくキャプチャできます。あら、そもそもiOS6ではOpenGL描画のキャプチャができなくなったの?と思いましたが、そういうわけでもありません。■Apple公式のキャプチャ手順こちらにOpenGLの描画についてのキャプチャの取り方について記載されているのですが、やり方としては2種類あるようす。necessary.上記2通りのやり方を、まずはObjective-Cプロジェクトを使って実装してみると、どちらを使ってもではOpenGL描画のキャプチャは取れました。その2通りのどちらかをANE使って実装したらいいじゃん、ってことなんだけどこれがどうやっていいかわからず。以下、それぞれの無理じゃねって理由です。EAGLContext/-presentRenderbufferこれはglReadPixels()は、presentRenderbufferする前に呼んでね、ってことなんだと思います。glReadPixelsはスクリーンショットを取るときに呼ぶメソッドなので、presentRenderbuffer()を実行する前のタイミングでスクリーンショットを取る処理を実行するようにしたいわけですが、presentRenderbuffer()はOpenGL描画の更新毎に呼ぶメソッドっぽい。iOSでは描画更新処理というコアな部分の処理が具体的にどうなっているのかわからんのです。(LLVMが具体的にどのようにコンパイル(AS3→ObjC)してるのかわからんので)描画処理のコアな部分の処理をANEからオーバーライドなりして、修正することができればいけそうなんですけどね。いう実装になってるのかわからんのでできません。いうわけで1)の案はANEで実装する方法がわからず。necessary.これは、CAEAGLLayer.drawablePropertiesにkEAGLDrawablePropertyRetainedBacking:YESを突っ込め、と。するとパフォーマンス落ちるかもしれないから必要なときにだけYESにしてね、ということみたい。CAEAGLLayerはANEからでも取得できました。//UIWindowの下にCALayerがあってその下にCAEAGLLayerがありました。uv2.layer;CAEAGLLayerが取得できればdrawablePropertiesにkEAGLDrawablePropertyRetainedBacking:YESを上書きするところまではできるのだけど、drawablePropertiesを変更した際にはEAGLContext.renderbufferStorage:fromDrawableを実行しないと反映されない。これにはEAGLContextのインスタンスを取得しないとなのだけど、ここが無理っぽい。先ほどと同様でLLVM後のコアな部分の処理が具体的にどうなっているのかわからんのです。CAEAGLLayerをもつUIViewにEAGLContextは使われてると思うけど変数名がわからず、そもそも外部からアクセスできる変数かどうかもわからずです。iOSでは実装できないんじゃないかと思っているわけです。いうか、なんでiOS5ではできていたのかも謎です。buffer.iOS6のベータが出回ったころに追記されたとかなら、iOS6で仕様が変わったのだと納得がいくんですけども。これができないとiOSのTwitterAPIとかfacebookAPIのAPI使ってもアプリのキャプチャ画像添付ができないと思うんですよね。Flash側で画面をBitmapDataでキャプチャしてそれをaneに送ってane側でBitmapDataをUIViewに変換することができればなんとかなりそうな気もするんですけども、Alternativa3Dで描画してる部分をBitmapDataにキャプチャしようとしたら(Web上ならできたのに)iOS上だとキャプチャとれず。なんとかなる方法ないかなぁ・・・p.siOS5以上から追加されたDLKViewクラス(CAEAGLLayerをもつUIView系クラス)にはsnapshotってメソッドがあって、これを実行するとUIImageがさくっととれちゃうんですよね。iOSはiOS4もサポートしてるからDLKViewは使われてないんでしょうけど。iOSではCAEAGLLayerをもつUIView系クラスはCTStageViewというクラスで定義されてるっぽい)CTStageViewにもsnapshotみたいなAPI仕込まれていないかなぁ。外部SWFファイルの読み込みで、子swf側で動的に配置したmcが表示されない。外部SWFファイルの読み込みで、子swf側で動的に配置したmcが表示されない。外部SWFファイルの読み込みで、子swf側で動的に配置したmcが表示されない。外部SWFファイルの読み込みで、子swf側で動的に配置したmcが表示されない。外部SWFファイルの読み込みで、子swf側で動的に配置したmcが表示されない。memo.393about。