2012-06-15 70 views
0

我一直在爲自己的遊戲工作一段時間,並且它在Windows上工作正常。一切都旨在支持跨平臺。爲了讓你理解我的問題,我將不得不解釋一切如何工作:在iOS下初始化OpenGL ES 2.0

有多個庫:平臺,視頻,XML,圖像和引擎。它們中的每一個都可以在Windows下編譯爲DLL或者在iOS上編譯爲靜態庫。

庫中的所有內容都是普通函數(聲明爲extern "C")或具有接口的對象。

文件夾結構像這樣組織:Project,Include,Source。

在包含文件夾中,只有通用代碼適用於所有平臺,如接口和函數原型。在源文件夾中,有針對每個平臺的其他文件夾。

我設法在iOS上移植平臺庫沒有任何問題,但現在我卡在視頻之一。

這處理渲染API(在windows下的OpenGL和在iOS下的Opengl-ES 2)。

要創建驅動程序我都用下面的函數:

IVideoDriver* CreateVideoDriver(void* container) 

Container是Windows下的一個HWND

問題是我不確定如何在iOS下使用這種初始化風格。

我讀過一些教程,看過示例源代碼,但我無法弄清楚如何做到這一點。從我看到的OpenGL初始化必須在視圖中完成,我不知道如何鏈接所有與我的代碼。我知道我必須使用一些Objective-C代碼,但這不是問題。

任何人都可以請幫我解決這個問題嗎?

+1

我會推薦看看cocos2d-x引擎。它是跨平臺的,使用OpenGL ES並具有很好的代碼結構。至於視頻 - 如果它是全屏幕電影比更好的方式是使用本機iOS播放器'MPMoviePlayerController'(它是硬件加速的)。 – brigadir

+0

我檢查了多個引擎,但我想不知怎麼我跳過了cocos2d-x。視頻庫是照顧低槓桿渲染特性(設置屬性流,綁定紋理,渲染指數陣列等)的視頻庫。我目前沒有任何電影回放計劃。感謝您的意見。 – Sanctus2099

回答

1

使用EAGLViewESRenderer許多iOS的樣品中提供(見GLEssentialsGLES2Sample)。

使用起來非常簡單。只要不要忘記與OGLES框架的聯繫,你就完成了!

你VideoDriverIOS看起來像:

在VideoDriverIOS.h/VideoDriverIOS。mm

class VideoDriverIOS : public IVideoDriver 
{ 
public: 
    ... 
    // implement the pure virual here 
protected: 
    EAGLView* mView; 
    ... 
} 

和你的方法可以直接使用mView對象。

+0

我喜歡這個。這聽起來像可以工作。我沒有時間去測試它,但現在我將會度過週末。如果我理解得很好,那麼mView會從CreateVideoDriver傳遞出來嗎?這樣一些初始化可以在外面完成,渲染仍然可以完美工作,EAGLView是一個非常標準的類。 – Sanctus2099

+0

我會說是的。在viewController.mm中,[viewDidLoad]將實例化EAGLView,用EAGLView ptr調用your_lib-> createVideoDriver。在VideoDriverIOS中投射IVideoDriver結果以執行一些平臺特定的操作。這只是一個盲目的猜測,但據我瞭解,它可以適合您的項目。 – rockeye

2

在iOS 5.0中,Apple推出了GLKit View,它提供了OpenGL ES-aware視圖的默認實現。您也可以使用管理GLKit視圖的GLKit視圖控制器。這些對象可以通過XCode直接拖入主要的.xib中,並將它們無縫地連接到您的實現。

雷文德利赫寫了一篇優秀的首發帖子,它可能會幫助你把它掛鉤。 http://www.raywenderlich.com/5223/beginning-opengl-es-2-0-with-glkit-part-1

祝你好運!