11月12日_重大突破_ By Gardon

11月12日_重大突破_ By Gardon

好吧,今晚有重大突破,那就是:窗口显示出来老!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。这也是需要改进的。

你可能感兴趣的:(11月12日_重大突破_ By Gardon)