多窗口使用OpenGL——wglShareLists使用简介

wglShareLists使用简介 OpenGL中用到多线程和多render context渲染的时候会用到wglsharelist进行资源共享,本文将对我本人在wglsharelist使用过程中的经验做个小总结:         首先翻译下msdn上对wglsharelist的说明:wglShareLists         wglShareLists函数使多个OpenGL render contexts可以共享一个显示列表空间。     BOOL wglShareLists( HGLR C hglrc1 , // 提 阅读详情

在使用多窗口使用OpenGL的时候,发现只能运行一个,另外一个就暂停了...搜索有一下文章,且拿来参考:、

摘自:http://blog.youkuaiyun.com/webscaler/article/details/5873179

OpenGL 中用到多线程和多 render context 渲染的时候会用到 wglsharelist 进行资源共享,本文将对我本人在 wglsharelist 使用过程中的经验做个小总结:

         首先翻译下 msdn 上对 wglsharelist 的说明:

wglShareLists

         wglShareLists 函数使多个 OpenGL render contexts 可以共享一个显示列表空间。     

  1. BOOL wglShareLists(  
  2.    HGLR C   hglrc1 ,  // 提供共享资源的render context  
  3.    HGLRC   hglrc2    // 共享别人资源的render context  
  4. );   

参数

hglrc1

         指定共享显示列表的 OpenGL 渲染上下文。

hglrc2

指定共享 hglrc1 显示列表的 OpenGL 渲染上下文。当 wglShareLists 被调用时, hglrc2 不能包含任何显示列表。

返回值

         当函数成功时,返回值为 TRUE.

当函数失败时,返回值为 FALSE 并且显示列表也不会被共享。调用 GetLastError 可以得到更多错误信息。

下面是我对 ShareList 的理解:

         使用 OpenGL 在 windows 窗口上绘制图像需要一个 render context , 就像 GDI 需要 device context 一样,当然 render context 最终也是通过 device context 绘制到最终的显示设备上的,这里 render context 我们可以形象地看成一个管道,用来存储 OpenGL 用户的命令和数据,为了节省管道的容量和带宽,我们希望管道间共享数据,所以 windows 引入了 wglShareLists 。下面是我在使用过程中得出的几个注意事项:

<1> wglShareLists 的两个参数可以属于同一个 device context ,也可以属于不同 device context 。

<2> 不同 render context 切换时,切记要记得保存旧的 render context 和 device context ,以便恢复,这样其他地方的绘制才不会受到影响,示例代码如下:


       

  1. HDC l_oldDC = wglGetCurrentDC();  
  2. HGLRC l_oldRC = wglGetCurrentContext();  
  3. wglMakeCurrent(l_newDC, l_newRC);  
  4. …………….  
  5. SwapBuffers(l_newDC);  
  6. wglMakeCurrent(l_oldDC, l_oldRC);  

<3> 在 <2> 的示例代码中红色标出的 swapbuffer 操作,这个要和你设置 device context 的 pixel format 要一致,在 PIXELFORMATDESCRIPTOR 结构中有个 dwFlags 字段,如果设置了 PFD_DOUBLEBUFFER ,那一定要记得 swapbuffer 操作。

<4> wglShareLists 的两个参数谁分享谁的资源一定要搞清楚,之前在网上找的文章说错了,搞的我弄了半天都不对,后来换了一下就对了,这里我只讲正确的方式,免得大家搞混,请记住: hglrc2 分享 hglrc1 的资源。

好了,再讲下创建 render context 的步骤:

(a). 获取一个 DC

(b). 选择并且设置 DC 的像素格式

(c). 通过 API : wglCreateContext(DC) 创建一个 RC

(d). 设置当前的 RC ,通过 API : wglMakeCurrent(RC, DC) 来

这个在网上和 msdn 都可以查到,想进一步了解,就动起手来吧。本人 OpenGL 菜鸟,如有不对还请大家提出,不胜感激 :)

本文参考文章如下:

http://blog.youkuaiyun.com/blucexi/archive/2006/09/21/1262117.aspx

