4

タイトル通り本当に。PyOpenGL で垂直同期を有効にしたいのですが、どうすればよいですか? かなり徹底的なウェブ検索では何も見つかりませんでしたが、誰かが賢い解決策を持っているのではないでしょうか? 私は OS X を使用していますが、ウィンドウとアプリケーション ループの作成にどのパッケージを使用するかは気にしません。ただし、以下で説明する理由から、本格的な Cocoa アプリの開発には近づきません。

PyOpenGL ではなく pyglet の使用を検討しましたが、64 ビット OS で動作する pyglet のバージョンは 1 年近く前のアルファ リリースのみであり、放棄されたソフトウェアである可能性があり、使用したくありません。 . 実際には PyOpenGL よりもはるかに優れていたので、これは残念です。

このページで、次のコードを見つけました。このページには pygame 用と書かれていますが、Glut でも機能するようです。ただし、(コンテキストを作成した後に)実行すると、セグメンテーション違反が発生します。このようなものが私が探しているものなので、誰かがなぜそれが起こるのかについての洞察を与えることができれば、それは素晴らしいことです.

import sys

def enable_vsync():
    if sys.platform != 'darwin':
        return
    try:
        import ctypes
        import ctypes.util
        ogl = ctypes.cdll.LoadLibrary(ctypes.util.find_library("OpenGL"))
        # set v to 1 to enable vsync, 0 to disable vsync
        v = ctypes.c_int(1)
        ogl.CGLSetParameter(ogl.CGLGetCurrentContext(), ctypes.c_int(222), ctypes.pointer(v))
    except:
        print "Unable to set vsync mode, using driver defaults"

代わりに pygame を試して、このコードがそれで動作するかどうかを確認することもできますが、このコードが pygame でもクラッシュするというレポートがオンラインでいくつか見つかりました。

最後に、PyObjC を使用して Cocoa アプリを構築することが有効な解決策であることを認識しています。ただし、そこにはかなり大きな学習曲線があり、最終的にはクロスプラットフォームにはほど遠いものになってしまいます。このコードは私の個人的な使用のみを目的としていますが、数年後に別のマシンで戻ってきた場合に、再び動作する可能性を最大化することに非常に関心があります。これらの理由から、私は Cocoa アプリの構築に取り組みたいとは思いません。

4

4 に答える 4

0

WinDLL を使用して OpenGL DLL をロードし、関数の名前で CGL を GL または gl (どちらでもよい) に置き換えてみてください。例: ogl = ctypes.windll.LoadLibrary(ctypes.util.find_library("OpenGL")) 次に、関数: [GL,gl(推奨)]GetCurrentContext()

于 2013-07-03T08:00:27.213 に答える