首页 > 代码库 > 初始化glew,创建OpenGL渲染上下文
初始化glew,创建OpenGL渲染上下文
1 void RegisterWinDowClass(HINSTANCE hInstance,std::string className,WNDPROC proc) 2 { 3 WNDCLASS wndClass; 4 wndClass.cbClsExtra = 0; 5 wndClass.cbWndExtra = 0; 6 wndClass.hbrBackground = (HBRUSH)::GetStockObject(GRAY_BRUSH); 7 wndClass.hCursor = ::LoadCursor(NULL,IDC_ARROW); 8 wndClass.hIcon = ::LoadIcon(NULL,IDI_APPLICATION); 9 wndClass.hInstance = hInstance;10 wndClass.lpfnWndProc = proc;11 wndClass.lpszClassName = className.c_str();12 wndClass.lpszMenuName = NULL;13 wndClass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC | CS_DBLCLKS;14 ::RegisterClass(&wndClass);15 }
1 bool InitGlewLib(HINSTANCE hInstance) 2 { 3 RegisterWinDowClass(hInstance,"Fake",MainWinProc); 4 5 HWND hWnd = ::CreateWindow("Fake","OpenGL",WS_OVERLAPPEDWINDOW, 6 CW_USEDEFAULT,CW_USEDEFAULT,width,heigtht, 7 NULL,NULL,hInstance,NULL); 8 9 HDC hDC = ::GetDC(hWnd);10 HGLRC hRc;11 ::PIXELFORMATDESCRIPTOR pfd;12 //memset(&pfd,0,sizeof(pfd));13 14 //pfd.nVersion = 1;15 //pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);16 //pfd.dwFlags = PFD_DOUBLEBUFFER | PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW;17 //pfd.iPixelType = PFD_TYPE_RGBA;18 //pfd.cColorBits = 32;19 //pfd.cDepthBits = 32;20 //pfd.iLayerType = PFD_MAIN_PLANE; 21 22 //int iPixelFormat = ::ChoosePixelFormat(hDC,&pfd);23 //if (iPixelFormat == 0)24 //{25 // DestroyWindow(hWnd);26 // return false;27 //}28 /**************************************************************************29 30 1,注册fake窗口的class,如果和主窗口是同名的class,会使初始化失败31 2,选择1号格式索引作为临时索引32 3,根据设备上下文创建渲染上下文33 4,绑定到当前上下文34 5,初始化glew35 6,解除上下文绑定,销毁窗口36 **************************************************************************/37 38 int iPixelFormat = 1;39 if (::SetPixelFormat(hDC,iPixelFormat,&pfd))40 {41 hRc = ::wglCreateContext(hDC);42 if (::wglMakeCurrent(hDC,hRc))43 {44 GLenum retVal = glewInit();45 wglMakeCurrent(NULL,NULL);46 wglDeleteContext(hRc);47 DestroyWindow(hWnd);48 return retVal == GLEW_OK;49 }50 wglDeleteContext(hRc);51 DestroyWindow(hWnd);52 }53 else54 {55 DestroyWindow(hWnd);56 }57 58 return false;59 }
1 bool InitOpenGL(HWND hWnd,HINSTANCE hInstance) 2 { 3 if (!InitGlewLib(hInstance)) 4 { 5 ::MessageBox(NULL,"glew init Error",NULL,MB_OK); 6 return 0; 7 } 8 9 if(!WGLEW_ARB_create_context || !WGLEW_ARB_pixel_format)10 return false;11 HDC hDC = ::GetDC(hWnd);12 PIXELFORMATDESCRIPTOR pfd;13 //memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR));14 //pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);15 //pfd.nVersion = 1;16 //pfd.dwFlags = PFD_DOUBLEBUFFER | PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW;17 //pfd.iPixelType = PFD_TYPE_RGBA;18 //pfd.cColorBits = 32;19 //pfd.cDepthBits = 32;20 //pfd.iLayerType = PFD_MAIN_PLANE;21 22 /**************************************************************************23 24 1,填充像素格式属性 (缓冲区的初始化)25 2,填充上下文属性 (用于设置指定OpenGL版本)26 3,根据像素格式属性选择设备上下文合适像素格式索引。wglChoosePixelFormatARB(...)27 4,将得到的像素格式索引绑定到设备上下文。SetPixelFormat(...)28 5,根据设备上下文,及上下文属性设置创建一个OpenGL渲染上下文。wglCreateContextAttribsARB(...)29 6,将渲染上下文与设备上下文绑定 wglMakeCurrent(...)30 31 **************************************************************************/32 33 const int iPixelFormatAttributeList[] =34 {35 WGL_DRAW_TO_WINDOW_ARB, GL_TRUE, // 绘制到窗口36 WGL_SUPPORT_OPENGL_ARB,GL_TRUE, // 支持OpenGL37 WGL_ACCELERATION_ARB ,WGL_FULL_ACCELERATION_ARB , // 硬件加速38 WGL_DOUBLE_BUFFER_ARB,GL_TRUE, // 双缓冲39 WGL_PIXEL_TYPE_ARB,WGL_TYPE_RGBA_ARB, // RGBA40 WGL_COLOR_BITS_ARB,32, // 颜色位数3241 WGL_DEPTH_BITS_ARB,24, // 深度位数2442 WGL_STENCIL_BITS_ARB,8, // 模板位数843 WGL_SWAP_METHOD_ARB, WGL_SWAP_EXCHANGE_ARB, // 双缓冲swap方式直接交换44 WGL_SAMPLE_BUFFERS_ARB, 4, // 4倍抗锯齿45 046 };47 48 const int iContextAttributeList[] =49 {50 WGL_CONTEXT_MAJOR_VERSION_ARB,3, // 主版本号51 WGL_CONTEXT_MINOR_VERSION_ARB,3, // 次版本号52 WGL_CONTEXT_FLAGS_ARB,WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB,53 054 };55 56 int iPixelFormat,iNumFormat;57 wglChoosePixelFormatARB(hDC,iPixelFormatAttributeList,NULL,58 1,&iPixelFormat,(UINT *)&iNumFormat);59 60 if (!SetPixelFormat(hDC,iPixelFormat,&pfd))61 {62 //int error = ::GetLastError();63 return false;64 }65 HGLRC hRC = wglCreateContextAttribsARB(hDC,NULL,iContextAttributeList);66 if (hRC) 67 {68 ::wglMakeCurrent(hDC,hRC);69 return true;70 }71 return false;72 }
初始化glew,创建OpenGL渲染上下文
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。