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. C#中如何利用操作符重载和转换操作符

    操作符重载 有的编程语言允许一个类型定义操作符应该如何操作类型的实例,比如string类型和int类型都重载了(==)和(+)等操作符,当编译器发现两个int类型的实例使用+操作符的时候,编译器会生成 ...

  2. android开发 替换bitmap中的颜色值

    /** * 将bitmap中的某种颜色值替换成新的颜色 * @param bitmap * @param oldColor * @param newColor * @return */ public ...

  3. Netsharp快速入门(之11) 销售管理(开发销售订单工作区)

    作者:秋时 杨昶   时间:2014-02-15  转载须说明出处 4.3     销售订单开发 4.3.1  部件工作区设置 1.创建部件工作区,建工作区向导中要注意勾选组合并系部分.具体要建立的部 ...

  4. Function模式 -- 深入理解javascript

    /* 一.回调函数 函数A作为另外一个函数B的参数 */ var menuId = $("ul.nav").first().attr("id"); var re ...

  5. HDU 5593 ZYB's Tree 树形dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5593 题意: http://bestcoder.hdu.edu.cn/contests/contes ...

  6. 【BZOJ】【2668】【CQOI2012】交换棋子

    网络流/费用流 跪跪跪,居然还可以这样建图…… 题解:http://www.cnblogs.com/zig-zag/archive/2013/04/21/3033485.html 考虑每个点的交换限制 ...

  7. javascript去除首尾空白字符

    if ( twocode.replace(/^\s+|\s+$/g,"")=="" ) { alert("二维码不能为空"); docume ...

  8. Swift-6-函数

    // Playground - noun: a place where people can play import UIKit // 定义和调用函数 func sayHello(personName ...

  9. ios 图片转视频

    转自:http://blog.iosxcode4.com/archives/160 用到的FrameWork有: MediaPlayer.framework,QuartzCore.framework, ...

  10. NET 查找程序集路径(CLR关于Assembly的搜索路径的过程)

    最近在回顾.Net应用程序的执行环境,这里做一个很小的总结,方面以后需要的时候进行查找: CLR必须可以找到正确的Assembly,Net提供了Assembly搜索算法,可以根据.config文件(类 ...