2012-01-11 97 views
0

如何在後臺運行的OpenGL動畫之上實現「常規」繪製(通常在drawRect方法中完成)?我的應用程序是OpenGL應用程序,它是默認的Xcode遊戲應用程序模板。 GLKViewController沒有drawRect方法,當我添加一個時,它永遠不會被調用。我試圖在drawInRect方法(它確實存在)中實現繪圖代碼,但我得到運行時錯誤。所以總結一下:我想繪製不使用OpenGL的東西(線條,路徑,不管),而是使用常規的石英基元,並將其顯示在現有的3d渲染之上。在OpenGL層上繪製「Regular」

回答

0

要確保drawRect被調用,你應該走另一條路線:創建一個標準的可可觸摸的項目,改變主視圖的+ (Class)layerClass方法返回[CAEAGLLayer class],然後開始與繪畫。請注意,CAEAGLLayer documentation特別警告您不要做您想做的事:

避免在CAEAGLLayer對象之上繪製其他圖層。如果您必須繪製其他非OpenGL內容,則可能會發現如果將透明2D內容放置在GL內容之上,並且確保OpenGL內容不透明並且不進行轉換,則性能成本可以接受。

退房的GLPaint項目顯示layerClass超越簡單的OpenGL ES項目中(PaintingView.m)。他們使用layoutSubviewstouchesBegan/Moved/Ended來完成繪圖。

+0

謝謝。我發現實際繪圖在renderLineFromPoint中調用[context presentRenderbuffer:GL_RENDERBUFFER_OES]。但是,如何將常規石英繪圖命令合併到此GL層之上的圖層中?我假設我不能使用與GL層相同的「上下文」? – 2012-01-11 18:51:44

+0

在Interface Builder或代碼中,將額外的'UIView'定義爲主視圖的子視圖。每個'UIView'都有一個內部的'CALayer',所以當它被要求繪製自己時,它將使用該層的上下文。當時的GL背景是無關緊要的。 – darvids0n 2012-01-12 00:47:52

+0

[This SO question](http://stackoverflow.com/questions/4500708/marrying-core-animation-with-opengl-es)可能會有所幫助。 – darvids0n 2012-01-12 00:51:02