問題タブ [nsopenglview]
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.
osx-mountain-lion - NSDocument 内に NSOpenGLView を作成する (OS X)
オーディオ ファイルではなく楽譜を読み込む音楽教育アプリを作成しており、アニメーション グラフィック画面を表示する必要があります。ファイルへのアクセスを簡単にするドキュメント ベースのアプリを作成し、ファイルの読み取りと解析を行い、すべての曲データを Obj-C クラスに保存しました。xib には、曲の属性やその他のテキスト情報を書き込むことができる textview もあります。次に、音楽用にグラフィカルでアニメーション化できる 2 つ目のビューが必要です。私は Xcode の初心者ですが、openGL の経験があります。私のセットアップは最新の OS と Xcode バージョンです。
OpenGL ビューを IB のウィンドウにドラッグしようとすると、「Unsupported Configuration - NSOpenGLView in One Shot memory enabled window」という奇妙なエラー/警告が表示され (これは奇妙です)、openGL ビューは表示されません。アプリを実行します。
このサイトや他の場所の NSdocuments で OpenGL Views への参照があまり見つからないため、意図されていないことをしようとしているのではないかと思います。誰か私にアドバイスはありますか?ドキュメントベースのアプリを使用すべきではありませんか? openGL 以外のものを使用する必要がありますか? または、この場合、openGL View および View Controller をプログラムで 100% ビルドする必要があるのでしょうか? 適用可能なサンプル/チュートリアルへのアドバイスやポインタは、非常に役立ちます。
objective-c - NSOpenGLView で RGB イメージ バッファまたは CVPixelBufferRef を描画するには?
からNSOpenGLView
のフォームおよびフレーム バッファ イベントがありAVFoundation
ます。frames
ビューを使用してフォームにビデオを表示したいOpenGL
。
objective-c - OpenGL with Cocoa: CGLLockContext([[self openGLContext] CGLContextObj]); を呼び出そうとすると、一致する関数呼び出しがありません。
私はOpenGLを学んでいます。OpenGL コンテキストのセットアップを取得するために、Apple のGlEssentialsの例に従っていました。GlContext は、次のように draw メソッドでロックされています。
ビュークラスで上記とまったく同じ引数で呼び出そうとするとCGLLockContext
、次のエラーが発生しました。
タイプキャストをすばやく挿入すると、問題が修正されました。
質問はなぜですか?Apples の例では、このタイプキャストがなくても問題なく動作します。
macos - 別のコンテキストのテクスチャを破壊する NSOpenGLContext
描画 AU プラグインを最適化するために NSOpenGLContext を使用しています。複数のプラグインがあり、それぞれが複数のインスタンスを持つことができます。したがって、各プラグインはグローバル NSOpenGLContext を作成し、特定の NSView コンテキストをそれにアタッチして、テクスチャを複製する必要がないようにします。
問題: プラグインを 1 つ開いても問題ありません。私は別のものを開きます、それは大丈夫です。最初のものをリリースすると、すべてのリソースが破壊されます => 2 番目のものはテクスチャを失います!
両方のコンテキストが異なること、共有が異なること、両方が lockFocus と drawRect の両方で makeCurrentContext を使用していることを確認しました。ここで何が間違っているのでしょうか?
ところで、AGL と WGL (Windows 上) を使用して同じことが問題なく動作したので、通常どおり Cocoa です。
objective-c - サブビューが削除された後、NSOpenGLView を含む NSView が再描画されない
メインの NSWindow プロパティ用のカスタム NSView を備えた Mac OS X (10.9) アプリケーションがありcontentView
ます。カスタム ビューが行う唯一のことは、drawRect:
透明になるようにオーバーライドすることです。NSOpenGLView が表示されるようにするには、透明性が必要です (以下を参照)。
サブビューとして NSOpenGLView があり、そのcontentView
表面の順序が -1 に設定されています (メインの NSWindow の「下」にあり、これも透過的です)。
次に、WebView をインスタンス化し、このカスタム ビューのサブビューとして配置します。
WebView は、サービスへのログインに使用される (NSOpenGLView の上にある) ウィンドウ内の小さなボックスです。ログインが発生すると、NSOpenGLView のみが表示されて消えます。
問題は次のとおりです。呼び出すと[_webview removeFromSuperview];
、contentView
再描画されません。したがって、WebView は引き続き画面に描画されます (ただし、マウスやキーボードには反応しません)。マウスを使用してすべてのウィンドウのサイズを変更すると、contentView
再描画され (ログにメッセージが表示されます)、WebView のコンテンツが消えます。また、NSOpenGLView をサブビューとして追加しないと、WebView が消えてしまいます。
サブビューが削除されcontentView
た後に発火するべきではありませんか? WebViewdrawRect
を使用した場合、setNeedsDisplay:
または削除した後でも、再描画されませんでした。setNeedsLayout:
contentView
macos - 2 つの NSOpenGLViews の flushBuffer を同期する
私は、NSWindow contentView 内に並べて配置された2 つNSOpengGLView
の s (leftGLView
および) で構成される OSX アプリに取り組んでいます。rightGLView
2 つのビューは を共有しませんNSOpenGLContext
が、両方ともダブル バッファリングされ、バッファー スワップをモニター リトレースと同期します。
Aはセットアップされ、最初のもの(たとえば左側のもの)のandにCVDisplayLink
リンクされています。NSOpenGLContext
NSOpenGLPixelFormat
NSOpenGLView
CVDisplayLink コールバック内で、次のコードを使用して両方のビューに描画します。
このアプローチの問題点は、この 2 つflushBuffer
が常に同期されているとは限らないことです。右側の NSOpenGLView は、左側よりも遅く更新されることがあります (次のモニターの更新時など)。-flushBuffer
Apple のドキュメントには次のように記載されているため、これは完全に予想外のことではありません。
スワップ間隔コンテキスト属性 (NSOpenGLCPSwapInterval を参照) に従って、flushBuffer が呼び出された直後ではなく、モニターの垂直リトレース中にコピーが行われる場合があります。暗黙的な glFlush は、戻る前に flushBuffer によって実行されます。最適なパフォーマンスを得るために、アプリケーションは、flushBuffer を呼び出す直前に glFlush を呼び出さないでください。後続の OpenGL コマンドは、flushBuffer を呼び出した直後に発行できますが、バッファーのコピーが完了するまで実行されません。
ただし、この場合、2 つの異なるNSOpenGLContext
バッファーがあるため、2 つのバッファーを一緒にフラッシュすることが可能です。
これをさらに調査するために-flushBuffer
、バッファーをスワップ (またはコピー) した後にのみ戻ると仮定しました。これは、私が観察している動作を説明できます。したがって、補助スレッドを切り離して flushBuffer 呼び出しを実行しようとしましたが、違いはありませんでした。
私は最終的に 2 つの異なるCVDisplayLink
s を使用しようとしました。1 つは左側の GLView 用で、もう 1 つは右側の GLView 用です。ただし、この手法でも問題は解決しないようで、2 つの CVDisplayLink スレッドの同期を維持するという複雑さが増します。
flushBuffer
2 つの NSOpenGLViews 間で 2 つを同期させる方法はありますか?
macos - ウィンドウの最小化後に NSOpenglView が NSView の前に表示される
NSOpenGLView の上に NSView を表示しています。「setWantsLayer:YES」を使用して、NSView を強制的に opengl コンテキストに表示させています。しかし、ウィンドウを最小化して再度最小化すると、NSView は NSOpenGLView の上になくなります。
この動作を防ぐ方法はありますか?
image - nsopenglview 画像のズーム、ビュー内の画像に合わせて拡大縮小
openGL はまったく新しいものです。OpenGl を使用して画像を表示するこのコードがあります。
私が直面している問題は、画像サイズが 5184x3456px であるのに、ビュー サイズが 800x600 であることです。画像をビュー内に収めるにはどうすればよいですか。コードを理解しようとしていますが、どこにも行きません。
glScalef(0.8, 0.8, 0.8); を使用してみました。しかし、それが何をしたかというと、それが表示された画面の部分をスケーリングしました。