MCPcopy Create free account
hub / github.com/NatronGitHub/Natron / initializeOpenGLFunctionsOnce

Method initializeOpenGLFunctionsOnce

Engine/AppManager.cpp:851–926  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

849}
850
851bool
852AppManager::initializeOpenGLFunctionsOnce(bool createOpenGLContext)
853{
854 QMutexLocker k(&_imp->openGLFunctionsMutex);
855
856 if (!_imp->hasInitializedOpenGLFunctions) {
857 OSGLContextPtr glContext;
858 bool checkRenderingReq = true;
859 if (createOpenGLContext) {
860 try {
861 _imp->initGLAPISpecific();
862
863 glContext = _imp->renderingContextPool->attachGLContextToRender(false /*checkIfGLLoaded*/);
864 if (glContext) {
865 // Make the context current and check its version
866 glContext->setContextCurrentNoRender();
867 } else {
868 AppManagerPrivate::OpenGLRequirementsData& vdata = _imp->glRequirements[eOpenGLRequirementsTypeViewer];
869 AppManagerPrivate::OpenGLRequirementsData& rdata = _imp->glRequirements[eOpenGLRequirementsTypeRendering];
870 rdata.error = tr("Error creating OpenGL context.");
871 vdata.error = rdata.error;
872 rdata.hasRequirements = false;
873 vdata.hasRequirements = false;
874 AppManagerPrivate::addOpenGLRequirementsString(rdata.error, eOpenGLRequirementsTypeRendering);
875 AppManagerPrivate::addOpenGLRequirementsString(vdata.error, eOpenGLRequirementsTypeViewer);
876 }
877
878
879 } catch (const std::exception& e) {
880 std::cerr << "Error while loading OpenGL: " << e.what() << std::endl;
881 std::cerr << "OpenGL rendering is disabled. " << std::endl;
882 AppManagerPrivate::OpenGLRequirementsData& vdata = _imp->glRequirements[eOpenGLRequirementsTypeViewer];
883 AppManagerPrivate::OpenGLRequirementsData& rdata = _imp->glRequirements[eOpenGLRequirementsTypeRendering];
884 rdata.hasRequirements = false;
885 vdata.hasRequirements = false;
886 vdata.error = tr("Error while creating OpenGL context: %1").arg(QString::fromUtf8(e.what()));
887 rdata.error = tr("Error while creating OpenGL context: %1").arg(QString::fromUtf8(e.what()));
888 AppManagerPrivate::addOpenGLRequirementsString(rdata.error, eOpenGLRequirementsTypeRendering);
889 AppManagerPrivate::addOpenGLRequirementsString(vdata.error, eOpenGLRequirementsTypeViewer);
890 checkRenderingReq = false;
891 }
892 if (!glContext) {
893 return false;
894 }
895 }
896
897 // The following requires a valid OpenGL context to be created
898 _imp->initGl(checkRenderingReq);
899 if (createOpenGLContext) {
900 if (hasOpenGLForRequirements(eOpenGLRequirementsTypeRendering)) {
901 try {
902 OSGLContext::checkOpenGLVersion();
903 } catch (const std::exception& e) {
904 AppManagerPrivate::OpenGLRequirementsData& data = _imp->glRequirements[eOpenGLRequirementsTypeRendering];
905 data.hasRequirements = false;
906 if ( !data.error.isEmpty() ) {
907 data.error = QString::fromUtf8( e.what() );
908 }

Callers 6

initializeGLMethod · 0.80
initializeGLMethod · 0.80
initializeGLMethod · 0.80
initializeGLMethod · 0.80
initializeGLMethod · 0.80
initializeGLMethod · 0.80

Calls 8

initGLAPISpecificMethod · 0.80
initGlMethod · 0.80
isEmptyMethod · 0.45
clearMethod · 0.45

Tested by

no test coverage detected