位置: 编程技术 - 正文

windows设置opengl上下文(Windows设置在哪里)

编辑:rootadmin
一、 设置像素&#;式

推荐整理分享windows设置opengl上下文(Windows设置在哪里),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:Windows设置nginx开机自启动,Windows设置不锁屏,Windows设置定时关机,Windows设置锁屏密码,Windows设置不锁屏,Windows设置默认应用,Windows设置锁屏密码,Windows设置快捷键,内容如对您有帮助,希望把文章链接给更多的朋友!

像素&#;式用于指定OpenGL绘画的一些属性,在windows中,使用PIXELFORMATDESCRIPTOR结构体来描述。一个设备可以支持许多像素&#;式,但只能拥有一种当前像素&#;式,需要从这一系列的像素&#;式中选择出一种合适的像素&#;式来,并设置它。主要属性有:

像素缓冲是单缓冲还是双缓冲; 像素数据时RGBA还是颜色索引; 颜色数据的位数; 深度缓冲的位数; 模板缓冲的位数; 层的数量; 各种可视化掩膜;

代码片段如下:

1.1 填写PIXELFORMATDESCRIPTOR结构体[cpp] view plaincopyprint?static PIXELFORMATDESCRIPTOR pfd= { sizeof(PIXELFORMATDESCRIPTOR), // Size Of This Pixel Format Descriptor 1, // Version Number PFD_DRAW_TO_WINDOW | // Format Must Support Window PFD_SUPPORT_OPENGL | // Format Must Support OpenGL PFD_DOUBLEBUFFER, // Must Support Double Buffering PFD_TYPE_RGBA, // Request An RGBA Format bits, // Select Our Color Depth 0, 0, 0, 0, 0, 0, // Color Bits Ignored 0, // No Alpha Buffer 0, // Shift Bit Ignored 0, // No Accumulation Buffer 0, 0, 0, 0, // Accumulation Bits Ignored , // Bit Z-Buffer (Depth Buffer) 0, // No Stencil Buffer 0, // No Auxiliary Buffer PFD_MAIN_PLANE, // Main Drawing Layer 0, // Reserved 0, 0, 0 // Layer Masks Ignored };

1.2 选择合适的像素&#;式[cpp] view plaincopyprint?// get the best available match of pixel format for the device context int iPixelFormat = ChoosePixelFormat(hdc, &pfd); if(0 == iPixelFormat) { cerr << "Choose pixel format failed." << endl; ... }

1.3 设置像素&#;式[cpp] view plaincopyprint?// make that the pixel format of the device context if(!SetPixelFormat(hdc, iPixelFormat, &pfd)) { cerr << "Set pixel format failed." << endl; ... }

注意:必须在创建渲染上下文前设置像素&#;式。

参考: 创建OpenGL渲染上下文(rendering context)

每一个调用了OpenGL API的线程都必须要有一个OpenGL渲染上下文,这个渲染上下文用来将OpenGL链接到Windwos的窗口系统。

一个线程只能有一个当前渲染上下文,一个渲染上下文只能最为一个线程的当前上下文。如果调用OpenGL API的线程缺少当前渲染上下文,则不会有任何结果产生。

2.1 创建OpenGL上下文[cpp] view plaincopyprint?HGLRC hglrc = wglCreateContext(hdc); if(!hglrc) { cerr << "Create render contex failed." << endl; … }

2.2 将OpenGL上下文设置为当前线程的当前上下文[cpp] view plaincopyprint?if(!wglMakeCurrent(hdc, hglrc)) { cerr << "Make current rendering context failed." << endl; … }

如果要清除当前上下文,可以将wglMakeCurrent中的参数设置为NULL即可。

windows设置opengl上下文(Windows设置在哪里)

注意:参数hdc必须和设置像素&#;式时使用的是同一个hdc。

参考: 显示OpenGL渲染内容

当前面两个步骤完成后,就可以使用OpenGL API进行渲染了。这时不再关注具体的渲染上下文,只需调用OpenGL的相应API即可。待渲染完毕,下一步要做的时就是要把它显示在窗口环境中。因为Windows下的设备环境使用了双缓冲的机制,所以这里就需要交换这两个缓冲,即可将渲染的内容显示在窗口中了。具体代码如下:

[cpp] view plaincopyprint?SwapBuffers(hdc); // hdc需和前面两个步骤中的hdc相同

四、 销毁OpenGL上下文

当我们不再进行OpenGL渲染的时候,就可以将OpenGL上下文销毁了。具体代码如下:

[cpp] view plaincopyprint?if (hglrc) // Do We Have A Rendering Context? { // Are We Able To Release The DC And RC Contexts? if (!wglMakeCurrent(NULL,NULL)) { cerr << “Release HGLRC failed.” << endl; } if (!wglDeleteContext(hglrc)) // Are We Able To Delete The HGLRC? { cerr << "Release Rendering Context Failed.” << endl; } hglrc =NULL; // Set RC To NULL }

附录

I. 创建窗口

前面说到那么多,但都没有说到如何创建显示OpenGL渲染内容的窗口,下面接着说一下如何创建一个Windows窗口吧。具体代码如下:

1)注册WNDCLASS类(结构体)