http://hi.baidu.com/atyuwen/blog/item/420d16ea7fdd36d5d539c9b6.html


OpenGL多视窗示例 具体来说,当我们需要在同一窗口中显示多个视角时,我们需要创建多个窗口。当我们渲染一个子窗口时,OpenGL会将它的渲染结果显示在对应的子窗口中。利用多视窗,我们可以在同一窗口中同时显示多个子窗口或者是多个OpenGL渲染上下文。在本文中,我们介绍了OpenGL多视窗的原理,并提供了一个完整的OpenGL多视窗示例程序。在这篇文章中,我将为大家介绍一个基于OpenGL的多视窗示例,并提供相关源代码。每个子窗口都使用了独立的OpenGL渲染上下文,并分别调用了相同的渲染函数。OpenGL多视窗示例。 阅读详情

相关推荐

OpenGL下多视窗口的实现

这是一篇如何使用OpenGL实现多视窗口的文章,内容十分简单易懂,看了很容易明白。

opengl wglShareLists 共享上下文

创建上下文A,再以A为输入,创建上下文B,则B可访问在A上下文下创建的纹理资源。纹理、shader、Buffer等资源是可以共享的,但Frame Buffer Object(FBO)、Vertex Array Object(VAO)等容器对象不可共享,但可将共享的纹理和VBO绑定到各自上下文的容器对象上。 wglShareLists 之前尽量不要 wglMakeCurrent,可以是不同dc不同...

linda012518的博客 1424

CLion与STM32CubeMX联调:JLink GDB Server高效调试指南

本文详细介绍了如何搭建并配置CLion、STM32CubeMX与JLink GDB Server联调的现代化STM32开发环境。通过一站式环境搭建、工程创建、核心调试配置及高级技巧(如RTT日志),该组合实现了高效的代码编辑、可视化配置与稳定调试,大幅提升嵌入式开发效率与体验。

web99的专栏 258

opengl wglsharelists

原文地址:http://blog.youkuaiyun.com/webscaler/article/details/5873179 OpenGL 中用到多线程和多 render context 渲染的时候会用到 wglsharelist 进行资源共享,本文将对我本人在 wglsharelist 使用过程中的经验做个小总结:          首先翻译下 msdn 上对 wglsharelist 的说明: ...

weixin_34234823的博客 287

KEPServerEX6教程:IoT Gateway与MQTT Client实现工业数据双向通信

工业物联网的核心挑战在于异构设备协议与云端平台之间的数据互通。Modbus、S7、OPC UA等现场协议纷繁复杂,而上层应用普遍偏好MQTT、REST等轻量接口,此时需要一个可靠的协议转换层。MQTT作为低带宽、高可靠的发布/订阅消息协议,天然适合工业数据采集与远程控制场景。KEPServerEX6作为工业网关软件,内置IoT Gateway与MQTT Client组件,分别承担数据上行发布与指令下行订阅的职责,形成完整的双向闭环。通过配置Modbus TCP设备驱动、创建Tag、设置MQTT Broker

weixin_33787529的博客 387

AltiumDesigner 09安装过程破解问题 .

首先分享一下破解文件,网上总是下载不到,好不容易下载到了,放在网盘上,有需要的自取。AltiumDesigner 09破解文件。链接:https://pan.baidu.com/s/1ZGvbR_6T51hpcaFbQiMX5w 密码:qwvaAltiumDesigner 09安装安装文件,比较大,包含破解文件:链接:https://pan.baidu.com/s/1mfgragB519jpGfR...

xiaoxiao_rabbit的博客 3万+

关于wglShareLists函数

wglShareLists 可以在不同context之间共享 各种缓冲区对象:纹理,vbo对象。。。 该函数使用:http://msdn.microsoft.com/zh-cn/library/windows/desktop/dd374390(v=vs.85).aspx 失败原因之一: context的格式不一致:when rendering to contexts with differe

dizuo的专栏 2168

scGPT实战指南:如何用生成式AI加速你的单细胞多组学研究?

