显卡对Opengl标准的支持,在逻辑是通过驱动程序完成的.理论上通过软件实现,驱动程序可以实现所有的最新的Opengl标准(只要驱动程序暴露扩展函数接口即可),但受限于原先固有硬件的设计,有些扩展无法或实现非常困难,如Shader标准,FrameBuffer等与硬件紧密相关的技术. 但很多扩展只需要升级驱动程序即可.尽管Opengl 2.0是刚通过ARB的,但在此前出产的有相关硬件能力的显卡只需升级驱动程序即可.
OpenGL Extensions Viewer这个工具能检查当前显卡驱动程序对Opengl的实现程度.
// 取显卡内存量
bool getVideoMemUsage(DWORD &vidMemTotal, DWORD &vidMemFree)
{
// Uses directdraw to get total and free video memory
LPDIRECTDRAW lpDD = NULL;
HWND hWnd = NULL;
DDCAPS ddcaps;
ddcaps.dwSize=sizeof(DDCAPS);
if(DirectDrawCreate(NULL, &lpDD, NULL)!=DD_OK)
{
return false;
}
if(lpDD->SetCooperativeLevel(hWnd, DDSCL_NORMAL)!=DD_OK)
{
lpDD->Release();
return false;
}
if(lpDD->GetCaps(&ddcaps, NULL)!=DD_OK)
{
lpDD->Release();
return false;
}
vidMemTotal = ddcaps.dwVidMemTotal;
vidMemFree = ddcaps.dwVidMemFree;
lpDD->Release();
return true;
}