[cpp] view plaincopyprint?WNDCLASS wc; // Windows Class Structure hInstance = GetModuleHandle(NULL); // Grab An Instance For Our Window // Redraw On Size, And Own DC For Window. wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; wc.lpfnWndProc = (WNDPROC) WndProc; // WndProc Handles Messages wc.cbClsExtra = 0; // No Extra Window Data wc.cbWndExtra = 0; // No Extra Window Data wc.hInstance = hInstance; // Set The Instance wc.hIcon = LoadIcon(NULL, IDI_WINLOGO); // Load The Default Icon wc.hCursor = LoadCursor(NULL, IDC_ARROW); // Load The Arrow Pointer wc.hbrBackground = NULL; // No Background Required For GL wc.lpszMenuName = NULL; // We Don't Want A Menu wc.lpszClassName = "OpenGL"; // Set The Class Name if (!RegisterClass(&wc)) // Attempt To Register The Window Class { cerr << “Failed to register the window.” << endl; … }

2)创建窗口

[cpp] view plaincopyprint?HWND hWnd = CreateWindow("OpenGL", "Hello World.", WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_OVERLAPPEDWINDOW, 0, 0, , , NULL, NULL, GetModuleHandle(NULL), 0); if(!hWnd) { cerr << “Create window failed.” << endl; … } ShowWindow(hWnd, SW_SHOW);

Ⅱ. 销毁窗口

当不再需要该窗口时,需要对其进行销毁,步骤如下:

[cpp] view plaincopyprint?if (hdc && !ReleaseDC(hWnd,hdc)) // Are We Able To Release The DC { cerr << "Release Device Context Failed." << endl; hdc = NULL; // Set DC To NULL } if (hWnd && !DestroyWindow(hWnd)) // Are We Able To Destroy The Window? { cerr << "Could Not Release hWnd." << endl; hWnd=NULL; // Set hWnd To NULL } if (!UnregisterClass("OpenGL",hInstance)) // Are We Able To Unregister Class { cerr << "Could Not Unregister Class." << endl; hInstance=NULL; // Set hInstance To NULL }

【转】模型视图矩阵和投影矩阵(webgl笔记) 这段时间在做游戏3D场景生成和2D/3D切换的时候对模型视图矩阵和投影矩阵很头疼,直到看到这篇文章才豁然开朗,这篇文章讲的非常详细易懂,特地转

【计算机图形学】DDA(数字微分分析仪)绘制线条 DDA(digitaldifferentialanalyzer,数字微分分析法)是一种线段扫描转换算法。它的主要算法原理是:在一个坐标轴上以单位间隔对线段取样,从而在另一坐

