jjzjj

windows - 具有不同刷新率的 OpenGL 多头 vsync

coder 2024-06-15 原文

如何使用 OpenGL(在 Windows 7 上)以不同的分辨率和刷新率驱动多个显示器(多显示器)并且仍然能够在设备之间共享纹理?

我有一个多头 GPU。它驱动4个磁头。 (它恰好是 AMD FirePro V7900,以防万一。)头都共享一个“场景”(顶点和纹理数据等),但我想每次在显示器上发生垂直同步时渲染这个场景(每个头本质上是一个不同的视口(viewport))。但要注意的是,不同的头部可能具有不同的刷新率。例如,有些显示器可能为 60Hz,有些可能为 30Hz,有些可能为 24Hz。

当我调用 SwapBuffers调用 block ,所以我无法判断下一个需要渲染哪个头。我希望得到像 Direct3D9 的 <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/bb205908%28v=vs.85%29.aspx" rel="noreferrer noopener nofollow">IDirect3DSwapChain9::Present</a> 这样的东西与 <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/bb172585%28v=vs.85%29.aspx#D3DPRESENT_DONOTWAIT" rel="noreferrer noopener nofollow">D3DPRESENT_DONOTWAIT</a>标志,以及相关的D3DERR_WASSTILLDRAWING返回值。使用这种方法,我可以确定下一个要渲染的头部。通过循环轮询不同的头,直到一个成功。但我不知道 OpenGL 中的等效方法是什么。

我已经发现了 wglSwapIntervalEXT(1)使用垂直同步。而且我可以在 HDC 之间切换以使用单个 HGLRC 渲染到不同的窗口。但是刷新率的差异让我很困惑。

我不确定如何让单个 HGLRC 以不同的刷新率渲染所有这些显示器。我认为它必须是单个 HGLRC 才能有效地使用共享纹理(和其他资源)...如果我错了请纠正我。如果资源与多个 HGLRC 重复,这对我来说并不有趣,因为我希望这会将我的内存减少到 25%(1 个 GPU 上有 4 个磁头:所以我不想要任何资源的 4 个副本。)

如果需要的话,我对使用多线程的想法持开放态度。

谁能告诉我如何构建我的主循环,以便我可以共享资源但仍然以自己的刷新率和分辨率驱动显示器?

最佳答案

您可以通过共享上下文来共享承载数据的 OpenGL 缓冲区。 Windows 中的调用是名称 wglShareLists

使用它,您可以为每个窗口提供在自己的线程中运行的渲染上下文,而所有上下文共享它们的数据。多窗口垂直同步实际上是多线程 OpenGL 有意义的少数情况之一。

关于windows - 具有不同刷新率的 OpenGL 多头 vsync,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13351369/

有关windows - 具有不同刷新率的 OpenGL 多头 vsync的更多相关文章

  1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  2. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  3. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  4. ruby-on-rails - Rails 3.1 中具有相同形式的多个模型? - 2

    我正在使用Rails3.1并在一个论坛上工作。我有一个名为Topic的模型,每个模型都有许多Post。当用户创建新主题时,他们也应该创建第一个Post。但是,我不确定如何以相同的形式执行此操作。这是我的代码:classTopic:destroyaccepts_nested_attributes_for:postsvalidates_presence_of:titleendclassPost...但这似乎不起作用。有什么想法吗?谢谢! 最佳答案 @Pablo的回答似乎有你需要的一切。但更具体地说...首先改变你View中的这一行对此#

  5. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  6. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  7. java - 为什么 ruby​​ modulo 与 java/other lang 不同? - 2

    我基本上来自Java背景并且努力理解Ruby中的模运算。(5%3)(-5%3)(5%-3)(-5%-3)Java中的上述操作产生,2个-22个-2但在Ruby中,相同的表达式会产生21个-1-2.Ruby在逻辑上有多擅长这个?模块操作在Ruby中是如何实现的?如果将同一个操作定义为一个web服务,两个服务如何匹配逻辑。 最佳答案 在Java中,模运算的结果与被除数的符号相同。在Ruby中,它与除数的符号相同。remainder()在Ruby中与被除数的符号相同。您可能还想引用modulooperation.

  8. ruby - 具有两个参数的 block - 2

    我从用户Hirolau那里找到了这段代码:defsum_to_n?(a,n)a.combination(2).find{|x,y|x+y==n}enda=[1,2,3,4,5]sum_to_n?(a,9)#=>[4,5]sum_to_n?(a,11)#=>nil我如何知道何时可以将两个参数发送到预定义方法(如find)?我不清楚,因为有时它不起作用。这是重新定义的东西吗? 最佳答案 如果您查看Enumerable#find的文档,您会发现它只接受一个block参数。您可以将它发送两次的原因是因为Ruby可以方便地让您根据它的“并行赋

  9. ruby-on-rails - 在 RSpec 中,如何以任意顺序期望具有不同参数的多条消息? - 2

    RSpec似乎按顺序匹配方法接收的消息。我不确定如何使以下代码工作:allow(a).toreceive(:f)expect(a).toreceive(:f).with(2)a.f(1)a.f(2)a.f(3)我问的原因是a.f的一些调用是由我的代码的上层控制的,所以我不能对这些方法调用添加期望。 最佳答案 RSpecspy是测试这种情况的一种方式。要监视一个方法,用allowstub,除了方法名称之外没有任何约束,调用该方法,然后expect确切的方法调用。例如:allow(a).toreceive(:f)a.f(2)a.f(1)

  10. ruby-on-rails - 具有同名的模块和类 - 2

    我有一个模块stat存在于目录结构中:lib/stat_creator/stat/在lib/stat_creator/stat.rb中,我在lib/stat_creator/stat/目录中有我需要的文件,以及:moduleStatCreatormoduleStatendend当我使用该模块时,我将这些类称为StatCreator::Stat::Foo.new现在我想要一个存在于应用程序中的根Stat类。我在app/models中制作了我的Stat类,并在routes.rb中进行了设置。但是,如果我转到Rails控制台并尝试在应用程序/模型中使用Stat类,例如:Stat.by_use

随机推荐