我只是轉換我的代碼使用EAGLContext經理,我自己滾使用GLKit類的更多樣本將被提供。
你建議你可以「......修改.. glkView:drawInRect:
方法,並在需要時畫出你需要的東西」。這在性能方面似乎是一個明智的選擇;我假設(雖然沒有嘗試過),如果你只是沒有指定GLKViewDelegate
或提供GLKView
的子類別drawInRect:
定義,則不會發生動畫循環渲染。你有嘗試過嗎?
另一種方法是簡單地創建一些@property (assign, nonatomic) BOOL shouldUpdate;
在MyController : GLKViewController <GLKViewDelegate>
類只會更新,如果有事可做:
[self setDelegate:self]; // in init or awakeFromNib or other..
-(void)glkView:(GLKView *)view drawInRect:(CGRect)rect {
if ([self shouldUpdate]) { ...
我敢肯定你的想法,它幾乎不複雜。
值得一提的一件事:官方API文檔聲明viewDidLoad
應該用於您的初始GL設置的GLKViewController
。我有這個問題;由於某種原因,我的glCreateShader
調用始終返回零。這可能是由於我在初始化後設置了EAGLContext
;自從我在Storyboard中創建控制器後,我無法將其作爲參數init
傳遞。但是,代碼沒有任何邏輯錯誤,所以如果遇到類似問題,我會提供這個友好的警告。我的解決辦法很簡單,就是在我drawInRect如下:
-(void)glkView:(GLKView *)view drawInRect:(CGRect)rect {
if ([self initialGLSetupDone] == NO) {
[self beforeFirstRender];
[self setInitialGLSetupDone:YES];
}
// .. rest of render code goes here.
}
顯然,這是不理想有一個IF中有不必要的,但它是一個簡單的解決方案。
如果您嘗試更新以使用GLKit,請告訴我。
您仍然可以與GLKit一起渲染到第二個FBO。 http://mickyd.wordpress.com/2012/05/20/creating-render-to-texture-secondary-framebuffer-objects-on-ios-using-opengl-es-2/ – MickyD