当前位置: 首页 > 知识库问答 >
问题:

加载的OpenGL函数是上下文特定的还是线程特定的?(窗户)

狄新立
2023-03-14

考虑一个场景,其中两个渲染上下文(每个都属于它们自己不同的窗口)存在于两个独立的执行线程中。OpenGL函数指针是否需要分别加载和使用?或者gl*函数指针可以是全局的,对于给定的应用程序实例只加载一次并被两个窗口或上下文使用?

我这样问的原因是因为OpenGL函数加载文档,在谈到加载wgl函数时,声明:

此函数仅在存在有效OpenGL上下文的情况下工作。实际上,它返回的函数指针本身是特定于上下文的。此函数的Windows文档指出,返回的函数可能与另一个上下文一起使用,这取决于该上下文的供应商和该上下文的像素格式。

在实践中,如果两个上下文来自同一供应商并引用同一GPU,则从一个上下文中提取的函数指针将在另一个上下文上工作。在Windows中创建OpenGL上下文时,这一点很重要,因为您需要创建一个“虚拟”上下文,以获得WGL扩展函数来创建真实的上下文。

这是我的重点。

我想知道OpenGL函数是否也有这样的要求?

共有2个答案

花烨
2023-03-14

旧硬件可能会为不同的上下文返回不同的函数指针。如今,我对此表示怀疑。GLEW 正在采取行动,以避免这种多上下文 (MX) 功能。

钱经赋
2023-03-14

你在问题中抄的段落前漏了一句话(重点是我的):

[…]函数可以是OpenGL函数或特定于平台的WGL函数。

此函数仅在存在有效OpenGL上下文的情况下工作。实际上,它返回的函数指针本身是上下文特定的[…]

这意味着加载的OpenGL函数是特定于上下文的,就像Windows上的WGL函数一样。

 类似资料:
  • 问题内容: 我有一个Web应用程序,并且正在使用Oracle数据库,并且有一种基本上像这样的方法: 现在没有任何类型的同步,因此n个线程当然可以自由地访问此方法,当2个线程都进入此方法都进行检查并且当然还没有任何东西时,就会出现问题,然后它们都可以提交事务并创建一个重复的对象。 我不想在数据库中使用唯一的密钥标识符来解决此问题,因为我认为我不应该抓住它。 我也不能在提交之前进行检查,因为不仅要进行

  • 问题内容: 我有一个按钮“ addCashier”,它正在创建一个名为“ Cashier”的线程,现在该线程只是每4秒简单地生成一个订单,该线程的run()方法中有while(true)循环。那里一切都很好,但是现在我想添加一个按钮来模拟收银员注销。我在我的while循环onDuty和一个公共函数logOff()中添加了一个布尔变量,该函数将onDuty布尔值设置为false,以使我退出运行的wh

  • 我想把一个特定的文件列表加载到Spark中。我创建了一个UDF来过滤文件列表,因此我获得了一个和我要加载的文件。我试图使用指向API的链接,但由于某些原因,它告诉我“重载方法值csv具有替代选项:(paths:String*)org.apache.spark.sql.dataframe(csvdataset:org.apache.spark.sql.dataframe[String])org.ap

  • 问题内容: 我正在使用fancybox2。我已经设法通过AJAX在fancybox中加载内容。但是它会加载整个页面,我只对特定的div感兴趣。在fancybox 1中,我们可以通过在ajax中添加filter来实现。但是我不确定如何在fancybox 2中进行过滤。 如何从fancybox 2中的AJAX加载页面中过滤特定的div? 直到ajax可以工作,但是会加载整个页面,当我添加过滤器时,它就

  • 问题内容: 加载 特定的 更新面板后,如何调用客户端javascript方法? 对我不起作用,因为这将在任何更新面板完成加载后触发,并且我找不到客户端方法来找到哪一个 对我不起作用,因为这是服务器端对象,我希望客户端 ClientSide .Net框架必须知道要更新哪个UpdatePanel才能更新正确的内容。当然有办法挂入此事件吗? 任何帮助,将不胜感激。 问题答案: 您可以挂钩PageRequ

  • 我不知道如何使TextView上的特定文本变为粗体。 是这样的