本文提供了scGPT在单细胞多组学研究中的实战指南。详细介绍了从环境部署、数据预处理到细胞类型注释与扰动预测等核心任务的操作流程。通过利用生成式AI和Transformer基础模型,scGPT能够显著加速分析,并提升细胞注释的准确性及基因调控网络推断的深度,为研究人员提供了强大的AI分析引擎。

weixin_29215815的博客 402

OpenGL多线程

首先使用同一个DC创建两个RC,并且使用wglShareLists共享两个RC的资源。建议不要给这三个函数之间加其他向RC中添加东西的GL函数。HGLRC hRC1 = wglCreateContext(hDC);HGLRC hRC2 = wglCreateContext(hDC);wglShareLists(hRC2, hRC1); 注意:wglShareLists的第一个参数中

5190

PySide6多线程避坑大全:信号槽崩溃、内存泄漏,这些雷我都帮你踩过了

本文深入探讨了PySide6多线程开发中的常见问题与解决方案,包括信号槽崩溃、内存泄漏等典型陷阱。通过实战案例和优化策略,帮助开发者避免UI线程操作错误、有效管理资源生命周期,并提升跨线程通信的可靠性。特别针对PySide6多线程特性,提供了线程安全日志、死锁检测等实用调试技巧。

weixin_32288959的博客 396

Sigrity System SI SerialLink模式进行Pcie3协议仿真分析操作指导-pcie3_client_single_pre

Sigrity System SI SerialLink模式提供了10个协议合规性检查工具模板,用户可以将根据实际应用替换模板中的SPICE文件,然后进行协议仿真分析,同时软件还提供了目标结果的模板MASK以及该协议需要检查的项目,通过协议分析视为满足设计要求,下面介绍pcie3_client_single_pre仿真分析,具体操作如下。Random(Rj):随机抖动,该抖动用高斯概率分布来描述,通常是由热噪声和其它随机噪声引起的,默认为1.24%UI RMS(平均值),即和标准值的偏差为1.24%UI。

weixin_54787054的博客 598

opengl多线程的问题

  准备给游戏加入一个Loading画面,采用多线程,前面很顺利,但是就是载入后精灵无法正常显示,看不见纹理,开始以为是使用DevIL库出问题,单步调试发现DevIL载入图片正常,而opengl的glGenTextures出错了,返回的索引总是0。 后来google在gamedev上找到答案,原来opengl不是线程安全的(不知道正确不?),找到了关键方向:wglCreateContext. ...

weixin_34367845的博客 687

第 9 篇:TMC2240 速度调节实战|STEP 信号生成 + 平滑调速算法(无抖动)

摘要:本文详细介绍了TMC2240电机调速方案,重点解决调速时电机抖动、丢步等问题。核心原理是通过STEP信号频率控制转速,结合平滑加减速算法避免电流冲击。文章从速度与STEP频率的数学关系入手,提供了定时器生成固定频率STEP信号的实现代码,并给出不同转速下的频率参数表。针对42步进电机+256微步细分场景,详细讲解了定时器初始化、中断处理及固定转速设置方法,帮助开发者实现稳定调速。全文包含可直接复用的代码片段,适合嵌入式开发者快速实现电机平滑调速功能。

BackCatK Chen的博客 1035

Qt下如何用OpenGL的共享列表wglShareLists函数

