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. P3401: [Usaco2009 Mar]Look Up 仰望

    这道题第一眼还以为是树状数组,于是乎打着打着也是能过的 ; var n,i,j,maxx:longint; h,l:array[..] of longint; p:array[..] of longi ...

  2. <梦断代码>读后感2

    <梦断代码>这本书读了一半,我的心情久久不能平静. 为什么好软件如此难做?这是我本人,我想也是很多人都在苦苦思索的一个问题,虽然没有人能有完全确定的答案,但通过书中的记述,和个人思考,还是 ...

  3. 随机四则运算 C语言

    设计思想:出三十道一百以内数的随机四则运算题目,先随机两个一百以内的数字,再通过随机数确定四则运算算符,最后通过for循环输出三十道 源代码程序: #include <stdlib.h># ...

  4. xml基础学习笔记04

    今天继续xml学习,主要是:SimpleXML快速解析文档.xml与数组相互转换 .博客中只是简单的做一个学习记录.积累.更加详细的使用方法,可以查看php手册 1.SimpleXML快速解析文档 前 ...

  5. 19、android面试题整理(自己给自己充充电吧)

    (转载,出处丢失,请原作者原谅,如有意见,私信我我会尽快删除本文) JAVA 1.GC是什么? 为什么要有GC?GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问 ...

  6. SQL Server性能优化(2)获取基本信息

    以下常用的SQL语句有利于我们分析数据库的基本信息,然后根据查询的结果进行优化. 1. 查看索引碎片     无论何时对基础数据执行插入.更新或删除操作,SQL Server 数据库引擎都会自动维护索 ...

  7. How to find and fix Bash Shell-shock vulnerability CVE-2014-6271 in unix like system

    type command - env x='() { :;}; echo vulnerable' bash -c 'echo hello' in your terminal.   if your sy ...

  8. SASS学习笔记_01

      scss两种格式 sass    大括号 scss   css写法   Arguments:  --no-cache –style compressed --update $FileName$:c ...

  9. 关于Web服务器域名设置相关知识积累

    1.第一个问题,如何将一个服务器映射到一个域名上呢?    在申请域名的时候,会配置服务器IP和域名的对应关系,所以如果系统中只有一个应用的情况下,应用服务器不需要做任何配置. 2.在Tomcat服务 ...

  10. 【ContestHunter】【弱省胡策】【Round3】(C)

    容斥原理+Fib Orz HE的神犇们 蒟蒻只能改出来第三题……实在太弱 官方题解:http://pan.baidu.com/s/1o6MdtQq fib的神奇性质……还有解密a[i]的过程……这里就 ...