問題タブ [caeagllayer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1156 参照

ios - アプリのバックグラウンド処理中に OpenGL の同時描画を停止するにはどうすればよいですか?

アプリがバックグラウンドになるとすぐに、OpenGL 関数の呼び出しを停止する必要があります。しかし、どういうわけか、OpenGL を停止するすべての試みが失敗し、ユーザーがホーム ボタンを押すと、アプリが頻繁に (常にではありませんが) クラッシュします。

でクラッシュします

例外の種類: EXC_BAD_ACCESS コード: 0x1 の KERN_INVALID_ADDRESS libGPUSupportMercury.dylib gpus_ReturnNotPermittedKillClient

私の理解では、アプリがフォアグラウンドになくなった後に OpenGL 関数を呼び出すと、GPU がアプリで使用できないため、アプリがクラッシュします。

OpenGL でレンダリングするビューにはディスパッチ キューがあります

UIScrollView と並行してレンダリングする必要があります。そのため、キューが UIScrollView を待機できるようにする GCDセマフォがあります。

runloop を更新するために CADisplayLink を作成します。

update メソッドは、シリアル レンダー キューで非同期に描画計算を実行し、セマフォを使用して UIScrollView を待機します。最後に、メインスレッドで同期をコミットします。

update メソッドは、メイン スレッドがレンダリングできるかどうかをチェックします。チェックは次のようになります。

私が最も疑っている 1 つのことは、キューを停止する同時実行性の問題です。非同期であるため、表示リンクを停止した後でもブロックが起動します。

したがって、不足しているのは、この非同期ブロックで OpenGL 関数を呼び出す前に、-canRender もチェックする必要があることです。

わかりましたが、レンダー実行ループの開始時にこのチェックを行うと想像してください。-canRenderはいと言います。それから私は電話します[sprite drawState:state];。このメソッドは多くの gl 関数を呼び出します。これが根本的な問題だと思います。アプリがまだフォアグラウンドにある場合、非同期ブロックがメイン スレッドをチェックしても、3 ナノ秒後に複雑な描画を行うために非同期を続行すると、アプリがバックグラウンド状態になり、クラッシュする可能性があります。

そのため、すべての単一の gl 関数呼び出しの前にメイン スレッドで -canRender をチェックしても、分割ナノ秒後のアプリがバックグラウンドにあり、クラッシュする可能性があります。

OpenGL を裏返しにシャットダウンして、関数の呼び出しを無視する方法はありますか。仕上げ方法について聞いたことがあります。私はそれをシャットダウンする必要があります。しかし、どのように?

0 投票する
1 に答える
1434 参照

ios - コア イメージ フィルタを使用した EAGLContext

カメラのビデオ フィードにリアルタイムで画像を追加したいのですが、必要なのは表示するだけで、保存する必要はありません。標準の Core Image 手順を使用すると問題なく動作しますが、より多くのフレーム レートが必要です。しかし、このコードのコメントを外して次にコメントすると、そうではありません。OpenGLViewメソッドを持つ単なるUIViewサブクラスです

何が欠けている?私が間違っていることは何ですか?どうもありがとうございました。

0 投票する
2 に答える
897 参照

ios - Open GL ES 2.0 renderbufferStorage が false を返す

iOS アプリで 3D モデルを表示するために Framebuffer を作成しようとしていますが、framebuffer が作成されると、renderbufferStorage が false を返します。私のコードは GLCameraRipple サンプル コードに基づいています。

フレーム バッファを作成するコードは次のとおりです。

どんな助けでも大歓迎です。

前もって感謝します。

0 投票する
1 に答える
178 参照

ios9 - CAEAGLLayer - Siri 入力後に OpenGL API が無効になる

iOS 9 ベータ 5 でかなりおかしな動作が見られます。Siri を使用して文字列を UITextView に読み上げると、CAEAGLLayer を対象とするすべての OpenGL 呼び出しが機能しなくなります。レンダリング コードに異常はありません。音声ディクテーションが使用されると、効果がなくなったようです。

iOS 9 ベータ版リリースでこれを経験した人はいますか?