2012-06-15 71 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

祝你好运!