初始化glew,建立OpenGL渲染上下文

來源:互聯網
上載者:User

標籤:des   style   blog   color   io   os   ar   for   div   

 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個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.