问题标签 [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 回答
1863 浏览

crash - Direct3D11 得到最后一个错误

我对我的 d3d11 应用程序做了一些事情,现在我在调用Present 之后的某个时间发生了 WDDM TDR 重置导致 GPU 崩溃。

由于 Present(也没有任何绘图调用!)函数不再返回 HRESULT,我们应该如何找到问题?

0 投票
1 回答
1477 浏览

direct3d11 - d3d11 中的 DrawPrimitiveUP

只是检查,但似乎D3D9 的 DrawPrimitiveUP / 任何没有顶点缓冲区的绘图方法都已从 D3D11 中删除。

有没有办法在使用顶点缓冲区的 D3D11 中绘制,例如?

0 投票
1 回答
3854 浏览

render - 在 D3D11 中更改单个状态设置

看起来D3D11的api有点笨拙,或者我没有正确使用它。

这是真的,这是在 D3D11 中更改单个光栅化器状态的最小步骤集吗(我以更改线框模式渲染为例)

好像比9长很多

0 投票
2 回答
891 浏览

vertex-buffer - 多少顶点缓冲区太多了?

较新的 API,如 D3D11 强制使用顶点缓冲区。

您可以使用静态(内容不变)或动态顶点缓冲区(内容可以由 CPU 更新和更改)

我的问题是,有多少顶点缓冲区太多了?你怎么知道你正在接近极限?每个模型都应该有自己的顶点缓冲区吗?您是否应该只有诸如 8 个顶点缓冲区之类的东西并在所有模型之间共享它们,并根据需要进行更新?

0 投票
1 回答
1364 浏览

graphics - 如何使用 IDXGISwapChain 和 ID3D11Device/ID3D11DeviceContext 呈现到不同的窗口?

以前,当我构建工具时,我使用的是 D3D 版本 9,其中对 Present() 的调用可以获取目标窗口和矩形,因此您可以从单个设备绘制到许多不同的窗口中。这在使用 D3D 加速桌面应用程序和/或构建工具而不是游戏时非常有用!

我之前也用 D3D11 构建了一个游戏渲染器,这也很棒,因为状态管理和线程接口设计得很好,你甚至可以针对在野外仍然很常见的 D3D 9 级别的硬件(相对于 D3D 10 ,只能针对 10 岁及以上)。

但是,现在我想用 D3D11 构建一个工具。不幸的是,从 D3D11CreateDeviceAndSwapChain() 返回的 IDXGISwapChain 似乎“记住”了它的 HWND,并且只想呈现给那个窗口。这是非常不方便的,因为我可能有大量的窗口,每个窗口都需要相当简单的图形绘制到它们上,并且只响应 WM_PAINT(同样,这是一个工具,而不是游戏)。

我想要做的是节省后台缓冲 RAM。具体来说,我曾经能够创建一个后台缓冲区,即桌面大小,我知道它可以满足所有渲染需求,然后就是分配的单个副本。即使有 10 个重叠的窗口,它们都通过同一个后台缓冲区进行渲染,因此除了初始分配之外,不会浪费内存。我可以创建不是交换链的纹理,并将它们用作“渲染目标”,但是我找不到一种很好的方法来呈现给任意客户端窗口的任意矩形,而无需读取位图并将其复制到DIBSection,这将是非常低效的。此外,没有办法创建许多交换链,并让它们共享相同的后台缓冲区。

我能做的最好的事情是为每个窗口创建一个交换链,并将每个交换链的后台缓冲区调整为非常小,除非我渲染到交换链,此时我调整它的大小以匹配窗口。但是,这似乎效率低下,因为调整目标的大小不是“免费”操作 AFAICT。那么,有没有更好的方法呢?

0 投票
1 回答
258 浏览

geometry - 在 PIX 中看起来扭曲的屏幕空间正方形

我有一个简单的函数,可以创建一个覆盖整个屏幕的正方形,我用它来应用后期处理效果,但据我所知,它是导致无数错误的原因。

当我在 PIX 中运行我的代码时,我得到以下网格,但正方形应该是直的并覆盖屏幕,不是吗?

来自 PIX 捕获的网格信息

我的顶点着色器不进行任何转换,只是将位置信息传递给像素着色器。

创建正方形的函数如下:

当我渲染正方形时:

编辑:我添加了正在运行的顶点着色器

这是 PIX 的顶点输出。

上一篇:

前VS

帖子VS:

后VS

这是我选择调试顶点 0 时生成的反汇编 PIX

我还添加了输入汇编器:

0 投票
1 回答
2159 浏览

c++ - Direct3D11(C++):渲染(基本)问题

我一直在关注一本关于使用 D3D11 进行游戏编程的基础知识的书。我现在了解 Direct3D 的绝对基础 :)

但是...我有一个问题。在书中,我总是不得不一次做一个演示。现在,我正在尝试用它制作一个 2D 游戏。因为我不想习惯坏习惯,所以我需要你的建议。

在本书中,我总是必须定义一个(带有 texcoord 和位置成员的结构 VertexPos)或(只有一个 XMFLOAT3 位置成员的结构 VertexPos)。在我正在制作的游戏中,我希望能够绘制没有纹理的实体表面和有纹理的表面。我不确定如何做到这一点,更不用说有效地做到这一点了。

这是我的渲染功能:

那么,我应该如何使用多个顶点缓冲区、输入布局、着色器、Blender 等有效地处理这个问题?

我应该只创建多个版本,然后在 Draw 调用之后设置重置输入程序集、着色器等吗?或者这不起作用/这不是有效的吗?

谢谢 :)

0 投票
1 回答
2224 浏览

c++ - Direct3D11(C++):更新常量缓冲区中的纹理坐标?

我正在尝试使用 Direct3D 制作一个相当基本的 2D 引擎。

我创建了一个 LoadImage() 函数,它将图像的所有相当静态的行为存储在一个对象中。(着色器、顶点缓冲区、采样器等)

我打算用常量缓冲区中的矩阵定位顶点。

但是,我还想要一个 DrawImage() 函数,它有一个参数来告诉纹理的哪一部分应该被绘制(剪辑),所以我必须更新纹理坐标。由于顶点缓冲区已经预先定义,我想知道是否有一种方法可以通过将发送到顶点着色器的常量缓冲区来更新纹理坐标?

我希望我的问题足够清楚,如果您有任何疑问,请查看下面的代码。

0 投票
1 回答
1104 浏览

c++ - 如何画出一定粗细的线

在新的 Direct3D 中绘制不同粗细线条的最佳方法是什么?

0 投票
0 回答
2587 浏览

c++ - 如何制作叠加层

我想知道如何使用 Direct3D11 (C++) 创建覆盖。(就像 xfire 游戏聊天在另一个程序上全屏呈现内容)

我知道 Direct3D11 的基础知识,但我不知道如何让程序相互通信。还是没有必要?

有人可以帮我吗?

谢谢。