Re: [osg-users] osgposter through Task Scheduler
Hi, I don't want to be the guy that says "Go away and Google your problem", but I was curious and searched for OpenGL on headless Windows and saw a few results where people had managed to do it. Even if you don't find something compatible with your situation, you're likely to find more and better answers on a less-specific mailing list. Sorry I couldn't give an actual answer, Chris -- Read this topic online here: http://forum.openscenegraph.org/viewtopic.php?p=76366#76366 ___ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
Re: [osg-users] Removing objects with shared GL state from scene graph
Hi, Turns out that it's not a font in the object cache that's causing me grief after all, but instead the static default font here: https://github.com/openscenegraph/OpenSceneGraph/blob/OpenSceneGraph-3.6/src/osgText/Font.cpp#L40. This is initialised from a GLubyte array instead of a file, so never ends up in the object cache. I can manually call releaseGLObjects on it when a graphics context is destroyed, which solves the problem for my application, but I can provide an example of an OSG application that CodeXL says leaks stuff to prove that there's still a footgun. Code: int main() { osgViewer::Viewer viewer; // Use an auto transform so the text actually faces the screen osg::ref_ptr scene = new osg::AutoTransform(); scene->setAutoRotateMode(osg::AutoTransform::ROTATE_TO_SCREEN); viewer.setSceneData(scene); osg::ref_ptr text1 = new osgText::Text(); text1->setText("text1"); scene->addChild(text1); // Display one or more frames viewer.setCameraManipulator(new osgGA::TrackballManipulator()); for (int i = 0; i < 100; ++i) viewer.frame(); // Remove a text node scene->removeChild(text1); // Pick which path depending on whether or not we trust all references to things to go away if (false) { text1->releaseGLObjects(); } else { } text1 = nullptr; // osgText::Font::getDefaultFont::s_defaultFont still exists, so the default font isn't released return viewer.run(); } As before, CodeXL is still reporting the following error: [Image: https://cdn.discordapp.com/attachments/502999428798480387/596112745104146487/unknown.png ] Maybe it would be a good idea for static OSG objects to all be held together in a global vector somewhere so that their GL objects can be released whenever a context is destroyed. Maybe something like that exists already and the default font just got forgotten. Cheers, Chris -- Read this topic online here: http://forum.openscenegraph.org/viewtopic.php?p=76365#76365 ___ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
Re: [osg-users] osgposter through Task Scheduler
Hi, Doesn't anyone have an idea about this? Basic question is, how can one retrieve a valid context without logging in to Windows? Is it even possible? I guess this problem isn't OSG-specific but I would have guessed that someone here had come across this before. Even if I enable auto-login, it won't allow for remote desktop login since you're logged out again after such a session - this makes it hard to log in remotely to check the progress of headless process servers. Regards, Andreas On 2019-06-16 21:17, Andreas Ekstrand wrote: Hi, I'm having problems with the osgposter example in Windows, or more precisely something similar I'm developing but the problem is easier to reproduce with osgposter. In my simple reproduction of the problem I'm trying to render an image automatically at computer startup by calling osgposter (inactive mode) from a Python script (os.system) activated as a task from Task Scheduler in Windows 10. But it seems to fail to fetch a valid OpenGL context. I have tried all rendering types in osgposter - fb, fbo, pbuffer and pbuffer-rtt. The script works fine when started manually or when the task is set to start only when the user is logged on. But when activated as a task at computer startup whether user is logged on or not, it refuses to render anything. It just gets stuck in an infinite loop in the PosterPrinter class since FrameStamp::getFrameNumber() returns 0. Before that, View::setUpViewInWindow results in the following messages if OSG_NOTIFY_LEVEL is set to DEBUG: (...) SingleWindow::configure - GraphicsWindow has not been created successfully. (...) Viewer::realize() - No valid contexts found, setting up view across all screens. (...) SingleWindow::configure - GraphicsWindow has not been created successfully. (...) Viewer::realize() - failed to set up any windows Does anyone know how to get this working without having to log on to a Windows user? Should it work? I have a GeForce GT 710 with the latest drivers. Actually, I tried adding opengl32.dll from the Mesa3D library to the same folder as osgposter.exe to make it work when manually executed while logged on through Remote Desktop. It did the trick, but not when activated from Task Scheduler. Regards, Andreas ___ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org ___ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
Re: [osg-users] Removing objects with shared GL state from scene graph
Hi, Apparently, that approach won't work here - in my actual application, the multiple views are managed with a composite viewer, and that only calls its cleanup operation in its destructor and not when views are removed. I'll still be able to make something work, but it would have been nice to just set a callback that gets called right before a context is destroyed. Cheers, Chris -- Read this topic online here: http://forum.openscenegraph.org/viewtopic.php?p=76362#76362 ___ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org