【C#/OpenGL】CSGL库中2D纹理加载PNG等透明图片显示的黑边问题 CSGL加载PNG式图片作为纹理映射显示后是有黑边的,使用的是CSGL封装的OpenGLTexture2D类。后来查了很多OpenGL透明纹理的资料,网上找了各种其他语言的透明

标签: Windows设置在哪里

本文链接地址:https://www.jiuchutong.com/biancheng/369602.html 转载请保留说明!

上一篇:Android GLSurfaceView.Renderer

下一篇:【转】模型视图矩阵和投影矩阵(webgl笔记)(模型图怎么画)

  • 公司对个人的欠款怎么发律师函给他
  • 未认证的发票如何作废
  • 金融工具减值的简化处理
  • 自产农产品增值税申报表填10行吗
  • 开票系统技术服务费在申报表哪里抵扣
  • 劳务所得报酬
  • 买一送一的营销好处
  • 产品报废怎么做账
  • 亏损企业捐赠支出怎么算
  • 生产部门的费用计入什么科目
  • 房地产企业增值税预缴
  • 沙特将开征增值税和特殊商品消费税
  • 事业单位的增值税科目
  • 公司注销固定资产怎么处理税怎么交
  • 外经证过期没报验
  • 餐饮定额发票怎么征税
  • 最新增值税税率表 2019年增值税减税政策
  • 个人财产税是什么意思
  • 去年的发票可以红冲重新开具吗?
  • 企业给学校捐款的申请怎么写
  • 苹果电脑屏幕键盘怎么去除
  • 开了红字发票销售方怎么账务处理?
  • 一般纳税人购进农产品如何抵扣进项税额
  • (Select)解决:Element-ui 中 Select 选择器下拉框样式及输入框样式的修改问题(背景色透明与悬停背景色变化与下拉框边距变化等操作)
  • kb4586863更新
  • 负债的概念及流动负债的确认条件
  • 过桥资金账务处理
  • 绩效奖个人所得怎么算
  • 山上覆盖着皑皑白雪
  • react最新教程
  • 汇算清缴补交的所得税怎么记帐
  • php sw
  • 纳税人数字签名怎么填
  • 富文本编辑器和markdown编辑器的区别
  • php实现查询功能
  • 社保和公积金个人缴纳在哪里查看
  • 其他收益最后转入哪个科目
  • 进项税额转出忘记申报咋办
  • 开具红字增值税普通发票
  • 填制和审核会计凭证,可以监督各项经济业务的合法
  • 最新外资企业法实施条例
  • 契税计入税金及附加吗东奥
  • 企业所得税视同销售的有哪些?
  • 企业所得税年度纳税申报表A类
  • 固定资产的定义是什么?
  • 本年计算扣除限额的基数计算公式
  • 企业所得税业务招待费怎么调整
  • 物业电费加价如何处理
  • 收到红票账务处理
  • 暂估入库的税务怎么处理
  • 单位临时账户可以取现吗
  • 合并报表编制方法有几种
  • 长期待摊销费用属于流动资产吗
  • 持有待售的非流动资产减值能转回吗
  • VMware虚拟机中安装MATE桌面环境
  • win7关机没反应怎么办
  • mcdlc.exe - mcdlc是什么进程文件 有何作用
  • ipssvc.exe - ipssvc是什么进程 有什么作用
  • 升级win10系统后鼠标键盘无法用什么原因
  • linux k
  • cocos2d setTextureRect用法
  • css div布局的基本步骤
  • ubuntu重新安装网卡驱动
  • 用unity做2d游戏
  • js 异步队列
  • 大家看的是什么
  • AngularJs ng-change事件/指令的用法小结
  • nodejs如何使用
  • javascript怎么用
  • javascript视频教程
  • Android ExpandableListView的使用技巧
  • webview设置ua
  • 电子税务局申报表在哪里查询
  • 河北省国税局发展前景
  • 退车辆购置税流程怎么操作
  • 农产品电子发票可以抵扣吗
  • 税务稽查团队
  • 地税滞纳金如何做账
  • 武汉市江汉区财政局这个单位的公务员待遇怎么样?
  • 商品房开超市
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设