问题标签 [dxgi]
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++ - 使用 DXGI 将一台显示器切换到全屏时其他显示器变黑
当我将其中一个显示器切换到全屏模式时,有时其他显示器会变黑并且不会显示任何内容。我做错了什么还是只是一些错误?
我创建了一个窗口,然后创建了一个绑定到该窗口的交换链。我用第一个参数 true 调用交换链的 SetFullScreenState,第二个参数是我想要切换全屏的监视器的 IDXGIOutput 对象。有时它工作正常,但有时所有其他显示器都丢失了(只有全屏显示器显示东西)。
我的显卡是Radeon HD6750,驱动版本是12.3。
我发现 MulitMon10 样本有同样的问题,而有些游戏没有。还是天际和猴岛的故事使用 D3D 或 OpenGL ......?
c# - Swapchain.Present() 耗时太长,导致滞后
自从我将我的所有 c# SlimDX DX11 渲染代码从我的表单(是的,我是一个懒惰的开发人员)移动到定制类后,我最近有点滞后。我将我的程序打进了 EQATEC Profiler 并把它作为我滞后的主要贡献者:
现在很清楚, postRender() 中的任何内容都真正占用了宝贵的毫秒数。事实上,无论我在其中有什么疯狂、复杂的代码,它本身都会有效地将我的帧速率降低到 ~15 FPS。
那么 postRender() 中有什么?只需一行代码:
我只是不知道是什么导致它这么慢,我根本没有对交换链代码进行任何更改。我所更改的只是屏幕分辨率(1680x1050),但这绝对没问题(作为参考,这台机器可以在该分辨率下以最大设置运行 crysis2 而不会出汗)。
有没有人知道什么可能导致交换链需要这么长时间才能呈现或者我应该在哪里寻找问题?
编辑:
查看我的代码结构,我的 RenderFrame() 函数如下:
其中一些函数的结果基于之前的函数(例如,DeferredRender 使用四个渲染目标以逐像素的方式捕获漫反射光照、法线、位置和颜色。然后 CompositeScene 将它们放在一起。这将需要GPU 在继续之前已经计算了上一步。整个过程继续进行,DoF 需要 PostProcess 的结果等。因此,唯一可能保持 Swapchain.Present() 的着色器必须是运行在功能DoF,因为所有其他着色器都会导致CPU锁定直到它们完成。对吗?
c++ - PIX DirectX 11 调试像素错误
我最近更新了我的 DirectX 11 (C++) 应用程序以支持双显示器、双窗口。从那时起,当我尝试在 PIX 调试器中调试任何像素时,我收到以下错误:
我不再使用 D3D11CreateDeviceAndSwapChain,而是使用 D3D11CreateDevice 然后 CreateSwapChain 为两个窗口中的每一个(每个监视器一个)创建单独的交换链。在进行更改时,我使用了 SDK 示例 MultiMon10 作为参考,但是通过 PIX 运行 MultiMon10 示例项目时,我仍然可以毫无错误地调试像素。所以这不仅仅是“CreateSwapChain”对 PIX 不友好的问题。
任何想法可能导致此错误?过去,调试像素和逐步通过着色器帮助了我很多,我不想失去这种能力。
direct3d - 在 DXGI 中启用“实时对象警告”
在 Direct3D 11 中,我可以启用“活动对象警告”,例如
在我的调试版本中检测尚未发布的对象。
我可以为 DXGI 做同样的事情吗?如果是这样,怎么做?
visual-c++ - 使用 DXGI 复制 Windows 8 桌面的限制?
我正在开发一个在 Windows 7 及其先前版本上运行良好的远程桌面应用程序。但在 windows 8 中,镜像驱动程序已被删除,因此我们必须使用 DXGI 开发相同的远程桌面功能。我已阅读文档,但我想知道DXGI 是否有任何限制?
如果有人在 Windows 8 中创建桌面仿真时遇到一些限制,请分享。
c++ - DXGI_FORMAT_ 代码如何与字节序相关?
我一直在阅读 Frank D. Luna 的书“DirectX 10 3D 编程简介”,其中一个问题是从使用
D3DXCOLOR 颜色(128 位)
到 UINT 颜色(32 位)
大概要使用的格式代码是:DXGI_FORMAT_R8G8B8A8_UNORM。
在我看来,这意味着您有一个变量,该变量在字节级别以确切顺序包含有关通道的信息:RGBA(这是正确的解释吗?--问是因为我确定当您需要 RGBA 时我已经读过真的需要这样的代码:A#R#G#B#首先指定 alpha 通道。
无论如何,我选择(可能有更好的方法)这样做:
其中 WHITE 被定义:const D3DXCOLOR WHITE(1.0f, 1.0f, 1.0f, 1.0f);
此转换在 D3DXCOLOR 的扩展中定义。
但是,当 DXGI_FORMAT_R8G8B8A8_UNORM 与 UINT 颜色变量一起使用时,您会得到错误的结果。Luna 将此归因于字节序。
这是因为来自 D3DXCOLOR 的转换产生了 RGBA 形式的 UINT,但是因为 intel x86 使用 little endiann 那么在字节级别你真的得到'ABGR'?那么当这个变量实际被解释时,着色器看到的是 ABGR 而不是 RGBA?它不应该在解释字节时知道高位在较小的地址吗?还有最后一个问题:既然代码被指定为DXGI_FORMAT_R8G8B8A8_UNORM,这是否意味着R应该是最小的地址而A应该是最大的?我确信我有很多误解,所以请随时消除它们。
opengl - 在 Windows 8 上使用 OpenGL 时出现 DXGI 警告?
我正在使用 OpenGL(不是 DirectX)编写 CAD 应用程序。在 Windows 8 Pro(64 位)上运行调试版本时,在应用程序正确终止之前,以下消息会打印到调试器的控制台窗口:
我不知道这是从哪里来的。DXGI 似乎与我没有使用的 DirectX 有关。有什么提示吗?
更新
按照 Paul-Jan 的建议,我启用了设备调试,这会产生以下消息:
graphics - DXGI_FORMAT 的确切色彩空间是什么?
在 DXGI_FORMAT 的官方文档中,它告诉我们只有带有 _SRGB 枚举后缀的格式在 sRGB 颜色空间中。我认为没有这个后缀的其他格式都在线性空间中。但是我在 DirectXTex 库中发现了格式转换函数的一个非常奇怪的行为。(您可以从http://directxtex.codeplex.com/下载它)
首先,我使用 NVIDIA Photoshop DDS 插件将纹理文件导出为 DXGI_FORMAT_R32G32B32A32_FLOAT。然后我通过 LoadFromDDSFile() 函数加载此文件,并通过 Convert() 函数将其格式转换为 DXGI_FORMAT_R16G16B16A16_UNORM。(这两个函数都是 DirectXTex 库提供的。)
你猜怎么着?图像转换为DXGI_FORMAT_R16G16B16A16_UNORM后,所有像素的亮度也发生了变化,整个图像变得比以前更亮。
如果在图像转换为 DXGI_FORMAT_R16G16B16A16_UNORM 格式后手动将像素值从 sRGB 空间转换为线性空间,则生成的像素值与输入相同。因此,我假设 DirectXTex 库将 DXGI_FORMAT_R32G32B32A32_FLOAT 视为线性色彩空间中的格式,并将 DXGI_FORMAT_R16G16B16A16_UNORM 视为 sRGB 色彩空间中的格式,然后将色彩空间从线性空间转换为 sRGB 空间。(我试图找出为什么Convert()函数也会转换颜色空间,但是它是由WIC实现的,并且没有它的源代码。)
那么,DirectXTex 库中是否有任何错误?还是它是 DXGI_FORMAT 的真正标准?如果某些特殊的 DXGI_FORMAT 有不同的颜色空间,请告诉我在哪里可以找到它的规范。
任何帮助将不胜感激。谢谢!
c++ - Direct3D YUV 格式?
Direct3D 11 for Windows 8 中的 YUV 纹理格式如何工作?文档有点稀疏,我没有找到任何示例。
在着色器中读取此类纹理时,是否会texture.rgb
发生.yuv
自动转换或自动转换?如果是这样,使用什么转换(ITU-R BT.601)SD 或(ITU-R BT.701)HD 还是根据纹理大小自动选择?
c++ - IDXGISurface1 GetDC/ReleaseDC 的线程安全/同步规则?
IDXGISurface1
GetDC/ReleaseDC
使用 创建的纹理的线程安全规则是D3D11_RESOURCE_MISC_GDI_COMPATIBLE
什么?
我是否可以在另一个线程之间进行交互,ID3D11Device
而不会由于隐式同步而导致数据争用或阻塞?或者我是为了避免 GPU 空闲被迫为执行 GDI 渲染的线程创建一个单独的线程,然后通过复制将其传输回“主” ?ID3D11DeviceContext
GetDC
ReleaseDC
D3D11Device
D3D11Device
D3D11_RESOURCE_MISC_SHARED_KEYED_MUTEX
即以下有效吗?