问题标签 [directx-10]

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 回答
4529 浏览

c++ - DirectX 11 从全屏切换-> 窗口问题

我一直在搜寻各种网站,寻找管理切换的正确方法。

我以为我已经破解了它,但现在我注意到一个奇怪的问题,因为我正在为绘制调用设置顶点和像素着色器。

我可以使用 alt-enter 切换到全屏,一切都很好,切换回来要么留下空白窗口,要么正确渲染,但永远不会继续渲染任何更新。

即它基本上会渲染一帧,并且任何输入都已注册,但在您切换到全屏之前在屏幕上不可见。

很明显,我可能在交换链或设备上下文中遗漏了一些东西,因为我注意到使用 Flush() 它会强制它工作,但我意识到这显然不是解决方案。

渲染函数片段

调整从 WM_SIZE 案例传递的高度/宽度的函数

用这个交换链设置

我一直在用 D3D11_CREATE_DEVICE_DEBUG 对此进行测试,没有错误/警告/泄漏,欢迎任何评论或输入。

0 投票
1 回答
1338 浏览

opengl - DX9 和 DX10):默认的像素(和顶点)着色器是什么?(如果可能,也可以使用 OpenGL。)

我知道我可以选择在 DX9 中指定着色器,并且我需要在 DX10 中指定着色器。我的问题是,如果我说我想使用着色器但我没有指定一个着色器会发生什么。一句话,我正在寻找的是默认行为。有默认着色器吗?

我对以下场景感兴趣:

  • DX10,不指定像素着色器。(我必须调用 PSSetShader(NULL) 吗?如果我不调用怎么办?)将运行的默认着色器是什么?
  • 同样的问题,顶点着色器。
  • DX9,如果我指定我将使用像素着色器,但没有指定一个,会发生什么?有默认吗?如果我选择使用固定功能接口,是否有默认值?这些默认值是否相同?
  • 额外问题:OpenGL 和 GLSL 怎么样?与DX9相同的问题。

我很想看到一个指向此文档的指针——我仔细阅读了 Microsoft 在线 DX 文档,但在找到任何类型的默认行为方面确实无处可去。

谢谢!

0 投票
3 回答
2282 浏览

directx - 任何方法可以找到有关警告的更多详细信息:ID3D10Buffer::SetPrivateData: 发现现有同名但大小不同的私有数据!

在调试模式下运行 DirectX10 程序时遇到此错误:

