如何共享 OpenGL 上下文或数据?

2024-03-08

我需要在应用程序中的所有 OpenGL 小部件之间共享数据(纹理、顶点缓冲区等)。

以下代码不起作用:

我发现了一些解决方案,其中一个主要目标是QGLWidget和其他的都是使用这个主要的小部件构建的。不幸的是,我不能使用这种方法,因为我所有的 QGLWidget 都是相等的,并且几乎可以肯定第一个(主要)创建的 QGLWidget 将在其他 QGLWidget 之前被销毁。

可能的方法:

  • 所有 QGLWidget 之间的单个共享 OpenGL 上下文
  • 不工作:只有一个 QGLWidget 正确渲染,其他 QGLWidget 的行为就像未渲染一样,数据损坏/随机
  • 每个的错误QGLWidget除第一个之外的构造:

    QGLWidget::setContext: Context must refer to this widget
    

另一种方法:

  • 主 OpenGL 上下文并为每个 QGLWidget 创建子上下文
  • 不工作:context->isSharing()回报false
  • 我用于创建上下文的代码,context1 and context2随后传递给 QGLWidgets 的构造函数:

    QGLContext *mainContext = new QGLContext(format), *context1, *context2;
    mainContext->create();
    context1 = new QGLContext(format);
    context1->create(mainContext);
    context2 = new QGLContext(format);
    context2->create(mainContext);
    cout << mainContext->isSharing() << " " <<  context1->isSharing() << endl;
    

对于第一种方法,您不是设置共享,而是尝试强制不同的 QGLWidgets 使用相同的上下文。正如上面指出的,这是错误的,也是行不通的。

相反,正常创建 QGLWidget,并在创建其他 QGLWidget 时在 shareWidget 参数中传递第一个 QGLWidget。这样,您将为每个 QGLWidget 获得一个单独的上下文,但它们都将与第一个 QGLWidget 的上下文共享(从而彼此共享)。看http://qt-project.org/doc/qt-4.8/qglwidget.html#QGLWidget http://qt-project.org/doc/qt-4.8/qglwidget.html#QGLWidget

