Windows为了发展其本身的DirectX,只支持OpenGL1.1,可是至2013年5月,OpenGL已更新到4.3版本。
如何能够让Windows支持更高版本的OpenGL?
显卡可能可以从硬件上直接实现更高版本的OpenGL的相关函数。
查看显卡支持的OpenGL版本的方法,glGetString(GL_VERSION);
查看支持的相关扩展:glGetString(GL_EXTENSIONS);
在查看之前首先有初始化窗口
- 第一种方式通过Windows api初始化窗口
HDC g_hDC = GetDC(GetConsoleWindow());
PIXELFORMATDESCRIPTOR pfd;
memset(&pfd, 0, sizeof(pfd));
pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
pfd.nVersion = 1;
pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = 32;
pfd.cRedBits = 8;
pfd.cGreenBits = 8;
pfd.cBlueBits = 8;
pfd.cAlphaBits = 8;
pfd.iLayerType = PFD_MAIN_PLANE;
pfd.cDepthBits = 24;
int format = ChoosePixelFormat(g_hDC, &pfd);
SetPixelFormat(g_hDC, format, &pfd);
HGLRC hRC = wglCreateContext(g_hDC);
if (!wglMakeCurrent(g_hDC, hRC))
{
wglDeleteContext(hRC);
return;
}
- 第二种方式调用glut库。
Windows环境下GLUT下载地址:
点击下载glut
Windows下GLUT安装步骤:
1、将下载的压缩包解开,将得到5个文件
2、在“我的电脑”中搜索“gl.h”,并找到其所在文件夹,对于VisualStudio2008,把glut.h复制到文件夹:
C:\Program Files\VS2008\VC\include\GL(我的电脑是这样的,不同电脑可能不一样)
3、把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹(即与include并排的lib文件夹下)。
4、把解压得到的glut.dll和glut32.dll放到操作系统目录下面的system32文件夹内。
(32位系统:C:\Windows\System32,64位系统:C:\Windows\System)
此时在Visual Stdio下新建空白工程。输入以下代码:
#include <Windows.h>
#include <gl/glut.h>
#include <iostream>
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH);
glutInitWindowSize(300, 300);
glutInitWindowPosition(100, 100);
glutCreateWindow("OpenGL Version Check");
const GLubyte* uglName = glGetString(GL_VENDOR);
if (uglName)
std::cout<<"opengl实现厂商的名字: "<<uglName<<std::endl;
else
std::cout<<"uglName empty pointer"<<std::endl;
const GLubyte* uglRenderer = glGetString(GL_RENDERER);
if (uglName)
std::cout<<"渲染器标识符,通常是个硬件平台 : "<<uglRenderer<<std::endl;
else
std::cout<<"uglRender empty pointer"<<std::endl;
const GLubyte* uglVersion = glGetString(GL_VERSION);
if (uglVersion)
std::cout<<"OpenGL实现的版本号"<<uglVersion<<std::endl;
else
std::cout<<"version empty pointer"<<std::endl;
const GLubyte* uglGluVersion = gluGetString(GLU_VERSION);
if (uglGluVersion)
std::cout<<"当前GLU工具库版本 : "<<uglGluVersion<<std::endl;
else
std::cout<<"uglGluVersion empty pointer"<<std::endl;
return 0;
}
则可得到本机显卡支持OpenGL信息.