我試圖設置一個子類別NSOpenGLView
在一個不尋常的方式,我遇到了一些問題。基本上,我正在編寫一個程序來爲我的博士進行生物工程仿真,我需要能夠在MacOSX和Unix下編譯它(我的機器是Mac,但最終將在更強大的Unix機器上運行該仿真器)。由於代碼在未來一年半會變得越來越長,我寧願不必跟蹤兩個完全不同的程序版本。因此,我希望能夠通過避免使用ObjectiveC-2.0並保持接口可選(在長時間模擬之前執行設置並在開發過程中監視短期內的事情)來編譯Unix下的ObjectiveC代碼。與一個不尋常的NSOpenGLView設置的問題
當前版本在沒有界面的情況下運行良好 - 模擬執行正確,程序能夠渲染OpenGL幀並將它們導出到圖像和視頻文件中,沒有任何問題。由於我現在添加接口(現在只是一個帶有NSOpenGLView子類和一個「開始」按鈕的簡單窗口)(以便我可以在沒有它的情況下使用main()的備用版本運行代碼)必須以一種奇怪的方式將OpenGL「連線」在一起,因爲繪圖代碼不在drawRect函數中,甚至在子類視圖中的任何位置,而是在「基本」程序中的任何地方。
我做了什麼到目前爲止是這樣的:
主要程序(使用對象稱爲「格子」)執行所有的模擬和渲染,正確outputing圖像和視頻文件,這也包含了
NSOpenGLContext
並調用[renderContext flushBuffer];
NSOpenGLView的子類稱爲PottsView含有一種晶格,這是與這樣的觀點一起初始化的一個實例:
- (id)initWithFrame:(NSRect)frame { if(![super initWithFrame:frame]) return nil; // code frameSize.width = WIN_WIDTH; frameSize.height = WIN_HEIGHT; [self setFrameSize:frameSize]; init_genrand64(time(0)); latt = [Lattice alloc]; if (SEED_TYPE) { [latt initWithRandomSites]; } else { [latt initWithEllipse]; } [[latt context] makeCurrentContext]; return self; }
drawRect()
是空的。
- PottsController是在InterfaceBuilder中實例化的對象,它將啓動按鈕連接到視圖。開始按鈕只是簡單地告訴網格運行幾個步驟。
現在,按啓動會導致模擬運行正常(即輸出到文件和終端),但PottsView工作不正常。它仍然是白色的,但如果我更改爲選項卡部分,如果它更改爲渲染幀的部分。如果按下公開(F3),則相同。
我試過沖洗的幾種組合,setNeedsDisplay
等,但坦白說我迷路了。在4月份之前,我還沒有做過任何編程,而且這種存在(據我所知),使用NSOpenGLView的一種完全倒退的方式讓我不再有想法。我希望有人可以建議我如何使當前的設置工作或如何完全重新連接程序(同時仍然保持界面可選)。