在其他小部件之前销毁第一个小部件应该不是问题,因为共享对象将一直存在,直到任何共享上下文处于活动状态。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何共享 OpenGL 上下文或数据? 的相关文章

  • c和java语言中的换行符

    现在行分隔符取决于系统 但在 C 程序中我使用 n 作为行分隔符 无论我在 Windows 还是 Linux 中运行它都可以正常工作 为什么 在java中 我们必须使用 n 因为它与系统相关 那么为什么我们在c中使用 n 作为新行 而不管我
  • 在 C# 中创建具有单独列的分隔文本

    我一直在尝试在 C 中创建一个制表符限制的文本文件 以便数据正确显示在单独的列中 Firstname Lastname Age John Smith 17 James Sawyer 31 我尝试过 t 字符 但我得到的只是 Firstnam
  • 使用 Unity 在构造函数中使用属性依赖注入

    好的 我在基类中定义了一个依赖属性 我尝试在其派生类的构造函数内部使用它 但这不起作用 该属性显示为 null Unity 在使用 container Resolve 解析实例后解析依赖属性 我的另一种选择是将 IUnityContaine
  • 使用Physics.Raycast 和Physics2D.Raycast 检测对象上的点击

    我的场景中有一个空的游戏对象 带有 2D 组件盒碰撞器 我将脚本附加到该游戏对象 void OnMouseDown Debug Log clic 但是当我点击我的游戏对象时 没有任何效果 你有什么想法 如何检测我的盒子碰撞器上的点击 使用光
  • 推导指南中的引用和值之间的差异

    考虑类型A template
  • 如何在 Blackberry Cascades 中显示具有特定号码的电话板

    我正在使用带有 C QT 和 QML 的 Blackberry Cascades 10 Beta 3 SDK 以及 Blackberry 10 Dev Alpha Simulator 和 QNX Momentics IDE 并且我正在尝试实
  • 如何使用 Mongodb C# 驱动程序连接多个集合

    我需要将 3 个集合与多个集合合并在一起 lookup我在 C 驱动程序中尝试过 它允许我 lookup用户采集但无法执行秒 lookup用于设置集合 有人可以帮忙吗 db Transactions aggregate lookup fro
  • 将 log4net 与 Autofac 结合使用

    我正在尝试将 log4net 与 Autofac 一起使用 我粘贴了这段代码http autofac readthedocs org en latest examples log4net html http autofac readthed
  • 如何编写一个同时需要请求和响应Dtos的ServiceStack插件

    我需要提供本地化数据服务 所有本地化的响应 Dto 都共享相同的属性 IE 我定义了一个接口 ILocalizedDto 来标记那些 Dto 在请求端 有一个ILocalizedRequest对于需要本地化的请求 Using IPlugin
  • 私有模板函数

    我有一堂课 C h class C private template
  • (de)从 CSV 序列化为对象(或者最好是类型对象的列表)

    我是一名 C 程序员 试图学习 C 似乎有一些内置的对象序列化 但我在这里有点不知所措 我被要求将测试数据从 CSV 文件加载到对象集合中 CSV 比 xml 更受青睐 因为它更简单且更易于人类阅读 我们正在创建测试数据来运行单元测试 该集
  • gcc 的配置选项如何确定默认枚举大小(短或非短)?

    我尝试了一些 gcc 编译器来查看默认枚举大小是否很短 至少一个字节 强制使用 fshort enums 或无短 至少 4 个字节 强制使用 fno short enums user host echo Static assert 4 si
  • C++ 密码屏蔽

    我正在编写一个代码来接收密码输入 下面是我的代码 程序运行良好 但问题是除了数字和字母字符之外的其他键也被读取 例如删除 插入等 我知道如何避免它吗 特q string pw char c while c 13 Loop until Ent
  • 用于 C# 的 TripleDES IV?

    所以当我说这样的话 TripleDES tripledes TripleDES Create Rfc2898DeriveBytes pdb new Rfc2898DeriveBytes password plain tripledes Ke
  • 为什么在setsid()之前fork()

    Why fork before setsid 守护进程 基本上 如果我想将一个进程与其控制终端分离并使其成为进程组领导者 我使用setsid 之前没有分叉就这样做是行不通的 Why 首先 setsid 将使您的进程成为进程组的领导者 但它也
  • memset 未填充数组

    u32 iterations 5 u32 ecx u32 malloc sizeof u32 iterations memset ecx 0xBAADF00D sizeof u32 iterations printf 8X n ecx 0
  • 检查Windows控制台中是否按下了键[重复]

    这个问题在这里已经有答案了 可能的重复 C 控制台键盘事件 https stackoverflow com questions 2067893 c console keyboard events 我希望 Windows 控制台程序在按下某个
  • 如何使用 Word Automation 获取页面范围

    如何使用办公自动化找到 Microsoft Word 中第 n 页的范围 似乎没有 getPageRange n 函数 并且不清楚它们是如何划分的 这就是您从 VBA 执行此操作的方法 转换为 Matlab COM 调用应该相当简单 Pub
  • 在客户端系统中安装后桌面应用程序无法打开

    我目前正在使用 Visual Studio 2017 和 4 6 1 net 框架 我为桌面应用程序创建了安装文件 安装程序在我的系统中完美安装并运行 问题是安装程序在其他计算机上成功安装 但应用程序无法打开 edit 在客户端系统中下载了
  • 如何正确使用 std::condition_variable?

    我很困惑conditions variables以及如何 安全 使用它们 在我的应用程序中 我有一个创建 gui 线程的类 但是当 gui 是由 gui 线程构造时 主线程需要等待 情况与下面的函数相同 主线程创建互斥体 锁和conditi

