The reason that i ask is that I've been able to get a minimal test case of my code to load and render a model in the compositor with the GL render system but not GL3Plus. I've only been able to test both render systems on Linux as I can't get the GL render system to build on MSVC 2019 whil GL3Plus is fine.
Here is the code I use to set everything up:
Code: Select all
mSceneMgr = sharedPtr<Ogre::SceneManager>(RERoot->createSceneManager(Ogre::ST_GENERIC, 4, Ogre::INSTANCING_CULLING_THREADED, "SceneManager")); // creates the scene manager
mCamera = sharedPtr<Ogre::Camera>(mSceneMgr->createCamera("camera"));
#if OGRE_VERSION_MAJOR == 2
const Ogre::IdString workspaceName( "MyOwnWorkspace" );
compositorManager = sharedPtr<Ogre::CompositorManager2>(RERoot->getCompositorManager2());
if( !compositorManager->hasWorkspaceDefinition( workspaceName ) )
compositorManager->createBasicWorkspaceDef( workspaceName, Ogre::ColourValue( 0.6f, 0.0f, 0.6f ) );
compositorManager->addWorkspace( mSceneMgr.get(), mWindow.get(), mCamera.get(), workspaceName, true );
#endif
// Position it at 500 in Z direction
mCamera->setAutoAspectRatio(true);
mCamera->setPosition(Ogre::Vector3(0, 0, 455));
// Look back along -Z
mCamera->lookAt(Ogre::Vector3(0, 0, -300));
mCamera->setNearClipDistance(5);
mCamera->setFarClipDistance(5000);
cameraNode = OgreSceneNodeSharedPtr(mSceneMgr->getRootSceneNode()->createChildSceneNode());
mCamera->detachFromParent();
cameraNode->attachObject(mCamera.get());
viewPort = sharedPtr<Ogre::Viewport>(mWindow->addViewport());
#if OGRE_PLATFORM == OGRE_PLATFORM_ANDROID
viewPort->setMaterialScheme(Ogre::RTShader::ShaderGenerator::DEFAULT_SCHEME_NAME);
#endif
viewPort->setOverlaysEnabled(true); // sets overlays true so that MyGUI can render
bool overlayEnabled = viewPort->getOverlaysEnabled();
logMsg(func +" overlayEnabled = " +convert->toString(overlayEnabled));
// Set ambient light
mSceneMgr->setAmbientLight(Ogre::ColourValue(0.5, 0.5, 0.5));
// Create a light
light = sharedPtr<Ogre::Light>(mSceneMgr->createLight());
lightNode = OgreSceneNodeSharedPtr(mSceneMgr->getRootSceneNode()->createChildSceneNode());
lightNode->attachObject(light.get());
lightNode->setPosition(20,80,56);
light->setPowerScale(1);
if (mWindow == nullptr)
{
logMsg(func +" createScene mWindow 2 == nullptr!");
exit(0);
}
bball = OgreEntitySharedPtr(mSceneMgr->createEntity("bball.mesh", "UBCData"));
bballNode = OgreSceneNodeSharedPtr(mSceneMgr->getRootSceneNode()->createChildSceneNode());
bballNode->setName("bball");
bballNode->attachObject(bball.get());
bballNode->setScale(1.0f,1.0f,1.0f);
bballNode->setPosition(0.8f,-5.0f,352.0f);
compositorManager->addNodeDefinition("bball");
if (bball == nullptr)
{
logMsg(func +"bball.mesh didn't load");
exit(0);
}