天地之灵学习小组
我们学习小组的OpenGL学习笔记 大家一定要互相折磨呀~~
posts - 150,  comments - 156,  trackbacks - 0

目的是把DX9、DX10、OpenGL、Software等图形库封装到一个统一的图形接口,把DInput、WINAPI的输入控制封装到一个统一的输入接口,在用户机器上自动选择一个可用的接口使用(譬如Vista默认选择DX10,XP默认选择DX9等)。如果以后有必要,也只需要再定义一个接口,就可以把任何的同功能的多个库封装到一个统一的接口,并获取到一个默认的接口使用。另外,当用户机器上没有可用库的时候,可以“优雅”的提示用户,而不是弹出系统默认的“缺少XXX.DLL,程序无法启动”。
主函数:

#include "stdafx.h"

#include "FWBase.h"

[
 module (name="TestFramework")
];

int _tmain(int argc, _TCHAR* argv[])
{
 InitFramework();
 CComPtr<IGraphicsLibrary> pGL;
 if (FAILED(GetDefaultFrameworkLibrary(&pGL)))
 {
  wprintf(L"No default graphics library found.");
  ATLASSERT(0);
  return 1;
 }
 CComBSTR bsGLName;
 if (SUCCEEDED(pGL->GetLibraryName(&bsGLName)))
 {
  wprintf(L"Default graphics library is: %s", (BSTR)bsGLName);
 }

 return 0;
}

接口:

[
 object,
 uuid("914F136A-FCC8-4e1b-9E5D-95797B6DE183")
]
__interface ILibrary : public IDispatch
{
 [id(1), helpstring("Init the library. Return E_FAIL if failed.")]
 HRESULT InitLibrary();
 [id(2), helpstring("Retrieves the name of this library")]
 HRESULT GetLibraryName(BSTR *pbsName);
};

[
 object,
 uuid("9E979A9A-A271-496f-B04E-7A9AE0BAE335")
]
__interface IGraphicsLibrary : public ILibrary
{
   //暂时还什么也没写
};


Framework接口:
HRESULT InitFramework();
HRESULT RegisterFrameworkLibrary(REFIID idLibaryType, ILibrary *pLibrary);
HRESULT GetDefaultFrameworkLibrary(REFIID idLibraryType, ILibrary **ppLibrary);

template <typename Interface, typename ClassType>
HRESULT RegisterFrameworkLibrary();

template <typename LibraryType>
HRESULT GetDefaultFrameworkLibrary(LibraryType **ppLibrary);

运行效果:
On Vista:
Default graphics library is: Direct3D 10 Library
On XP:
No default graphics library found.
(Direct3D 9接口尚未编写)


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2008年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

常用链接

留言簿(6)

随笔分类(149)

随笔档案(150)

同道中人

搜索

  •  

积分与排名

  • 积分 - 43939
  • 排名 - 486

最新随笔

最新评论

阅读排行榜

评论排行榜