ゲームのシェーダーを視覚化するツールをハックしようとしていましたが、python と cocoa を使用してみようと考えました。しかし、私はある種のレンガの壁に出くわしました。多分それは客観的なcの私の理解がやや不十分ですが、私が書き込もうとしていたビューのこのコードを動作させることができないようです:
from objc import YES, NO, IBAction, IBOutlet
from Foundation import *
from AppKit import *
import gv
class SceneView(NSOpenGLView):
def __init__(self):
NSOpenGLView.__init__(self)
self.renderer = None
def doinit(self):
self.renderer = gv.CoreRenderer()
def initWithFrame_(self, frame):
self = super(SceneView, self).initWithFrame_(frame)
if self:
self.doinit()
print self.__dict__
return self
def drawRect_(self, rect):
clearColor = [0.0,0.0,0.0,0.0]
print self.__dict__
self.renderer.clear(CF_Target|CF_ZBuffer,clearColor)
実行すると次のように出力されます。
{'renderer': <gv.CoreRenderer; proxy of <Swig Object of type 'GV::CoreRenderer *' at 0x202c7d0> >}
{}
2009-04-03 19:13:30.941 geom-view-edit[50154:10b] An exception has occured:
Traceback (most recent call last):
File "/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python/PyObjCTools/AppHelper.py", line 235, in runEventLoop
File "/mnt/gilead/amcharg/projects/geom-view-edit/build/Debug/geom-view-edit.app/Contents/Resources/SceneView.py", line 37, in drawRect_
self.renderer.clear(CF_Target|CF_ZBuffer,clearColor)
AttributeError: 'SceneView' object has no attribute 'renderer'
レンダラー変数が失われているようですが、initWithFrame_ コードがどれほどファンキーであるかを考えるとそれほど驚くべきことではありませんが、これは xcode が書いたように見えるものであり、目的の C には alloc イディオムとは別の init があるため、理にかなっていると思います。しかし、それでもpythonを見るのは奇妙です。
とにかくこれを救う方法はありますか、それともコード小屋の後ろに取り出してQTまたはwxPythonを使用する必要がありますか? Objective-C の使用を検討しましたが、コンパイルしたばかりの気の利いた swig バインディングをテストしたいと思います =)