问题标签 [direct3d11]

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 投票
1 回答
1026 浏览

slimdx - 使用 KeyedMutex 的 SlimDX 变形设备

我通过 KeyedMutex 使用 Direct2D 和 DirectX11。如果我使用的是硬件设备,一切都很好。当我默认使用 Warp 设备时,我在创建 Texture2D 对象时遇到问题,我收到错误消息“Direct3D11Exception:E_OUTOFMEMORY:内存不足”

这些是负责的行:

同样,使用硬件设备一切都很好,而不是 Warp。当我对 PIX 运行它时,我看到了这个:

<0x09033390> ID3D11Device:CreateTexture2D(0x0FD1E330, NULL, 0x0FD1E32C --> NULL)

那是使用 Warp 驱动程序,但是当我使用最后一个 NULL 不是 NULL 的硬件时,它是一个指向 D3D11 Texture2D 对象的实际指针。

有什么想法吗?我知道我在这里没有包含太多代码,但我希望有人知道这是什么而不必发布整个 DX 例程。如果需要,我会的。

我确实使用调试和 10.1 DX。调试输出如下:

0 投票
1 回答
1262 浏览

directx - Direct3D 中的世界空间坐标

我在 Direct3D 画布上有一个背景图像。我正在背景的特定位置画一个圆圈。使用相机(使用世界/视图/投影)缩放/平移画布后,更新背景。

现在的问题是,我在图像上找不到以前的位置来重画圆圈。我正在使用以下函数(DirectX 11.1)来查找坐标。但它不起作用。

我什至尝试将 XMMatrixIdentity 作为世界。但没有成功。谁能帮帮我吗?

0 投票
3 回答
2082 浏览

c++ - 商业游戏如何处理动态字体加载?

这就是我在伪代码(简化)中处理字体渲染的方式:

所以我可以缓存一些最常用的字体,甚至所有曾经在游戏中使用过的字体。但在某些应用程序中,用户可以即时选择应用程序从未见过的另一种字体/大小/样式,并立即应用。或者例如,在某些游戏中,用户可以替换游戏文件夹中的“font.tff”文件,游戏将在启动时以多种尺寸/样式和数千个 Unicode 字符中的每一个使用它,而无需额外耗时的预加载。奇迹!

我需要这样的东西 - 即时字体加载。

当然,我可以根据需要单独加载字形,并逐个地渲染字形,但这意味着没有批处理,每帧有数千个 Draw 调用和巨大的 GPU 带宽。不确定它是否适用于 OpenGL,但它不适用于 D3D11。

他们如何在游戏工作室中做到这一点?也许您知道另一种方法?我听说过将字体渲染为几何图形、GPU 处理和复杂曲线算法,但在 google 中找不到有用的信息。

任何帮助将不胜感激!

0 投票
1 回答
3123 浏览

directx - 使用 DirectX (Direct3D11) 播放视频

我一直在互联网上查看如何在我的 Direct3D11 游戏中显示视频。在 Direct3D9 中我们可以使用 DirectShow,但在新版本的 Direct3D11 中我找不到任何可比的东西。

我们如何在 Direct3D11 的应用程序中有效地显示视频?

我的目标是Windows 7。

0 投票
1 回答
9041 浏览

graphics - 从 d3d11 中的渲染目标读取像素数据

我将 a 设置texture2d为设备渲染目标。绘制后,如何直接从渲染目标读取和写入像素,然后呈现。

0 投票
2 回答
1459 浏览

c++ - 在 Windows 应用商店应用程序中映射 Direct3D11 中的动态缓冲区

我正在尝试在 Direct3D11 中创建实例化几何图形,ID3D11DeviceContext1->Map()当我尝试更新实例缓冲区时,调用失败并出现非常有用的“无效参数”错误。

缓冲区被声明为成员变量:

Microsoft::WRL::ComPtr<ID3D11Buffer> m_instanceBuffer;

然后我创建它(成功):

但是,当我尝试映射它时:

地图调用失败并显示E_INVALIDARG. 没有什么是NULL不正确的,这是我的第一个 D3D 应用程序之一,我目前不知道下一步该做什么来追踪它。我想我一定是错误地创建了缓冲区,但我不知道怎么做。任何输入将不胜感激。

