|
现在需要将一个wp7下面xaml混合xna的游戏移植到win8 metro下,加上wp7行将就木,
windows(phone) 8将是未来一个很大的市场,于是开始琢磨起来。
由于目前metro还没有对应版本的XNA,所以要写direct3d应用必须使用c++
在metro中,xaml和d3d依然是可以共享的,但是可以想象,c++绝对不会有c#那么简便
果然,一开始拿d3dapp的例子想加上xaml,折腾半天编译都不过,干脆反其道行之,
vs2012的模版里有一个d2d with xaml, 就看能不能把d2d弄成d3d吧,好在情况并不复杂
这里简单记录一下需要注意的点:
metro里的d3d程序结构一般是(起码微软的例子里是这样)一个renderer,一个game,
renderer里负责搞定设备的初始化,资源载入等等,game就是纯的游戏逻辑了,目前看到的
renderer一般都是派生于DirectXBase这个helper类, 这个类包含了d3d.和d2d常用的常量
接口和一些方法,做小游戏应该足够了。
编译完了以后运行时一直报一个异常,vs2012RC可能是因为还不完善吧,对于异常的定位
十分不清楚,后来恍然间才发现shader没有从d3d项目拷至d2d, 在metro的d3d项目中,hlsl
可以当成native语言一样编译成cso二进制文件,只是将hlsl加入到项目中后 ,需要在其属性
中设置shader type(ps, vs, gs...)
关于metro directx c++ app的游戏循环
m_eventToken = CompositionTarget::Rendering::add(ref new EventHandler(this, &DirectXPage::OnRendering));
通过调用这一句,将OnRendering这个委托方法增加到一个Rendering的事件队列中,不需要像wp7一样利用timer的回调 |
|
|
|
|
|
|