问题标签 [directdraw]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
411 浏览

c++ - Windows 8 中旧代码中的 DirectDraw 渲染问题

我对 DirectDraw 和/或 DirectX 几乎一无所知,但我一直在帮助将旧的 Windows 9x 游戏移植到 Windows 8。该游戏使用 DirectDraw 进行渲染,并且在 Windows 8 上,游戏的 GUI 具有主要的工件。

以下是 GUI 的外观运行 Underlight 的 Windows 7

这是在 Windows 8.1 上运行的相同版本: 运行 Underlight 的 Windows 8.1

我意识到这没什么好说的,但我不知道我可以提供哪些其他信息来帮助回答这个问题。我可以访问代码,我可以向您展示我们如何加载位图、初始化 DirectDraw 等等。但我不知道有什么有趣的地方。

请注意,这是一个旧的 Win32 API 应用程序;没有 MFC,没有 WPF,只有一个普通的旧消息泵。

很高兴能提供更多信息。

0 投票
1 回答
199 浏览

winapi - 重复的快速(非闪烁)鼠标光标移动?

想象一下您想在窗口中复制(模拟)鼠标光标移动的情况(如绘制光标叠加层)。我有一个窗口,当用户移动鼠标但在我的窗口边界中时,我想要一个非常相似的鼠标图标移动(即移动被缩放到我的窗口的边界)。这意味着如果有 3 个监视器设置并且我的窗口在监视器 2(中间一个)中是全尺寸的。将光标从监视器 1 的最左侧移动到监视器 3 的最右侧将导致我的窗口中的重复光标从我的窗口的最左侧移动到我的窗口的最右侧。

我以前在 GDI 方面有过闪烁的经历。所以在我想实现它之前,我想知道实现它的最佳(希望是最简单/最快的编码)方法是什么。(我设置了一个 RAW 输入,所以每次鼠标移动都会收到一条消息)

这是我的想法: GDI:可能是 XOR 绘图或清除/绘图到缓冲区。GDI+:?DirectDraw:覆盖方法?(我还没有完全看过它们) Direct3D 或 Windows Media API ?

我的主窗口也在一个计时器(500 毫秒)中自我更新,并且只是 bitblt 进入那个。

另外,如果有人知道类似的项目或教程或资源,那将是很棒的。

谢谢

0 投票
1 回答
503 浏览

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

我正在修改旧的 Windows DirectDraw 游戏。我创建了一个 DirectDraw 代理。它记录每个 IDirectDraw 和 IDirectDrawSurface 调用。一次调用,后备缓冲区如下所示:BltFast

在此处输入图像描述

在下一次通话之前像这样:BltFast

在此处输入图像描述

这些图片是通过在任何调用之前和之后复制Lock后台缓冲区来转储的。这两个调用之间没有其他 IDirectDraw(Surface) 调用,尤其是没有/调用。这怎么可能?UnlockBltFastBltFastLockUnlock

0 投票
0 回答
204 浏览

c++ - RDP 会话期间 IDirectDrawSurface7 上的锁定失败

我正在维护一个旧应用程序,除其他外,它在屏幕上显示微小的视频源。该应用程序工作正常,除非您在通过 RDP 查看桌面时运行它。

IDirectDrawSurface7当我们通过Lock函数获取写指针时:

除非您通过 RDP 连接到系统,否则一切正常。在这种情况下,锁定失败,HRESULTof DDERR_WASSTILLDRAWING

MSDN 页面上的注释指出,只有在“默认条件”下,使用该标志时才会发生此错误DDLOCK_DONOTWAIT,我已将其诊断注释掉。

是否有希望在不进行重大重新设计的情况下让该应用程序在 RDP 8 / Windows 7 上运行?

打开应用程序并连接新的 RDP 会话以及通过现有 RDP 会话启动应用程序都会导致此行为。

0 投票
2 回答
1786 浏览

bitmap - 从 IWICBitmapSource、IWICBitmap、IWICBitmapDecoder 等任何地方获取位图 BitsPerPixel

我认为这个主题说明了一切。但在某些细节上,我正在加载、操作、然后显示位图,并在 GDI 中进行。现在我想增加一些速度,因为它反复发生。

许多年前,我将 DirectX 用于其他事情,但我所看到的一切都说要离开 DirectX,转而使用 Direct2D。所以是时候扔掉所有的知识,重新开始了。真正的 MS 方式 ;-)

好吧,为了操作位图,在它进入渲染之前,我看到我可以使用“Lock()”来获取它。界面上的一个功能也会告诉我尺寸。但我也需要知道 BBP,并大步前进。

