在Windows 8上使用OpenGL时出现DXGI警告?

4

我正在使用OpenGL(而不是DirectX)编写一款CAD应用程序。在Windows 8 Pro(64位)上运行Debug版本时,以下消息将被打印到调试器的控制台窗口中,然后应用程序会正确地终止:

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相关,而我没有使用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)中遇到了同样的警告。你解决了这个警告吗? - Jinxi
2个回答

6
在Windows Vista及以上版本中,DirectX和OpenGL实际上都是通过DXGI工作的。DXGI管理设备。在DXGI的术语中,所使用的实际渲染API(OpenGL/DirectX)被称为producer,因此我们可以安全地假设这条消息是关于通用OpenGL使用的。
由于它抱怨了生产者和一个活动对象的引用计数均为2,那么你是否没有正确销毁你的OpenGL上下文呢?(即是否成功调用了wglMakeCurrent(NULL)wglDeleteContext)这样的疏忽并不会造成实质性的问题,因为两者都会在进程终止时被隐式销毁,但是需要发出警告。

1
谢谢您的解释!但是,我的应用程序确实调用了wglMakeCurrent(NULL)wglDeleteContext。也许这是驱动程序中的一个错误? - Daniel Gehriger
1
可能吧!我认为你可以安全地假设这些警告是虚假和无害的,但如果你好奇(我知道我是!),你可以尝试从DirectX控制面板启用设备调试(请参见http://blog.rthand.com/post/2010/10/25/Capture-DirectX-1011-debug-output-to-Visual-Studio.aspx获取说明)。这可能会提供与在DX应用程序中调用“reportLiveObjects()”相同的信息。 - Paul-Jan
谢谢 - 我会尝试的。如果我成功在Windows 8上安装DirectX控制面板。 - Daniel Gehriger
它们是Windows 8 SDK的一部分(请参见http://msdn.microsoft.com/en-us/library/windows/desktop/ee663275(v=vs.85).aspx)。 - Paul-Jan
是的,谢谢,我已经安装了它,并更新了我的问题,但结果并不十分确定。 - Daniel Gehriger

0

我在使用DirectX 11的项目中遇到了与您相同的警告信息(ReportLiveObjects,Live Producer,Live Object,STATE_CREATION WARNING#0:UNKNOWN,.....)。但是这个信息对我来说并不够详细,我想对您也是如此。

对于我的项目,问题最终证明是纹理文件(.dds)与程序的其他部分具有不兼容的格式,因此程序无法正确加载纹理。当我将其转换为正确的格式后,这个警告信息就消失了。

因此,我的结论是,在您的情况下,您可能需要使用一些调试技术,例如断点,日志记录等,以便跟踪实际问题所在。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接