首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Win32复制,镜像,复制或绘制窗口内容两次,与完美的帧同步。用于立体左眼右眼渲染

Win32复制,镜像,复制或绘制窗口内容两次,与完美的帧同步。用于立体左眼右眼渲染
EN

Stack Overflow用户
提问于 2020-05-04 00:58:05
回答 1查看 496关注 0票数 0

我写了一个Win32 C++程序。

我想复制每个帧左窗口的视觉内容,因此它出现在屏幕上的另一个位置。(屏幕左侧有一个矩形,右边有一个相同的矩形。)

这是立体声渲染,左矩形在用户的左眼,右矩形在右眼。

这两个矩形必须是“帧同步”,这意味着它们必须始终显示相同的帧。或者换一种说法,如果右眼通过“一次抽签”在左眼后面,观众就会生病。

注意:我有两个窗口的源代码,因为我创建了它们。(两个窗口目前驻留在同一个exe中。)

我尝试过的:

  • BitBlt(),将桌面HDC的一个矩形部分绘制到右侧窗口中。我在右侧窗口的WM_PAINT消息中调用WM_PAINT():这是可行的,但,但右侧窗口在左侧后面有1-2个帧。

势解:

  • 在左窗口的WM_PAINT消息中,绘制两个内容相同的窗口.这可能吗?
  • 用一个巨大的窗口来绘制两个矩形。这意味着所有绘图都发生在同一个WM_PAINT调用中。但是,我不知道如何将窗口的一部分复制到另一个部分。我希望我能告诉Win32‘再画’,但这一次启动1000个像素向右.
  • 对DirectX做了一些“事情”。(不知道是什么)

任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-04 21:34:57

我不知道你是否还需要答案,但我认为你不能比使用DWM缩略图API 1做得更好。你基本上是在你的窗口<->一个外部窗口的一个区域上做一个区域关联,然后每次在屏幕上合成和显示窗口时,外国窗口的指定矩形将被绘制在你的窗口的指定矩形上。如果必要的话,DWM将进行缩放,并且您也可以指定一个透明度级别。这是最有效的方法,因为排序者做所有的繁重工作,所以它是在最低层次,您可以不编写内核模式代码(自定义驱动程序等)。您不能在顶部绘图,如果您在窗口上“看到”外部窗口数据,例如,因为图像实际上不是绘制在窗口上,而是在窗口管理器将窗口的最后图像组合并呈现给用户时覆盖在顶部。但在大多数情况下,它真的很好用。

1

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61583629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档