问题标签 [directx-11]
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.
c++ - IDXGISwapChain::Present 导致驱动程序崩溃和设备移除
我正在设计一个使用 DirectX 11 API 的游戏引擎,特别是延迟上下文的使用。基本思想是让每个设备状态都给定其自己的延迟上下文,然后在渲染所有几何图形后,通过迭代每个延迟上下文并在直接上下文上执行其命令列表来显示它。我通过使用线框着色器在屏幕上简单地绘制两个三角形来测试这一点,仅此而已。所有 DirectX 调用都不会返回错误,即使在 PIX 调试报告中查看时也是如此,但是一旦IDXGISwapChain::Present(0,0
调用 ),整个屏幕就会变黑然后返回。然后屏幕右下角会弹出一个错误框,说明显示驱动程序“已停止响应并成功恢复”。查看 PIX 日志,我发现有一行说明“D3D11: Removing Device
" 在 PIX 日志中调用的 pre 和 post 块之间。post 块中显示的返回值是DXGI_ERROR_DEVICE_REMOVED
。我不太确定该怎么做。PIX 日志如下:
如果还需要什么,请告诉我。我没有发布代码主要是因为它扩展了近 20 个单独的类,但我可以发布缓冲区内容、HLSL 和逻辑背后的解释。
更新:
我已经在一定程度上解决了上面的问题,部分原因很可能是由于没有设置任何着色器、没有索引缓冲区、没有顶点缓冲区和没有常量缓冲区。原来的问题还没有解决,但是在处理这个问题的过程中,我有了一个新的想法。我从来没有打电话ID3D11DeviceContext::Begin(0)
。但是,在从设备状态类获取设备上下文并在该上下文上调用 Begin 时,我最终会遇到访问冲突,并且指向ID3D11DeviceContext
对象的指针被设置为零。这只发生在对 的调用上Begin
,删除调用会导致行为停止。浏览 DirectX SDK 中的示例代码,我在任何时候都找不到要开始的显式调用。这个电话有必要吗?这似乎有点离题,但如果命令列表因此而被破坏,这可能是原因Present
正在移除设备。
相关代码:
wpf - WPF 和 SlimDX (DirectX 11) 互操作
您好,我已经设法通过使用 D3DImage 和共享纹理将 SlimDX 和 DirectX 11 图形集成到 WPF 应用程序中。但是,在以高分辨率 (2560x1440) 渲染简单场景(例如 SlimDX 示例中的 GameOfLife)时,我的性能确实很差。
我已经尝试对我的渲染方法进行一些性能分析,看起来大部分时间都花在了使后缓冲区无效时锁定 D3DImage 上。
绘制后花费大量时间冲洗设备:
任何人都知道这个问题以及如何优化它?在集成 WPF 和 SlimDX 时,您能期望获得下降性能吗?
c++ - DirectX SDK 的 C++ 链接器错误
我正在拼命地尝试使用 DirectX 进行 C++ 编程。这是一场艰苦的战斗,我只写了几行代码。我的大部分战斗都与链接器有关。到目前为止,我的头文件中有这个:
在源文件中:
它在最后一行中断,说“错误 LNK2019:未解析的外部符号 D3D11CreateDeviceAndSwapChain@48 引用函数 void _cdecl InitD3D(struct HWND__*)”(?InitD3D@@YAXPAUHWND__@@@Z)”。
我不知道这里出了什么问题,#includes 用于链接 D3D 库,并且程序构建或执行直到它到达该行。你们可以提供的任何帮助将不胜感激。谢谢!
c++ - DirectX Camera 要跟随基于 3D 模型的世界矩阵吗?
我有多个对象在 3D 空间中移动,我正在寻找方法来按下按钮,让相机捕捉并跟随所选对象。
有没有办法利用每个对象的世界矩阵?(下面是一个物体的例子。这个是一个自转和轨道的行星)
我真的想找到一种优雅的方式来实现这一点,所以任何建议都将不胜感激。
谢谢
c++ - 将资源从 DirectX11 共享到 Directx9
让,我有两个设备,第一个是 DirectX9,第二个是 DirectX11。我正在做的是通过 D3D11 的 Compute Shader 计算粒子并将它们的数据保存在 D3D11 纹理中,然后我想在我的 D3D9 设备中使用该 D3D11 纹理来显示它。我正在使用以下代码..
在 D3D11 设备中..(m_pBuffer 是 ID3D11Buffer )
然后在 D3D9 设备中...
我遇到的错误是“Direct3D9:(错误):打开和创建的资源不匹配,无法打开共享资源。”
编辑:好的,当我使用 dx9 中的 D3DFMT_A16B16G16R16F 和 dX11 中的 DXGI_FORMAT_R16G16B16A16_FLOAT 创建纹理时,它起作用了。但使用 D3DFMT_A32B32G32R32F 和 DXGI_FORMAT_R32G32B32A32_FLOAT ,它给出了上述错误。
c++ - 在 DirectX 10/11 中从 GPU 获取转换后的顶点
我正在开发的图形引擎出现了一个主要瓶颈,即顶点的矩阵变换(几乎没有静态顶点)。到目前为止,我一直在用 CPU 转换顶点并更新每一帧的顶点缓冲区(数据复制本身是一个小瓶颈,但到目前为止是可控的)。
所以我在想,如果我可以将网格缓冲区保留在 GPU 中,我可以在那里转换顶点并将转换后的一组顶点返回到主内存以进行其他处理(后续处理需要比 GPU 着色器更多的内部连接允许)。这可能会消除当前代码中的瓶颈。
关于如何做到这一点的任何提示?谢谢。
directx - 哪个更快:在执行或镶嵌之前创建详细的网格?
为简单起见,让我们考虑球体。假设我有一个球体,在执行之前我知道半径、位置和三角形计数。假设三角形数量足够大(例如~50k 三角形)。
事先创建这个球体网格并将所有 50k 三角形流式传输到显卡会更快,还是发送单个点(表示球体的中心)并使用曲面细分和几何着色器构建球体会更快在 GPU 上?
如果我在不同的位置有 100 个这样的球体,它还会更快吗?我可以使用船体/几何着色器来创建可以与实例化结合的东西吗?
c++ - Directx11 - CreateTexture3D OUT_OF_MEMORY 错误
我在while循环中创建一个3d纹理只是为了实验。虽然我没有忘记在最后释放它,但在300左右的一些循环后导致OUT_OF_MEMORY错误。
我的代码是:
请在这里帮助我。谢谢
c++ - DirectX 10/11 常量缓冲区内容未通过
我做了一个常量缓冲区定义为
在 HLSL 和
在 C++ 中
现在所有矩阵以及aMatrixWeights 数组的前5 个元素都成功交付,但之后就什么都没有了,它只是0。有人知道发生了什么吗?谢谢。
c++ - d3d 11 是否向后兼容 d3d10 和 d3d9?
我提交了一个实际上是一堆问题的问题,所以我按照要求将它们分成了自己的单独问题。
只是一个关于direct3D 的一般性问题,如果我要使用hlsl 5.0 着色器完全在d3d11 中编写应用程序,这些是否仍仅与支持d3d10 或d3d9 的系统兼容,只是图形效果较差且d3d11 的效率较低?如果是这样,它的效率会降低多少?如果不是,除了使用 d3d9、d3d10 和 d3d11 之外,我是否真的需要制作完全相同的程序的 2 或 3 个不同版本?