D3D10:警告:ID3D10Buffer::SetPrivateData:发现现有的同名但大小不同的私有数据![状态设置警告#55:SETPRIVATEDATA_CHANGINGPARAMS]

我正在尝试将项目高度 OOP 作为学习练习,因此有可能发生这种情况,但是有没有办法获得更多细节?

0 投票
1 回答
5275 浏览

c++ - 如何正确更新 DirectX 10 中的顶点缓冲区

对于一点背景:我正在使用 C++ 进行一个项目,在该项目中我试图根据实时配置文件数据绘制对象的 3D 表示。分析数据是从外部分析硬件收集的。该系统以每秒 300 次的速度沿着一个对象移动,为我的软件提供了一个剖面切片。每个切片由一个 ~8000 个 XY 点的列表组成。轮廓仪的运动由编码器记录。编码器信息提供了扫描的第三维。

另一个需要注意的重要事项是分析器可能会在对象上来回移动。发生这种情况时,我想用新的切片替换以前读取/绘制的切片(基于编码器位置)。到目前为止,我正在使用按编码器计数存储的切片循环缓冲区来实现这一点。这也意味着当缓冲区填满并开始覆盖旧切片时,我将要丢弃切片。为了在屏幕上显示适当数量的主题 - 我需要一次绘制 1000 个剖面数据。现在我将对象渲染为点云。将来我们可能会尝试附加相邻的切片并渲染为三角形列表。

我是 DirectX 的新手,但是使用书籍和在线示例,我已经到了在 3D 中绘制对象的地步,但我确信我没有有效/正确地使用顶点缓冲区。我发现的大多数示例都适用于非常静态的模型。因此,他们倾向于使用其点列表创建单个顶点缓冲区,然后仅通过矩阵变换进行操作。另一方面,当我从我们的硬件中检索配置文件数据时,我将非常快速地更新场景。

目前,我正在为我读入的每个切片创建一个新的顶点缓冲区。当我绘制场景时,我循环遍历最多 1000 个缓冲区的列表,并为每个缓冲区调用 Draw()。我注意到,如果我将一次绘制的顶点缓冲区数量减少一半,我的 FPS 会显着提高,而将每个缓冲区的顶点点数量减半时几乎没有改善 - 所以我认为这表明多个顶点缓冲区不是解决这个问题的正确方法。

所以对于我的问题的胆量......我想知道当顶点变化如此频繁时,我是否可以将所有这些顶点放在一个顶点缓冲区中。我可以更新现有顶点缓冲区中的点吗?还是应该在每次更新场景时重新创建一个全新的缓冲区?最后要记住的一件事是,硬件中每个切片的点数会有所不同 - 因此,在覆盖以前的切片时,新切片的点数可能比被替换的切片多或少。

谢谢你的时间。任何建议将不胜感激!

0 投票
2 回答
228 浏览

c++ - 带有 DirectX 变量的“外部”?

出于某种原因,每当我将 directx 变量声明为 extern 时,都会收到链接错误。

例子:

在一些头文件中:

在我包含包含 pd3dDevice 的 .h 文件的其他一些 cpp 文件中:

会弹出类似这样的错误:

2>main.obj:错误 LNK2001:无法解析的外部符号“struct ID3D10EffectMatrixVariable * pProjectionVariable”(?pProjectionVariable@@3PAUID3D10EffectMatrixVariable@@A) 2>C:\Users\steve\documents\visual studio 2010\Projects\Shyr\Debug\Shyr .exe:致命错误 LNK1120:1 未解决的外部

我拿走extern声明的那一刻,它就像一个魅力。当然,我实际上想从我正在处理的 dll 中引用几个变量,例如我的交换链、设备、目标视图等。有谁知道怎么回事?

(另外,是的,它只声明了一次)

为了证明这个问题与 DirectX 变量无关,我创建了一个外部变量“george”并将其初始化为 4。然后我在其他地方引用它并更改了值。编译就好了。

0 投票
1 回答
667 浏览

c++ - 如何强制 DirectX 恢复之前的渲染状态?

我有一个绘制文本并绘制​​原始三角形的程序。这两个功能独立工作。但是,当我连续调用它们时,我的三角形没有绘制,然后我收到此错误:

我做了一些研究,看起来它是由 ID3DXFont 在渲染时改变状态引起的。Sc4Freak 在这个线程上:

http://www.gamedev.net/topic/487280-dx10-render-question/

建议传递一个 D3DX10_SPRITE_SAVE_STATE,但我不完全理解精灵和直接文本之间的关系,或者我应该在哪里调用它。谁能解释为什么会这样?

0 投票
1 回答
1668 浏览

c++ - 您可以用来学习编程着色器的最佳工具是什么?

我最近一直在做一些 DirectX 10 工作,我希望转向 DirectX 11 和 Shader Model 5.0。过去我写过一些非常简单的着色器,我希望能拓宽我的视野并尝试更复杂的着色器。我的问题是多方面的:

  1. 什么是最好的编程着色器的工具?我只使用了视觉工作室和一些FX 作曲家 - 阅读:足以打开它并查看它。

  2. gfx 卡的品牌是否影响您可以编程的着色器类型?

    • 我问的原因是 Nvidia 似乎有更好的工具,而 ATI 似乎取消了 RenderMonkey。我好像没看到有替代品?我错了吗?
  3. 与#1 类似的问题,但是如果您只是打算编写 DirectX 着色器而不是特定于供应商的,您可以使用跨供应商工具吗?

    • 如果您需要针对特定​​供应商,Nvidia 通常是否有更好的工具?我现在真的很想使用 ATI,因为它们似乎是最划算的(而且我有一块 AMD 板)——但我很犹豫,因为我主要使用我的 gfx 卡进行编程。
0 投票
1 回答
1229 浏览

wpf - 前端缓冲区丢失后的 HRESULT 0x8876086a

我正在使用 DirectX 在非托管代码中渲染图像,并在 WPF 中使用 D3DImage 来托管表面。当系统进入睡眠状态时,会引发 frontBufferLost 事件。处理事件并销毁并重新创建所有资源。

在非托管代码中使用 Direct3D9 时,一切正常。引发事件后,将重新创建设备并执行渲染而不会出现任何错误。

但是当我在引擎中使用 DirectX10 时,由于我还需要 Direct3D9 设备来实现 Surface 队列,所以我尝试删除并重新创建 10 和 9 设备。在这个阶段,在 GetDeviceCaps 调用期间,我总是得到 0x8876086a,我认为这是设备不可用。

有人可以帮我解决这个问题吗?

0 投票
1 回答
1156 浏览

c++ - 如何在 DirectX 10 中绘制大量(500 多个)精灵来构建等距平铺地图?

所以,我一直在翻阅几本关于 DirectX 的书(特别是 10 本书),并且正在尝试构建一个使用它的游戏,但我被一个似乎没有一本书提到的问题难住了:我我用精灵构建了一个等距地图,随着棋盘变大,程序的速度急剧下降。每个瓦片是 64x45,当我用精灵构建一个 36x19 (684) 瓦片图时,我的应用程序加载大约需要 6 秒,每帧之间大约需要 5 秒。由于断点调试没有产生任何好的线索,我已经缩小了当前代码中问题出在这个特定部分的区域:

任何帮助,将不胜感激。

0 投票
1 回答
1529 浏览

hlsl - 几何着色器无法在 DirectX10 HLSL 中编译

我一直在尝试编写几何着色器以生成广告牌系统,如 Frank Luna 的《DirectX 3D 游戏编程简介》一书中所述。我将着色器插入到我的技术中,如下所示:

但是,这会给出错误 1>D3DEffectCompiler:错误:在技术渲染中找不到有效的 VertexShader-GeometryShader 组合,通过 P3。

VS 和 GS 的结构如下所示:

它们应该相同吗?