在有人说“你为什么不使用 ::GetBBP()... DUH”之前,经过数小时搜索 MSDN 和其他来源后,我一直无法远程找到类似的东西。并且有很多非常令人困惑的 COM 接口。

我唯一能找到的是 GetPixelFormat(),它返回一个 GUID,然后我可以编写大约 150 个“if (...)”语句来比较它。就这样我可以测试它的三个值,如果它们都不是(1,8,32)则拒绝它,这几乎不是处理这个问题的有效方法。

GetPixelFormat() 也没有告诉我步幅。

有没有办法做到这一点?

(位图也是未压缩的,所以我什至不需要通过 IWICBitmapDecoder 运行它们,但我还没有解释如何简单地告诉 IWICBitmap “这是一个 blob,将它用作大小 xy 的位图”)

感谢您的任何帮助。

-斯科特

0 投票
1 回答
388 浏览

windows - DirectDraw +分层窗口颜色键?

我正在创建一个窗口WS_EX_LAYERED并使用SetLayeredWindowAttributes(). 我可以通过在窗口内绘制一个简单的矩形来验证这个颜色键确实在窗口中创建了一个透明补丁FillRect()。但是,当我使用 DirectDraw 在窗口中绘图时,这不起作用。我正在IDirectDrawSurface7窗口上创建一个,并Blt()为其添加一些像素。一些像素用颜色键着色,但我不认为它们是透明的,它们只是出现在颜色键中。

DirectDraw 表面中是否存在与分层窗口颜色键控冲突的固有内容?
当我使用 设置 alpha 值SetLayeredWindowAttributes()时,这似乎与 DirectDraw 表面配合得很好,而且它确实看起来是半透明的。

0 投票
1 回答
852 浏览

delphi - 使用显卡(DirectX、OpenGL)代替 GDI 或 GR32 函数

目前我在我的项目中使用 GR32 函数,其中我有很多混合、图像操作,如饱和度、对比度、模糊等。还有自定义图像操作。

基本上我想用显卡指令替换GR32(或GDI,没有区别),以便使用显卡而不是CPU进行处理。

我不需要 OpenGL 单元,我不想做任何 3D 操作,我只想使用显卡计算而不是 CPU 指令。

我的问题是 >

  1. 使用 GPU 的最佳方式是什么?
  2. 是否有为此目的编写的库?
0 投票
1 回答
906 浏览

c++ - c++ - Win32 窗口在第一次绘制后冻结(directx 11)

我有一个标准的 win32 窗口,我使用D2D1. 一切都响应迅速并且运行顺利。我的问题如下:创建窗口后,它调用WM_PAINT 一次然后“卡住”等待任何用户输入(例如鼠标移动或单击窗口区域)。当它接收到输入时,它运行没有任何进一步的问题。虽然这并不一定会使程序无法运行,但它似乎非常不专业并且......丑陋。哦,我所说的“卡住”的意思是后台进程仍然运行没有问题,所以循环按预期运行 - 但是,由于WM_PAINT某种原因没有调用。

这是当前代码:

头文件:

.cpp 文件的一部分

因此,我在 2 台计算机(均使用 Win 8.1)上使用 VS 2012 Ultimate 和 VS 2013 Professional 对其进行了测试,来回运行调试测试,剥离程序的某些部分,搜索 MDSN、Google 和 StackExchange - 无济于事。当我处理WM_COMMAND子窗口时,也会发生这种冻结。当我尝试实现 GDI+ 时也没有这样的问题,但事实证明它非常无效,因此切换到 DirectX。除此之外,该程序运行完美。我希望我已经提供了足够的信息。

0 投票
4 回答
6438 浏览

directdraw - 如何在 DirectX 12 中绘制文本?

这是您如何在 DirectX 11 中绘制文本的后续问题?

在 Direct3D-12 中,事情变得更加复杂,而且由于它是新的,我无法在网上找到任何合适的库。

我正在构建一个基本的 Direct3D12 FPS 测试应用程序,我喜欢在屏幕上显示 FPS 数据和我的渲染图像。

0 投票
0 回答
35 浏览

windows - “运行此应用程序会关闭桌面窗口管理器”是什么意思?

MS 声明,关于应用程序清单兼容性部分

变化的表现

默认情况下,清单中没有兼容性部分的应用程序将在 Windows 7 和未来的 Windows 版本上接收 Windows Vista 行为。(...)

(...)

DirectDraw 锁

  • Windows 7:为 Windows 7 显示的应用程序不能(...)
  • Windows Vista(默认):应用程序将能够(...)运行应用程序关闭桌面窗口管理器

为下一个 DirectDraw 条目重复该注释。

这到底意味着什么?没有任何桌面 (MFC) 应用程序定义了兼容性清单,但我们从未注意到任何桌面上的“关闭”任何内容。