在 Windows 8 上使用 OpenGL 时出现 DXGI 警告?
Posted
技术标签:
【中文标题】在 Windows 8 上使用 OpenGL 时出现 DXGI 警告?【英文标题】:DXGI Warning when using OpenGL on Windows 8? 【发布时间】:2012-11-03 10:31:24 【问题描述】:我正在使用 OpenGL(不是 DirectX)编写 CAD 应用程序。在 Windows 8 Pro(64 位)上运行调试版本时,在应用程序正确终止之前,以下消息会打印到调试器的控制台窗口:
DXGI WARNING: Process is terminating. Using simple reporting. Please call ReportLiveObjects() at runtime for standard reporting. [ STATE_CREATION WARNING #0: ]
DXGI WARNING: Live Producer at 0x0000009E51808AD8, Refcount: 2. [ STATE_CREATION WARNING #0: ]
DXGI WARNING: Live Object at 0x0000009E5180A570, Refcount: 2. [ STATE_CREATION WARNING #0: ]
DXGI WARNING: Live Object : 1 [ STATE_CREATION WARNING #0: ]
我不知道这是从哪里来的。 DXGI 似乎与我没有使用的 DirectX 有关。有什么提示吗?
更新
按照 Paul-Jan 的建议,我启用了设备调试,这会产生以下消息:
D3D11 INFO: Create ID3D11Context: Name="unnamed", Addr=0x00000015EEB486D0, ExtRef=1, IntRef=0 [ STATE_CREATION INFO #2097225: CREATE_CONTEXT]
D3D11 INFO: Create ID3DDeviceContextState: Name="unnamed", Addr=0x00000015EE96DE70, ExtRef=1, IntRef=0 [ STATE_CREATION INFO #3145735: CREATE_DEVICECONTEXTSTATE]
D3D11 INFO: Create ID3D11BlendState: Name="unnamed", Addr=0x00000015EE97B6A0, ExtRef=1, IntRef=0 [ STATE_CREATION INFO #2097270: CREATE_BLENDSTATE]
D3D11 INFO: Create ID3D11DepthStencilState: Name="unnamed", Addr=0x00000015EE9799F0, ExtRef=1, IntRef=0 [ STATE_CREATION INFO #2097273: CREATE_DEPTHSTENCILSTATE]
D3D11 INFO: Create ID3D11RasterizerState: Name="unnamed", Addr=0x00000015EE97B340, ExtRef=1, IntRef=0 [ STATE_CREATION INFO #2097276: CREATE_RASTERIZERSTATE]
D3D11 INFO: Create ID3D11Sampler: Name="unnamed", Addr=0x00000015EE97AE30, ExtRef=1, IntRef=0 [ STATE_CREATION INFO #2097267: CREATE_SAMPLER]
D3D11 INFO: Create ID3D11Query: Name="unnamed", Addr=0x00000015F25D3060, ExtRef=1, IntRef=0 [ STATE_CREATION INFO #2097279: CREATE_QUERY]
D3D11 INFO: Create ID3D11Texture2D: Name="unnamed", Addr=0x00000015EEB8CA50, ExtRef=1, IntRef=0 [ STATE_CREATION INFO #2097234: CREATE_TEXTURE2D]
D3D11 INFO: Create ID3D11Texture2D: Name="unnamed", Addr=0x00000015EA313BF0, ExtRef=1, IntRef=0 [ STATE_CREATION INFO #2097234: CREATE_TEXTURE2D]
D3D11 INFO: Create ID3D11Texture2D: Name="unnamed", Addr=0x00000015EEB41EC0, ExtRef=1, IntRef=0 [ STATE_CREATION INFO #2097234: CREATE_TEXTURE2D]
D3D11 INFO: Destroy ID3D11Texture2D: Name="unnamed", Addr=0x00000015EA313BF0 [ STATE_CREATION INFO #2097236: DESTROY_TEXTURE2D]
D3D11 INFO: Destroy ID3D11Texture2D: Name="unnamed", Addr=0x00000015EEB41EC0 [ STATE_CREATION INFO #2097236: DESTROY_TEXTURE2D]
D3D11 INFO: Destroy ID3D11Texture2D: Name="unnamed", Addr=0x00000015EEB8CA50 [ STATE_CREATION INFO #2097236: DESTROY_TEXTURE2D]
D3D11 WARNING: Process is terminating. Using simple reporting. Please call ReportLiveObjects() at runtime for standard reporting. [ STATE_CREATION WARNING #0: UNKNOWN]
D3D11 WARNING: Live Producer at 0x00000015EEA57E08, Refcount: 3. [ STATE_CREATION WARNING #0: UNKNOWN]
D3D11 WARNING: Live Object at 0x00000015EEB486D0, Refcount: 1. [ STATE_CREATION WARNING #0: UNKNOWN]
D3D11 WARNING: Live Object at 0x00000015EE96DE70, Refcount: 0. [ STATE_CREATION WARNING #0: UNKNOWN]
D3D11 WARNING: Live Object at 0x00000015EE97B6A0, Refcount: 0. [ STATE_CREATION WARNING #0: UNKNOWN]
D3D11 WARNING: Live Object at 0x00000015EE9799F0, Refcount: 0. [ STATE_CREATION WARNING #0: UNKNOWN]
D3D11 WARNING: Live Object at 0x00000015EE97B340, Refcount: 0. [ STATE_CREATION WARNING #0: UNKNOWN]
D3D11 WARNING: Live Object at 0x00000015EE97AE30, Refcount: 0. [ STATE_CREATION WARNING #0: UNKNOWN]
D3D11 WARNING: Live Object at 0x00000015F25D3060, Refcount: 0. [ STATE_CREATION WARNING #0: UNKNOWN]
D3D11 WARNING: Live Object : 7 [ STATE_CREATION WARNING #0: UNKNOWN]
DXGI WARNING: Process is terminating. Using simple reporting. Please call ReportLiveObjects() at runtime for standard reporting. [ STATE_CREATION WARNING #0: ]
DXGI WARNING: Live Producer at 0x00000015F25D2EB8, Refcount: 2. [ STATE_CREATION WARNING #0: ]
DXGI WARNING: Live Object at 0x00000015EE9AF870, Refcount: 2. [ STATE_CREATION WARNING #0: ]
DXGI WARNING: Live Object : 1 [ STATE_CREATION WARNING #0: ]
【问题讨论】:
我对 win 7 和 DX11(不是 OpenGL)有同样的警告。您是否处理了警告? 【参考方案1】:在 Windows Vista 及更高版本中,DirectX 和 OpenGL 实际上都通过 DXGI 工作。 DXGI 管理设备。实际使用的渲染 API(OpenGL / DirectX)在 DXGI 中称为producer
,因此我们可以放心地假设该消息是关于您的通用 OpenGL 使用情况。
当它抱怨生产者和活动对象的引用计数为 2 时,可能是您没有正确地破坏您的 OpenGL 上下文吗? (即成功调用wglMakeCurrent( NULL )
和wglDeleteContext
)这样的遗漏根本不会是一个实际问题,因为两者都会在进程终止时被隐式销毁,但需要警告。
【讨论】:
感谢您的解释!但是不,我的应用程序正确调用了wglMakeCurrent(NULL)
和wglDeleteContext
。也许这是驱动程序中的错误?
可能!我认为您可以放心地假设这些警告是虚假且无害的,但如果您好奇(我知道我是!),您可以尝试从 DirectX 控制面板启用设备调试(有关说明,请参阅blog.rthand.com/post/2010/10/25/…)。这可能会提供与在 DX 应用程序中调用“reportLiveObjects()”相同的信息。
谢谢 - 我会试试的。如果我设法在 Windows 8 上安装 DirectX 控制面板。
它们是 Windows 8 SDK 的一部分(请参阅msdn.microsoft.com/en-us/library/windows/desktop/…)。
是的,谢谢,我已经安装了它并用结果更新了我的问题。虽然不是很确定。【参考方案2】:
在使用 DirectX 11 的项目中,我遇到了与您相同的警告信息(ReportLiveObjects、Live Producer、Live Object、STATE_CREATION WARNING #0: UNKNOWN,.....)。我和你,我想。
对于我的项目,问题原来是纹理文件(.dds)的格式与我程序的其他部分不兼容,因此程序无法正确加载纹理。在我将其转换为正确的格式后。此警告信息消失了。
所以我在这里的结论是,您可能需要使用一些调试技术,例如断点、日志记录等,以便跟踪您的情况的真正问题。
【讨论】:
以上是关于在 Windows 8 上使用 OpenGL 时出现 DXGI 警告?的主要内容,如果未能解决你的问题,请参考以下文章
在 RDP 下运行 QML 应用程序时出现 OpenGL 问题
为啥在 glfw 窗口上没有使用 opengl 显示位图图像?在 C++ 中读取位图图像文件时出现问题
OpenGL - 在 NVIDIA 卡上渲染到纹理时出现 FBO 黑屏