gpt4 book ai didi

windows - DirectDraw 游戏可以在不锁定的情况下访问后备缓冲区吗?

转载 作者:可可西里 更新时间:2023-11-01 12:40:28 26 4
gpt4 key购买 nike

我正在修改一个旧的 Windows DirectDraw 游戏。我已经创建了一个 DirectDraw 代理。它记录每个 IDirectDraw 和 IDirectDrawSurface 调用。后台缓冲区在 一次 BltFast 调用后看起来像这样:

enter image description here

像这样下一个BltFast调用之前:

enter image description here

这些图片在任何 BltFast 调用之前和之后通过 Locking-copying-Unlocking 后备缓冲区转储。在这两个 BltFast 调用之间没有其他 IDirectDraw(Surface) 调用,尤其是没有 Lock/Unlock 调用。这怎么可能?

最佳答案

据我所知,游戏似乎分多个阶段进行绘制,而您正处于中间阶段。 IE,游戏调用 blit 一次来渲染它的背景,然后再次(可能多次)来渲染交互式“ Sprite ”。 (但是,顺序很可能会颠倒,这意味着您捕获的第二帧实际上是下一个循环的第一层。)

就后台缓冲区而言,我能够在 DirectDraw 的 MSDN 文档中找到它: https://msdn.microsoft.com/en-us/library/windows/desktop/gg426183(v=vs.85).aspx

BltFast always attempts an asynchronous blit if it is supported by the hardware.

所以这可能是一场比赛,但我想在完成之前任何锁定尝试都会被阻止。

还有…… https://msdn.microsoft.com/en-us/library/windows/desktop/gg426208%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

Do not call DirectDraw bitblt functions to bitblt from a locked region of a surface. If you do, the bitblt returns either DDERR_SURFACEBUSY or DDERR_LOCKEDSURFACES. GDI blit functions also silently fail when used on a locked video memory surface.

这意味着 bitblt 本身具有锁定语义。鉴于不允许 GDI 访问显式锁定的表面,它也可能无法在异步 blit 操作的中间访问表面。

因此,为了具体回答您的问题,GDI 似乎可以在不锁定表面的情况下访问它。

当然,可以以性能的名义做各种奇怪的事情,所以谁知道他们可能还做过哪些其他类型的黑客攻击?

不过我要说的是,我在任何方面都不是 DirectDraw 方面的专家,并且我是在后台缓冲区就像任何其他表面一样的假设下操作的。

关于windows - DirectDraw 游戏可以在不锁定的情况下访问后备缓冲区吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24273159/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com