问题标签 [directxtk]

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

directx-12 - DirectX 12 应用程序在 Windows 11 中崩溃

我非常喜欢基于几个 DirectX 工具包示例构建的 DirectX 12 桌面 x64 应用程序,但现在还支持用于定向和全向阴影、动态反射、硬件实例化粒子效果系统、FBX 模型骨骼动画的自定义着色器和景深后处理。

在万圣节,Windows Update 将我的系统(英特尔酷睿 i7[第 8 代]/GeForce GTX1050)升级到了 Windows 11。当我运行我的项目时,我收到了以下“源不可用”窗口形式的令人毛骨悚然的惊喜:

在此处输入图像描述

停止调试后,应用程序在Present()调用DeviceResources.cpp时崩溃并生成以下错误:

这在 Windows 10 中从未发生过,而且这种崩溃是不稳定的。我的游戏配置为以无边框全屏模式启动,有时会在崩溃前运行几秒钟。如果我有时间 Alt+Enter 进入窗口模式,应用程序仍然会崩溃。

我已更新我的 Nvidia 驱动程序并将项目指向最新的 Windows 11 SDK 版本 (10.0.22000.0),但问题仍然存在。

经过一番谷歌搜索后,有证据表明存在一个已知问题,涉​​及 Windows 11 上不稳定的 DXGI/WDM 行为,用户在模拟全屏(即无边框窗口)模式下运行游戏时报告了该问题。崩溃后我也遇到了错误的 Alt+Tab 窗口切换行为,但这似乎已通过图形驱动程序更新修复。

是否有其他开发人员在 Windows 11 上遇到过 DirectX 12 的稳定性和/或性能问题?还是我应该坐下来等待未来的 Windows 更新以稳定新操作系统?

0 投票
1 回答
93 浏览

c++ - 为什么我在关闭 SDL 后无法使用 CreateWICTextureFromFileEx

我正在尝试关闭我的 DX12 渲染器,然后在同一进程中重新启动它。

所述应用程序很大程度上基于 microsoft MiniEngine 示例代码,现在进行了一些修改以允许重新初始化全局变量。我正在使用 SDL 进行窗口和事件管理。

看来,彻底关闭和重新初始化的最后一个绊脚石是在纹理管理器类中加载纹理,而后者又使用代码DirectXTK12通过文件加载纹理。CreateWICTextureFromFileEx.png

总结一下我正在尝试做的事情:

  • 启动应用程序

  • 初始化渲染到 SDL 窗口

  • 在渲染循环中渲染

  • 关闭所有渲染和窗口处理(移除所有资源,释放设备句柄) - 调用SDL_Quit

  • 重新初始化渲染到新的 SDL 窗口(获取新的设备句柄等)

  • 在渲染循环中渲染

纹理管理类作为渲染关闭的一部分被关闭,删除所有纹理痕迹及其对资源的句柄等。

作为渲染重新初始化的一部分,默认纹理是通过CreateWICTextureFromFileEx. (请参阅此处)并在尝试执行此操作时崩溃。

编辑:自从第一次发布以来,我可以说这种崩溃在调用后直接开始SDL_Quit()(并且在调用重启后仍然存在SDL_Init(SDL_INIT_VIDEO)

我现在相当有信心这是这个区域的问题,而不是渲染器的其他部分没有正确重新初始化,因为我可以强制它使用.DDS纹理而不是.pngs,并且系统再次很好地启动。在这种情况下,它使用DDSTextureLoader没有任何(明显的)问题。

我已将源代码添加到我的项目中,并且在尝试执行此操作时可以看到崩溃发生:

报告的失败是

pWIC这里是通过_GetWIC()使用单例初始化获得的:

自从第一次发帖以来,我现在可以说这个崩溃是在调用SDL_Quit(). 我有测试代码足以启动图形以获取设备并获取纹理,这将在任何时候成功完成,直到SDL_Quit. 重新初始化 SDLSDL_Init(SDL_INIT_VIDEO)并没有帮助。

我还注意到WICTextureLoader评论状态“假设应用程序已经调用了 CoInitializeEx”。这是一个SDL_Quit可以搞砸的领域吗?

0 投票
1 回答
67 浏览

c++ - 与另一个单独的进程共享来自交换链后台缓冲区的 direct3d11 渲染帧作为纹理

所以我会详细说明标题

我想要完成的是在一个进程中完成所有计算和渲染,然后从另一个进程读取结果帧(当所有计算完成时,我将在出现之前使用交换链后台缓冲区)并将其显示在显示器上。基本上我想在两个单独的进程之间共享视频内存(不是整个屏幕只是应用程序窗口)。

我正在使用带有 DirectXTK 的 direct3d11。我的笔记本电脑有 NVIDIA gpu 和 intel UHD 620 graphics 。打开具有管理员访问权限的 Visual Studio。

这是我尝试为缓冲区创建共享句柄的代码

从另一个进程中,我尝试使用此代码检索句柄

但我得到这个错误

我也尝试使用OpenSharedResource1而不是OpenSharedResourceByName但给出了同样的错误。

0 投票
1 回答
32 浏览

3d - 如何使用 DirectX::Model 和自定义 DirectX::Effect

我正在使用 DirectXToolKit。我创建了一个这样的模型

我想使用从 DirectX::IEffect 继承的自定义效果。

但是,DirectX::Model 默认创建自己的效果,这意味着为了使用我自己的着色器,我必须使用替换它们

我对如何将效果发送到该功能感到困惑。

这是我现在使用的代码:

但是,这会导致此错误 initial value of reference to non-const must be an lvalue 搜索该错误为我提供了许多解决方案,这些解决方案涉及更改函数签名以使用 const 引用,但是我应该如何在不更改函数的情况下按原样使用该函数?传递shared_ptr地址的正确方法是什么?

编辑:我让它使用这个代码工作

0 投票
1 回答
16 浏览

graphics - 使用 DirectXTK 将纹理应用于自定义效果会导致纹理被拉伸

我正在尝试使用 DirectXTK 应用自定义效果。效果应该是只有一个纹理的“未点亮”着色器。但由于某种原因,纹理在模型中被拉伸。我查看了renderdoc,纹理坐标似乎已正确加载,所以我不确定发生了什么。

UnlitEffect.h

UnlitEffect.cpp

Unlit.hlsli

UnlitPS.hlsl

UnlitVS.hlsl

这是结果