最近用Qt做东西,要用到共享列表。 大影像数据的贴屏程序。主线程负责把贴图往屏幕上贴,子线程负责准备贴图数据,这就需要共享列表。 qt有封装好的类QGLWidget TestForCom::TestForCom(QWidget *parent, Qt::WFlags flags) : QMainWindow(parent, flags) { // ComGLWidget继承自Q

asdln的专栏 1246

AttributeError: module ‘lib‘ has no attribute ‘X509_V_FLAG_CB_ISSUER_CHECK‘解决方案

本文主要介绍了AttributeError: module ‘lib’ has no attribute 'X509_V_FLAG_CB_ISSUER_CHECK’解决方案,希望能对使用python的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 5万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

OpenGL、DirectX与OpenCL核心技术对比与应用指南

图形API是现代计算机视觉计算的核心技术,OpenGL和DirectX作为主流渲染框架,分别采用跨平台和深度系统集成的设计哲学。其核心差异体现在可编程管线架构上:OpenGL通过状态机管理渲染上下文,而DirectX 12引入显式多适配器管理提升性能。在异构计算领域,OpenCL通过统一内存模型实现CPU/GPU协同计算,与图形API的互操作技术(如CL/GL共享扩展)能显著减少数据传输开销。这些技术在游戏开发、医疗影像、工业仿真等场景中具有关键应用价值,合理的API组合方案(如OpenGL+OpenCL)

weixin_34159110的博客 507

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

SharpGL跨线程使用VAO问题

每个renderingContext有自己的显示列表空间,可以通过wglShareLists将一个RenderingContext的显示列表空间共享给另一个。但并不是所有的显示列表都可共享的。正常情况下可通过wglShareLists将当前线程renderContext共享给其他线程,从而在其他线程可以访问之前线程renderContext中的显示列表空间资源(一个线程只能拥有一个renderCo

neuqliyang的博客 677

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

OpenGL多线程创建纹理

本文出处http://www.cnblogs.com/mazhenyu/archive/2010/04/29/1724190.html 关于这个问题以前只知道多个线程不能同时使用一个RC,结果为了能动态加载,当初还做了一个通过拆分主线程的工作来模拟多线程加载的伪多线程程序,今天突然很想把这个问题彻底搞明白,结果从百度到google.com最后才在终于找到这么一篇讲解详细的英文文章,可怜我4级都没

2891

Opengl多线程终究是浮云

在OpenGL里面使用多线程加载纹理是很美好的构想。 网上讨论这个的并不多。中文博客里http://www.cnblogs.com/mazhenyu/archive/2010/04/29/1724190.html 参考了某个老外的尝试: http://veelck.wordpress.com/2008/11/28/multithread-texture-loading-in-opengl/

lsldd的专栏 1万+

opengL 函数功能详解

** 所有OpenGL函数采用了以下格式: &amp;lt;库前缀&amp;gt;&amp;lt;根命令&amp;gt;&amp;lt;可选的参数个数&amp;gt;&amp;lt;可选的参数类型&amp;gt; 库前缀有gl、glu、aux、glut、wgl、glx、agl等等,分别表示该函数属于OpenGL那个开发库,从函数名后面中还可以看出需要多少个参数以及参数的类型。I代表int型,f代表float型,d代表double型,u代表无符号

默茉的博客 2048

billboard 的OpenGL实现&&OpenGL多线程创建纹理

http://hi.baidu.com/atyuwen/blog/item/5355f17370ef9b1b8701b098.html虚拟现实技术与算法的大作业需要用到billboard技术,写了这样一个类来实现。很简单的一个类,完整的代码如下://---------------

aquathinker的专栏 -- AquaMarine Animation 1562

第7节 realize()-共同设置

第6节讲述了当用户在realize()之前没有申请上下文时,realize()如何申请上下文,在一般的稍成规模一些的自研系统中,上下文都是自己申请的。无论是自己申请的还是realize中默认申请的,在申请完成后,在realize()中接下来还要针对所有的上下文执行以下操作。 displaysettings displaysettings里有关于显示的一些全局设置,本身它有一个全局的单例函数: static ref_ptr<DisplaySettings>& instance(); 但是

一切皆可视 736

【转】OpenGL多线程创建纹理,附加我的测试结果

原文地址http://www.cnblogs.com/mazhenyu/archive/2010/04/29/1724190.html 关于这个问题以前只知道多个线程不能同时使用一个RC,结果为了能动态加载,当初还做了一个通过拆分主线程的工作来模拟多线程加载的伪多线程程序,今天突然很想把这个问题彻底搞明白,结果从百度到google.com最后才在终于找到这么一篇讲解详细的英文文章,可怜我...

weixin_33949359的博客 105
上一篇: MFC+Opengl:截取对话框的屏幕后,直接作为背景纹理解决方法
下一篇: CxImage与OpenGL结合,用于读入多种格式的纹理以及用来把屏幕保存为各种格式的图像文件。
swping
博客等级 码龄20年 10粉丝 8原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值