問題タブ [nsopengl]
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.
objective-c - NSWindow での描画
グラフィックフレームワークのココアラッパーに取り組んでいます。
最終的に物を描くために、私はこれをやっています:
のサブクラス内NSView
。
Gosu や Irrlicht などの他のフレームワークを調べたところ、NSOpenGL
次のような複雑なことを常に行っていることがわかりました。
なぜ彼らはそんなことをしているのですか?私の「単純な」方法は大丈夫ですか?
cocoa - 非描画目的の NSOpenGLContext
NSOpenGLContext
描画用ではなく、ベンダー、バージョンなどの OpenGL 情報を取得するために、システムに依存しない Cocoa を作成する方法???
multithreading - NSOpenGLLayerを使用して別のスレッドから描画する
少なくともモニターのリフレッシュレートと同じリフレッシュレートでOpengGLを使用して描画する必要があるアプリに取り組んでいます。また、描画が激しいUIアクションによってロックされないように、別のスレッドで描画を実行する必要があります。
実はとNSOpenGLView
組み合わせて使っておりCVDisplayLink
、問題なく60-80FPSを達成することができます。
このビューの上にいくつかのココアコントロールも表示する必要があるため、 LayerBackedOpenGLView Appleの例NSOpenGLView
に従って、サブクラス化してレイヤーバックにしようとしました。
結果は満足のいくものではなく、多くのアーティファクトが発生します。
NSWindow
したがって、ココアコントロールをホストするために別のウィンドウを使用し、このウィンドウをを含むメインウィンドウの子ウィンドウとして追加することで問題を解決しましたNSOpenGLView
。それは正常に動作し、最初の実装とまったく同じFPSを取得できます。
私はこのソリューションを汚いハックのように考えているので、必要なものを達成するための代替のよりクリーンな方法を探しています。
数日前に出くわしNSOpenGLLayer
、それが私の問題の実行可能な解決策として使用できると思いました。
最後に、このすべての前文の後に、私の質問があります:コールバックNSOpenGLLayer
を使用して別のスレッドからに描画することは可能ですCVDisplayLink
か?
CVDisplayLink
これまでこれを実装しようとしましたが、コールバックから引き出すことができません。-setNeedsDisplay:TRUE
コールバックNSOpenGLLayer
からのみ実行でき、 cocoaによって自動的に呼び出されたときにCVDisplayLink
描画を実行できます。-drawInOpenGLContext:pixelFormat:forLayerTime:displayTime:
でも、このようにメインスレッドから描いていると思いますよね?
これをグーグルで調べた後、私はこの投稿を見つけました。この投稿では、Lionの下での描画は内部でのみ発生する可能性があるとユーザーが主張しています-drawInOpenGLContext:pixelFormat:forLayerTime:displayTime:
。
私は現在SnowLeopardを使用していますが、アプリはLionでも問題なく動作するはずです。
私は何かが足りないのですか?
xcode - ScrollView に NSOpenGlViews を埋め込むと、期待されるスクロール動作が生成されない
スクロールビューに 3 つの NSOpenGLView が埋め込まれています。スクロールすると、予期しない動作が発生します。NSOpenGLViews は、スクロール ビューの下部でクリップされることを拒否し、代わりにスクロール ビューの下部に配置され、長さが短くなるようにサイズ変更されます。場合によっては、NSOpenGlViews がオーバーラップし始めます。
objective-c - OpenGL 3.2 と NSOpenGLView
NSOpenGLView のカスタム実装でコア プロファイルを作成するにはどうすればよいですか? どのメソッドをオーバーライドし、そこにどのコードを配置する必要がありますか?
これまでのところ、私はこのコードを持っています:
cocos2d-iphone - cocos2d CCDirectorMac - self.view.openGLContext flushBuffer の SIGABRT
cocos2d Mac アプリケーションがあります。スプライトを作成および追加すると、ランダムにクラッシュします。
基本的に私はSIGABRTを取得します
CCDirectorMac で。
スクリーンショットはこちら: http://www.zentralnorden.com/temp/crash0220.png
これにアプローチする方法についてのアドバイスは役に立ちます。