问题标签 [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 投票
2 回答
348 浏览

c - 创建一个简单的单缓冲区应用程序 (IDirectDraw)

我正在尝试使用原始 DirectDraw 接口编写单个缓冲的窗口应用程序。

这纯粹是出于教育目的和公正的态度。我在玩IDirectDraw界面(我强调这是原始版本,就像在 DirectX 1.0 中一样)。

现在,该文档包含一组关于创建后缓冲和在主表面和后缓冲表面之间翻转的教程。

但是,它没有描述如何编写一个窗口化的单缓冲区应用程序。事实上,我几乎找不到任何关于这个想法的参考。没有任何迹象表明它不可能。

DDSCL_NORMAL通过设置与应用程序在一个窗口内的行为的合作级别。

成功后创建主曲面。

这个函数也成功了。请注意,我没有创建后台缓冲区。

但是,在我的主循环中:

根本没有任何东西被吸引到窗口上。我的原始代码(全屏缓冲应用程序)正确显示“你好,世界!” 在屏幕的左上角,唯一的修改是微小的编辑以停止后台缓冲区的创建,并直接写入主表面。

如果我CreateSurface在调用后使用后备缓冲区的选项调用SetCooperativeLevelDDSCL_NORMAL那么它会返回并出错。我理解这一点,因为文档指出:

如果您使用 IDirectDraw::SetCooperativeLevel 将模式设置为 DDSCL_NORMAL,则只能创建在曲面之间闪烁的曲面。

我错过了什么吗?我是否从根本上误解了 DirectDraw?我的印象是使用缓冲区是为了:

  • 性能优势,以及
  • 防止屏幕撕裂。

我不在乎这两个对不对。我能做些什么?

0 投票
1 回答
801 浏览

c++ - 在 C++ 中从头开始创建 DirectDraw Surface

我正在尝试将二维数组转换为 DDS 并将其保存到文件中。数组中充满了 Color 结构(每个结构都有红色、绿色、蓝色和 alpha 分量)。一旦我将数组转换为正确的格式,我确信将它保存到文件部分不会有问题。

如果我能找到一个很好的资源来解释如何做。

如果有人能指出我正确的方向,我将不胜感激。

0 投票
2 回答
586 浏览

c++ - 如何获取 DirectDraw Last 错误字符串(DirectX 7)

当我执行 DirectDraw 方法失败时,如何在 DirectX 7 中获取失败错误字符串?

这里我想弹出失败信息的错误信息。如何获取错误的LPCSTR字符串?

0 投票
1 回答
1129 浏览

directx - 用什么代替 DirectDraw

我刚刚重建了基于 DirectDraw 的旧游戏,我对结果非常满意!这是我在 diectx 世界中的第一个 C++ 程序之一。但我很失望地发现 DirectDraw 已被弃用。2010 年 7 月安装 DirectX SDK 后,没有 ddraw.h 和 ddraw.lib。

我的问题:如何将基于 DirectDraw 的 2D 游戏移植到最近的 DircetX SDK?有任何 DirectDraw 替代品吗?

那么OpenGL呢?任何想法将不胜感激!

0 投票
0 回答
1217 浏览

texture2d - SharpDX 工具包 Content.Load抛出 SharpDXException

我正在尝试使用 SharpDX 工具包将 Direct Draw Surface 加载到 Texture2D var 中。所以我创建了这个变量,称为像素,使用paint.net创建了一个dds文件并将其命名为asdf.dds。我将该文件移到我的项目的 Content 文件夹中,并将“复制到输出目录”更改为“如果较新则复制”。如果我现在使用

我得到以下异常(德语):

我可怕的翻译:

在 SharpDX.SharpDXException 中发生了“SharpDX.DLL”类型的异常,但未提交用户代码。附加信息:HRESULT:[0x80070057],模块:[General],ApiCode:[E_INVALIDARG/Invalid Arguments],消息:参数不正确。

0 投票
1 回答
173 浏览

c++ - IDirectDrawSurface7::Blt 返回 E_INVALIDARG

步骤1:

第2步:

矩形 SrcRect={0,0,fTexWidth,fTexHeight}; 矩形 DstRect = {0,0,60,20};

注意:图像尺寸为:3170 x 64

m_pPrimarySurf->Blt(...) 返回 E_INVALIDARG 。所以为什么 ?谢谢 !

0 投票
1 回答
153 浏览

directx - IDirectDrawSurface7::Blt - 源表面的 NULL 指针

调用 IDirectDrawSurface7::Blt 时 lpDDSrcSurface 可以为 NULL 吗?

似乎上面的代码只是跳过了 blitting,但 MSDN 对此却一无所知。

0 投票
0 回答
419 浏览

c++ - DirectDraw:我可以保持主表面锁定吗?

我有一个使用 DirectDraw2 的传统游戏,它将其绘制到两个缓冲区中,一个正面和背面,正面是主要表面(屏幕上),背面是屏幕外缓冲区。现在在主循环中,它很好地锁定了前端缓冲区,将其绘制到前后,然后再次解锁。然而,在同一个游戏中,主菜单代码只是让前端缓冲区一直锁定。

根据这两个看似矛盾的观察结果,我有几个关于 Lock 和 Unlock 的问题,MSDN 和 Google 都没有回答。

  • 前端缓冲区被锁定时,视频卡可以显示到显示器上吗?
  • 如果可以,再次解锁有什么好处吗?假设我们不打算执行任何硬件 blit。
  • 如果在 vsync 更新期间锁定会发生什么?它会等待,还是您只是可以访问缓冲区?
  • 就监视器的更新次数而言,是什么决定了“帧率”。是每次调用 Unlock 时,还是仅遵循屏幕刷新率,与我们的锁定/解锁无关。在那种情况下,我们会流泪吗?

我认为它会像 Direct3D 一样工作,您可以在其中锁定顶点缓冲区,但需要先解锁它,然后 GPU 才能对其进行处理。

0 投票
1 回答
179 浏览

c++ - DirectX 3(三)如何向显示器显示信息?

我已经为 DirectDraw 获取了一个 proxyDLL,但没有调用任何代理函数,但游戏可以使用 proxyDLL。

不知何故,FRAPS 能够显示每秒帧数计数器,因此它知道数据是如何显示的。

但是我怀疑更新显示的功能实际上都没有受到影响。断点似乎没有被击中。曾经。(我试过翻转、开始/结束场景等)

我从中得到的代码是这个链接:

http://svn2.assembla.com/svn/lightningstools/trunk/D3D_DDraw_Proxy/

所以我的问题是:

DirectX 3 使用哪些功能来更新显示?我需要哪些函数来查找/放置断点?

这里的问题是我找不到 DirectX 3 的任何文档。

我检查了 processexplorer 以查看是否加载了 D3D9 dll,但没有加载。所以 D3D9 挂钩不是一种选择。

0 投票
1 回答
148 浏览

sdl - DirectDraw 初始化代码在 SDL2 代码中的什么位置?

你能指出它的确切位置给我吗?应该在 src/video/windows 的某个地方...

还是被扔掉了,现在用GDI代替软件渲染?