void RegisterWinDowClass(HINSTANCE hInstance,std::string className,WNDPROC proc)
{
WNDCLASS wndClass;
wndClass.cbClsExtra = ;
wndClass.cbWndExtra = ;
wndClass.hbrBackground = (HBRUSH)::GetStockObject(GRAY_BRUSH);
wndClass.hCursor = ::LoadCursor(NULL,IDC_ARROW);
wndClass.hIcon = ::LoadIcon(NULL,IDI_APPLICATION);
wndClass.hInstance = hInstance;
wndClass.lpfnWndProc = proc;
wndClass.lpszClassName = className.c_str();
wndClass.lpszMenuName = NULL;
wndClass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC | CS_DBLCLKS;
::RegisterClass(&wndClass);
}
 bool InitGlewLib(HINSTANCE hInstance)
{
RegisterWinDowClass(hInstance,"Fake",MainWinProc); HWND hWnd = ::CreateWindow("Fake","OpenGL",WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,width,heigtht,
NULL,NULL,hInstance,NULL); HDC hDC = ::GetDC(hWnd);
HGLRC hRc;
::PIXELFORMATDESCRIPTOR pfd;
//memset(&pfd,0,sizeof(pfd)); //pfd.nVersion = 1;
//pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
//pfd.dwFlags = PFD_DOUBLEBUFFER | PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW;
//pfd.iPixelType = PFD_TYPE_RGBA;
//pfd.cColorBits = 32;
//pfd.cDepthBits = 32;
//pfd.iLayerType = PFD_MAIN_PLANE; //int iPixelFormat = ::ChoosePixelFormat(hDC,&pfd);
//if (iPixelFormat == 0)
//{
// DestroyWindow(hWnd);
// return false;
//}
/************************************************************************** 1,注册fake窗口的class,如果和主窗口是同名的class,会使初始化失败
2,选择1号格式索引作为临时索引
3,根据设备上下文创建渲染上下文
4,绑定到当前上下文
5,初始化glew
6,解除上下文绑定,销毁窗口
**************************************************************************/ int iPixelFormat = ;
if (::SetPixelFormat(hDC,iPixelFormat,&pfd))
{
hRc = ::wglCreateContext(hDC);
if (::wglMakeCurrent(hDC,hRc))
{
GLenum retVal = glewInit();
wglMakeCurrent(NULL,NULL);
wglDeleteContext(hRc);
DestroyWindow(hWnd);
return retVal == GLEW_OK;
}
wglDeleteContext(hRc);
DestroyWindow(hWnd);
}
else
{
DestroyWindow(hWnd);
} return false;
}
 bool InitOpenGL(HWND hWnd,HINSTANCE hInstance)
{
if (!InitGlewLib(hInstance))
{
::MessageBox(NULL,"glew init Error",NULL,MB_OK);
return ;
} if(!WGLEW_ARB_create_context || !WGLEW_ARB_pixel_format)
return false;
HDC hDC = ::GetDC(hWnd);
PIXELFORMATDESCRIPTOR pfd;
//memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR));
//pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
//pfd.nVersion = 1;
//pfd.dwFlags = PFD_DOUBLEBUFFER | PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW;
//pfd.iPixelType = PFD_TYPE_RGBA;
//pfd.cColorBits = 32;
//pfd.cDepthBits = 32;
//pfd.iLayerType = PFD_MAIN_PLANE; /************************************************************************** 1,填充像素格式属性 (缓冲区的初始化)
2,填充上下文属性 (用于设置指定OpenGL版本)
3,根据像素格式属性选择设备上下文合适像素格式索引。wglChoosePixelFormatARB(...)
4,将得到的像素格式索引绑定到设备上下文。SetPixelFormat(...)
5,根据设备上下文,及上下文属性设置创建一个OpenGL渲染上下文。wglCreateContextAttribsARB(...)
6,将渲染上下文与设备上下文绑定 wglMakeCurrent(...) **************************************************************************/ const int iPixelFormatAttributeList[] =
{
WGL_DRAW_TO_WINDOW_ARB, GL_TRUE, // 绘制到窗口
WGL_SUPPORT_OPENGL_ARB,GL_TRUE, // 支持OpenGL
WGL_ACCELERATION_ARB ,WGL_FULL_ACCELERATION_ARB , // 硬件加速
WGL_DOUBLE_BUFFER_ARB,GL_TRUE, // 双缓冲
WGL_PIXEL_TYPE_ARB,WGL_TYPE_RGBA_ARB, // RGBA
WGL_COLOR_BITS_ARB,, // 颜色位数32
WGL_DEPTH_BITS_ARB,, // 深度位数24
WGL_STENCIL_BITS_ARB,, // 模板位数8
WGL_SWAP_METHOD_ARB, WGL_SWAP_EXCHANGE_ARB, // 双缓冲swap方式直接交换
WGL_SAMPLES_ARB, , // 4倍抗锯齿 }; const int iContextAttributeList[] =
{
WGL_CONTEXT_MAJOR_VERSION_ARB,, // 主版本号
WGL_CONTEXT_MINOR_VERSION_ARB,, // 次版本号
WGL_CONTEXT_FLAGS_ARB,WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB, }; int iPixelFormat,iNumFormat;
wglChoosePixelFormatARB(hDC,iPixelFormatAttributeList,NULL,
,&iPixelFormat,(UINT *)&iNumFormat); if (!SetPixelFormat(hDC,iPixelFormat,&pfd))
{
//int error = ::GetLastError();
return false;
}
HGLRC hRC = wglCreateContextAttribsARB(hDC,NULL,iContextAttributeList);
if (hRC)
{
::wglMakeCurrent(hDC,hRC);
return true;
}
return false;
}

初始化glew,创建OpenGL渲染上下文的更多相关文章

  1. OpenGL 渲染上下文-context

    context理解 OpenGL在渲染的时候需要一个Context,这个Context记录了OpenGL渲染需要的所有信息,可以把它理解成一个大的结构体,它里面记录了当前绘制使用的颜色.是否有光照计算 ...

  2. opengl学习笔记(二):使用OpenCV来创建OpenGL窗口

    通常的增强现实应用需要支持OpenGL的OpenCV来对真实场景进行渲染.从2.4.2版本开始,OpenCV在可视化窗口中支持OpenGL.这意味着在OpenCV中可轻松渲染任何3D内容. 若要在Op ...

  3. 一个使用openGL渲染的炫丽Android动画库

    android-magic-surface-view 这是一个 android 动画特效库, 可以实现各种炫酷动画. github地址: https://github.com/gplibs/andro ...

  4. 一个使用openGL渲染的炫丽Android动画库二(碎片化曲面动画)

    续一个使用openGL渲染的炫丽Android动画库 MagicSurfaceView v1.1.0发布, 新增碎片化曲面动画 地址:https://github.com/gplibs/android ...

  5. 创建OpenGL Context(WGL)

    创建OpenGL Context(WGL) 创建OpenGL Context是初始化OpenGL的一部分.只有在此之后才能使用OpenGL. 关于platform的注意事项 创建OpenGL cont ...

  6. [转贴]Cocos2d-x3.2与OpenGL渲染总结(一)Cocos2d-x3.2的渲染流程

    看了opengles有一段时间了,算是了解了一下下.然后,就在基本要决定还是回归cocos2dx 3.2的,看了这篇好文章,欣喜转之~ 推荐看原帖: Cocos2d-x3.2与OpenGL渲染总结(一 ...

  7. 《绘图前设置:像素格式——PIXELFORMATDESCRIPT、设备上下文、渲染上下文》

    转载地址:https://www.cnblogs.com/wiener-zyj/p/4159745.html  像素格式——PIXELFORMATDESCRIPT.设备上下文.渲染上下文 在OpenG ...

  8. CSharpGL(31)[译]OpenGL渲染管道那些事

    CSharpGL(31)[译]OpenGL渲染管道那些事 +BIT祝威+悄悄在此留下版了个权的信息说: 开始 自认为对OpenGL的掌握到了一个小瓶颈,现在回头细细地捋一遍OpenGL渲染管道应当是一 ...

  9. OpenGL渲染流程

    一.什么是openGL OpenGL被定义为“图形硬件的一种软件接口”.从本质上说,它是一个3D图形和模型库,具有高度的可移植性,具有非常快的速度. 二.管线 管线这个术语描述了opengl渲染的整个 ...

随机推荐

  1. mysql 字段编码该为utf8mb4

    alter table c_comment modify column content varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unico ...

  2. responsive layout

    http://cssdeck.com/labs/7wsdvxdc http://getbootstrap.com/css/ http://getbootstrap.com/2.3.2/scaffold ...

  3. linux设置环境变量的方法

    0.查看环境变量 export 1.直接执行命令,不过只有此次会话有效 export PATH=$PATH:/dir/I/want 2.修改profile文件 在里面加入: export PATH=& ...

  4. 多种方法实现H5网页图片动画效果;

    在web开发中,GIF动画效果是随处可见,比如常见的loading加载.人物奔跑的gif图片等等,那么这些都是怎么实现的呢?其实实现的原理很简单,简而言之,这些所谓的动画都是一帧一帧的图片经过一段时间 ...

  5. 委托、匿名委托和lambda表达式

    1.委托 在.NET中,委托有点类似于C/C++中的函数指针,但与指针不同的是,委托是一种安全的类型,那么我们就以实现两个数的差为例,先声明一个成员方法: public int CompareTwoV ...

  6. 或许你不知道:ArrayList

    ArrayList 底层以一个transient 线性数组来存储数据,它提供了无参构造方法,和有参构造方法,用户可以通过有参构造方法来初始化长度.如果不传参数,则默认调用无参构造器,数组默认长度为10 ...

  7. 在C#中使用GDAL创建Shape文件

    这几天在项目中考虑使用GDAL,由于10年没有用过VC了,就在网上搜了下怎么样在C# 中使用GDAL,看到了http://blog.csdn.net/liminlu0314/article/detai ...

  8. hdu 1028 Ignatius and the Princess III

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1028 题目大意:3=1+1+1=1+2=3 :4=4=1+1+1+1=1+2+1=1+3:所以3有3种 ...

  9. JSP Workshop

    http://www.cnblogs.com/ITtangtang/p/4126395.html 发现http://www.tutorialspoint.com/里的资料很全也很不错啊! 资料:htt ...

  10. [haoi2009]毛毛虫 树形dp

    这道题细节处理不少,但要AC不难: 设以i节点为根节点的子树能形成的最大的毛毛虫长度为f[i],则f[i]=max(f[j])+i节点的孩子数: 答案需要f最大和次大的两个子树合并,而且若合并的位置不 ...