I got an assertion Assert(vCurrentGLContext = Self); in TGLContext.Deactivate; when no hardware acceleration exists on the computer.
Apparently an exception is raised with wglChoosePixelFormatARB:
GLPBuffer.TGLPixelBuffer.Initialize(???,???)
GLGraphics.TGLBaseImage.Narrow
GLBitmapFont.TGLCustomBitmapFont.PrepareImage
GLWindowsFont.TGLWindowsBitmapFont.PrepareImage
GLBitmapFont.TGLCustomBitmapFont.RenderString($18F648,???,taLeftJustify,tlTop,(...),nil,False)
GLHUDObjects.TGLHUDText.RenderTextAtPosition(20,25,0,???)
GLHUDObjects.TGLHUDText.DoRender($18F648,???,False)
GLScene.TGLBaseSceneObject.Render($18F648)
GLScene.TGLBaseSceneObject.RenderChildren(???,???,$18F648)
GLScene.TGLBaseSceneObject.DoRender(???,???,True)
GLScene.TGLBaseSceneObject.Render($18F648)
GLScene.TGLSceneBuffer.RenderScene($6AF3D8,619,345,dsRendering,nil)
GLScene.TGLSceneBuffer.DoBaseRender((0, 0, 619, 345),???,dsRendering,nil)
GLScene.TGLSceneBuffer.Render(???)
GLScene.TGLSceneBuffer.Render
GLWin32Viewer.TGLSceneViewer.WMPaint((15, 0, 0, 0))
How to reproduce:
1. Disable HW drivers (rename atioglxx.dll to atioglxx.bak for example)
2. Open winfont demo in Demos/Interface
3. Run
Yep, PBuffer does not work in software mode. I'll completely remove this unit and will replace him service context in a separate thread. But I made it a type of memory, and now understand that it is necessary to add the ability to create a common context, if there is no buffer. Thanks.