Windows中设置OpenGL像素格式的两种方法
2011-02-11 21:21
573 查看
indows使用OpenGL必须设置OpenGL环境,将窗口连接到OpenGL。首先选择并设置相应像素格式,然后创建着色描述表并将其连接到设备描述表。本文介绍两种设置OpenGL环境的方法,主要是选择像素格式方法的不同。
HDC g_hDC = NULL;
HGLRC g_hRC = NULL;
#define METHOD_1
BOOL ConnectGL1 (HWND hWnd);
BOOL ConnectGL2 (HWND hWnd);
#ifdef METHOD_1
#define ConnectGL ConnectGL1
#endif
#ifdef METHOD_2
#define ConnectGL ConnectGL2
#endif
BOOL ConnectGL1 (HWND hWnd)
{
GLuint PixelFormat;
static PIXELFORMATDESCRIPTOR pfd = {
sizeof (PIXELFORMATDESCRIPTOR),
1,
PFD_DWAR_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER, //标志
PFD_TYEP_RGBA, //颜色模式
24, //颜色位数
0, 0, 0, 0, 0, 0,
0,
0,
0,
0, 0, 0, 0,
32, //深度位数
0,
0,
PFD_MAIN_PLANE,
0,
0, 0, 0
};
if ((g_hDC = GetDC (hWnd)) == NULL) return FALSE;
if ((PixelFormat = ChoosePixelFormat (g_hDC, &pfd)) == 0) return FALSE; //选择相应像素格式
if (!SetPixelFormat (g_hDC, PixelFormat, &pfd)) return FALSE; //设置像素格式
if ((g_hRC = wglCreateContext (g_hDC)) == NULL) return FALSE; //创建着色描述表
if (!wglMakeCurrent (g_hDC, g_hRC)) return FALSE; //将着色描述表连接到设备描述表
}
#define DESFLAGS PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER
BOOL ConnectGL2 (HWND hWnd)
{
GLuint PixelFormat, iPixelFormat, maxPixelFormat;
static PIXELFORMATDESCRIPTOR pfd;
if ((g_hDC = GetDC (hWnd)) == NULL) return FALSE;
maxPixelFormat = DescribePixelFormat (g_hDC, 1, sizeof (PIXELFORMATDESCRIPTOR), NULL); //获取所支持的像素最大索引
for (iPixelFormat = 1; iPixelFormat <= maxPixelFormat; iPixelFormat++) {
DescribePixelFormat (g_hDC, iPixelFormat, sizeof (PIXELFORMATDESCRIPTOR), &pfd);
if ((pfd.dwFlags & DESFLAGS) == DESFLAGS) {
PixelFormat = iPixelFormat;
break;
}
}
if (!SetPixelFormat (g_hDC, PixelFormat, &pfd)) return FALSE; //设置像素格式
if ((g_hRC = wglCreateContext (g_hDC)) == NULL) return FALSE; //创建着色描述表
if (!wglMakeCurrent (g_hDC, g_hRC)) return FALSE; //将着色描述表连接到设备描述表
}
HDC g_hDC = NULL;
HGLRC g_hRC = NULL;
#define METHOD_1
BOOL ConnectGL1 (HWND hWnd);
BOOL ConnectGL2 (HWND hWnd);
#ifdef METHOD_1
#define ConnectGL ConnectGL1
#endif
#ifdef METHOD_2
#define ConnectGL ConnectGL2
#endif
BOOL ConnectGL1 (HWND hWnd)
{
GLuint PixelFormat;
static PIXELFORMATDESCRIPTOR pfd = {
sizeof (PIXELFORMATDESCRIPTOR),
1,
PFD_DWAR_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER, //标志
PFD_TYEP_RGBA, //颜色模式
24, //颜色位数
0, 0, 0, 0, 0, 0,
0,
0,
0,
0, 0, 0, 0,
32, //深度位数
0,
0,
PFD_MAIN_PLANE,
0,
0, 0, 0
};
if ((g_hDC = GetDC (hWnd)) == NULL) return FALSE;
if ((PixelFormat = ChoosePixelFormat (g_hDC, &pfd)) == 0) return FALSE; //选择相应像素格式
if (!SetPixelFormat (g_hDC, PixelFormat, &pfd)) return FALSE; //设置像素格式
if ((g_hRC = wglCreateContext (g_hDC)) == NULL) return FALSE; //创建着色描述表
if (!wglMakeCurrent (g_hDC, g_hRC)) return FALSE; //将着色描述表连接到设备描述表
}
#define DESFLAGS PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER
BOOL ConnectGL2 (HWND hWnd)
{
GLuint PixelFormat, iPixelFormat, maxPixelFormat;
static PIXELFORMATDESCRIPTOR pfd;
if ((g_hDC = GetDC (hWnd)) == NULL) return FALSE;
maxPixelFormat = DescribePixelFormat (g_hDC, 1, sizeof (PIXELFORMATDESCRIPTOR), NULL); //获取所支持的像素最大索引
for (iPixelFormat = 1; iPixelFormat <= maxPixelFormat; iPixelFormat++) {
DescribePixelFormat (g_hDC, iPixelFormat, sizeof (PIXELFORMATDESCRIPTOR), &pfd);
if ((pfd.dwFlags & DESFLAGS) == DESFLAGS) {
PixelFormat = iPixelFormat;
break;
}
}
if (!SetPixelFormat (g_hDC, PixelFormat, &pfd)) return FALSE; //设置像素格式
if ((g_hRC = wglCreateContext (g_hDC)) == NULL) return FALSE; //创建着色描述表
if (!wglMakeCurrent (g_hDC, g_hRC)) return FALSE; //将着色描述表连接到设备描述表
}
相关文章推荐
- windows下利用gdi+读取图片并转换成opengl纹理支持的像素格式
- 《高效学习OpenGL》之 openGL设置窗口像素格式
- Windows 设置护眼色的两种方法
- Windows设置启动菜单的等待时间的两种方法
- SilverLight学习(2):两种方法设置图形元素的RenderTransform属性
- opengl像素格式和RC管理
- C# web api返回类型设置为json的两种方法
- 转载(略有修改):Windows 8的承载网络设置方法(w8 创建无线网络/ap)
- 设置网站ico图标的两种方法
- 设置c#windows服务描述及允许服务与桌面交互的几种方法
- windows系统设置保护视力方法
- Windows提供了两种将DLL映像到进程地址空间的方法
- Windows主机-WordPress设置固定链接伪静态的方法
- 备份和恢复Windows IIS服务器设置的方法
- JDK环境变量的设置(两种方法)
- windows 2003 自带tftp32设置方法
- OpenCV获取与设置像素点的值的几个方法
- js设置控件的隐藏与显示的两种方法
- C语言经典算法(五)——求位设置的两种方法