好吧,今晚有重大突破,那就是:窗口显示出来老!v ~。~b
就是DXSDK里那个蓝蓝的窗口,不过我为了搭建Frame,绕了好多弯,刚刚才终于显示出来。
目前完成了GraphicsDevice类的创建了,我正在考虑怎样设计通用的点列表、材质等等接口,得寻人咨询下OpenGL的关于点列表的接口。如果大家都是自定义结构体+参数那就没什么好说的老,把点列表做成一个点容器那么复杂似乎也没有必要。唉,做到再说吧!
目前的主函数代码:
int _tmain(int argc, _TCHAR* argv[])
{
InitFramework();
CComPtr<IGraphicsLibrary> pGL;
if (FAILED(GetDefaultFrameworkLibrary(&pGL)))
{
wprintf(L"No default graphics library found.\n");
ATLASSERT(false);
return 1;
}
CComBSTR bsGLName;
if (SUCCEEDED(pGL->GetLibraryName(&bsGLName)))
{
wprintf(L"Default graphics library is: %s\n", (BSTR)bsGLName);
}
pGL->EnumAdapters();
CComPtr<IGraphicsDevice> pGraphicsDevice;
if (FAILED(pGL->CreateGraphicsDevice(FALSE, 640, 480, L"Only a test", &pGraphicsDevice)))
{
ATLASSERT(false);
return 1;
}
FrameworkSimpleMainLoop(pGraphicsDevice);
return 0;
}
最后的FrameworkSimpleMainLoop就是近似传说中的glutMainLoop啦,不过为了避免全局变量,我把pGraphicsDevice给传进去了……
然后想想貌似这里没什么避免全局变量的必要(或者整个类,然后用静态变量算了)。现在的话,如果想在MainLoop内更换GraphicsDevice,原来的Device的引用计数也释放不掉了。
然后觉得一开始的注册可用库之类的流程也要改,目前那个全局map也会把所有的DLL都保留着,没有释放掉。
最好的办法是,全局map里只保留创建函数,在获取Library。主程序可以Enum每个可用类(按接口),传递GUID进去,获得一个接口,也可以选择创建默认类,然后获得一个接口。在InitFramework的时候,每个DLL只尝试性连接,如果连接成功,可以立刻释放。等到对应的类被创建的时候再去重新连接。
另外在ToggleDevice的方面还没什么好的想法。或者干脆维护一个Device列表?列表内的被Render。这也是需要改进的。
posted on 2008-11-12 22:59
正牌的天地之灵和他的徒儿们肖赫_王婷婷_王冠_郑燚_孙婷 阅读(131)
评论(0) 编辑 收藏 引用 所属分类:
天地之灵