0 投票
2 回答
2962 浏览

c++ - D3D11 无处增加参考数?

我使用 d3d11 已经有一段时间了,在发现了 directx 调试器之后,我最近发现我的程序到处都在从所有未正确释放的 com 对象中泄漏内存。经过一番窥探和数小时的代码盯着之后,我开发了一些方法来隔离我在哪里得到这些意外增加的引用计数。

首先,所有对象都包含在 std::shared_ptrs 中,并带有调用它们各自释放函数的自定义删除器。我这样做是为了永远不必调用 addref,并且第一次调用 release,即删除器中的那个,只会在对象超出范围时调用。它看起来像这样:

问题是 api 调用中的某些随机函数只会随机增加引用计数,希望我以后必须处理它。

我发现在诊断中有用的是一个看起来像这样的函数:

其中,只是增加和减少计数以获得该对象上的当前引用计数。使用这个,我发现,就在调用自定义删除器中的发布之前,有 10 个对我创建的 1 ID3D11Device 的未完成引用。好奇,我慢慢地回溯,在程序中一直调用这个函数,直到我最初创建它的地方。有趣的是,就在我第一次创建对象之后(甚至在 shared_ptr 获得所有权之前),未完成的 refs 的数量已经是 3!这在此之后立即发生。

这是我第一次调用创建设备的任何此类函数,当我检查之后有多少参考时,它显示为 3!很明显,我误解了这些 com 对象的处理方式。有没有这样的方法我可以手动删除它们,而不是在幕后使用参考计数废话?

0 投票
1 回答
1384 浏览

3d - DirectX Unproject 问题

我有一个正交投影,我尝试从屏幕空间中取消投影一个点。

以下是视图和投影矩阵:

这是我取消投影 Pointp的方法,该点以屏幕像素为单位:

我的代码不起作用,矩阵m仅包含Nan. 当我尝试反转时,view * proj我得到一个只有零的矩阵。

所以我怀疑我的问题与正交投影矩阵有关。

以下是我的问题:

  • 问题可能是由于 OrthoOffCenterLH 投影中的大值导致的下溢引起的吗?
  • 我必须传递哪些x,y,width,height参数Unproject(...)
  • minZ中的andmaxZ参数有什么意义Unproject(...)
  • p.Z我通过什么重要Unproject(...)吗?
0 投票
2 回答
1072 浏览

directx - Direct2D Direct3d11 互操作 - 设备会丢失吗?

在我的应用程序中,我使用 direct2d 写入共享 (d3d11/d3d10) 纹理。这是我的应用程序中使用的唯一一种渲染目标。由于设备可能会在 direct2d (D2DERR_RECREATE_RENDER_TARGET) 中丢失,因此存在大量代码来抽象和/或重新创建设备相关资源。但是,我还没有看到这种情况实际发生,并且很好奇我是否在浪费精力。在这种情况下,渲染目标是否真的会丢失,或者我是否受到保护,因为纹理是通过 d3d11 创建的(尽管与 d3d10 共享)?如果是这样,是否有人知道导致渲染目标丢失的可重现、简单的方法,以便我至少可以测试处理这种情况的代码?

0 投票
1 回答
200 浏览

opengl - System.Drawing.SolidBrush 使用什么混合方程?

我有一些使用 System.Drawing.SolidBrush 绘制半透明三角形的 GDI 代码。我正在尝试使用适当的 3D 渲染 API (OpenGL/Direct3D11) 重新实现代码,但我不确定这些三角形使用什么混合方程来获得与原始 GDI 代码相同的输出。

我认为它是相对简单的东西,比如加法混合(func=GL_FUNC_ADD,eq=GL_ONE,GL_ONE)或插值(func=GL_FUNC_ADD,eq=GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA),但看起来都不太正确。这几乎可以肯定是我的新代码中的一个错误,但我想确保在继续之前我正在朝着正确的目标努力。有人知道合适的混合方程式吗?

编辑:这是相关的 C# 代码,没有上下文:

我的问题是,根据画笔的 RGBA 和目标像素的 RGBA,实际会写入什么颜色?我能找到的所有文档都只是说“使用 alpha 来控制画笔的透明度”或同样模糊的东西;我很好奇实际的混合方程是什么。