随机推荐

  • 在 android 中使用 HTML5 日期输入元素

    元素
  • PyMongo 游标迭代

    我正在寻找在 python 中创建和处理游标的方式 就像游标在 mongo 中本地工作的方式一样 我知道预期的方法是执行 result collection find 并执行 结果记录 但我希望将迭代功能包装在一个类中 我希望能够创建一个新
  • 推送到 bitbucket 存储库时出现“致命:身份验证失败”错误

    我正在尝试在 Windows 7 终端中进行身份验证 git Push 以前工作过 但现在我得到 致命 身份验证失败https bitbucket srv https bitbucket srv 但是我可以通过浏览器登录到同一个存储库 这是
  • VM cloudera - 用户cloudera和权限?

    我下载并安装了 VM Cloudera 4 4 来使用 Hadoop 我已经在我的工作平台上建立了一个集群 所以我知道一点 hadoop 是如何工作的 所以我认为我的问题来自于我对linux以及他的用户和群体的误解 使用蜂巢 我尝试使用 s
  • 如何使用业务对象绑定rdlc报告?

    我有一个名为的业务对象 TeamMaster 其中我定义了三个属性 Id Name 和 Flg 在我的 rdlc 报告中我申请TeamMaster对象作为数据源 现在 我在表单的页面加载事件中编写以下代码 在其中添加报表查看器控件并将报表定
  • jQuery 拖放 - 只允许列表中的一项

    我使用这个例子jQuery UI 可排序 http jqueryui com demos sortable empty lists 我在拖放方面遇到问题 表号 3 sortable3应该只能收到一件物品 这是我的 HTML div clas
  • 使用 CNAME 时是否可以创建正确的 SPF 和 DMARC DNS 记录?

    在我的设置中 我有一个托管在 Heroku 上的网站 example app 然后 我使用 Sendgrid 从 Heroku 服务器向忘记密码的用户发送电子邮件 该电子邮件是使用 Google 的 Gsuite 注册的 所以我也从 Goo
  • 如何初始化常量 CLSID

    类 ID GUID 通常使用由破折号分隔的十六进制数字序列来指定 例如 557cf406 1a04 11d3 9a73 0000f81ef32e 这不是可用于直接初始化 CLSID 结构的文字 我发现了两种初始化结构的方法 但它们都有点尴尬
  • 如何使用collectionview流布局来获得正确的视图?

    我正在使用此代码来获得正确的类型 但没有获得我想要的视图 任何人都可以告诉我我哪里错了 override func viewDidAppear animated Bool super viewDidAppear animated scree
  • 在 Python 中导航嵌套 JSON 的最佳方式?

    我尝试了不同的 for 循环尝试迭代这个 JSON 但我不知道如何做到这一点 我有一个数字列表 想要将其与每个 数据 对象下的 键 值 例如 Aatrox Ahri Akali 等 进行比较 如果数字匹配 则存储 名称 另一个列表中的值 例
  • 升级到Android studio 3.4 - Aapt2InternalException:AAPT2:守护进程启动失败

    将 Android studio 升级到 3 4 后 我在构建新项目时遇到错误 导致 org gradle api tasks TaskExecutionException 任务 app mergeDebugResources 执行失败 引
  • ASP.Net 无法发送电子邮件

    我正在尝试使用下面的代码从 asp net C 发送电子邮件 using System using System Collections Generic using System Linq using System Net Mail usi
  • facebook like 按钮评论框不会在提交时关闭,并且不会发布任何内容

    尝试将 Facebook 社交按钮插件与评论框集成 喜欢 不喜欢功能运行良好 并且它正确地反映在我在 Facebook 上的活动日志中 然而 一旦我在评论框中输入评论并单击 发布到 Facebook 什么也没有发生 当我提交时 评论框不会关
  • 如何移动 REST 资源?

    我正在尝试从以下位置移动资源 buckets 1 to buckets 2这样 初始状态 桶 1 foo 桶 2 HTTP 404 最终状态 buckets 1 HTTP 301 到 buckets 2 桶 2 foo 要求服务器以这种方式
  • 参数类型“Object”无法分配给参数类型“Map ?”

    我遇到过这个错误 The argument type Object can t be assigned to the parameter type Map
  • 创建动态数组,但出现分段错误错误

    我想创建一个动态数组 其中包含用户输入 但在第一次输入后 我不断收到分段错误错误 我知道分段错误是由于错误的内存访问引起的 有没有办法定位代码中的错误 include
  • 更好的画布运动模糊

    它已经之前问过 https stackoverflow com questions 5304199 html canvas motion blur with transparent background 但接受的解决方案对我不起作用 从字面
  • Ansible 中如何调用架构事实?

    我正在寻找事实 其中包含以下信息 dpkg print architecture amd64 我找不到它了 ansible host m setup grep amd64 BOOT IMAGE boot vmlinuz 4 19 0 6 a
  • Tabhost教程坏了? [复制]

    这个问题在这里已经有答案了 可能的重复 有人知道这个错误对于 Android 标签意味着什么吗 https stackoverflow com questions 4963773 anyone know what this error me
  • 如何共享 OpenGL 上下文或数据?

    我需要在应用程序中的所有 OpenGL 小部件之间共享数据 纹理 顶点缓冲区等 以下代码不起作用 我发现了一些解决方案 其中一个主要目标是QGLWidget和其他的都是使用这个主要的小部件构建的 不幸的是 我不能使用这种方法 因为我所有的